MediaWiki:Gadget-uploadtools.js
Erscheinungsbild
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
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/// uploadtools.js for [[Special:Upload]]
// Preset with raw Template:Information, preview of description
// Vorschau der Beschreibung auf [[Spezial:Hochladen]]
// see also [[phab:T4537]]
// Code von [[Benutzer:Schnark]] 2011
// PerfektesChaos@de.wikipedia 2025-03
/// <nowiki>
/* global window: false */
/* jshint forin: false,
bitwise:true, curly:true, eqeqeq:true, latedef:true,
laxbreak:true,
nocomma:true, strict:true, undef:true, unused:true */
( function ( mw, $ ) {
"use strict";
var UPLT = { API: { Api: false },
I18N: { },
light: true, // new version of existing file
self: "gadget-uploadtools",
selDesc: "#wpUploadDescription",
selFormD: "#mw-htmlform-description",
selTitle: "#wpDestFile",
selTprint: "#t-print a",
sequel: "wpForReUpload",
site: false,
slang: false,
submit: "wpUpload",
preload: { },
preview: { css: { "border-color": "#808080",
"border-style": "dotted",
"border-width": "2px",
"margin-bottom": "1.5em",
"margin-top": "0.5em",
"padding-bottom": "0.5em",
"padding-left": "1em",
"padding-right": "1em",
"padding-top": "0.5em" },
show: false,
sign: false,
$button: false,
$div: false,
$headline: false
},
wiki: false,
$editbox: false,
$filename: false };
UPLT.I18N.projects = {
"dewiki": {"seek": "{{ *[Ii]nformation",
"source": "{{Information\n" +
" |Beschreibung = \n" +
" |Quelle = \n" +
" |Urheber = \n" +
" |Datum = \n" +
" |Genehmigung = \n" +
" |Andere Versionen = \n" +
" |Anmerkungen = \n" +
"}}"},
"enwiki": {"seek": "{{ *(?:[Tt]emplate:)? *[Ii]nformation",
"source": "{{Information\n" +
" |description = \n" +
" |date = \n" +
" |source = \n" +
" |author = \n" +
" |permission = \n" +
" |other_versions = \n" +
" |additional_information = \n" +
"}}"}
}; // .I18N.projects
UPLT.I18N.texts = {
"show": {"en": "Preview",
"bg": "Предварителен преглед",
"da": "Forhåndsvisning",
"de": "Vorschau",
"dsb": "Pśeglěd",
"ee": "Kpɔe do ŋgɔ",
"el": "Προεπισκόπηση",
"es": "Previsualizar",
"et": "Eelvaade",
"eu": "Aurrebista erakutsi",
"fi": "Esikatselu",
"fr": "Prévisualisation",
"ga": "Réamhamharc",
"hi": "पूर्वावलोकन",
"hr": "Pretpregled",
"hsb": "Přehlad",
"hu": "Előnézet",
"id": "Pratayang",
"is": "Forskoða",
"it": "Anteprima",
"ka": "წინასწარი გადახედვა",
"kl": "Isikkua",
"km": "មើលជាមុន",
"kv": "Водзвыв видзӧдлӧм",
"lb": "Kucken ouni ofzespäicheren",
"lt": "Peržiūra",
"lv": "Pirmskats",
"mg": "Topi-maso",
"mo": "Превизуализязэ",
"mt": "Dehra proviżorja",
"nb": "Forhåndsvisning",
"nl": "Voorvertoning",
"nn": "Førehandsvising",
"pl": "Podgląd",
"pt": "Antevisão",
"rm": "Prevista",
"ro": "Previzualizare",
"ru": "Предпросмотр",
"sq": "Shqyrto",
"sr-ec": "Претпреглед",
"sr-el": "Pretpregled",
"sv": "Förhandsgranskning",
"tr": "Önizleme",
"uk": "Попередній перегляд",
"vi": "Xem trước"}
}; // .I18N.texts
function fair( apply ) {
// Synchronize textarea and overlay
// Precondition:
// apply -- true: Update textarea -- else: Update overlay
UPLT.codeMirror( apply );
UPLT.wikEd( apply );
} // fair()
function features() {
// Equip page
// Precondition:
// DOM ready
var submit = "input[name=\"" + UPLT.submit + "\"]",
$button = $( submit ),
$descr = $( UPLT.selFormD ),
sign, $tbPrint;
UPLT.$editbox = $( UPLT.selDesc );
UPLT.$filename = $( UPLT.selTitle );
if ( $button.length === 1 &&
$descr.length === 1 &&
UPLT.$editbox.length === 1 &&
UPLT.$filename.length === 1 ) {
sign = UPLT.self + "-preview";
UPLT.preview.$div = $( "." + sign );
if ( ! UPLT.preview.$div.length ) {
UPLT.preview.$div = $( "<div>" );
UPLT.preview.$div.addClass( sign )
.css( UPLT.preview.css )
.hide();
$descr.before( UPLT.preview.$div );
$tbPrint = $( UPLT.selTprint );
$tbPrint.removeAttr( "accesskey" ) // T58786
.updateTooltipAccessKeys();
UPLT.preview.factory();
$button.after( UPLT.preview.$button );
UPLT.preload.fill();
}
}
} // features()
function fire() {
// Resources completed
// Precondition:
// mediawiki.util
if ( mw.util.getParamValue( UPLT.sequel ) !== "1" ) {
UPLT.light = false;
}
$( features );
} // fire()
function first() {
// Autorun on loading
var env = mw.config.get( [ "wgCanonicalSpecialPageName",
"wgDBname",
"wgUserLanguage" ] );
if ( env.wgCanonicalSpecialPageName === "Upload" ) {
UPLT.site = env.wgDBname;
UPLT.slang = env.wgUserLanguage.toLowerCase();
if ( typeof UPLT.I18N.projects[ UPLT.site ] === "object" ) {
UPLT.wiki = UPLT.I18N.projects[ UPLT.site ];
}
mw.loader.using( [ "mediawiki.api",
"mediawiki.util" ],
fire );
}
} // first()
UPLT.codeMirror = function ( apply ) {
// Execute function iff CodeMirror is active
// Precondition:
// apply -- true: Update textarea -- else: Update CM.doc
var doc, story;
if ( typeof window.CodeMirror !== "undefined"
&& window.CodeMirror
&& window.CodeMirror.getDoc() ) {
doc = window.CodeMirror.getDoc();
if ( apply ) {
story = doc.getValue();
UPLT.$editbox.val( story );
} else {
story = UPLT.$editbox.val();
doc.setValue( story );
}
}
}; // .codeMirror()
UPLT.wikEd = function ( apply ) {
// Execute function iff wikEd is active
// Precondition:
// apply -- true: UpdateTextarea -- else: UpdateFrame
if ( typeof window.wikEd !== "undefined"
&& window.wikEd
&& window.wikEd.useWikEd ) {
window.wikEd[ ( apply ? "UpdateTextarea"
: "UpdateFrame" ) ]();
}
}; // .wikEd()
UPLT.preload.fill = function () {
var less, re, story;
if ( ! UPLT.light
&& UPLT.wiki &&
typeof UPLT.wiki.source === "string" ) {
fair( true );
story = UPLT.$editbox.val();
if ( story ) {
if ( typeof UPLT.wiki.seek === "string" ) {
re = new RegExp( UPLT.wiki.seek );
less = ! re.test( story );
}
} else {
less = true;
}
if ( less ) {
story = UPLT.wiki.source +
( story ? "\n" + story : "" );
UPLT.$editbox.val( story );
fair();
}
}
}; // .preload.fill()
UPLT.preview.factory = function () {
// Create preview button
// Postcondition:
// Button is defined
var entry = UPLT.I18N.texts.show,
slang, sub;
if ( typeof entry[ UPLT.slang ] === "string" ) {
UPLT.preview.show = entry[ UPLT.slang ];
} else {
switch ( UPLT.slang ) {
case "als":
case "bar":
case "de":
case "de-at":
case "de-ch":
case "de-formal":
case "de-x-formal":
case "dsb":
case "frr":
case "gsw":
case "hsb":
case "ksh":
case "lb":
case "nds":
case "pdc":
case "pdt":
case "pfl":
case "sli":
case "stq":
case "vmf":
slang = "de";
sub = "de";
break;
case "pt-br":
slang = "pt";
sub = "pt";
break;
} // switch UPLT.slang
if ( typeof entry[ sub ] === "string" ) {
UPLT.preview.show = entry[ sub ];
} else {
UPLT.preview.show = entry.en;
slang = "en";
}
}
UPLT.preview.$button = $( "<input>" );
UPLT.preview.$button.addClass( UPLT.self + "-button" )
.attr( { "accesskey": "p",
"title": UPLT.preview.show,
"type": "button",
"value": UPLT.preview.show } )
.css( { "margin-left": "1em",
"margin-right": "1em" } )
.on( "click", UPLT.preview.fired )
.updateTooltipAccessKeys();
if ( slang && slang !== UPLT.slang ) {
UPLT.preview.$button.attr( "lang", slang );
}
}; // .preview.factory()
UPLT.preview.fill = function ( arrived ) {
// Show preview
// Precondition:
// arrived -- (string) HTML
var $preview = $( "<div>" );
if ( ! UPLT.$headline ) {
UPLT.preview.$headline = $( "<div>" );
UPLT.preview.$headline.attr( { "title": UPLT.preview.show } )
.css( { "font-size": "150%",
"font-weight": "bold",
"padding-bottom": "1em" } )
.text( UPLT.preview.show );
}
$preview.html( arrived );
UPLT.preview.$div.append( UPLT.preview.$headline, $preview )
.show();
}; // .preview.fill()
UPLT.preview.fired = function () {
// Preview button has been clicked
var send = UPLT.$filename.val(),
story;
UPLT.preload.fill();
fair( true );
story = UPLT.$editbox.val();
if ( UPLT.preview.$headline ) {
UPLT.preview.$div.hide();
UPLT.preview.$headline.detach();
UPLT.preview.$div.empty();
}
UPLT.API.fetch( story, send );
}; // .preview.fired()
UPLT.API.fault = function ( jqXHR, textStatus, errorThrown ) {
// API failure
var s;
if ( textStatus ) {
switch ( typeof textStatus ) {
case "object":
if ( typeof textStatus.textStatus === "string" ) {
s = textStatus.textStatus;
} else {
s = "";
}
if ( typeof textStatus.exception === "string"
&& textStatus.exception ) {
s = s + " (" + textStatus.exception + ")";
}
break;
case "string":
s = textStatus;
break;
} // switch typeof textStatus
}
if ( errorThrown ) {
if ( s ) {
s = s + " -- Error: ";
}
s = s + errorThrown;
}
if ( ! s ) {
s = "???";
}
if ( typeof window.console === "object" &&
typeof window.console.log === "function" ) {
window.console.log( UPLT.self + " * " + s );
if ( typeof textStatus === "object"
&& textStatus &&
typeof window.console.dir === "function" ) {
window.console.dir( textStatus );
}
}
}; // .API.fault()
UPLT.API.fetch = function ( ask, about ) {
// Request parsing
// Precondition:
// ask -- wikitext
// about -- file title
var s = ( UPLT.light ? "summary" : "text" );
if ( ! UPLT.API.Api ) {
UPLT.API.Api = new mw.Api();
UPLT.API.params = { action: "parse",
contentmodel: "wikitext",
format: "json",
prop : "text" /*,
pst: "" */
};
}
UPLT.API.params.title = "File:" + ( about ? about
: "JustAnExample.JPG" );
UPLT.API.params[ s ] = ask;
UPLT.API.Api.get( UPLT.API.params )
.done( UPLT.API.fetched )
.fail( UPLT.API.fault );
}; // .API.fetch()
UPLT.API.fetched = function ( arrived ) {
// Answer arrived
// Precondition:
// arrived -- JSON result of request
var p, s;
if ( typeof arrived === "object"
&& arrived &&
typeof arrived.parse === "object"
&& arrived.parse ) {
p = arrived.parse;
s = ( UPLT.light ? "parsedsummary" : "text" );
if ( typeof p[ s ] === "object"
&& p[ s ] ) {
p = p[ s ];
if ( typeof p[ "*" ] === "string"
&& p[ "*" ] ) {
UPLT.preview.fill( p[ "*" ] );
}
}
}
}; // .API.fetched()
first();
}( window.mediaWiki, window.jQuery ) );
// Emacs
// Local Variables:
// coding: utf-8-dos
// fill-column: 80
// End:
/// EOF </nowiki> uploadtools.js