MediaWiki:UploadFormBeWikiLovesMonuments.js

From Wikimedia Commons, the free media repository
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.
// <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>