Bahaipedia
Bahaipedia
Menu
About Bahaipedia
Ask a question
General help
Random page
Recent changes
In other projects
Tools
What links here
Related changes
Upload file
Special pages
Printable version
Permanent link
Page information
Message
Discussion
View source
View history
Talk
Contributions
Create account
Log in
Navigation
About Bahaipedia
Ask a question
General help
Random page
Recent changes
In other projects
Learn more
Core topics
Bahá’í Faith
Central Figures
Teachings
Practices
Tools
What links here
Related changes
Upload file
Special pages
Printable version
Permanent link
Page information
Translations

MediaWiki:Gadget-refToolbarBase.js

From Bahaipedia
Jump to:navigation, search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* jshint asi: true */
/* global mw, $, CiteTB, citeTemplate, citeErrorCheck */

if ( window.CiteTB === undefined ) {
  window.CiteTB = {
    "Templates" : {}, // All templates
    "Options" : {}, // Global options
    "UserOptions" : {}, // User options
    "DefaultOptions" : {}, // Script defaults
    "ErrorChecks" : {} // Error check functions
  };
}

if (typeof mw.usability == 'undefined') {
  mw.usability = {};
  mw.usability.getMsg = function(m) { return mw.messages.get(m); }
  mw.usability.addMessages = function(msgs) { mw.messages.set(msgs); };
}

