다국어인구학사전입니다. 여러분들의 많은 이용바랍니다. The Demopaedia team will be present at the next International Population Conference in Busan.
If you attend the conference, please, come to our oral communication which will be held on Tuesday August 27, from 15:30 to 17:00 (Bexco, room 213). The new Korean dictionary will also be presented in a side meeting organized by the Planned Population Federation of Korea (PPFK) on "Population Issues & Official development assistance" (open to all) at 19:00 (Bexco, room 110).

다국어인구학사전, 두 번째 통합본, 한국어판

"미디어위키:RefToolbarTextTerm.js"의 두 판 사이의 차이

Demopædia
이동: 둘러보기, 검색
잔글 (판 1개: Importing TextTermJavaTemplate from fr-ii)
(Identical to new RefToolbar.js)
1번째 줄: 1번째 줄:
// Todo: make autodate an option in the CiteTemplate object, not a preference
+
/*jshint smarttabs:true, loopfunc:true,forin:false*/
 +
/*global mw, $, importScript */
 +
// TODO: make autodate an option in the CiteTemplate object, not a preference
  
 
// Global object
 
// Global object
if (typeof CiteTB == 'undefined') {
+
// TODO:
 +
// * Remove this once the page is moved to a module 'ext.gadget.refToolbarDialogs' depending on 'ext.gadget.refToolbarBase'
 +
if (typeof CiteTB === 'undefined') {
 
   var CiteTB = {
 
   var CiteTB = {
 
     "Templates" : {}, // All templates
 
     "Templates" : {}, // All templates
12번째 줄: 16번째 줄:
 
}
 
}
  
// only load on edit, unless its a user JS/CSS page
+
// Only execute on edit, unless it is a user JS/CSS page
if ((wgAction == 'edit' || wgAction == 'submit') && !((wgNamespaceNumber == 2 || wgNamespaceNumber == 4) &&
+
// TODO: Remove tests already done by [[MediaWiki:Gadget-refToolbar.js]]
  (wgPageName.indexOf('.js') != -1 || wgPageName.indexOf('.css') != -1 ))) {
+
if (
 +
( mw.config.get('wgAction') === 'edit' || mw.config.get('wgAction') === 'submit' ) &&
 +
( ( mw.config.get('wgNamespaceNumber') !== 2 && mw.config.get('wgNamespaceNumber') !== 4 ) ||
 +
( mw.config.get('wgPageName').indexOf('.js') === -1 && mw.config.get('wgPageName').indexOf('.css') === -1 ) )
 +
) {
  
appendCSS(".cite-form-td {"+
+
// TODO: Move this to [[MediaWiki:Gadget-refToolbarDialogs.css]] and add it to the definition of module 'ext.gadget.refToolbarDialogs'
 +
mw.util.addCSS(".cite-form-td {"+
 
"height: 0 !important;"+
 
"height: 0 !important;"+
 
"padding: 0.1em !important;"+
 
"padding: 0.1em !important;"+
30번째 줄: 39번째 줄:
 
   "expandtemplates": false
 
   "expandtemplates": false
 
};
 
};
 +
 
// Get an option - user settings override global which override defaults
 
// Get an option - user settings override global which override defaults
 
CiteTB.getOption = function(opt) {
 
CiteTB.getOption = function(opt) {
   if (CiteTB.UserOptions[opt] != undefined) {
+
   if (CiteTB.UserOptions[opt] !== undefined) {
 
     return CiteTB.UserOptions[opt];
 
     return CiteTB.UserOptions[opt];
   } else if (CiteTB.Options[opt] != undefined) {
+
   } else if (CiteTB.Options[opt] !== undefined) {
 
     return CiteTB.Options[opt];
 
     return CiteTB.Options[opt];
 
   }
 
   }
 
   return CiteTB.DefaultOptions[opt];
 
   return CiteTB.DefaultOptions[opt];
}
+
};
  
 
CiteTB.init = function() {
 
CiteTB.init = function() {
51번째 줄: 61번째 줄:
 
   */
 
   */
  
   if (typeof $j('div[rel=cites]')[0] != 'undefined') { // Mystery IE bug workaround
+
   if (typeof $('div[rel=cites]')[0] !== 'undefined') { // Mystery IE bug workaround
 
     return;
 
     return;
 
   }
 
   }
   $j('head').trigger('reftoolbarbase');
+
   $('head').trigger('reftoolbarbase');
   var $target = $j('#wpTextbox1');
+
   var $target = $('#wpTextbox1');
 
   var temlist = {};
 
   var temlist = {};
  var d = new Date();
 
  var start = d.getTime();
 
 
   for (var t in CiteTB.Templates) {
 
   for (var t in CiteTB.Templates) {
  var tem = CiteTB.Templates[t];
+
    var tem = CiteTB.Templates[t];
     sform = CiteTB.escStr(tem.shortform);
+
     var sform = CiteTB.escStr(tem.shortform);
 
     var actionobj = {  
 
     var actionobj = {  
 
       type: 'dialog',
 
       type: 'dialog',
76번째 줄: 84번째 줄:
 
         width:675,
 
         width:675,
 
         open: function() {  
 
         open: function() {  
           $j(this).html(CiteTB.getOpenTemplate().getForm());
+
           $(this).html(CiteTB.getOpenTemplate().getForm());
           $j('.cite-prev-parse').bind( 'click', CiteTB.prevParseClick);
+
          /** @param {jQuery.Event} e */
        },
+
           $('.cite-prev-parse').bind( 'click', function ( e ) {
        beforeclose: function() {
+
            e.preventDefault();
           CiteTB.resetForm();
+
            CiteTB.prevParseClick();
 +
           });
 
         },
 
         },
 
         buttons: {
 
         buttons: {
 
           'cite-form-submit': function() {
 
           'cite-form-submit': function() {
            $j.wikiEditor.modules.toolbar.fn.doAction( $j(this).data( 'context' ), {
 
              type: 'encapsulate',
 
              options: {
 
                peri: ' '
 
              }
 
            }, $j(this) );
 
 
             var ref = CiteTB.getRef(false, true);
 
             var ref = CiteTB.getRef(false, true);
             $j(this).dialog( 'close' );
+
             $(this).dialog( 'close' );
             $j.wikiEditor.modules.toolbar.fn.doAction( $j(this).data( 'context' ), {
+
             $.wikiEditor.modules.toolbar.fn.doAction( $(this).data( 'context' ), {
 
               type: 'encapsulate',
 
               type: 'encapsulate',
 
               options: {
 
               options: {
                 pre: ref
+
                 post: ref
 
               }
 
               }
             }, $j(this) );
+
             }, $(this) );
 
           },
 
           },
 
           'cite-form-showhide': CiteTB.showHideExtra,
 
           'cite-form-showhide': CiteTB.showHideExtra,
103번째 줄: 106번째 줄:
 
             var ref = CiteTB.getRef(false, false);
 
             var ref = CiteTB.getRef(false, false);
 
             var template = CiteTB.getOpenTemplate();
 
             var template = CiteTB.getOpenTemplate();
             var div = $j("#citetoolbar-"+CiteTB.escStr(template.shortform));
+
             var div = $("#citetoolbar-"+CiteTB.escStr(template.shortform));
 
             div.find('.cite-preview-label').show();
 
             div.find('.cite-preview-label').show();
 
             div.find('.cite-ref-preview').text(ref).show();
 
             div.find('.cite-ref-preview').text(ref).show();
115번째 줄: 118번째 줄:
 
           },
 
           },
 
           'wikieditor-toolbar-tool-link-cancel': function() {
 
           'wikieditor-toolbar-tool-link-cancel': function() {
             $j(this).dialog( 'close' );
+
             $(this).dialog( 'close' );
 
           },
 
           },
 
           'cite-form-reset': function() {
 
           'cite-form-reset': function() {
124번째 줄: 127번째 줄:
 
     };
 
     };
 
     $target.wikiEditor('addDialog', dialogobj);
 
     $target.wikiEditor('addDialog', dialogobj);
     if (!CiteTB.getOption('modal')) {
+
     //if (!CiteTB.getOption('modal')) {
       //$j('#citetoolbar-'+sform).dialog('option', 'modal', false);
+
       //$('#citetoolbar-'+sform).dialog('option', 'modal', false);
     }
+
     //}
 
     temlist[sform] = {label: tem.templatename, action: actionobj };   
 
     temlist[sform] = {label: tem.templatename, action: actionobj };   
 
   }
 
   }
198번째 줄: 201번째 줄:
 
         buttons: {
 
         buttons: {
 
           'cite-errorcheck-submit': function() {
 
           'cite-errorcheck-submit': function() {
             var errorchecks = $j("input[name='cite-err-test']:checked");
+
             var errorchecks = $("input[name='cite-err-test']:checked");
 
             var errors = [];
 
             var errors = [];
 
             for (var i=0; i<errorchecks.length; i++) {
 
             for (var i=0; i<errorchecks.length; i++) {
               errors = errors.concat(CiteTB.ErrorChecks[$j(errorchecks[i]).val()].run());
+
               errors = errors.concat(CiteTB.ErrorChecks[$(errorchecks[i]).val()].run());
 
             }
 
             }
 
             CiteTB.displayErrors(errors);
 
             CiteTB.displayErrors(errors);
             $j(this).dialog( 'close' );                       
+
             $(this).dialog( 'close' );                       
 
           },
 
           },
 
           'wikieditor-toolbar-tool-link-cancel': function() {
 
           'wikieditor-toolbar-tool-link-cancel': function() {
             $j(this).dialog( 'close' );
+
             $(this).dialog( 'close' );
 
           }
 
           }
 
         }
 
         }
227번째 줄: 230번째 줄:
 
         buttons: {
 
         buttons: {
 
           'cite-form-submit': function() {
 
           'cite-form-submit': function() {
             var refname = $j("#cite-namedref-select").val();
+
             var refname = $("#cite-namedref-select").val();
             if (refname == '') {
+
             if (refname === '') {
 
               return;
 
               return;
 
             }
 
             }
             $j.wikiEditor.modules.toolbar.fn.doAction( $j(this).data( 'context' ), {
+
             $(this).dialog( 'close' );
              type: 'encapsulate',
+
             $.wikiEditor.modules.toolbar.fn.doAction( $(this).data( 'context' ), {
              options: {
 
                peri: ' '
 
              }
 
            }, $j(this) );
 
            $j(this).dialog( 'close' );
 
             $j.wikiEditor.modules.toolbar.fn.doAction( $j(this).data( 'context' ), {
 
 
               type: 'encapsulate',
 
               type: 'encapsulate',
 
               options: {
 
               options: {
                 pre: CiteTB.getNamedRef(refname, true)
+
                 post: CiteTB.getNamedRef(refname, true)
 
               }
 
               }
             }, $j(this) );
+
             }, $(this) );
 
           },
 
           },
 
           'wikieditor-toolbar-tool-link-cancel': function() {
 
           'wikieditor-toolbar-tool-link-cancel': function() {
             $j(this).dialog( 'close' );
+
             $(this).dialog( 'close' );
 
           }                   
 
           }                   
 
         }
 
         }
254번째 줄: 251번째 줄:
 
    
 
    
 
   $target.wikiEditor('addDialog', defaultdialogs);
 
   $target.wikiEditor('addDialog', defaultdialogs);
   $j('#citetoolbar-namedrefs').unbind('dialogopen');
+
   $('#citetoolbar-namedrefs').unbind('dialogopen');
 
   if (!CiteTB.getOption('modal')) {
 
   if (!CiteTB.getOption('modal')) {
     //$j('#citetoolbar-namedrefs').dialog('option', 'modal', false);
+
     //$('#citetoolbar-namedrefs').dialog('option', 'modal', false);
     //$j('#citetoolbar-errorcheck').dialog('option', 'modal', false);
+
     //$('#citetoolbar-errorcheck').dialog('option', 'modal', false);
     appendCSS(".ui-widget-overlay {"+
+
     mw.util.addCSS(".ui-widget-overlay {"+
 
     "display:none !important;"+
 
     "display:none !important;"+
 
     "}");   
 
     "}");   
 
   }
 
   }
 
   $target.wikiEditor('addToToolbar', refsection);
 
   $target.wikiEditor('addToToolbar', refsection);
}  
+
};
  
 
// Load local data - messages, cite templates, etc.
 
// Load local data - messages, cite templates, etc.
$j(document).ready( function() {
+
$(document).ready( function() {
   switch( wgUserLanguage ) {
+
   switch( mw.config.get('wgUserLanguage') ) {
 
     case 'de': // German
 
     case 'de': // German
       var RefToolbarMessages = importScript('MediaWiki:RefToolbarMessages-de.js');
+
       importScript('MediaWiki:RefToolbarMessages-de.js');
 
       break;
 
       break;
 
     default: // English
 
     default: // English
       var RefToolbarMessages = importScript('MediaWiki:RefToolbarMessages-en.js');
+
       importScript('MediaWiki:RefToolbarMessages-en.js');
 
   }
 
   }
 
});
 
});
283번째 줄: 280번째 줄:
 
// Actually assemble a ref from user input
 
// Actually assemble a ref from user input
 
CiteTB.getRef = function(inneronly, forinsert) {
 
CiteTB.getRef = function(inneronly, forinsert) {
 +
  var i;
 
   var template = CiteTB.getOpenTemplate();
 
   var template = CiteTB.getOpenTemplate();
 
   var templatename = template.templatename;
 
   var templatename = template.templatename;
288번째 줄: 286번째 줄:
 
   var refobj = {'shorttag':false};
 
   var refobj = {'shorttag':false};
 
   if (!inneronly) {
 
   if (!inneronly) {
     var group = $j('#cite-'+CiteTB.escStr(template.shortform)+'-group').val();
+
     var group = $('#cite-'+CiteTB.escStr(template.shortform)+'-group').val();
     var refname = $j('#cite-'+CiteTB.escStr(template.shortform)+'-name').val();
+
     var refname = $('#cite-'+CiteTB.escStr(template.shortform)+'-name').val();
 
     res += '<ref';
 
     res += '<ref';
 
     if (refname) {
 
     if (refname) {
       refname = $j.trim(refname);
+
       refname = $.trim(refname);
 
       res+=' name='+CiteTB.getQuotedString(refname);
 
       res+=' name='+CiteTB.getQuotedString(refname);
 
       refobj.refname = refname;
 
       refobj.refname = refname;
 
     }
 
     }
 
     if (group) {
 
     if (group) {
       group = $j.trim(group);
+
       group = $.trim(group);
 
       res+=' group='+CiteTB.getQuotedString(group);
 
       res+=' group='+CiteTB.getQuotedString(group);
 
       refobj.refgroup = group;
 
       refobj.refgroup = group;
304번째 줄: 302번째 줄:
 
   }
 
   }
 
   var content ='{{'+templatename;
 
   var content ='{{'+templatename;
   for( var i=0; i<template.basic.length; i++ ) {
+
   for( g in template.incrementables ) {
 +
  group = template.incrementables[g];
 +
  for (i=1; i<=group.val; i++) {
 +
for (j=0; j<group.fields.length; j++) {
 +
  var fieldname = group.fields[j].field;
 +
  var fieldid = fieldname.replace('<N>', i.toString());
 +
  var field = $('#cite-'+CiteTB.escStr(template.shortform)+'-'+fieldid).val();
 +
  if (field) {
 +
  content+='|'+fieldid+'=';
 +
  content+= $.trim(field);
 +
  }
 +
  }
 +
  }
 +
  }
 +
  for( i=0; i<template.basic.length; i++ ) {
 +
  if (template.basic[i].increment_group) {
 +
  continue;
 +
  }
 
     var fieldname = template.basic[i].field;
 
     var fieldname = template.basic[i].field;
     var field = $j('#cite-'+CiteTB.escStr(template.shortform)+'-'+fieldname).val();
+
     var field = $('#cite-'+CiteTB.escStr(template.shortform)+'-'+fieldname).val();
 
     if (field) {
 
     if (field) {
 
       content+='|'+fieldname+'=';
 
       content+='|'+fieldname+'=';
       content+= $j.trim(field.replace("|", "{{!}}"));
+
       content+= $.trim(field);
 
     }
 
     }
 
   }
 
   }
   if ($j('#cite-form-status').val() != 'closed') {
+
   if ($('#cite-form-status').val() !== 'closed') {
     for( var i=0; i<template.extra.length; i++ ) {
+
     for( i=0; i<template.extra.length; i++ ) {
 +
      if (template.extra[i].increment_group) {
 +
        continue;
 +
      }
 
       var fieldname = template.extra[i].field;
 
       var fieldname = template.extra[i].field;
       var field = $j('#cite-'+CiteTB.escStr(template.shortform)+'-'+fieldname).val();
+
       var field = $('#cite-'+CiteTB.escStr(template.shortform)+'-'+fieldname).val();
 
       if (field) {
 
       if (field) {
 
         content+='|'+fieldname+'=';
 
         content+='|'+fieldname+'=';
         content+= $j.trim(field.replace("|", "{{!}}"));
+
         content+= $.trim(field);
 
       }
 
       }
 
     }
 
     }
332번째 줄: 350번째 줄:
 
   }
 
   }
 
   return res;
 
   return res;
}
+
};
  
 
// Make a reference to a named ref
 
// Make a reference to a named ref
 
CiteTB.getNamedRef = function(refname, forinsert) {
 
CiteTB.getNamedRef = function(refname, forinsert) {
  var inner = 'name=';
 
 
   if (forinsert) {
 
   if (forinsert) {
 
     CiteTB.mainRefList.push( {'shorttag':true, 'refname':refname} );
 
     CiteTB.mainRefList.push( {'shorttag':true, 'refname':refname} );
 
   }
 
   }
 
   return '<ref name='+CiteTB.getQuotedString(refname)+' />';   
 
   return '<ref name='+CiteTB.getQuotedString(refname)+' />';   
}
+
};
  
 
// Function to load the ref list
 
// Function to load the ref list
349번째 줄: 366번째 줄:
 
   }
 
   }
 
   CiteTB.getPageText(CiteTB.loadRefsInternal);
 
   CiteTB.getPageText(CiteTB.loadRefsInternal);
}
+
};
  
 
// Function that actually loads the list from the page text
 
// Function that actually loads the list from the page text
 
CiteTB.loadRefsInternal = function(text) {  
 
CiteTB.loadRefsInternal = function(text) {  
 
   // What this does:            extract first name/group                                    extract second name/group                                          shorttag  inner content
 
   // What this does:            extract first name/group                                    extract second name/group                                          shorttag  inner content
   var refsregex = /< *ref(?: +(name|group) *= *(?:"([^"]*?)"|'([^']*?)'|([^ '"\/\>]*?)) *)? *(?: +(name|group) *= *(?:"([^"]*?)"|'([^']*?)'|([^ '"\/\>]*?)) *)? *(?:\/ *>|>((?:.|\n)*?)< *\/ *ref *>)/gim
