User:TheDJ/sandbox.js

/* 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', '1'); labelfield = fieldobj.field.replace('', ''); 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('', incrval.toString); labelfield = fieldobj.field.replace('', ''); }     if ($.inArray(field, CiteTB.getOption('autodate fields')) != -1 ) { im = $(' ').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 = $('').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 = $(' ').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 = $('').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 = $(' ').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 = $('').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 ? $(' ').attr('title', mw.usability.getMsg(fieldobj.tooltip)).html('?') : false; var input = ''; if (ad) { input = $(''); } else { input = $(''); }     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.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 = $(' '); }     var td1 = $('').attr('style', style); td1.append(label); tr.append(td1); var td2 = $(''); 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) { for(i=0; i'; return hidden; } // makes the form used in the dialog boxes this.getForm = function { var main = $(" "); var form1 = $(' '); var i=0; var trs = this.makeFormInner(this.basic, true); for (var i=0; i'); var label1 = $(' '); label1.attr('for', "cite-"+CiteTB.escStr(this.shortform)+'-name').text(mw.usability.getMsg('cite-name-label')); td1.append(label1); var td2 = $(''); var input1 = $(''); input1.attr('id', 'cite-'+CiteTB.escStr(this.shortform)+'-name'); td2.append(input1); var td3 = $(''); var label2 = $(' '); 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 = $(' '); 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 = $(' '); span1.text(mw.usability.getMsg('cite-raw-preview')); extras.append(span1).append(' '); var span2 = $(' '); span2.text(mw.usability.getMsg('cite-parsed-label')); extras.append(span2).append(' '); 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 = $(" "); var check = $("<input type='checkbox' name='cite-err-test' />"); check.attr('value', this.obj.testname); var label = $(" ").html(mw.usability.getMsg(this.obj.desc)); label.attr('for', this.obj.testname); row.append(check).append(' – ').append(label); return row; } } $('head').trigger('reftoolbarbase');