Benutzer:RobbiRobb/UploadPreview.js

Aus PokéWiki
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Speichern 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: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen
  • Konqueror: Aktualisieren anklicken oder F5 drücken
/**
* UploadPreview erzeugt eine dynamische Vorschau des Inhalts des Upload-Felds
* Seitentitel werden berücksichtigt und auch Lizenzen werden geparst
* Nutze dieses Scripts um Links und Kategorien auf Fehler zu prüfen
*
* @author RobbiRobb
*/
$(document).ready(function() {
	if(mw.config.get("wgCanonicalSpecialPageName") !== "Upload") {
		return;
	}

	function buildPreview() {
		var uploadPreview = document.createElement("fieldset");
		uploadPreview.id = "upload-preview";
		uploadPreview.style.display = "none";
		
		var legend = document.createElement("legend");
		legend.innerText = "Vorschau";
		uploadPreview.appendChild(legend);
		
		var preview = document.createElement("div");
		preview.id = "preview";
		uploadPreview.appendChild(preview);
		
		var contentHeading = document.createElement("h2");
		contentHeading.style.display = "none";
		
		var contentHeadingContent = document.createElement("span");
		contentHeadingContent.id = "Beschreibung";
		contentHeadingContent.classList.add("mw-headline");
		contentHeadingContent.innerText = "Beschreibung";
		contentHeading.appendChild(contentHeadingContent);
		preview.appendChild(contentHeading);
		
		var content = document.createElement("div");
		content.id = "parsed-content";
		preview.appendChild(content);
		
		var buffer = document.createElement("div");
		buffer.style.marginTop = "10px";
		preview.appendChild(buffer);
		
		var categories = document.createElement("div");
		categories.id = "categories";
		preview.appendChild(categories);
		
		document.getElementsByTagName("fieldset")[1].after(uploadPreview);
		
	}

	function previewContent() {
		if(document.querySelector("td#mw-license-preview") !== null) {
			document.querySelector("td#mw-license-preview").remove();
		}
		
		var text = document.getElementById("wpUploadDescription").value.trim();
		if(document.getElementById("wpLicense").value !== "") {
			text += "\n== Lizenz ==\n" + document.getElementById("wpLicense").selectedOptions[0].title;
		}
		
		mw.loader.using("mediawiki.api", function() {
			var api = new mw.Api();
			api.get({
				action: "parse",
				prop: "categorieshtml|text",
				contentmodel: "wikitext",
				disablelimitreport: 1,
				disableeditsection: 1,
				disabletoc: 1,
				text: text,
				title: (document.getElementById("wpDestFile").value === "" ? "Datei:.png" : "Datei:" + document.getElementById("wpDestFile").value)
			}).done(function(data) {
				document.getElementById("upload-preview").style.display = null;
				document.getElementById("parsed-content").innerHTML = data.parse.text["*"];
				document.getElementById("categories").innerHTML = data.parse.categorieshtml["*"];
			});
		});
	}

	function hideContentHeading() {
		var match = document.getElementById("wpUploadDescription").value.match(/^==\s*Beschreibung\s*==\n/);
		
		if(match === null) {
			document.getElementById("Beschreibung").parentNode.style.display = null;
		} else {
			document.getElementById("Beschreibung").parentNode.style.display = "none";
		}
	}

	buildPreview();

	document.getElementById("wpUploadDescription").addEventListener("input", previewContent);
	document.getElementById("wpUploadDescription").addEventListener("input", hideContentHeading);
	document.getElementById("wpLicense").addEventListener("change", previewContent);
	document.getElementById("wpDestFile").addEventListener("input", previewContent);
});