+
   var refsregex = /< *ref(?: +(name|group) *= *(?:"([^"]*?)"|'([^']*?)'|([^ '"\/\>]*?)) *)? *(?: +(name|group) *= *(?:"([^"]*?)"|'([^']*?)'|([^ '"\/\>]*?)) *)? *(?:\/ *>|>((?:.|\n)*?)< *\/ *ref *>)/gim;
 
   // This should work regardless of the quoting used for names/groups and for linebreaks in the inner content   
 
   // This should work regardless of the quoting used for names/groups and for linebreaks in the inner content   
 
   while (true) {
 
   while (true) {
 
     var ref = refsregex.exec(text);
 
     var ref = refsregex.exec(text);
     if (ref == null) {
+
     if (ref === null) {
 
       break;
 
       break;
 
     }
 
     }
364번째 줄: 381번째 줄:
 
     if (ref[9]) { // Content + short tag check
 
     if (ref[9]) { // Content + short tag check
 
       //alert('"'+ref[9]+'"');
 
       //alert('"'+ref[9]+'"');
       refobj['content'] = ref[9];  
+
       refobj.content = ref[9];  
       refobj['shorttag'] = false;
+
       refobj.shorttag = false;
 
     } else {
 
     } else {
       refobj['shorttag'] = true;
+
       refobj.shorttag = true;
 
     }
 
     }
     if (ref[1] != '') { // First name/group
+
     if (ref[1] !== '') { // First name/group
 
       if (ref[2]) {
 
       if (ref[2]) {
 
         refobj['ref'+ref[1]] = ref[2];
 
         refobj['ref'+ref[1]] = ref[2];
378번째 줄: 395번째 줄:
 
       }
 
       }
 
     }
 
     }
     if (ref[5] != '') { // Second name/group
+
     if (ref[5] !== '') { // Second name/group
 
       if (ref[6]) {
 
       if (ref[6]) {
 
         refobj['ref'+ref[5]] = ref[6];
 
         refobj['ref'+ref[5]] = ref[6];
391번째 줄: 408번째 줄:
 
   CiteTB.refsLoaded = true;
 
   CiteTB.refsLoaded = true;
 
   CiteTB.setupErrorCheck();
 
   CiteTB.setupErrorCheck();
   CiteTB.setupNamedRefs()
+
   CiteTB.setupNamedRefs();
}
+
};
  
 
// AJAX FUNCTIONS
 
// AJAX FUNCTIONS
 
// Parse some wikitext and hand it off to a callback function
 
// Parse some wikitext and hand it off to a callback function
 
CiteTB.parse = function(text, callback) {
 
CiteTB.parse = function(text, callback) {
   $j.post( wgServer+wgScriptPath+'/api.php',
+
   $.post( mw.util.wikiScript( 'api' ),
     {action:'parse', title:wgPageName, text:text, prop:'text', format:'json'},
+
     {action:'parse', title:mw.config.get('wgPageName'), text:text, prop:'text', format:'json'},
 
     function(data) {
 
     function(data) {
       var html = data['parse']['text']['*'];
+
       var html = data.parse.text['*'];
 
       callback(html);
 
       callback(html);
 
     },
 
     },
 
     'json'
 
     'json'
 
   );   
 
   );   
}
+
};
  
 
// Use the API to expand templates on some text
 
// Use the API to expand templates on some text
 
CiteTB.expandtemplates = function(text, callback) {
 
CiteTB.expandtemplates = function(text, callback) {
   $j.post( wgServer+wgScriptPath+'/api.php',
+
   $.post( mw.util.wikiScript( 'api' ),
     {action:'expandtemplates', title:wgPageName, text:text, format:'json'},
+
     {action:'expandtemplates', title:mw.config.get('wgPageName'), text:text, format:'json'},
 
     function(data) {
 
     function(data) {
       var restext = data['expandtemplates']['*'];
+
       var restext = data.expandtemplates['*'];
 
       callback(restext);
 
       callback(restext);
 
     },
 
     },
 
     'json'
 
     'json'
 
   );
 
   );
}
+
};
  
 
// Function to get the page text
 
// Function to get the page text
 
CiteTB.getPageText = function(callback) {
 
CiteTB.getPageText = function(callback) {
   var section = $j("input[name='wpSection']").val();
+
   var section = $("input[name='wpSection']").val();
   if ( section != '' ) {
+
   if ( section !== '' ) {
     var postdata = {action:'query', prop:'revisions', rvprop:'content', pageids:wgArticleId, format:'json'};
+
     var postdata = {action:'query', prop:'revisions', rvprop:'content', pageids:mw.config.get('wgArticleId'), format:'json'};
 
     if (CiteTB.getOption('expandtemplates')) {
 
     if (CiteTB.getOption('expandtemplates')) {
       postdata['rvexpandtemplates'] = '1';
+
       postdata.rvexpandtemplates = '1';
 
     }
 
     }
     $j.get( wgServer+wgScriptPath+'/api.php',
+
     $.get( mw.util.wikiScript( 'api' ),
 
       postdata,
 
       postdata,
 
       function(data) {
 
       function(data) {
         var pagetext = data['query']['pages'][wgArticleId.toString()]['revisions'][0]['*'];
+
         var pagetext = data.query.pages[mw.config.get('wgArticleId').toString()].revisions[0]['*'];
 
         callback(pagetext);
 
         callback(pagetext);
 
       },
 
       },
437번째 줄: 454번째 줄:
 
   } else {
 
   } else {
 
     if (CiteTB.getOption('expandtemplates')) {
 
     if (CiteTB.getOption('expandtemplates')) {
       CiteTB.expandtemplates($j('#wpTextbox1').wikiEditor('getContents').text(), callback);
+
       CiteTB.expandtemplates($('#wpTextbox1').wikiEditor('getContents').text(), callback);
 
     } else {
 
     } else {
       callback($j('#wpTextbox1').wikiEditor('getContents').text());
+
       callback($('#wpTextbox1').wikiEditor('getContents').text());
 
     }
 
     }
 
   }
 
   }
}
+
};
  
// Autofill a template from an ID (ISBN, DOI, PMID)
+
// Autofill a template from an ID (ISBN, DOI, PMID, URL)
 
CiteTB.initAutofill = function() {
 
CiteTB.initAutofill = function() {
   var elemid = $j(this).attr('id');
+
   var elemid = $(this).attr('id');
 
   var res = /^cite\-auto\-(.*?)\-(.*)\-(.*)$/.exec(elemid);
 
   var res = /^cite\-auto\-(.*?)\-(.*)\-(.*)$/.exec(elemid);
 
   var tem = res[1];
 
   var tem = res[1];
 
   var field = res[2];
 
   var field = res[2];
 
   var autotype = res[3];
 
   var autotype = res[3];
   var id = $j('#cite-'+tem+'-'+field).val();
+
   var id = $('#cite-'+tem+'-'+field).val();
 
   if (!id) {
 
   if (!id) {
 
     return false;
 
     return false;
 
   }
 
   }
   var url = 'http://toolserver.org/~alexz/ref/lookup.php?';
+
   var url = '//tools.wmflabs.org/reftoolbar/lookup.php?';
 
   url+=autotype+'='+encodeURIComponent(id);
 
   url+=autotype+'='+encodeURIComponent(id);
 
   url+='&template='+encodeURIComponent(tem);
 
   url+='&template='+encodeURIComponent(tem);
463번째 줄: 480번째 줄:
 
   document.getElementsByTagName('head')[0].appendChild(s);
 
   document.getElementsByTagName('head')[0].appendChild(s);
 
   return false;
 
   return false;
}
+
};
  
 
// Callback for autofill
 
// Callback for autofill
469번째 줄: 486번째 줄:
 
CiteTB.autoFill = function(data, template, type) {
 
CiteTB.autoFill = function(data, template, type) {
 
   var cl = 'cite-'+template+'-';
 
   var cl = 'cite-'+template+'-';
   $j('.'+cl+'title').val(data.title);
+
  var i,j, coauthors;
   if ($j('.'+cl+'last1')) {
+
   $('.'+cl+'title').val(data.title);
    for(var i=0; i<data.authors.length; i++) {
+
   // Fill in authors
  if ($j('.'+cl+'last'+(i+1)).length) {
+
  if (data.authors && data.authors.length > 0) {
    $j('.'+cl+'last'+(i+1)).val(data.authors[i][0]);
+
  if ($('.'+cl+'last-incr-1').length != 0) {
$j('.'+cl+'first'+(i+1)).val(data.authors[i][1]);
+
var classes = $('.'+cl+'last-incr-1').eq(0).attr('class').split(/\s+/);
  } else {
+
var group = false;
    var coauthors = [];
+
var patt = /cite-[^-]*?-incr-(.*)/
    for(var j=i; j<data.authors.length; j++) {
+
for (var c=0; c<classes.length; c++) {
  coauthors.push(data.authors[j].join(', '));
+
if (patt.exec(classes[c])) {
 +
group = patt.exec(classes[c])[1];
 +
break;
 +
}
 +
}
 +
$('.'+cl+'last-incr-1').val(data.authors[0][0])
 +
$('.'+cl+'first-incr-1').val(data.authors[0][1])
 +
elemid = '#cite-incr-'+template+'-'+group;
 +
for (var i=2; i<data.authors.length+1; i++) {
 +
$(elemid).click();
 +
$('.'+cl+'last-incr-'+i.toString()).val(data.authors[i-1][0])
 +
$('.'+cl+'first-incr-'+i.toString()).val(data.authors[i-1][1])
 +
}
 +
  } else if ($('.'+cl+'author-incr-1').length != 0) {
 +
var classes = $('.'+cl+'author-incr-1').eq(0).attr('class').split(/\s+/);
 +
var group = false;
 +
var patt = /cite-[^-]*?-incr-(.*)/
 +
for (var c=0; c<classes.length; c++) {
 +
if (patt.exec(classes[c])) {
 +
group = patt.exec(classes[c])[1];
 +
break;
 +
}
 +
}
 +
$('.'+cl+'author-incr-1').val(data.authors[0].join(', '))
 +
elemid = '#cite-incr-'+template+'-'+group;
 +
for (var i=2; i<data.authors.length+1; i++) {
 +
$(elemid).click();
 +
$('.'+cl+'author-incr-'+i.toString()).val(data.authors[i-1].join(', '))
 +
}
 +
  } else if ($('.'+cl+'last1').length != 0) {
 +
for(i=0; data.authors && i<data.authors.length; i++) {
 +
  if ($('.'+cl+'last'+(i+1)).length) {
 +
$('.'+cl+'last'+(i+1)).val(data.authors[i][0]);
 +
$('.'+cl+'first'+(i+1)).val(data.authors[i][1]);
 +
  } else {
 +
coauthors = [];
 +
for(j=i; j<data.authors.length; j++) {
 +
  coauthors.push(data.authors[j].join(', '));
 +
}
 +
$('.'+cl+'coauthors').val(coauthors.join('; '));
 +
break;
 +
  }
 +
}
 +
  } else if($('.'+cl+'author1').length !== 0) {
 +
for(i=0; data.authors && i<data.authors.length; i++) {
 +
  if ($('.'+cl+'author'+(i+1)).length) {
 +
$('.'+cl+'author'+(i+1)).val(data.authors[i].join(', '));
 +
  } else {
 +
coauthors = [];
 +
for(j=i; j<data.authors.length; j++) {
 +
  coauthors.push(data.authors[j].join(', '));
 +
}
 +
$('.'+cl+'coauthors').val(coauthors.join('; '));
 +
break;
 +
  }
 
}
 
}
$j('.'+cl+'coauthors').val(coauthors.join(', '));
 
break;
 
  }
 
}
 
  } else if($j('.'+cl+'author1')) {
 
    for(var i=0; i<data.authors.length; i++) {
 
  if ($j('.'+cl+'author'+(i+1)).length) {
 
    $j('.'+cl+'author'+(i+1)).val(data.authors[i].join(', '));
 
 
  } else {
 
  } else {
    var coauthors = [];
+
var authors = [];
    for(var j=i; j<data.authors.length; j++) {
+
for(i=0; data.authors && i<data.authors.length; i++) {
  coauthors.push(data.authors[j].join(', '));
+
  authors.push(data.authors[i].join(', '));
 
}
 
}
$j('.'+cl+'coauthors').val(coauthors.join(', '));
+
$('.'+cl+'authors').val(authors.join('; '));
break;
 
 
  }
 
  }
}
+
   }
   } else {
+
 
    var authors = [];
+
   if (type === 'pmid' || type === 'doi') {
for(var i=0; j<data.authors.length; j++) {
+
     if (data.date && (data.fulldate || !$('.'+cl+'month').length)) {
  authors.push(data.authors[j].join(', '));
 
}
 
$j('.'+cl+'authors').val(authors.join(', '));
 
  } 
 
   if (type == 'pmid' || type == 'doi') {
 
     if (type == 'doi') {
 
 
       var DT = new Date(data.date);
 
       var DT = new Date(data.date);
       $j('.'+cl+'date').val(CiteTB.formatDate(DT));
+
      var useday = /\d{4}-\d{2}-\d{2}/.test(data.date);
 +
      var usemonth = /\d{4}-\d{2}/.test(data.date);
 +
       $('.'+cl+'date').val(CiteTB.formatDate(DT, useday, usemonth));
 +
    } else if (!data.fulldate && $('.'+cl+'month').length && $('.'+cl+'year').length) {
 +
      if (data.month) { // lookup.php sets month to false if it isn't provided
 +
        $('.'+cl+'month').val( CiteTB.getOption('months')[parseInt(data.month)-1] );
 +
      }
 +
      $('.'+cl+'year').val(data.year);
 
     } else {
 
     } else {
       $j('.'+cl+'date').val(data.date);
+
       $('.'+cl+'date').val(data.date);
 +
    }
 +
    $('.'+cl+'journal').val(data.journal);
 +
    $('.'+cl+'volume').val(data.volume);
 +
    $('.'+cl+'issue').val(data.issue);
 +
    $('.'+cl+'pages').val(data.pages);
 +
  } else if (type === 'isbn') {
 +
    $('.'+cl+'publisher').val(data.publisher);
 +
    $('.'+cl+'location').val(data.location);
 +
    $('.'+cl+'year').val(data.year);
 +
    $('.'+cl+'edition').val(data.edition);
 +
  } else if (type === 'url') {
 +
    if (data.date) {
 +
    var DT = new Date(data.date);
 +
      var useday = /\d{4}-\d{2}-\d{2}/.test(data.date) && template !== 'book';
 +
      var usemonth = /\d{4}-\d{2}/.test(data.date) && template !== 'book';
 +
      var yearOrDate = (template === 'book') ? 'year' : 'date';
 +
      $('.'+cl+yearOrDate).val(CiteTB.formatDate(DT, useday, usemonth));
 
     }
 
     }
     $j('.'+cl+'journal').val(data.journal);
+
     $('.'+cl+'journal').val(data.journal);
     $j('.'+cl+'volume').val(data.volume);
+
     $('.'+cl+'volume').val(data.volume);
     $j('.'+cl+'issue').val(data.issue);
+
     $('.'+cl+'issue').val(data.issue);
     $j('.'+cl+'pages').val(data.pages);
+
     $('.'+cl+'pages').val(data.pages);
  } else if (type == 'isbn') {
+
    $('.'+cl+'publisher').val(data.publisher);
     $j('.'+cl+'publisher').val(data.publisher);
+
    $('.'+cl+'edition').val(data.edition);
     $j('.'+cl+'location').val(data.location);
+
    $('.'+cl+'isbn').val(data.isbn);
     $j('.'+cl+'year').val(data.year);
+
     $('.'+cl+'issn').val(data.issn);
     $j('.'+cl+'edition').val(data.edition);
+
     $('.'+cl+'doi').val(data.doi);
 +
     // "en-US" isn't a valid value for the language parameter
 +
    if (data.language && data.language !== 'en-US' && data.language !== 'en-GB') {
 +
    $('.'+cl+'language').val(data.language);
 +
    }
 +
     $('.'+cl+'chapter').val(data.chapter);
 
   }
 
   }
}
+
};
  
 
// FORM DIALOG FUNCTIONS
 
// FORM DIALOG FUNCTIONS
 +
// Add new incrementable fields
 +
CiteTB.incrementFields = function() {
 +
template = CiteTB.getOpenTemplate();
 +
var currentrow = $(this).parents('tr')[0];
 +
$(this).prev().css('width', '100%')
 +
$(this).detach();
 +
var elemid = $(this).attr('id');
 +
var res = /^cite\-incr\-(.*?)\-(.*)$/.exec(elemid);
 +
group = res[2];
 +
increments = template.incrementables[group];
 +
fields = increments.fields;
 +
incrval = increments.val+1;
 +
template.incrementables[group].val += 1;
 +
trs = template.makeFormInner(fields, false);
 +
trs.reverse();
 +
for (var i=0; i<trs.length; i++) {
 +
$(currentrow).after(trs[i]);
 +
}
 +
};
 +
 
// fill the accessdate param with the current date
 
// fill the accessdate param with the current date
 
CiteTB.fillAccessdate = function() {
 
CiteTB.fillAccessdate = function() {
   var elemid = $j(this).attr('id');
+
   var elemid = $(this).attr('id');
 
   var res = /^cite\-date\-(.*?)\-(.*)$/.exec(elemid);
 
   var res = /^cite\-date\-(.*?)\-(.*)$/.exec(elemid);
 
   var id = res[1];
 
   var id = res[1];
 
   var field = res[2];
 
   var field = res[2];
 
   var DT = new Date();
 
   var DT = new Date();
   datestr = CiteTB.formatDate(DT);
+
   var datestr = CiteTB.formatDate(DT);
   $j('#cite-'+id+'-'+field).val(datestr);
+
   $('#cite-'+id+'-'+field).val(datestr);
 
   return false;
 
   return false;
}
+
};
  
CiteTB.formatDate = function(DT) {
+
CiteTB.formatDate = function(DT, useday, usemonth) {
 +
  if (typeof useday == "undefined") {
 +
    useday = true;
 +
  }
 +
  if (typeof usemonth == "undefined") {
 +
    usemonth = true;
 +
  }
 
   var datestr = CiteTB.getOption('date format');
 
   var datestr = CiteTB.getOption('date format');
 
   var zmonth = '';
 
   var zmonth = '';
553번째 줄: 664번째 줄:
 
     zdate = date.toString();
 
     zdate = date.toString();
 
   }
 
   }
   date = date.toString()
+
   date = date.toString();
   datestr = datestr.replace('<date>', date);
+
   if (useday) {
   datestr = datestr.replace('<month>', month);
+
    datestr = datestr.replace('<date>', date);
  datestr = datestr.replace('<zdate>', zdate);
+
    datestr = datestr.replace('<zdate>', zdate);
   datestr = datestr.replace('<zmonth>', zmonth);
+
   } else {
  datestr = datestr.replace('<monthname>', CiteTB.getOption('months')[DT.getUTCMonth()]);
+
    datestr = datestr.replace('<date>', '');
 +
    datestr = datestr.replace('<zdate>', '');
 +
   }
 +
  if (usemonth) {
 +
    datestr = datestr.replace('<month>', month);
 +
    datestr = datestr.replace('<zmonth>', zmonth);
 +
    datestr = datestr.replace('<monthname>', CiteTB.getOption('months')[DT.getUTCMonth()]);
 +
  } else {
 +
    datestr = datestr.replace('<month>', '');
 +
    datestr = datestr.replace('<zmonth>', '');
 +
    datestr = datestr.replace('<monthname>', '');
 +
  } 
 
   datestr = datestr.replace('<year>', DT.getUTCFullYear().toString());
 
   datestr = datestr.replace('<year>', DT.getUTCFullYear().toString());
   return datestr;
+
   return datestr.replace(/^[ \/\-\,\.]*(.*?)[ \/\-\,\.]*$/g, "$1"); // Cleanup any dangling spaces or connectors that might result from omitting date/month
}
+
};
  
 
// Function called after the ref list is loaded, to actually set the contents of the named ref dialog
 
// Function called after the ref list is loaded, to actually set the contents of the named ref dialog
 
// Until the list is loaded, its just a "Loading" placeholder
 
// Until the list is loaded, its just a "Loading" placeholder
 
CiteTB.setupNamedRefs = function() {
 
CiteTB.setupNamedRefs = function() {
   var names = []
+
   var names = [], i;
   for( var i=0; i<CiteTB.mainRefList.length; i++) {
+
   for( i=0; i<CiteTB.mainRefList.length; i++) {
 
     if (!CiteTB.mainRefList[i].shorttag && CiteTB.mainRefList[i].refname) {
 
     if (!CiteTB.mainRefList[i].shorttag && CiteTB.mainRefList[i].refname) {
 
       names.push(CiteTB.mainRefList[i]);
 
       names.push(CiteTB.mainRefList[i]);
 
     }
 
     }
 
   }
 
   }
   var stuff = $j('<div />')
+
   var stuff = $('<div>');
   $j('#citetoolbar-namedrefs').html( stuff );
+
   $('#citetoolbar-namedrefs').html( stuff );
   if (names.length == 0) {
+
   if (names.length === 0) {
 
     stuff.html(mw.usability.getMsg('cite-no-namedrefs'));
 
     stuff.html(mw.usability.getMsg('cite-no-namedrefs'));
 
   } else {
 
   } else {
 
     stuff.html(mw.usability.getMsg('cite-namedrefs-intro'));
 
     stuff.html(mw.usability.getMsg('cite-namedrefs-intro'));
     var select = $j('<select id="cite-namedref-select">');
+
     var select = $('<select id="cite-namedref-select">');
     select.append($j('<option value="" />').text(mw.usability.getMsg('cite-named-refs-dropdown')));
+
     select.append($('<option value="" />').text(mw.usability.getMsg('cite-named-refs-dropdown')));
     for(var i=0; i<names.length; i++) {
+
     for(i=0; i<names.length; i++) {
       select.append($j('<option />').text(names[i].refname));
+
       select.append($('<option />').text(names[i].refname));
 
     }
 
     }
 
     stuff.after(select);
 
     stuff.after(select);
 
     select.before('<br />');       
 
     select.before('<br />');       
     var prevlabel = $j('<div id="cite-nref-preview-label" style="display:none;" />').html(mw.usability.getMsg('cite-raw-preview'));
+
     var prevlabel = $('<div id="cite-nref-preview-label" style="display:none;" />').html(mw.usability.getMsg('cite-raw-preview'));
 
     select.after(prevlabel);
 
     select.after(prevlabel);
 
     prevlabel.before("<br /><br />");
 
     prevlabel.before("<br /><br />");
 
     prevlabel.after('<div id="cite-namedref-preview" style="padding:0.5em; font-size:110%" />');
 
     prevlabel.after('<div id="cite-namedref-preview" style="padding:0.5em; font-size:110%" />');
     var parselabel = $j('<span id="cite-parsed-label" style="display:none;" />').html(mw.usability.getMsg('cite-parsed-label'));
+
     var parselabel = $('<span id="cite-parsed-label" style="display:none;" />').html(mw.usability.getMsg('cite-parsed-label'));
     $j('#cite-namedref-preview').after(parselabel);
+
     $('#cite-namedref-preview').after(parselabel);
 
     parselabel.after('<div id="cite-namedref-parsed" style="padding-bottom:0.5em; font-size:110%" />');
 
     parselabel.after('<div id="cite-namedref-parsed" style="padding-bottom:0.5em; font-size:110%" />');
     var link = $j('<a href="#" id="cite-nref-parse" style="margin:0 1em 0 1em; display:none; color:darkblue" />');
+
     var link = $('<a href="#" id="cite-nref-parse" style="margin:0 1em 0 1em; display:none; color:darkblue" />');
 
     link.html(mw.usability.getMsg('cite-form-parse'));
 
     link.html(mw.usability.getMsg('cite-form-parse'));
     $j('#cite-namedref-parsed').after(link);
+
     $('#cite-namedref-parsed').after(link);
 
      
 
      
     $j("#cite-namedref-select").bind( 'change', CiteTB.namedRefSelectClick);
+
     $("#cite-namedref-select").bind( 'change', CiteTB.namedRefSelectClick);
     $j('#cite-nref-parse').bind( 'click', CiteTB.nrefParseClick);
+
     $('#cite-nref-parse').bind( 'click', CiteTB.nrefParseClick);
 
   }       
 
   }       
}
+
};
  
 
// Function to get the errorcheck form HTML
 
// Function to get the errorcheck form HTML
 
CiteTB.setupErrorCheck = function() {
 
CiteTB.setupErrorCheck = function() {
   var form = $j('<div id="cite-errorcheck-heading" />').html(mw.usability.getMsg('cite-errorcheck-heading'));
+
   var form = $('<div id="cite-errorcheck-heading" />').html(mw.usability.getMsg('cite-errorcheck-heading'));
   var ul = $j("<ul id='cite-errcheck-list' />");
+
   var ul = $("<ul id='cite-errcheck-list' />");
 +
  var test;
 
   for (var t in CiteTB.ErrorChecks) {
 
   for (var t in CiteTB.ErrorChecks) {
 
     test = CiteTB.ErrorChecks[t];
 
     test = CiteTB.ErrorChecks[t];
610번째 줄: 733번째 줄:
 
   }
 
   }
 
   form.append(ul);
 
   form.append(ul);
   $j('#citetoolbar-errorcheck').html(form);
+
   $('#citetoolbar-errorcheck').html(form);
}
+
};
  
 
// Callback function for parsed preview
 
// Callback function for parsed preview
 
CiteTB.fillNrefPreview = function(parsed) {
 
CiteTB.fillNrefPreview = function(parsed) {
   $j('#cite-parsed-label').show();
+
   $('#cite-parsed-label').show();
   $j('#cite-namedref-parsed').html(parsed);
+
   $('#cite-namedref-parsed').html(parsed);
}
+
};
  
 
// Click handler for the named-ref parsed preview
 
// Click handler for the named-ref parsed preview
 
CiteTB.nrefParseClick = function() {
 
CiteTB.nrefParseClick = function() {
   var choice = $j("#cite-namedref-select").val();
+
   var choice = $("#cite-namedref-select").val();
   if (choice == '') {
+
   if (choice === '') {
     $j('#cite-parsed-label').hide();
+
     $('#cite-parsed-label').hide();
     $j('#cite-namedref-parsed').text('');
+
     $('#cite-namedref-parsed').text('');
 
     return false;
 
     return false;
 
   }
 
   }
   $j('#cite-nref-parse').hide();
+
   $('#cite-nref-parse').hide();
 
   for( var i=0; i<CiteTB.mainRefList.length; i++) {
 
   for( var i=0; i<CiteTB.mainRefList.length; i++) {
 
     if (!CiteTB.mainRefList[i].shorttag && CiteTB.mainRefList[i].refname == choice) {
 
     if (!CiteTB.mainRefList[i].shorttag && CiteTB.mainRefList[i].refname == choice) {
634번째 줄: 757번째 줄:
 
     }
 
     }
 
   }   
 
   }   
}
+
};
  
 
// Click handler for the named-ref dropdown
 
// Click handler for the named-ref dropdown
 
CiteTB.lastnamedrefchoice = '';
 
CiteTB.lastnamedrefchoice = '';
 
CiteTB.namedRefSelectClick = function() {
 
CiteTB.namedRefSelectClick = function() {
   var choice = $j("#cite-namedref-select").val();
+
   var choice = $("#cite-namedref-select").val();
 
   if (CiteTB.lastnamedrefchoice == choice) {
 
   if (CiteTB.lastnamedrefchoice == choice) {
 
     return;
 
     return;
 
   }
 
   }
 
   CiteTB.lastnamedrefchoice = choice;
 
   CiteTB.lastnamedrefchoice = choice;
   $j('#cite-parsed-label').hide();
+
   $('#cite-parsed-label').hide();
   $j('#cite-namedref-parsed').text('');
+
   $('#cite-namedref-parsed').text('');
   if (choice == '') {
+
   if (choice === '') {
     $j('#cite-nref-preview-label').hide();
+
     $('#cite-nref-preview-label').hide();
     $j('#cite-namedref-preview').text('');
+
     $('#cite-namedref-preview').text('');
     $j('#cite-nref-parse').hide();
+
     $('#cite-nref-parse').hide();
 
     return;
 
     return;
 
   }
 
   }
 
   for( var i=0; i<CiteTB.mainRefList.length; i++) {
 
   for( var i=0; i<CiteTB.mainRefList.length; i++) {
 
     if (!CiteTB.mainRefList[i].shorttag && CiteTB.mainRefList[i].refname == choice) {
 
     if (!CiteTB.mainRefList[i].shorttag && CiteTB.mainRefList[i].refname == choice) {
       $j('#cite-nref-preview-label').show();
+
       $('#cite-nref-preview-label').show();
       $j('#cite-namedref-preview').text(CiteTB.mainRefList[i].content);
+
       $('#cite-namedref-preview').text(CiteTB.mainRefList[i].content);
 
       if (CiteTB.getOption('autoparse')) {
 
       if (CiteTB.getOption('autoparse')) {
 
         CiteTB.nrefParseClick();
 
         CiteTB.nrefParseClick();
 
       } else {
 
       } else {
         $j('#cite-nref-parse').show();
+
         $('#cite-nref-parse').show();
 
       }
 
       }
 
     }
 
     }
 
   }
 
   }
}
+
};
  
 
// callback function for parsed preview
 
// callback function for parsed preview
 
CiteTB.fillTemplatePreview = function(text) {
 
CiteTB.fillTemplatePreview = function(text) {
 
   var template = CiteTB.getOpenTemplate();
 
   var template = CiteTB.getOpenTemplate();
   var div = $j("#citetoolbar-"+CiteTB.escStr(template.shortform));
+
   var div = $("#citetoolbar-"+CiteTB.escStr(template.shortform));
 
   div.find('.cite-prev-parsed-label').show();
 
   div.find('.cite-prev-parsed-label').show();
 
   div.find('.cite-preview-parsed').html(text);
 
   div.find('.cite-preview-parsed').html(text);
}
+
};
  
 
// Click handler for template parsed preview
 
// Click handler for template parsed preview
677번째 줄: 800번째 줄:
 
   var ref = CiteTB.getRef(true, false);
 
   var ref = CiteTB.getRef(true, false);
 
   var template = CiteTB.getOpenTemplate();
 
   var template = CiteTB.getOpenTemplate();
   var div = $j("#citetoolbar-"+CiteTB.escStr(template.shortform));
+
   var div = $("#citetoolbar-"+CiteTB.escStr(template.shortform));
 
   div.find('.cite-prev-parse').hide();
 
   div.find('.cite-prev-parse').hide();
 
   CiteTB.parse(ref, CiteTB.fillTemplatePreview);
 
   CiteTB.parse(ref, CiteTB.fillTemplatePreview);
}
+
};
  
 
// Show/hide the extra fields in the dialog box
 
// Show/hide the extra fields in the dialog box
 
CiteTB.showHideExtra = function() {
 
CiteTB.showHideExtra = function() {
 
   var template = CiteTB.getOpenTemplate();
 
   var template = CiteTB.getOpenTemplate();
   var div = $j("#citetoolbar-"+CiteTB.escStr(template.shortform));
+
   var div = $("#citetoolbar-"+CiteTB.escStr(template.shortform));
 
   var setting = div.find(".cite-form-status").val();
 
   var setting = div.find(".cite-form-status").val();
   if ( setting == 'closed' ) {
+
   if ( setting === 'closed' ) {
 
     div.find(".cite-form-status").val('open');
 
     div.find(".cite-form-status").val('open');
 
     div.find('.cite-extra-fields').show(1, function() {
 
     div.find('.cite-extra-fields').show(1, function() {
694번째 줄: 817번째 줄:
 
     });
 
     });
 
   } else {
 
   } else {
     div.find(".cite-form-status").val('closed')
+
     div.find(".cite-form-status").val('closed');
 
     div.find('.cite-extra-fields').hide();
 
     div.find('.cite-extra-fields').hide();
 
   }  
 
   }  
}
+
};
  
 +
// Resets form fields and previews
 
// Resets form fields and previews
 
// Resets form fields and previews
 
CiteTB.resetForm = function() {
 
CiteTB.resetForm = function() {
 
   var template = CiteTB.getOpenTemplate();
 
   var template = CiteTB.getOpenTemplate();
   var div = $j("#citetoolbar-"+CiteTB.escStr(template.shortform));
+
   var div = $("#citetoolbar-"+CiteTB.escStr(template.shortform));
   div.find('.cite-preview-label').hide();
+
   div.html(template.getForm());
  div.find('.cite-ref-preview').text('').hide();
+
};
  div.find('.cite-prev-parsed-label').hide();
 
  div.find('.cite-preview-parsed').html('');
 
  div.find('.cite-prev-parse').hide();
 
  var id = CiteTB.escStr(template.shortform);
 
  $j('#citetoolbar-'+id+' input[type=text]').val('');
 
}
 
  
 
// STRING UTILITY FUNCTIONS
 
// STRING UTILITY FUNCTIONS
 
// Returns a string quoted as necessary for name/group attributes
 
// Returns a string quoted as necessary for name/group attributes
 
CiteTB.getQuotedString = function(s) {
 
CiteTB.getQuotedString = function(s) {
  var sp = /\s/.test(s); // spaces
 
 
   var sq = /\'/.test(s); // single quotes
 
   var sq = /\'/.test(s); // single quotes
 
   var dq = /\"/.test(s); // double quotes
 
   var dq = /\"/.test(s); // double quotes
   if (!sp && !sq && !dq) { // No quotes necessary
+
   if (!sq && !dq) { // Always quotes for non-latin alphabet
     return s;
+
     return '"'+s+'"';
 
   } else if (!dq) { // Can use double quotes
 
   } else if (!dq) { // Can use double quotes
 
     return '"'+s+'"';
 
     return '"'+s+'"';
725번째 줄: 842번째 줄:
 
     return "'"+s+"'";
 
     return "'"+s+"'";
 
   } else { // Has double and single quotes
 
   } else { // Has double and single quotes
     s = s.replace(/\"/g, '\"');
+
     s = s.replace(/\"/g, '\'');
 
     return '"'+s+'"';
 
     return '"'+s+'"';
 
   }
 
   }
}  
+
};
 +
 
 
// Fix up strings for output - capitalize first char, replace underscores with spaces
 
// Fix up strings for output - capitalize first char, replace underscores with spaces
 
CiteTB.fixStr = function(s) {
 
CiteTB.fixStr = function(s) {
734번째 줄: 852번째 줄:
 
   s = s.replace('_',' ');
 
   s = s.replace('_',' ');
 
   return s;
 
   return s;
}
+
};
 +
 
 
// Escape spaces and quotes for use in HTML classes/ids
 
// Escape spaces and quotes for use in HTML classes/ids
 
CiteTB.escStr = function(s) {
 
CiteTB.escStr = function(s) {
 
   return s.replace(' ', '-').replace("'", "\'").replace('"', '\"');
 
   return s.replace(' ', '-').replace("'", "\'").replace('"', '\"');
}
+
};
  
 
// MISC FUNCTIONS
 
// MISC FUNCTIONS
 
// Determine which template form is open, and get the template object for it
 
// Determine which template form is open, and get the template object for it
 
CiteTB.getOpenTemplate = function() {
 
CiteTB.getOpenTemplate = function() {
   var dialogs = $j(".ui-dialog-content.ui-widget-content:visible");
+
   var dialogs = $(".ui-dialog-content.ui-widget-content:visible");
   var templatename = $j(dialogs[0]).find(".cite-template").val();
+
   var templatename = $(dialogs[0]).find(".cite-template").val();
  var template = null;
 
 
   return CiteTB.Templates[templatename];
 
   return CiteTB.Templates[templatename];
}
+
};
  
 
// Display the report for the error checks
 
// Display the report for the error checks
 
CiteTB.displayErrors = function(errors) {
 
CiteTB.displayErrors = function(errors) {
   $j('#cite-err-report').remove();
+
   $('#cite-err-report').remove();
   var table = $j('<table id="cite-err-report" style="width:100%; border:1px solid #A9A9A9; background-color:#FFEFD5; padding:0.25em; margin-top:0.5em" />');
+
   var table = $('<table id="cite-err-report" style="width:100%; border:1px solid #A9A9A9; background-color:#FFEFD5; padding:0.25em; margin-top:0.5em" />');
   $j('#editpage-copywarn').before(table);
+
   $('#editpage-copywarn').before(table);
   var tr1 = $j('<tr style="width:100%" />');
+
  var tr;
   var th1 = $j('<th style="width:60%; font-size:110%" />').html(mw.usability.getMsg('cite-err-report-heading'));
+
   var tr1 = $('<tr style="width:100%" />');
   var th2 = $j('<th style="text-align:right; width:40%" />');
+
   var th1 = $('<th style="width:60%; font-size:110%" />').html(mw.usability.getMsg('cite-err-report-heading'));
   im = $j('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/5/55/Gtk-stop.svg/20px-Gtk-stop.svg.png');
+
   var th2 = $('<th style="text-align:right; width:40%" />');
 +
   var im = $('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/5/55/Gtk-stop.svg/20px-Gtk-stop.svg.png');
 
   im.attr('alt', mw.usability.getMsg('cite-err-report-close')).attr('title', mw.usability.getMsg('cite-err-report-close'));
 
   im.attr('alt', mw.usability.getMsg('cite-err-report-close')).attr('title', mw.usability.getMsg('cite-err-report-close'));
   var ad = $j('<a id="cite-err-check-close" />').attr('href', '#');
+
   var ad = $('<a id="cite-err-check-close" />').attr('href', '#');
 
   ad.append(im);
 
   ad.append(im);
 
   th2.append(ad);
 
   th2.append(ad);
 
   tr1.append(th1).append(th2);
 
   tr1.append(th1).append(th2);
 
   table.append(tr1);
 
   table.append(tr1);
   $j('#cite-err-check-close').bind('click', function() {  $j('#cite-err-report').remove(); });
+
   $('#cite-err-check-close').bind('click', function() {  $('#cite-err-report').remove(); });
   if (errors.length == 0) {
+
   if (errors.length === 0) {
     var tr = $j('<tr style="width:100%;" />');
+
     tr = $('<tr style="width:100%;" />');
     var td = $j('<td style="text-align:center; margin:1.5px;" />').html(mw.usability.getMsg('cite-err-report-empty'));
+
     var td = $('<td style="text-align:center; margin:1.5px;" />').html(mw.usability.getMsg('cite-err-report-empty'));
 
     tr.append(td);
 
     tr.append(td);
 
     table.append(tr);
 
     table.append(tr);
775번째 줄: 894번째 줄:
 
   for(var e in errors) {
 
   for(var e in errors) {
 
     var err = errors[e];
 
     var err = errors[e];
     var tr = $j('<tr style="width:100%;" />');
+
     tr = $('<tr style="width:100%;" />');
     var td1 = $j('<td style="border: 1px solid black; margin:1.5px; width:60%" />').html(err.err);
+
     var td1 = $('<td style="border: 1px solid black; margin:1.5px; width:60%" />').html(err.err);
     var td2 = $j('<td style="border: 1px solid black; margin:1.5px; width:40%" />').html(mw.usability.getMsg(err.msg));
+
     var td2 = $('<td style="border: 1px solid black; margin:1.5px; width:40%" />').html(mw.usability.getMsg(err.msg));
 
     tr.append(td1).append(td2);
 
     tr.append(td1).append(td2);
 
     table.append(tr);
 
     table.append(tr);
 
   }
 
   }
}
+
};
 
    
 
    
 
} // End of code loaded only on edit
 
} // End of code loaded only on edit

2017년 6월 9일 (금) 11:41 판

/*jshint smarttabs:true, loopfunc:true,forin:false*/
/*global mw, $, importScript */
// TODO: make autodate an option in the CiteTemplate object, not a preference

// Global object
// TODO:
// * Remove this once the page is moved to a module 'ext.gadget.refToolbarDialogs' depending on 'ext.gadget.refToolbarBase'
if (typeof CiteTB === 'undefined') {
  var CiteTB = {
    "Templates" : {}, // All templates
    "Options" : {}, // Global options
    "UserOptions" : {}, // User options
    "DefaultOptions" : {}, // Script defaults
    "ErrorChecks" : {} // Error check functions
  };
}

// Only execute on edit, unless it is a user JS/CSS page
// TODO: Remove tests already done by [[MediaWiki:Gadget-refToolbar.js]]
if (
	( mw.config.get('wgAction') === 'edit' || mw.config.get('wgAction') === 'submit' ) &&
	( ( mw.config.get('wgNamespaceNumber') !== 2 && mw.config.get('wgNamespaceNumber') !== 4 ) ||
	( mw.config.get('wgPageName').indexOf('.js') === -1 && mw.config.get('wgPageName').indexOf('.css') === -1 ) )
) {

// TODO: Move this to [[MediaWiki:Gadget-refToolbarDialogs.css]] and add it to the definition of module 'ext.gadget.refToolbarDialogs'
mw.util.addCSS(".cite-form-td {"+
"height: 0 !important;"+
"padding: 0.1em !important;"+
"}");  

// Default options, these mainly exist so the script won't break if a new option is added
CiteTB.DefaultOptions = {
  "date format" : "<year>-<zmonth>-<zdate>",
  "autodate fields" : [],
  "months" : ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
  "modal" : true,
  "autoparse" : false,
  "expandtemplates": false
};

// Get an option - user settings override global which override defaults
CiteTB.getOption = function(opt) {
  if (CiteTB.UserOptions[opt] !== undefined) {
    return CiteTB.UserOptions[opt];
  } else if (CiteTB.Options[opt] !== undefined) {
    return CiteTB.Options[opt];
  }
  return CiteTB.DefaultOptions[opt];
};

CiteTB.init = function() {
  /* Main stuff, build the actual toolbar structure
   * 1. get the template list, make the dropdown list and set up the template dialog boxes
   * 2. actually build the toolbar:
   *    * A section for cites
   *    ** dropdown for the templates (previously defined)
   *    ** button for named refs with a dialog box
   *    ** button for errorcheck
   * 3. add the whole thing to the main toolbar
  */

  if (typeof $('div[rel=cites]')[0] !== 'undefined') { // Mystery IE bug workaround
    return;
  }
  $('head').trigger('reftoolbarbase');
  var $target = $('#wpTextbox1');
  var temlist = {};
  for (var t in CiteTB.Templates) {
    var tem = CiteTB.Templates[t];
    var sform = CiteTB.escStr(tem.shortform);
    var actionobj = { 
      type: 'dialog',
      module: 'cite-dialog-'+sform
    };
    var dialogobj = {};
    dialogobj['cite-dialog-'+sform] = {
      resizeme: false,
      titleMsg: 'cite-dialog-'+sform, 
      id: 'citetoolbar-'+sform,
      init: function() {}, 
      html: tem.getInitial(), 
      dialog: {
        width:675,
        open: function() { 
          $(this).html(CiteTB.getOpenTemplate().getForm());
          /** @param {jQuery.Event} e */
          $('.cite-prev-parse').bind( 'click', function ( e ) {
            e.preventDefault();
            CiteTB.prevParseClick();
          });
        },
        buttons: {
          'cite-form-submit': function() {
            var ref = CiteTB.getRef(false, true);
            $(this).dialog( 'close' );
            $.wikiEditor.modules.toolbar.fn.doAction( $(this).data( 'context' ), {
              type: 'encapsulate',
              options: {
                post: ref
              }
            }, $(this) );
          },
          'cite-form-showhide': CiteTB.showHideExtra,
          'cite-refpreview': function() {   
            var ref = CiteTB.getRef(false, false);
            var template = CiteTB.getOpenTemplate();
            var div = $("#citetoolbar-"+CiteTB.escStr(template.shortform));
            div.find('.cite-preview-label').show();
            div.find('.cite-ref-preview').text(ref).show();
            if (CiteTB.getOption('autoparse')) {
              CiteTB.prevParseClick();
            } else {
              div.find('.cite-prev-parse').show();
              div.find('.cite-prev-parsed-label').hide();
              div.find('.cite-preview-parsed').html('');
            }         
          },
          'wikieditor-toolbar-tool-link-cancel': function() {
            $(this).dialog( 'close' );
          },
          'cite-form-reset': function() {
            CiteTB.resetForm();
          }
        }
      } 
    };
    $target.wikiEditor('addDialog', dialogobj);
    //if (!CiteTB.getOption('modal')) {
      //$('#citetoolbar-'+sform).dialog('option', 'modal', false);
    //}
    temlist[sform] = {label: tem.templatename, action: actionobj };  
  }

  var refsection =  {
    'sections': {
      'cites': { 
        type: 'toolbar', 
        labelMsg: 'cite-section-label',
        groups: { 
          'template': {
            tools: {
              'template': {
                type: 'select',
                labelMsg: 'cite-template-list',
                list: temlist
              } 
            }
          },
          'namedrefs': {
            labelMsg: 'cite-named-refs-label',
            tools: {
              'nrefs': {
                type: 'button',
                action: {
                  type: 'dialog',
                  module: 'cite-toolbar-namedrefs'
                },
                icon: '//upload.wikimedia.org/wikipedia/commons/thumb/b/be/Nuvola_clipboard_lined.svg/22px-Nuvola_clipboard_lined.svg.png',
                section: 'cites',
                group: 'namedrefs',
                labelMsg: 'cite-named-refs-button'
              }
            }
          },
          'errorcheck': {
            labelMsg: 'cite-errorcheck-label',
            tools: {
              'echeck': {
                type: 'button',
                action: {
                  type: 'dialog',
                  module: 'cite-toolbar-errorcheck'           
                },
                icon: '//upload.wikimedia.org/wikipedia/commons/thumb/a/a3/Nuvola_apps_korganizer-NO.png/22px-Nuvola_apps_korganizer-NO.png',
                section: 'cites',
                group: 'errorcheck',
                labelMsg: 'cite-errorcheck-button'
              }
            }
          }
        } 
      } 
    } 
  };
  
  var defaultdialogs = { 
    'cite-toolbar-errorcheck': {
      titleMsg: 'cite-errorcheck-label',
      id: 'citetoolbar-errorcheck',
      resizeme: false,
      init: function() {},
      html: '<div id="cite-namedref-loading">'+
        '<img src="//upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif" />'+
        '&nbsp;'+mw.usability.getMsg('cite-loading')+'</div>',
      dialog: {
        width:550,
        open: function() { 
          CiteTB.loadRefs();
        },
        buttons: {
          'cite-errorcheck-submit': function() {
            var errorchecks = $("input[name='cite-err-test']:checked");
            var errors = [];
            for (var i=0; i<errorchecks.length; i++) {
              errors = errors.concat(CiteTB.ErrorChecks[$(errorchecks[i]).val()].run());
            }
            CiteTB.displayErrors(errors);
            $(this).dialog( 'close' );                      
          },
          'wikieditor-toolbar-tool-link-cancel': function() {
            $(this).dialog( 'close' );
          }
        }
      }
    },
    'cite-toolbar-namedrefs': {
      titleMsg: 'cite-named-refs-title',
      resizeme: false,
      id: 'citetoolbar-namedrefs',
      html: '<div id="cite-namedref-loading">'+
        '<img src="//upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif" />'+
        '&nbsp;'+mw.usability.getMsg('cite-loading')+'</div>',
      init: function() {},
      dialog: {
        width: 550,
        open: function() { 
          CiteTB.loadRefs();
        },
        buttons: {
          'cite-form-submit': function() {
            var refname = $("#cite-namedref-select").val();
            if (refname === '') {
              return;
            }
            $(this).dialog( 'close' );
            $.wikiEditor.modules.toolbar.fn.doAction( $(this).data( 'context' ), {
              type: 'encapsulate',
              options: {
                post: CiteTB.getNamedRef(refname, true)
              }
            }, $(this) );
          },
          'wikieditor-toolbar-tool-link-cancel': function() {
            $(this).dialog( 'close' );
          }                   
        }
      }      
    }
  };
  
  $target.wikiEditor('addDialog', defaultdialogs);
  $('#citetoolbar-namedrefs').unbind('dialogopen');
  if (!CiteTB.getOption('modal')) {
    //$('#citetoolbar-namedrefs').dialog('option', 'modal', false);
    //$('#citetoolbar-errorcheck').dialog('option', 'modal', false);
    mw.util.addCSS(".ui-widget-overlay {"+
    "display:none !important;"+
    "}");  
  }
  $target.wikiEditor('addToToolbar', refsection);
};

// Load local data - messages, cite templates, etc.
$(document).ready( function() {
  switch( mw.config.get('wgUserLanguage') ) {
    case 'de': // German
      importScript('MediaWiki:RefToolbarMessages-de.js');
      break;
    default: // English
      importScript('MediaWiki:RefToolbarMessages-en.js');
  }
});

// Setup the main object
CiteTB.mainRefList = [];
CiteTB.refsLoaded = false;

// REF FUNCTIONS
// Actually assemble a ref from user input
CiteTB.getRef = function(inneronly, forinsert) {
  var i;
  var template = CiteTB.getOpenTemplate();
  var templatename = template.templatename;
  var res = '';
  var refobj = {'shorttag':false};
  if (!inneronly) {
    var group = $('#cite-'+CiteTB.escStr(template.shortform)+'-group').val();
    var refname = $('#cite-'+CiteTB.escStr(template.shortform)+'-name').val();
    res += '<ref';
    if (refname) {
      refname = $.trim(refname);
      res+=' name='+CiteTB.getQuotedString(refname);
      refobj.refname = refname;
    }
    if (group) {
      group = $.trim(group);
      res+=' group='+CiteTB.getQuotedString(group);
      refobj.refgroup = group;
    }
    res+='>';
  }
  var content ='{{'+templatename;
  for( g in template.incrementables ) {
  	group = template.incrementables[g];
  	for (i=1; i<=group.val; i++) {
		for (j=0; j<group.fields.length; j++) {
  			var fieldname = group.fields[j].field;
  			var fieldid = fieldname.replace('<N>', i.toString());
  			var field = $('#cite-'+CiteTB.escStr(template.shortform)+'-'+fieldid).val();
  			if (field) {
  				content+='|'+fieldid+'=';
  				content+= $.trim(field);
  			}
  		}
  	}
  }
  for( i=0; i<template.basic.length; i++ ) {
  	if (template.basic[i].increment_group) {
  		continue;
  	}
    var fieldname = template.basic[i].field;
    var field = $('#cite-'+CiteTB.escStr(template.shortform)+'-'+fieldname).val();
    if (field) {
      content+='|'+fieldname+'=';
      content+= $.trim(field);
    }
  }
  if ($('#cite-form-status').val() !== 'closed') {
    for( i=0; i<template.extra.length; i++ ) {
      if (template.extra[i].increment_group) {
        continue;
      }
      var fieldname = template.extra[i].field;
      var field = $('#cite-'+CiteTB.escStr(template.shortform)+'-'+fieldname).val();
      if (field) {
        content+='|'+fieldname+'=';
        content+= $.trim(field);
      }
    }
  }
  content+= '}}';
  res+=content;
  refobj.content = content;
  if (!inneronly) {
    res+= '</ref>';
  }
  if (forinsert) {
    CiteTB.mainRefList.push(refobj);
  }
  return res;
};

// Make a reference to a named ref
CiteTB.getNamedRef = function(refname, forinsert) {
  if (forinsert) {
    CiteTB.mainRefList.push( {'shorttag':true, 'refname':refname} );
  }
  return '<ref name='+CiteTB.getQuotedString(refname)+' />';  
};

// Function to load the ref list
CiteTB.loadRefs = function() {
  if (CiteTB.refsLoaded) {
    return;
  }
  CiteTB.getPageText(CiteTB.loadRefsInternal);
};

// Function that actually loads the list from the page text
CiteTB.loadRefsInternal = function(text) { 
  // What this does:             extract first name/group                                     extract second name/group                                          shorttag   inner content
  var refsregex = /< *ref(?: +(name|group) *= *(?:"([^"]*?)"|'([^']*?)'|([^ '"\/\>]*?)) *)? *(?: +(name|group) *= *(?:"([^"]*?)"|'([^']*?)'|([^ '"\/\>]*?)) *)? *(?:\/ *>|>((?:.|\n)*?)< *\/ *ref *>)/gim;
  // This should work regardless of the quoting used for names/groups and for linebreaks in the inner content  
  while (true) {
    var ref = refsregex.exec(text);
    if (ref === null) {
      break;
    }
    var refobj = {};
    if (ref[9]) { // Content + short tag check
      //alert('"'+ref[9]+'"');
      refobj.content = ref[9]; 
      refobj.shorttag = false;
    } else {
      refobj.shorttag = true;
    }
    if (ref[1] !== '') { // First name/group
      if (ref[2]) {
        refobj['ref'+ref[1]] = ref[2];
      } else if (ref[3]) {
        refobj['ref'+ref[1]] = ref[3];
      } else {
        refobj['ref'+ref[1]] = ref[4];
      }
    }
    if (ref[5] !== '') { // Second name/group
      if (ref[6]) {
        refobj['ref'+ref[5]] = ref[6];
      } else if (ref[7]) {
        refobj['ref'+ref[5]] = ref[7];
      } else {
        refobj['ref'+ref[5]] = ref[8];
      }
    }
    CiteTB.mainRefList.push(refobj);
  }
  CiteTB.refsLoaded = true;
  CiteTB.setupErrorCheck();
  CiteTB.setupNamedRefs();
};

