MediaWiki:Gadget-Upload.js
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
// <source lang=javascript">
// Einfache Validierung des Hochlade-Formulars. Füllt Vorlage:Information ins Beschreibungsfeld und validiert vor dem Hochladen,
// dass Beschreibung, Quelle, Urheber und Lizenz angegeben sind. Andernfalls wird eine entsprechende Fehlermeldung angezeigt und
// das Hochladen abgebrochen.
//
// Autor: Benutzer:Lupo, Juni 2013.
// Lizenz: CC-Zero
(function($, mw) {
if (mw.config.get('wgNamespaceNumber') >= 0 || mw.config.get('wgCanonicalSpecialPageName') !== 'Upload') {
return;
}
$(document).ready(function() {
var form = document.getElementById ('mw-upload-form');
var descField = document.getElementById ('wpUploadDescription');
if (!form || !descField) return;
var destFile = document.getElementById ('wpDestFile');
// Fix a bug that was present in some MediaWiki versions
if (destFile && destFile.disabled) {
destFile.readOnly = true;
destFile.disabled = false;
}
// Auto-fill
if (!descField.value && !simpleIsReupload()) {
descField.value =
'{{Information\n'
+'|Beschreibung = \n'
+'|Quelle = \n'
+'|Urheber = \n'
+'|Datum = \n'
+'|Genehmigung = \n'
+'|Andere Versionen = \n'
+'|Anmerkungen = \n'
+'}}'
;
}
var submitButton = (function () {
var tmp = document.getElementById ('wpUpload');
if (tmp) return tmp;
tmp = document.getElementsByName ('wpUpload');
for (var i = 0; tmp && i < tmp.length; i++) {
if (tmp[i].tagName.toLowerCase() === 'input' && tmp[i].type.toLowerCase() === 'submit') return tmp[i];
}
return null;
}) ();
if (!submitButton) return;
var licenseMenu = document.getElementById ('wpLicense');
// Allowed licenses. Standard licenses all start with "Bild-". User-specified licenses
// must be substed, and must be subpages in user space, either named "User:Foo/Lizenz"
// or having the prefix "User:Foo/Lizenz-". (Or "Benutzer:Foo...", or instead of "Lizenz"
// "Bild".) Note that a user license is only accepted if it is in the uploader's user space.
var licenseRE =
new RegExp (
'\\{\\{(([Ss]ubst:([Uu]ser|[Bb]enutzer):'
+ (mw.config.get('wgUserName') || "").replace(/([\\\^\$\.\?\*\+\(\)\[\]\|\{\}])/g, "\\$1")
+ '/([Ll]izenz|[Bb]ild)(-(\\w|-)+)?)'
+ '|([Bb]ild-(\\w|-)+)'
+ '|[Dd]ruckversion|[Bb]ildzitat'
+ ')(\\|[^\\}]*)?\\}\\}'
);
var endRE =
/(\n\|)|(\n\}\})|$/g;
var checks = [
{ re: /\n\|\s*[Bb]eschreibung\s*=/g,
msg : 'errNoDesc'
}
,{ re: /\n\|\s*[Qq]uelle\s*=/g,
msg : 'errNoSource'
}
,{ re: /\n\|\s*[Uu]rheber\s*=/g,
msg : 'errNoAuthor'
}
];
function check_field (check, error_list) {
check.re.lastIndex = 0;
var startMatch = check.re.exec (descField.value);
if (!startMatch) {
error_list[error_list.length] = check.msg;
} else {
endRE.lastIndex = check.re.lastIndex;
var endMatch = endRE.exec (descField.value);
var desc = descField.value.substring (check.re.lastIndex, endMatch.index)
.replace(/\s+|\r|\n/g, "");
if (desc.length == 0) error_list[error_list.length] = check.msg;
}
return error_list;
}
function simpleIsReupload () {
// First check the hidden input field
var reupload = document.getElementById ('wpForReUpload');
if (reupload) return !!reupload.value;
// If that doesn't exist, check whether destFile is editable
return destFile && destFile.readOnly;
}
function isReupload () {
// First check the hidden input field
var reupload = document.getElementById ('wpForReUpload');
if (reupload) return !!reupload.value;
// If that doesn't exist, check whether destFile is editable and has a value
if (!destFile || destFile.readOnly || !destFile.value)
return true;
// If it is, check whether we had an overwrite warning
if (document.getElementById ('wpUploadWarningFileexists')) return true;
var destfile_warning = document.getElementById ('wpDestFile-warning');
if (!destfile_warning) return false;
// We had some warning. Go through the list of links, if one of them points to the filename
// given in the destFile field, we have a reupload.
var lks = destfile_warning.getElementsByTagName ('a');
if (lks == null || lks.length == 0) return false;
var filename = destFile.value.replace(/^\s\s*/, '').replace(/\s\s*$/, '').replace(/ /g, '_');
for (var i = 0; i < lks.length; i++) {
var href = lks[i].getAttribute ('href', 2);
if (href.indexOf (mw.config.get('wgScript')) == 0 || href.indexOf (mw.config.get('wgServer') + mw.config.get('wgScript')) == 0) {
var m = /[&?]title=([^&]*)/.exec (href);
if (m && m.length > 1) href = m[1]; else href = null;
} else {
var prefix = mw.config.get('wgArticlePath').replace ('$1', "");
if (href.indexOf (prefix) != 0) prefix = mw.config.get('wgServer') + prefix; // Fully expanded URL?
if (href.indexOf (prefix) == 0) href = href.substring (prefix.length); else href = null;
}
if (!href) continue;
href = decodeURIComponent (href).replace (/ /g, '_');
if (href.substring(href.indexOf(':') + 1) == filename) return true;
}
return false;
}
form.onsubmit = (function (old_onsubmit) {
return (function () {
var errors = [];
if (!isReupload()) {
// License check
if (licenseMenu.selectedIndex === 0 || !licenseMenu.options[licenseMenu.selectedIndex].value) {
// No license chosen: search the description for a license template.
// All license templates must start with 'License-', or with "subst:User:License".
if (!licenseRE.test (descField.value)) {
errors[errors.length] = 'errNoLicense';
}
}
// Description checks
if (descField.value.length == 0) {
errors[errors.length] = 'errNoDesc';
} else {
for (var i = 0; i < checks.length; i++)
errors = check_field (checks[i], errors);
}
} // end if isReupload
showErrors (errors);
if (errors.length > 0) return false;
// Call previous handler, if any)
return (!old_onsubmit
? true
: (typeof (old_onsubmit) == 'string'
? eval (old_onsubmit)
: old_onsubmit.apply (form, arguments)
)
);
});
}) (form.onsubmit);
var errorMsgs = {
'errNoLicense' : { msg : "Es ist keine Lizenz angegeben. Ohne Lizenzangabe darf die Datei nicht hochgeladen werden."
,field : descField }
,'errNoSource' : { msg : "Die Quellenangabe fehlt. Woher stammt die Datei ursprünglich?"
,field : descField }
,'errNoAuthor' : { msg : "Es ist kein Urheber des Inhalts der Datei angegeben. Wer hat diesen Inhalt erstellt?"
,field : descField }
,'errNoDesc' : { msg : "Es muss eine Beschreibung des Inhalts der Datei vorhanden sein."
,field : descField }
};
var errorDisplay = (function () {
var tmp = document.createElement ('div');
tmp.width = '100%';
tmp.style.border = '1px solid red';
tmp.style.backgroundColor = 'lightpink';
tmp.style.padding = '0.5em';
tmp.style.marginBottom = '0.5em';
tmp.style.display = 'none';
return tmp;
})();
submitButton.parentNode.insertBefore (errorDisplay, submitButton);
function showErrors (error_list) {
if (!error_list || error_list.length == 0) {
errorDisplay.style.display = 'none';
return;
}
var msgs = document.createElement ('ul');
msgs.style.paddingLeft = '1.0em';
msgs.style.marginLeft = '0';
for (var i = 0; i < error_list.length; i++) {
var li = document.createElement ('li');
li.appendChild (document.createTextNode (errorMsgs[error_list[i]].msg));
msgs.appendChild (li);
}
// And then display the messages
if (errorDisplay.firstChild)
errorDisplay.replaceChild (msgs, errorDisplay.firstChild);
else
errorDisplay.appendChild (msgs);
errorDisplay.style.display = 'block';
}
});
})(jQuery, mediaWiki);
// </source>