MediaWiki:UploadFormBeWikiLovesMonuments.js
Jump to navigation
Jump to search
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
Documentation for this user script can be added at MediaWiki:UploadFormBeWikiLovesMonuments. |
- Report page listing warnings and errors.
// <source lang="javascript">
/*
Special upload form for the Belgian "Wiki loves monuments" event.
Author: [[User:Lupo]], August 2011
License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)
Choose whichever license of these you like best :-)
*/
if (typeof (UploadFormBeWikiLovesMonuments ) == 'undefined') { // Guard against double inclusions
var UploadFormBeWikiLovesMonuments = (function () { // start scope
var colon = ':';
var descriptions = {
'de' : 'Deutsch'
,'nl' : 'Nederlands'
,'fr' : 'Français'
,'en' : 'English'
};
var selectors = {
'Monument Brussels' : 'Monument_Brussels'
,'Monument Wallonie' : 'Monument_Wallonie'
,'Onroerend erfgoed (Flanders)' : 'Onroerend_erfgoed'
,'Monument Luxembourg' : 'Monument_Luxembourg'
};
if (document.URL.indexOf ('uploadformstyle=plain') >= 0) // All Upload JS disabled
return false;
var uselang = getParamValue('uselang');
var descriptionText = null;
if (uselang == 'nlwikilovesmonumentsbe') {
window.wgUserLanguage = 'nl';
descriptionText = 'Beschrijving';
} else if (uselang == 'frwikilovesmonumentsbe') {
window.wgUserLanguage = 'fr';
descriptionText = 'Description';
colon = '\xa0:'; // nbsp;
} else if (uselang == 'dewikilovesmonumentsbe') {
window.wgUserLanguage = 'de';
descriptionText = 'Beschreibung';
} else if (uselang == 'wikilovesmonumentsbe') {
window.wgUserLanguage = 'en';
descriptionText = 'Description';
} else {
// not for us
return false;
}
window.UploadForm_autofill = false;
window.UploadForm_forcebasic = true;
if (typeof (JSconfig) != 'undefined')
JSconfig.keys['loadAutoInformationTemplate'] = false;
var start_attempts = 0;
var max_start_attempts = 5;
function make_information_template () {
var descField = document.getElementById ('wpUploadDescription');
var descs = getElementsByClassName (document, '*', 'wpBeWLMDesc');
var rmn = document.getElementById ('wpBeWLMNumber');
var selector = document.getElementById ('wpBeWLMSelect');
if (rmn && rmn.value && rmn.value.length > 0) {
rmn = '\n{{' + selector.options[selector.selectedIndex].value +'|1=' + rmn.value + '}}';
} else {
rmn = "";
}
var value = "";
for (var i = 0; i < descs.length; i++) {
var v = descs[i].value;
if (v && v.length > 0) {
var lang = descs[i].id;
lang = lang.substring (lang.indexOf('_') + 1);
v = '{{' + lang + '|1=' + UploadForm.clean (v) + '}}';
if (i > 0) value += '\n';
value += v;
}
}
if (value && value.length > 0) {
value = '{{Information\n|Description = ' + value + rmn;
} else {
value = '{{Information\n|Description = ' + rmn;
}
value +=
'\n'
+'|Source = {{own}}\n'
+'|Author = [[User:'+ mw.config.get('wgUserName') +'|]]\n'
+'|Date = {{Date|{{subst:#time:Y}}|{{subst:#time:m}}|{{subst:#time:d}}}} (upload date)\n'
+'}}\n'
+'{{Wiki Loves Monuments 2012|be}}\n'
;
return value;
}
function do_preview (evt) {
var overwrite = UploadForm.isOverwrite ();
UploadForm.makePreview (make_information_template (), overwrite);
}
function make_row (label, label_id, content) {
var tr = document.createElement ('tr');
var label_cell = document.createElement ('td');
label_cell.className = 'mw-label';
var text_cell = document.createElement ('td');
text_cell.className = 'mw-input';
var rmn_label = document.createElement ('label');
rmn_label['for'] = label_id;
rmn_label.appendChild (document.createTextNode (label + colon));
label_cell.appendChild (rmn_label);
text_cell.appendChild (content);
tr.appendChild (label_cell);
tr.appendChild (text_cell);
return tr;
}
function wait_for_form () {
if (!UploadForm.formModified) {
if (start_attempts++ < max_start_attempts) {
window.setTimeout (wait_for_form, 200);
return;
}
}
// Here, have the full basic form set up. Find the form.
var theForm = document.getElementById ('upload')
|| document.getElementById ('mw-upload-form');
if (!theForm) return;
// Pass along the uselang parameter
theForm.action += '?uselang=' + wgUserLanguage;
var descField = document.getElementById ('wpUploadDescription');
var desc = null;
if (descField) {
desc = descField;
while (desc && desc.nodeName.toLowerCase() != 'tr') desc = desc.parentNode;
}
if (desc) desc.style.display = 'none'; // Hide it.
if (desc) {
// Insert the rijksmonumentnummer field
var selector = document.createElement ('select');
selector.id = 'wpBeWLMSelect';
for (var key in selectors) {
var opt = document.createElement('option');
opt.value = selectors[key];
opt.appendChild (document.createTextNode (key));
selector.appendChild (opt);
}
var rmn_label = document.createElement ('label');
rmn_label.appendChild (document.createTextNode ('\xa0#\xa0')); // nbsp
rmn_label['for'] = 'wpBeWLMNumber';
var rmn_field = document.createElement ('input');
rmn_field.type = 'text';
rmn_field.size = 10;
rmn_field.maxSize = 10;
rmn_field.id = 'wpBeWLMNumber';
var div = document.createElement('div');
div.appendChild (selector);
div.appendChild (rmn_label);
div.appendChild (rmn_field);
var tr = make_row ('Monument', selector.id, div);
desc.parentNode.insertBefore (tr, desc);
}
if (desc) {
// Create the other description fields
for (var lang in descriptions) {
var field = document.createElement ('textarea');
field.className = 'wpBeWLMDesc';
field.id = 'wpBeWLMDesc_' + lang;
field.rows = 2;
var tr = make_row (descriptions[lang], field.id, field);
desc.parentNode.insertBefore (tr, desc.nextSibling);
}
if (descriptionText != null) {
var tr = make_row (descriptionText, null, document.createTextNode ('\xa0')); // nbsp;
desc.parentNode.insertBefore (tr, desc.nextSibling);
}
}
// Remove the edittools (per request by Multichill...)
var edittools = document.getElementById ('specialchars');
if (edittools) {
// Find the containing table row
while (edittools && edittools.nodeName.toLowerCase() != 'tr') edittools = edittools.parentNode;
if (edittools) edittools.parentNode.removeChild (edittools);
}
// Remove file size and permitted file types lines (per request by Multichill)
var permitted = document.getElementById ('mw-upload-permitted');
if (permitted) {
// Find the containing table row
while (permitted && permitted.nodeName.toLowerCase() != 'tr') permitted = permitted.parentNode;
// Find the previous line
if (permitted) {
var prev = permitted.previousSibling;
while (prev && prev.nodeName.toLowerCase() != 'tr') prev = prev.previousSibling;
if (prev)
prev.style.display = 'none';
permitted.style.display = 'none';
}
}
// Change the submit handler and the preview button's handler!
theForm.onsubmit = (function (oldSubmit) {
return function (evt) {
var desc = document.getElementById ('wpUploadDescription');
var originalText = desc.value;
var newText = make_information_template ();
desc.value = newText;
var do_submit = true;
if (oldSubmit != null) {
if (typeof (oldSubmit) == 'string')
do_submit = eval (oldSubmit);
else if (typeof UploadForm.oldOnSubmit == 'function')
do_submit = oldSubmit (evt);
}
if (!do_submit) {
desc.value = originalText;
} else {
// Re-enable the licence field so that it'll be submitted
var licenses = document.getElementById ('wpLicense');
if (licenses) licenses.disabled = false;
}
return do_submit;
};
})(theForm.onsubmit);
UploadForm.do_preview = do_preview;
// And also select the only license present.
var licenses = document.getElementById ('wpLicense');
if (!licenses) return;
var nofLicenses = licenses.options.length;
if (licenses.selectedIndex >= 0 && licenses.selectedIndex < nofLicenses)
licenses.options[licenses.selectedIndex].selected = false;
licenses.options[nofLicenses-1].selected = true;
// And then disable it. Don't remove or hide it, that will screw up other things such as the placement
// of the help text. An alternative might be to hide he whole table row.
licenses.disabled = true;
}
function init () {
// Remove the "mobile view" link: doesn't seem to give a functional upload form anyway
var mobileLink = document.getElementById ('mobileview');
if (mobileLink) mobileLink.parentNode.removeChild (mobileLink);
// Hook into the basic upload form (if we have that one), and replace the submit function
if (typeof (UploadForm) == 'undefined') {
if (start_attempts++ < max_start_attempts) {
window.setTimeout (init, 200);
}
return;
}
// UploadForm is loaded. If it didn't run yet, run it.
if (!UploadForm.isInstalled) UploadForm.install ();
// Second step of initialization:
start_attempts = 0;
wait_for_form ();
}
// hookEvent ('load', init); // hookEvent is deprecated and disabled since 2013. If safe, re-enable using jQuery
// Remove the help
var helpTexts = getElementsByClassName (document, '*', 'wpUploadFormHelp');
var copied = new Array(helpTexts.length);
for (var i = 0; helpTexts && i < helpTexts.length; i++) {
copied[i] = helpTexts[i];
}
for (var i = 0; i < copied.length; i++) {
copied[i].parentNode.removeChild(copied[i]);
}
return true;
})(); // end scope
} // end guard
// </source>