// AJAX FUNCTIONS
// Parse some wikitext and hand it off to a callback function
CiteTB.parse = function(text, callback) {
  $.post( mw.util.wikiScript( 'api' ),
    {action:'parse', title:mw.config.get('wgPageName'), text:text, prop:'text', format:'json'},
    function(data) {
      var html = data.parse.text['*'];
      callback(html);
    },
    'json'
  );  
};

// Use the API to expand templates on some text
CiteTB.expandtemplates = function(text, callback) {
  $.post( mw.util.wikiScript( 'api' ),
    {action:'expandtemplates', title:mw.config.get('wgPageName'), text:text, format:'json'},
    function(data) {
      var restext = data.expandtemplates['*'];
      callback(restext);
    },
    'json'
  );
};

// Function to get the page text
CiteTB.getPageText = function(callback) {
  var section = $("input[name='wpSection']").val();
  if ( section !== '' ) {
    var postdata = {action:'query', prop:'revisions', rvprop:'content', pageids:mw.config.get('wgArticleId'), format:'json'};
    if (CiteTB.getOption('expandtemplates')) {
      postdata.rvexpandtemplates = '1';
    }
    $.get( mw.util.wikiScript( 'api' ),
      postdata,
      function(data) {
        var pagetext = data.query.pages[mw.config.get('wgArticleId').toString()].revisions[0]['*'];
        callback(pagetext);
      },
      'json'
    );
  } else {
    if (CiteTB.getOption('expandtemplates')) {
      CiteTB.expandtemplates($('#wpTextbox1').wikiEditor('getContents').text(), callback);
    } else {
      callback($('#wpTextbox1').wikiEditor('getContents').text());
    }
  }
};

