Nutza:Chaddy/dellink-nc.js

Aus Wikipedia

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/*
  * dellink-nc.js
  *
  * Autor: [[Benutzer:Revvar]], [[Benutzer:PDD]], [[Benutzer:Codeispoetry]]
  * Quelle: [[Benutzer:Revvar/dellink nowcommons.js]]
  *
  * lokal übernommen wegen konsistenter Einbindung
  *
  * Dokumentation:
  * - Direkt über dem NowCommons-Baustein erscheinen Buttons zur Bearbeitung der Datei im Rahmen der NowCommons-Abarbeitung
  *   - Löschen: Öffnet die Spezial:Löschen-Seite mit eingetragener Begründung. Bei Verwendung des DerHexer-Monobooks kann die Datei auch sofort gelöscht werden; außerdem wird ein zusätzlicher Link für das normale, langsame Löschen angezeigt.
  *   - Behalten: Ein Bearbeitungsfenster mit entferntem NowCommons-Baustein wird geöffnet, die Commons-Version wird unter 'Andere Versionen' eingetragen.
  *   - Mängel: Ersetzt den NowCommons- durch einen NowCommons-Mängel-Baustein.
  *   - Mängel+DÜP: Ersetzt den NowCommons- durch einen NowCommons-Mängel-Baustein, setzt den DÜP-Baustein.
  *   - Nächstes: Springt zum nächsten Bild in der Kategorie, nur wenn nextItem() vorhanden ist, siehe unten
  * - Unter den Buttons zur Bearbeitung erscheinen gegebenenfalls Warnungen
  *   - Verwendung: Die Commonsversion hat einen anderen Namen und die lokale Kopie wird noch verwendet.
  *   - Disku: Es existiert eine Diskussionsseite.
  *   - NoCommons: Die Bildbeschreibungsseite enthält einen NoCommons-Baustein. Besondere Vorsicht ist nötig.
  *   - Nicht-identisch: Die Commonsversion hat einen anderen Hash als die lokale
  *
  * Einbindung:
  * - Führt sich selbst aus, lediglich Einbindung ist nötig
  * - Keine Überprüfung, ob im Bildnamensraum
  * - Als HTTP-Get-Variable wird 'nc_keep' verwendet
  *
  * Abhängigkeiten:
  * - deleting(): Funktion zur sofortigen Löschung (DerHexer; optional)
  * - AdminActions.delete(): Funktion zur sofortigen Löschung (Codeispoetry; optional)
  * - nextItem(): Funktion zum Kategorie-Navigieren (optional)
  * - UrlParameters[]: Array der HTTP-GET-Variablen
  * - adminflag: Gibt an, ob der Benutzer Administrator ist (optional)
  * - EditCommentLength: Überprüft die Kommentarlänge
  *
  */

 // <nowiki>