// Object for cite templates
window.citeTemplate = function (templatename, shortform, basicfields, expandedfields) {
  // Properties
  this.templatename = templatename; // The template name - "cite web", "cite book", etc.
  this.shortform = shortform; // A short form, used for the dropdown box
  this.basic = basicfields; // Basic fields - author, title, publisher...
  // Less common - quote, archiveurl - should be everything the template supports minus the basic ones
  this.extra = expandedfields;

  this.incrementables = {};

  // Add it to the list
  CiteTB.Templates[this.templatename] = this;
  // Methods
  this.makeFormInner = function(fields, incrsetup) {
    var i=0;
    var trs = [];
    var autofills = []
    for (i=0; i<fields.length; i++) {
      var fieldobj = fields[i];
      var field = labelfield = fieldobj.field;
      var ad = false;
      if (incrsetup && fieldobj.increment_group) {
      		field = fieldobj.field.replace('<N>', '1');
      		labelfield = fieldobj.field.replace('<N>', '');
      		if (this.incrementables[fieldobj.increment_group] && !this.incrementables[fieldobj.increment_group].setup) {
      			// The object has been created, but not fully initialized
      			this.incrementables[fieldobj.increment_group]['fields'].push(fieldobj)
      		} else if (!this.incrementables[fieldobj.increment_group]) {
      			// Object not yet created
      			this.incrementables[fieldobj.increment_group] = {
      				'fields': [fieldobj],
      				'val':1,
      				'setup': false
      			};
      		} else if (this.incrementables[fieldobj.increment_group] && this.incrementables[fieldobj.increment_group].setup) {
      			// Fully initialized from a previous invocation of this function, just resetting the number
      			this.incrementables[fieldobj.increment_group].val = 1
      		}
      } else if (fieldobj.increment_group) {
      	// Adding a new row
      	incrval = this.incrementables[fieldobj.increment_group].val;
      	field = fieldobj.field.replace('<N>', incrval.toString());
      	labelfield = fieldobj.field.replace('<N>', '');
      }
      if ($.inArray(field, CiteTB.getOption('autodate fields')) != -1 ) {
        im = $('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Nuvola_apps_date.svg/20px-Nuvola_apps_date.svg.png');
        im.attr('alt', mw.usability.getMsg('cite-insert-date')).attr('title', mw.usability.getMsg('cite-insert-date'));
        var ad = $('<a />').attr('href', '#');
        ad.append(im);
        ad.attr('id', 'cite-date-'+CiteTB.escStr(this.shortform)+'-'+field);
        $( document ).on( 'click', '#cite-date-'+CiteTB.escStr(this.shortform)+'-'+field, CiteTB.fillAccessdate );
      }
	  
      if (fieldobj.autofillid) {
        var autotype = fieldobj.autofillid;
        im = $('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/1/17/System-search.svg/20px-System-search.svg.png');
        im.attr('alt', mw.usability.getMsg('cite-autofill-alt')).attr('title', mw.usability.getMsg('cite-autofill-alt'));
        var ad = $('<a />').attr('href', '#');
        ad.append(im);
        ad.attr('id', 'cite-auto-'+CiteTB.escStr(this.shortform)+'-'+field+'-'+autotype);
        autofills.push('#cite-auto-'+CiteTB.escStr(this.shortform)+'-'+field+'-'+autotype);
      }
      
      if (fieldobj.increment_button) {
        var incrtype = fieldobj.increment_group;
        im = $('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Nuvola_action_edit_add.svg/20px-Nuvola_action_edit_add.svg.png');
        im.attr('alt', mw.usability.getMsg('cite-increment-alt')).attr('title', mw.usability.getMsg('cite-increment-alt'));
        var ad = $('<a />').attr('href', '#');
        ad.append(im);
        ad.attr('id', 'cite-incr-'+CiteTB.escStr(this.shortform)+'-'+incrtype);
      }
	  
      var display = mw.usability.getMsg('cite-'+labelfield+'-label');
      if (typeof display !== 'string') {
      	if (fieldobj.label) {
      		display = CiteTB.fixStr(fieldobj.label);
      	} else {
      		display = CiteTB.fixStr(labelfield)
      	}
      }
      var tooltip = fieldobj.tooltip ? $('<abbr />').attr('title', mw.usability.getMsg(fieldobj.tooltip)).html('<sup>?</sup>') : false;
      
      var input = '';
      if (ad) {
        input = $('<input tabindex="1" style="width:85%" type="text" />');
      } else {
        input = $('<input tabindex="1" style="width:100%" type="text" />');
      }
      input.attr('id', 'cite-'+CiteTB.escStr(this.shortform)+'-'+field);
	  if (fieldobj.autofillprop) {
	  	classname = 'cite-'+CiteTB.escStr(this.shortform)+'-'+fieldobj.autofillprop
	    if (fieldobj.increment_group) {
	    	input.addClass('cite-'+CiteTB.escStr(this.shortform)+'-incr-'+fieldobj.increment_group);
	    	classname+='-'+this.incrementables[fieldobj.increment_group].val.toString();
	    }
	    input.addClass(classname);
	  }
      var label = $('<label />');
      label.attr('for', 'cite-'+CiteTB.escStr(this.shortform)+'-'+field).text(display);
      if (tooltip) {
        label.append(tooltip);
      }
      var style = 'text-align:right; width:20%;';
      if (i%2 == 1) {
        style += ' padding-left:1em;';
      } else {
        var tr = $('<tr />');
      }
      var td1 = $('<td class="cite-form-td" />').attr('style', style);
      td1.append(label);
      tr.append(td1);
      var td2 = $('<td class="cite-form-td" style="width:30%" />');
      td2.append(input);
      if (ad) {
        td2.append(ad);
      }
      tr.append(td2);
      if (i%2 == 0) {
        trs.push(tr);
      }
    }
    var needsetup = false;
    for (g in this.incrementables) {
    	if (!this.incrementables[g].setup) {
    		needsetup = true;
    		$( document ).on( 'click', '#cite-incr-'+CiteTB.escStr(this.shortform)+'-'+g, CiteTB.incrementFields );
        	this.incrementables[g].setup = true;
    	}
    }
    if (needsetup || $.isEmptyObject(this.incrementables)) {
    	for(i=0; i<autofills.length; i++) {
    		$( document ).on( 'click', autofills[i], CiteTB.initAutofill );
    	}	
    }
    return trs;
  
  }
  
  // gives a little bit of HTML so the open form can be identified
  this.getInitial = function() {
    var hidden = '<input type="hidden" class="cite-template" value="' + this.templatename + '"/>';
    return hidden;
  }
  
  // makes the form used in the dialog boxes
  this.getForm = function() {
    var main = $("<div class='cite-form-container' />");
    var form1 = $('<table style="width:100%; background-color:transparent;" class="cite-basic-fields" />');
    var i=0;
    var trs = this.makeFormInner(this.basic, true);
    for (var i=0; i<trs.length; i++) {
      form1.append(trs[i]);
    }
    
    var form2 = $('<table style="width:100%; background-color:transparent; display:none" class="cite-extra-fields">');
    trs = this.makeFormInner(this.extra, true);
    for (var i=0; i<trs.length; i++) {
      form2.append(trs[i]);
    }    
    main.append(form1).append(form2);
    
    var form3 = $('<table style="width:100%; background-color:transparent;padding-top:1em" class="cite-other-fields">');
    var tr = $('<tr />');
    var td1 = $('<td class="cite-form-td" style="text-align:right; width:20%" />');
    var label1 = $('<label />');
    label1.attr('for', "cite-"+CiteTB.escStr(this.shortform)+'-name').text(mw.usability.getMsg('cite-name-label'));
    td1.append(label1);
    var td2 = $('<td class="cite-form-td" style="width:30%" />');
    var input1 = $('<input tabindex="1" style="width:100%" type="text" />');
    input1.attr('id', 'cite-'+CiteTB.escStr(this.shortform)+'-name');
    td2.append(input1);
    var td3 = $('<td class="cite-form-td" style="text-align:right; padding-left:1em; width:20%">');
    var label2 = $('<label />');
    label2.attr('for', 'cite-'+CiteTB.escStr(this.shortform)+'-group').text(mw.usability.getMsg('cite-group-label'));
    td3.append(label2);
    var td4 = $('<td class="cite-form-td" style="width:30%" />');
    var input2 = $('<input tabindex="1" style="width:100%" type="text" />');
    input2.attr('id', 'cite-'+CiteTB.escStr(this.shortform)+'-group');
    td4.append(input2);
    tr.append(td1).append(td2).append(td3).append(td4);
    form3.append(tr);
    main.append(form3);
    var extras = $('<div />');
    extras.append('<input type="hidden" class="cite-form-status" value="closed" />');
    var hidden = $('<input type="hidden" class="cite-template" />');
    hidden.val(this.templatename);
    extras.append(hidden);
    var span1 = $('<span class="cite-preview-label" style="display:none;" />');
    span1.text(mw.usability.getMsg('cite-raw-preview'));
    extras.append(span1).append('<div class="cite-ref-preview" style="padding:0.5em; font-size:110%" />');
    var span2 = $('<span class="cite-prev-parsed-label" style="display:none;" />');
    span2.text(mw.usability.getMsg('cite-parsed-label'));
    extras.append(span2).append('<div class="cite-preview-parsed" style="padding-bottom:0.5em; font-size:110%" />');
    var link = $('<a href="#" class="cite-prev-parse" style="margin:0 1em 0 1em; display:none; color:darkblue" />');
    link.text(mw.usability.getMsg('cite-form-parse'));
    extras.append(link);    
    main.append(extras);
    
    return main;
  }
}