// Autofill a template from an ID (ISBN, DOI, PMID, URL)
CiteTB.initAutofill = function() {
  var elemid = $(this).attr('id');
  var res = /^cite\-auto\-(.*?)\-(.*)\-(.*)$/.exec(elemid);
  var tem = res[1];
  var field = res[2];
  var autotype = res[3];
  var id = $('#cite-'+tem+'-'+field).val();
  if (!id) {
    return false;
  }
  var url = '//tools.wmflabs.org/reftoolbar/lookup.php?';
  url+=autotype+'='+encodeURIComponent(id);
  url+='&template='+encodeURIComponent(tem);
  var s = document.createElement('script');
  s.setAttribute('src', url);
  s.setAttribute('type', 'text/javascript');
  document.getElementsByTagName('head')[0].appendChild(s);
  return false;
};

// Callback for autofill
//TODO: Autofill the URL, at least for DOI
CiteTB.autoFill = function(data, template, type) {
  var cl = 'cite-'+template+'-';
  var i,j, coauthors;
  $('.'+cl+'title').val(data.title);
  // Fill in authors
  if (data.authors && data.authors.length > 0) {
	  if ($('.'+cl+'last-incr-1').length != 0) {
		var classes = $('.'+cl+'last-incr-1').eq(0).attr('class').split(/\s+/);
		var group = false;
		var patt = /cite-[^-]*?-incr-(.*)/
		for (var c=0; c<classes.length; c++) {
			if (patt.exec(classes[c])) {
				group = patt.exec(classes[c])[1];
				break;
			}
		}
		$('.'+cl+'last-incr-1').val(data.authors[0][0])
		$('.'+cl+'first-incr-1').val(data.authors[0][1])
		elemid = '#cite-incr-'+template+'-'+group;
		for (var i=2; i<data.authors.length+1; i++) {
			$(elemid).click();
			$('.'+cl+'last-incr-'+i.toString()).val(data.authors[i-1][0])
			$('.'+cl+'first-incr-'+i.toString()).val(data.authors[i-1][1])
		}
	  } else if ($('.'+cl+'author-incr-1').length != 0) {
		var classes = $('.'+cl+'author-incr-1').eq(0).attr('class').split(/\s+/);
		var group = false;
		var patt = /cite-[^-]*?-incr-(.*)/
		for (var c=0; c<classes.length; c++) {
			if (patt.exec(classes[c])) {
				group = patt.exec(classes[c])[1];
				break;
			}
		}
		$('.'+cl+'author-incr-1').val(data.authors[0].join(', '))
		elemid = '#cite-incr-'+template+'-'+group;
		for (var i=2; i<data.authors.length+1; i++) {
			$(elemid).click();
			$('.'+cl+'author-incr-'+i.toString()).val(data.authors[i-1].join(', '))
		}
	  } else if ($('.'+cl+'last1').length != 0) {
		for(i=0; data.authors && i<data.authors.length; i++) {
		  if ($('.'+cl+'last'+(i+1)).length) {
			 $('.'+cl+'last'+(i+1)).val(data.authors[i][0]);
			 $('.'+cl+'first'+(i+1)).val(data.authors[i][1]);
		  } else {
			coauthors = [];
			for(j=i; j<data.authors.length; j++) {
			  coauthors.push(data.authors[j].join(', '));
			}
			$('.'+cl+'coauthors').val(coauthors.join('; '));
			break;
		  }
		}
	  } else if($('.'+cl+'author1').length !== 0) {
		for(i=0; data.authors && i<data.authors.length; i++) {
		  if ($('.'+cl+'author'+(i+1)).length) {
			 $('.'+cl+'author'+(i+1)).val(data.authors[i].join(', '));
		  } else {
			coauthors = [];
			for(j=i; j<data.authors.length; j++) {
			  coauthors.push(data.authors[j].join(', '));
			}
			$('.'+cl+'coauthors').val(coauthors.join('; '));
			break;
		  }
		}
	  } else {
		var authors = [];
		for(i=0; data.authors && i<data.authors.length; i++) {
		  authors.push(data.authors[i].join(', '));
		}
		$('.'+cl+'authors').val(authors.join('; '));
	  }
  }

  if (type === 'pmid' || type === 'doi') {
    if (data.date && (data.fulldate || !$('.'+cl+'month').length)) {
      var DT = new Date(data.date);
      var useday = /\d{4}-\d{2}-\d{2}/.test(data.date);
      var usemonth = /\d{4}-\d{2}/.test(data.date);
      $('.'+cl+'date').val(CiteTB.formatDate(DT, useday, usemonth));
    } else if (!data.fulldate && $('.'+cl+'month').length && $('.'+cl+'year').length) {
      if (data.month) { // lookup.php sets month to false if it isn't provided
        $('.'+cl+'month').val( CiteTB.getOption('months')[parseInt(data.month)-1] );
      }
      $('.'+cl+'year').val(data.year);
    } else {
      $('.'+cl+'date').val(data.date);
    }
    $('.'+cl+'journal').val(data.journal);
    $('.'+cl+'volume').val(data.volume);
    $('.'+cl+'issue').val(data.issue);
    $('.'+cl+'pages').val(data.pages);
  } else if (type === 'isbn') {
    $('.'+cl+'publisher').val(data.publisher);
    $('.'+cl+'location').val(data.location);
    $('.'+cl+'year').val(data.year);
    $('.'+cl+'edition').val(data.edition);
  } else if (type === 'url') {
    if (data.date) {
  	  var DT = new Date(data.date);
      var useday = /\d{4}-\d{2}-\d{2}/.test(data.date) && template !== 'book';
      var usemonth = /\d{4}-\d{2}/.test(data.date) && template !== 'book';
      var yearOrDate = (template === 'book') ? 'year' : 'date';
      $('.'+cl+yearOrDate).val(CiteTB.formatDate(DT, useday, usemonth));
    }
    $('.'+cl+'journal').val(data.journal);
    $('.'+cl+'volume').val(data.volume);
    $('.'+cl+'issue').val(data.issue);
    $('.'+cl+'pages').val(data.pages);
    $('.'+cl+'publisher').val(data.publisher);
    $('.'+cl+'edition').val(data.edition);
    $('.'+cl+'isbn').val(data.isbn);
    $('.'+cl+'issn').val(data.issn);
    $('.'+cl+'doi').val(data.doi);
    // "en-US" isn't a valid value for the language parameter
    if (data.language && data.language !== 'en-US' && data.language !== 'en-GB') {
    	$('.'+cl+'language').val(data.language);
    }
    $('.'+cl+'chapter').val(data.chapter);
  }
};