// aus [[Benutzer:D/monobook/api.js]]
/** escapes characters to make them usable as a literal in a RegExp */
String.prototype.escapeRE = function() {
    return this.replace(/([{}()|.?*+^$\[\]\\])/g, "\\$1");
};

 function newActionBar (id) {
	var bar = document.createElement('DIV');
	bar.style.textAlign = 'center';
	bar.style.width = '100%';
	bar.id = id;
	bar.addLink = function (caption, title, href, onclick) {
		var link = document.createElement('a');
		if (href != '') link.href = href;
		if (typeof onclick != 'undefined') {
			link.setAttribute('onclick', onclick);
			link.style.cursor = 'pointer';
		}
		link.innerHTML = caption;
		link.title = title;
		this.appendChild(link);
		this.appendChild(document.createTextNode(' '));
	}
	return bar;
 }

 var NowCommons = {
   KeepParameterName:	'nc_keep',
   TemplateMatch:	new RegExp(/{{\s*([Vv]orlage:|[Tt]emplate:)?\s*[Nn](CT?|ow[Cc]ommons)\s*(\|(\s*[^}]+\s*))?}}/),

   GleicherName:	false,
   CommonsName:		'',
   Baustein:		null,

   init: function () {
	var nc_keep = UrlParameters[NowCommons.KeepParameterName];
	if (!nc_keep) {
 		NowCommons.Baustein = document.getElementById("Vorlage_NowCommons");
 		if (!NowCommons.Baustein)
			return;

		NowCommons.getCommonsName();
		if (!NowCommons.CommonsName)
			return;

		NowCommons.markProblems();
		NowCommons.addActionLinks();
	}
	else if (nc_keep == 1)
		NowCommons.keepLocalCopy();
	else if (nc_keep == 2)
		NowCommons.markMängel();
	else if (nc_keep == 4)
		NowCommons.markMängelDÜP();
   },

   addActionLinks: function () {

	var normal_link = mw.config.get( 'wgScriptPath' ) + '/index.php?title=' + mw.config.get( 'wgPageName' );

	var action_div = newActionBar('NowCommons_Actions');

	// Löschbutton(s) bauen.
	if (typeof adminflag == 'undefined' || adminflag) {
		var del_grund =  'Eine identische Datei ist auf Commons [[:commons:File:' + NowCommons.CommonsName + '|verfügbar]]' + (NowCommons.GleicherName ? '.' : ', alle Referenzen wurden ersetzt.');
		if ( EditCommentLength(del_grund) > -55 )
			del_grund = del_grund + ' Sämtliche Metainformationen wurden korrekt übertragen.';
		var normal_dellink = normal_link +  '&action=delete&wpReason=' + encodeURIComponent(del_grund);
		var createNormal = false;

		var del_a = document.createElement('a');
		del_a.style.fontWeight = 'bold';
		del_a.style.fontSize = '150%';
		del_a.style.cursor = 'pointer';
		del_a.innerHTML = 'Löschen';
		if ( typeof AdminActions != 'undefined' && typeof AdminActions.deletePage == 'function' ) { // Codeispoetry-Löschen
			del_a.setAttribute('onclick', 'AdminActions.deletePage("' + del_grund + '", function() { nextItem("NowCommons", 6); });');
			del_a.title = 'Löscht die Datei sofort mit einer passenden Begründung';
			createNormal = true;
		} else if ( typeof deleting  == 'function' ) { // DerHexer-Löschen
			del_a.setAttribute('onclick', 'deleting("' + del_grund + '");');
			del_a.title = 'Löscht die Datei sofort mit einer passenden Begründung';
			createNormal = true;
		} else {
			del_a.href = normal_dellink;
			del_a.title = 'Löscht die Datei über die normale Mediawiki-Oberfläche';
			createNormal = false;
		}
		action_div.appendChild(del_a);
		action_div.appendChild(document.createTextNode(' '));

		if (createNormal) {
			action_div.addLink('(Langsam)', 'Löscht die Datei über die normale Mediawiki-Oberfläche', normal_dellink);
		}
	}

	action_div.addLink('Behalten', 'Entfernt die NowCommons-Vorlage und fügt einen Hinweis hinzu', normal_link + '&action=edit&' + NowCommons.KeepParameterName + '=1');
	action_div.addLink('Mängel', 'Ersetzt die NowCommons-Vorlage durch NowCommons/Mängel', normal_link + '&action=edit&' + NowCommons.KeepParameterName + '=2');
	action_div.addLink('Mängel+DÜP', 'Ersetzt die NowCommons-Vorlage durch NowCommons/Mängel, ergänzt {{DÜP}}', normal_link + '&action=edit&' + NowCommons.KeepParameterName + '=4');
	if ('function' == typeof window.nextItem) {
		action_div.addLink('Nächstes', 'Springt zur nächsten als NowCommons markierten Datei', '', "nextItem('NowCommons', 6)");
	}
	NowCommons.Baustein.insertBefore(action_div, NowCommons.Baustein.firstChild);
   },

   markProblems: function () {

	var prob_div = document.createElement('div');
	prob_div.style.color = '#ff0000';
	prob_div.style.width = '100%';
	prob_div.style.textAlign = 'center';

	prob_div.id  = 'NowCommons_Problems';
	prob_div.addItem = function (caption, title) {
		var item = document.createElement('span');
		item.innerHTML = caption;
		item.title = title;
		this.appendChild(item);
		this.appendChild(document.createTextNode(' '));
	}

	// Noch verwendete Datei mit anderem Commonsnamen
	if (!NowCommons.GleicherName) {
		if (document.getElementById('mw-imagepage-section-linkstoimage')) {
			prob_div.addItem ('Verwendung', 'Die Datei liegt auf Commons unter einem anderen Namen und wird noch verwendet.');
		} else if (mw.config.get('wgAction') === 'view' && !document.getElementById('mw-imagepage-nolinkstoimage')) {
			prob_div.addItem ('Verwendung:Bug!', 'Verwendungen konnten nicht bestimmt werden, vermutlich ein Bug im NowCommons-Script.');
		} else if (mw.config.get('wgAction') === 'edit') {
			prob_div.addItem ('Verwendung?', 'Verwendungen konnten nicht bestimmt werden, da im Vorschaumodus');
		}
	}

	// existierende Diskussionsseite
	if (document.getElementById('ca-talk').className != 'new')
		prob_div.addItem ('Disku', 'Eine Diskussionsseite existiert.');

	// NoCommons-Baustein
	if ( document.getElementById('Vorlage_NoCommons') )
		prob_div.addItem ('NoCommons', 'Auf der Dateibeschreibungsseite ist ein NoCommons-Hinweis eingebunden');

	// Commons-Version identisch?
	var found = false;
	var dupesection = document.getElementById('mw-imagepage-section-duplicates');
	if (dupesection != null) {
		var lis = dupesection.getElementsByTagName('li');
		for (var n = 0 ; n < lis.length ; ++n) {
			var regexp = new RegExp(('http://commons.wikimedia.org/wiki/Image:' + NowCommons.CommonsName).escapeRE().replace(/[_ ]/g, '[_ ]'));
			if (decodeURIComponent(lis[n].getElementsByTagName('a')[0].getAttribute('href')).search(regexp) === 0) {
				found = true;
				break;
			}
		}
	}
	if (dupesection == null || !found)
		prob_div.addItem ('Nicht-identisch', 'Die Commonsversion ist nicht vorhanden oder nicht identisch.');

	NowCommons.Baustein.insertBefore(prob_div, NowCommons.Baustein.firstChild);
	NowCommons.Baustein.insertBefore(document.createElement('span'), prob_div.nextSibling); // stupid IE fix.
   },

   keepLocalCopy: function () {

	NowCommons.getCommonsName();
	if (!NowCommons.CommonsName)
		return;

	var textbox = document.editform.wpTextbox1;
	textbox.value = textbox.value.replace(NowCommons.TemplateMatch,'');

	var commons_text = "[[commons:File:" + NowCommons.CommonsName + "|Commons-Version]] (zur Sicherheit sollte die lokale Kopie behalten werden)";
	var infoversions = new RegExp(/\|Andere[ _]Versionen\s*=/);
	var lizenz = new RegExp(/==[^=]*Lizenz[^=]*==/);
	if (textbox.value.match(infoversions))
		textbox.value = textbox.value.replace(infoversions, "|Andere Versionen = " + commons_text)
	else if (textbox.value.match(lizenz))
		textbox.value = textbox.value.replace(lizenz , "* Andere Versionen: " + commons_text + "\n\n== Lizenz ==")
	else
		textbox.value = textbox.value + "* Andere Versionen: " + commons_text;

	document.editform.wpSummary.value = "Diese Datei ist auf Commons nicht sicher, die lokale Kopie sollte behalten werden.";
   },

   markMängel: function () {
	var textbox = document.editform.wpTextbox1;
	textbox.value = textbox.value.replace(NowCommons.TemplateMatch, "{{NowCommons/Mängel$3}}");
	document.editform.wpSummary.value = "NowCommons/Mängel";
   },

   markMängelDÜP: function () {
	NowCommons.markMängel();
	document.editform.wpSummary.value = document.editform.wpSummary.value + ", DÜP";
	document.editform.wpTextbox1.value = "{{Dateiüberprüfung|Quelle|Urheber|Lizenz|Freigabe}}\n\n" + document.editform.wpTextbox1.value;
   },

   getCommonsName: function () {

	if (document.location.toString().match(/action=(edit|submit)/)) {
		NowCommons.CommonsName = document.editform.wpTextbox1.value.match(NowCommons.TemplateMatch)[4];
		if (!NowCommons.CommonsName) {
			NowCommons.CommonsName = mw.config.get('wgTitle');
			NowCommons.GleicherName = true;
 		}
	}
	else {
		var a = NowCommons.Baustein.getElementsByTagName('A');
		for (var i = 0; i < a.length; i++) {
			var a_class = a[i].className;
			if ((((a_class) && ("extiw" == a_class) && (a[i].title.search(/^commons:/i) == 0)) || (a[i].href && a[i].href.search("http://commons.wikimedia.org/wiki/File:")==0)) && a[i].title != "commons:Hauptseite") {
				NowCommons.CommonsName = a[i].title.match(/^[Cc]ommons:\s*[Ff]ile\s*:\s*(.+)$/)[1];
				if (a[i].innerHTML.search("dem selben Namen") >= 0)
					NowCommons.GleicherName = true;
			}
		}
	}
   }
 }
 $(document).ready(NowCommons.init);
 // </nowiki>