/* Class for error checks
    FIXME: DOCS OUT OF DATE
   type - type of error check - current options:
    * 'refcheck' - apply a function on each ref individually
      * function should accept a ref object, return a string
    * 'reflist' - apply a function on the entire ref list
      * function should accept an array of ref objects, return an array of strings
    * 'search' - apply a function ro the page text
      * function should accept the page text as a string, return an array of strings
   The strings returned by the function should be valid HTML
   
   func - The function described above
   testname - Name of the error check, must not contain spaces
   desc - A short description of the test
*/

window.citeErrorCheck = function (obj) {
  this.obj = obj
  CiteTB.ErrorChecks[this.obj.testname] = this;
  
  this.run = function() {
    var errors = [];
    switch(this.obj['type']) {
      case "refcheck":
        CiteTB.loadRefs();
        for(var i=0; i<CiteTB.mainRefList.length; i++) {
          var e = this.obj.func(CiteTB.mainRefList[i]);
          if (e) {
            errors.push(e);
          }
        }
        break;
      case "reflist":
        CiteTB.loadRefs();
        errors = this.obj.func(CiteTB.mainRefList);
        break;
      case "search":
        var func = this.obj.func
        CiteTB.getPageText(function(text) {
          errors = func(text);
        });
        break;
    }
    return errors;
  }
  
  this.getRow = function() {
    var row = $("<li />");
    var check = $("<input type='checkbox' name='cite-err-test' />");
    check.attr('value', this.obj.testname);
    var label = $("<label />").html(mw.usability.getMsg(this.obj.desc));
    label.attr('for', this.obj.testname); 
    row.append(check).append(' &ndash; ').append(label);
    return row;
  }
}
$('head').trigger('reftoolbarbase');
Retrieved from "https://bahaipedia.org/index.php?title=MediaWiki:Gadget-refToolbarBase.js&oldid=89079"
This page was last edited on 30 January 2021, at 02:40.
Text is available under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.
Privacy policy
About Bahaipedia
Disclaimers
Powered by MediaWiki