// FORM DIALOG FUNCTIONS
// Add new incrementable fields
CiteTB.incrementFields = function() {
	template = CiteTB.getOpenTemplate();
	var currentrow = $(this).parents('tr')[0];
	$(this).prev().css('width', '100%')
	$(this).detach();
	var elemid = $(this).attr('id');
	var res = /^cite\-incr\-(.*?)\-(.*)$/.exec(elemid);
	group = res[2];
	increments = template.incrementables[group];
	fields = increments.fields;
	incrval = increments.val+1;
	template.incrementables[group].val += 1;
	trs = template.makeFormInner(fields, false);
	trs.reverse();
	for (var i=0; i<trs.length; i++) {
		$(currentrow).after(trs[i]);
	}
};

// fill the accessdate param with the current date
CiteTB.fillAccessdate = function() {
  var elemid = $(this).attr('id');
  var res = /^cite\-date\-(.*?)\-(.*)$/.exec(elemid);
  var id = res[1];
  var field = res[2];
  var DT = new Date();
  var datestr = CiteTB.formatDate(DT);
  $('#cite-'+id+'-'+field).val(datestr);
  return false;
};

CiteTB.formatDate = function(DT, useday, usemonth) {
  if (typeof useday == "undefined") {
    useday = true;	
  }
  if (typeof usemonth == "undefined") {
    usemonth = true;	
  }
  var datestr = CiteTB.getOption('date format');
  var zmonth = '';
  var month = DT.getUTCMonth()+1;
  if (month < 10) {
    zmonth = "0"+month.toString();
  } else {
    zmonth = month.toString();
  }
  month = month.toString();
  var zdate = '';
  var date = DT.getUTCDate();
  if (date < 10) {
    zdate = "0"+date.toString();
  } else {
    zdate = date.toString();
  }
  date = date.toString();
  if (useday) {
    datestr = datestr.replace('<date>', date);
    datestr = datestr.replace('<zdate>', zdate);
  } else {
    datestr = datestr.replace('<date>', '');
    datestr = datestr.replace('<zdate>', '');
  }
  if (usemonth) {
    datestr = datestr.replace('<month>', month);
    datestr = datestr.replace('<zmonth>', zmonth);
    datestr = datestr.replace('<monthname>', CiteTB.getOption('months')[DT.getUTCMonth()]);
  } else {
    datestr = datestr.replace('<month>', '');
    datestr = datestr.replace('<zmonth>', '');
    datestr = datestr.replace('<monthname>', '');
  }  
  datestr = datestr.replace('<year>', DT.getUTCFullYear().toString());
  return datestr.replace(/^[ \/\-\,\.]*(.*?)[ \/\-\,\.]*$/g, "$1"); // Cleanup any dangling spaces or connectors that might result from omitting date/month
};

// Function called after the ref list is loaded, to actually set the contents of the named ref dialog
// Until the list is loaded, its just a "Loading" placeholder
CiteTB.setupNamedRefs = function() {
  var names = [], i;
  for( i=0; i<CiteTB.mainRefList.length; i++) {
    if (!CiteTB.mainRefList[i].shorttag && CiteTB.mainRefList[i].refname) {
      names.push(CiteTB.mainRefList[i]);
    }
  }
  var stuff = $('<div>');
  $('#citetoolbar-namedrefs').html( stuff );
  if (names.length === 0) {
    stuff.html(mw.usability.getMsg('cite-no-namedrefs'));
  } else {
    stuff.html(mw.usability.getMsg('cite-namedrefs-intro'));
    var select = $('<select id="cite-namedref-select">');
    select.append($('<option value="" />').text(mw.usability.getMsg('cite-named-refs-dropdown')));
    for(i=0; i<names.length; i++) {
      select.append($('<option />').text(names[i].refname));
    }
    stuff.after(select);
    select.before('<br />');      
    var prevlabel = $('<div id="cite-nref-preview-label" style="display:none;" />').html(mw.usability.getMsg('cite-raw-preview'));
    select.after(prevlabel);
    prevlabel.before("<br /><br />");
    prevlabel.after('<div id="cite-namedref-preview" style="padding:0.5em; font-size:110%" />');
    var parselabel = $('<span id="cite-parsed-label" style="display:none;" />').html(mw.usability.getMsg('cite-parsed-label'));
    $('#cite-namedref-preview').after(parselabel);
    parselabel.after('<div id="cite-namedref-parsed" style="padding-bottom:0.5em; font-size:110%" />');
    var link = $('<a href="#" id="cite-nref-parse" style="margin:0 1em 0 1em; display:none; color:darkblue" />');
    link.html(mw.usability.getMsg('cite-form-parse'));
    $('#cite-namedref-parsed').after(link);
    
    $("#cite-namedref-select").bind( 'change', CiteTB.namedRefSelectClick);
    $('#cite-nref-parse').bind( 'click', CiteTB.nrefParseClick);
  }      
};

// Function to get the errorcheck form HTML
CiteTB.setupErrorCheck = function() {
  var form = $('<div id="cite-errorcheck-heading" />').html(mw.usability.getMsg('cite-errorcheck-heading'));
  var ul = $("<ul id='cite-errcheck-list' />");
  var test;
  for (var t in CiteTB.ErrorChecks) {
    test = CiteTB.ErrorChecks[t];
    ul.append(test.getRow());
  }
  form.append(ul);
  $('#citetoolbar-errorcheck').html(form);
};

// Callback function for parsed preview
CiteTB.fillNrefPreview = function(parsed) {
  $('#cite-parsed-label').show();
  $('#cite-namedref-parsed').html(parsed);
};

// Click handler for the named-ref parsed preview
CiteTB.nrefParseClick = function() {
  var choice = $("#cite-namedref-select").val();
  if (choice === '') {
    $('#cite-parsed-label').hide();
    $('#cite-namedref-parsed').text('');
    return false;
  }
  $('#cite-nref-parse').hide();
  for( var i=0; i<CiteTB.mainRefList.length; i++) {
    if (!CiteTB.mainRefList[i].shorttag && CiteTB.mainRefList[i].refname == choice) {
      CiteTB.parse(CiteTB.mainRefList[i].content, CiteTB.fillNrefPreview);
      return false;
    }
  }  
};

// Click handler for the named-ref dropdown
CiteTB.lastnamedrefchoice = '';
CiteTB.namedRefSelectClick = function() {
  var choice = $("#cite-namedref-select").val();
  if (CiteTB.lastnamedrefchoice == choice) {
    return;
  }
  CiteTB.lastnamedrefchoice = choice;
  $('#cite-parsed-label').hide();
  $('#cite-namedref-parsed').text('');
  if (choice === '') {
    $('#cite-nref-preview-label').hide();
    $('#cite-namedref-preview').text('');
    $('#cite-nref-parse').hide();
    return;
  }
  for( var i=0; i<CiteTB.mainRefList.length; i++) {
    if (!CiteTB.mainRefList[i].shorttag && CiteTB.mainRefList[i].refname == choice) {
      $('#cite-nref-preview-label').show();
      $('#cite-namedref-preview').text(CiteTB.mainRefList[i].content);
      if (CiteTB.getOption('autoparse')) {
        CiteTB.nrefParseClick();
      } else {
        $('#cite-nref-parse').show();
      }
    }
  }
};

// callback function for parsed preview
CiteTB.fillTemplatePreview = function(text) {
  var template = CiteTB.getOpenTemplate();
  var div = $("#citetoolbar-"+CiteTB.escStr(template.shortform));
  div.find('.cite-prev-parsed-label').show();
  div.find('.cite-preview-parsed').html(text);
};

// Click handler for template parsed preview
CiteTB.prevParseClick = function() {
  var ref = CiteTB.getRef(true, false);
  var template = CiteTB.getOpenTemplate();
  var div = $("#citetoolbar-"+CiteTB.escStr(template.shortform));
  div.find('.cite-prev-parse').hide();
  CiteTB.parse(ref, CiteTB.fillTemplatePreview);
};

// Show/hide the extra fields in the dialog box
CiteTB.showHideExtra = function() {
  var template = CiteTB.getOpenTemplate();
  var div = $("#citetoolbar-"+CiteTB.escStr(template.shortform));
  var setting = div.find(".cite-form-status").val();
  if ( setting === 'closed' ) {
    div.find(".cite-form-status").val('open');
    div.find('.cite-extra-fields').show(1, function() {
      // jQuery adds "display:block", which screws things up
      div.find('.cite-extra-fields').attr('style', 'width:100%; background-color:transparent;'); 
    });
  } else {
    div.find(".cite-form-status").val('closed');
    div.find('.cite-extra-fields').hide();
  } 
};

// Resets form fields and previews
// Resets form fields and previews
CiteTB.resetForm = function() {
  var template = CiteTB.getOpenTemplate();
  var div = $("#citetoolbar-"+CiteTB.escStr(template.shortform));
  div.html(template.getForm());
};

// STRING UTILITY FUNCTIONS
// Returns a string quoted as necessary for name/group attributes
CiteTB.getQuotedString = function(s) {
  var sq = /\'/.test(s); // single quotes
  var dq = /\"/.test(s); // double quotes
  if (!sq && !dq) { // Always quotes for non-latin alphabet
    return '"'+s+'"';
  } else if (!dq) { // Can use double quotes
    return '"'+s+'"';
  } else if (!sq) { // Can use single quotes
    return "'"+s+"'";
  } else { // Has double and single quotes
    s = s.replace(/\"/g, '\'');
    return '"'+s+'"';
  }
};

// Fix up strings for output - capitalize first char, replace underscores with spaces
CiteTB.fixStr = function(s) {
  s = s.slice(0,1).toUpperCase() + s.slice(1);
  s = s.replace('_',' ');
  return s;
};

// Escape spaces and quotes for use in HTML classes/ids
CiteTB.escStr = function(s) {
  return s.replace(' ', '-').replace("'", "\'").replace('"', '\"');
};

// MISC FUNCTIONS
// Determine which template form is open, and get the template object for it
CiteTB.getOpenTemplate = function() {
  var dialogs = $(".ui-dialog-content.ui-widget-content:visible");
  var templatename = $(dialogs[0]).find(".cite-template").val();
  return CiteTB.Templates[templatename];
};

// Display the report for the error checks
CiteTB.displayErrors = function(errors) {
  $('#cite-err-report').remove();
  var table = $('<table id="cite-err-report" style="width:100%; border:1px solid #A9A9A9; background-color:#FFEFD5; padding:0.25em; margin-top:0.5em" />');
  $('#editpage-copywarn').before(table);
  var tr;
  var tr1 = $('<tr style="width:100%" />');
  var th1 = $('<th style="width:60%; font-size:110%" />').html(mw.usability.getMsg('cite-err-report-heading'));
  var th2 = $('<th style="text-align:right; width:40%" />');
  var im = $('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/5/55/Gtk-stop.svg/20px-Gtk-stop.svg.png');
  im.attr('alt', mw.usability.getMsg('cite-err-report-close')).attr('title', mw.usability.getMsg('cite-err-report-close'));
  var ad = $('<a id="cite-err-check-close" />').attr('href', '#');
  ad.append(im);
  th2.append(ad);
  tr1.append(th1).append(th2);
  table.append(tr1);
  $('#cite-err-check-close').bind('click', function() {  $('#cite-err-report').remove(); });
  if (errors.length === 0) {
    tr = $('<tr style="width:100%;" />');
    var td = $('<td style="text-align:center; margin:1.5px;" />').html(mw.usability.getMsg('cite-err-report-empty'));
    tr.append(td);
    table.append(tr);
    
    return;
  }
  for(var e in errors) {
    var err = errors[e];
    tr = $('<tr style="width:100%;" />');
    var td1 = $('<td style="border: 1px solid black; margin:1.5px; width:60%" />').html(err.err);
    var td2 = $('<td style="border: 1px solid black; margin:1.5px; width:40%" />').html(mw.usability.getMsg(err.msg));
    tr.append(td1).append(td2);
    table.append(tr);
  }
};
   
} // End of code loaded only on edit