Zotero.Utilities changes:

- Zotero.Utilities is now a singleton
- Zotero.Utilities.HTTP is now Zotero.HTTP
- Zotero.Utilities.md5 and Zotero.Utilities.Base64 are now located under Zotero.Utilities.Internal
- Zotero.Utilities.AutoComplete has been eliminated

This needs testing to make sure there is no associated breakage.
This commit is contained in:
Simon Kornblith 2010-10-25 00:58:47 +00:00
parent 21a2188caa
commit d22ccf2219
41 changed files with 1358 additions and 1383 deletions

View File

@ -272,7 +272,7 @@
var doi = this.item.getField('DOI'); var doi = this.item.getField('DOI');
if (doi && typeof val == 'String') { if (doi && typeof val == 'String') {
// Pull out DOI, in case there's a prefix // Pull out DOI, in case there's a prefix
doi = Zotero.Utilities.prototype.cleanDOI(doi);; doi = Zotero.Utilities.cleanDOI(doi);;
if (doi) { if (doi) {
spec = "http://dx.doi.org/" + encodeURIComponent(doi); spec = "http://dx.doi.org/" + encodeURIComponent(doi);
} }
@ -456,7 +456,7 @@
} }
else if (fieldName == 'DOI' && val && typeof val == 'string') { else if (fieldName == 'DOI' && val && typeof val == 'string') {
// Pull out DOI, in case there's a prefix // Pull out DOI, in case there's a prefix
var doi = Zotero.Utilities.prototype.cleanDOI(val); var doi = Zotero.Utilities.cleanDOI(val);
if (doi) { if (doi) {
doi = "http://dx.doi.org/" + encodeURIComponent(doi); doi = "http://dx.doi.org/" + encodeURIComponent(doi);
label.setAttribute("isButton", true); label.setAttribute("isButton", true);
@ -1466,10 +1466,16 @@
<parameter name="textbox"/> <parameter name="textbox"/>
<body> <body>
<![CDATA[ <![CDATA[
var comment = Zotero.Utilities.AutoComplete.getResultComment(textbox); var comment = false;
if (!comment) var controller = textbox.controller;
for (var i=0; i<controller.matchCount; i++)
{ {
return; if (controller.getValueAt(i) == textbox.value)
{
comment = controller.getCommentAt(i);
break;
}
} }
var [creatorID, numFields] = comment.split('-'); var [creatorID, numFields] = comment.split('-');
@ -1941,8 +1947,7 @@
var newVal = val.toLowerCase(); var newVal = val.toLowerCase();
break; break;
case 'title': case 'title':
var utils = new Zotero.Utilities(); var newVal = Zotero.Utilities.capitalizeTitle(val.toLowerCase(), true);
var newVal = utils.capitalizeTitle(val.toLowerCase(), true);
break; break;
default: default:
throw ("Invalid transform mode '" + mode + "' in zoteroitembox.textTransform()"); throw ("Invalid transform mode '" + mode + "' in zoteroitembox.textTransform()");

View File

@ -223,11 +223,11 @@
output = output.replace(entry[0], entry[1], "g"); output = output.replace(entry[0], entry[1], "g");
} }
output = Zotero.Utilities.prototype.unescapeHTML( output = Zotero.Utilities.unescapeHTML(
output.replace(" ", "&nbsp;", "g")) output.replace(" ", "&nbsp;", "g"))
.replace(highcharRe, .replace(highcharRe,
function(aChar) { return "\\uc0\\u"+aChar.charCodeAt(0).toString()+"{}" }); function(aChar) { return "\\uc0\\u"+aChar.charCodeAt(0).toString()+"{}" });
output = Zotero.Utilities.prototype.trim(output); output = Zotero.Utilities.trim(output);
} }
return output; return output;

View File

@ -105,7 +105,7 @@
<parameter name="skipRefresh"/> <parameter name="skipRefresh"/>
<body> <body>
<![CDATA[ <![CDATA[
if (!Zotero.Utilities.prototype.isEmpty(val)) { if (!Zotero.Utilities.isEmpty(val)) {
this._hasFilter = true; this._hasFilter = true;
this._filter = val; this._filter = val;
} }
@ -126,7 +126,7 @@
<property name="scope" onget="return this._scope"> <property name="scope" onget="return this._scope">
<setter> <setter>
<![CDATA[ <![CDATA[
if (!Zotero.Utilities.prototype.isEmpty(val)) { if (!Zotero.Utilities.isEmpty(val)) {
this._hasScope = true; this._hasScope = true;
this._scope = val; this._scope = val;
} }

View File

@ -568,7 +568,7 @@ var Zotero_Citation_Dialog = new function () {
} }
Zotero.debug("verified not custom"); Zotero.debug("verified not custom");
if(Zotero.Utilities.prototype.trim(citation) == "") { if(Zotero.Utilities.trim(citation) == "") {
var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService); .getService(Components.interfaces.nsIPromptService);
var insert = promptService.confirm(window, var insert = promptService.confirm(window,

View File

@ -30,7 +30,7 @@ const Zotero_Lookup = new function () {
document.getElementById("accept-button").disabled = true; document.getElementById("accept-button").disabled = true;
var identifier = document.getElementById("lookup-textbox").value; var identifier = document.getElementById("lookup-textbox").value;
var doi = Zotero.Utilities.prototype.cleanDOI(identifier); var doi = Zotero.Utilities.cleanDOI(identifier);
if(doi) { if(doi) {
var item = {itemType:"journalArticle", DOI:doi}; var item = {itemType:"journalArticle", DOI:doi};
} else { } else {

View File

@ -971,7 +971,7 @@ var ZoteroPane = new function()
function clearTagSelection() { function clearTagSelection() {
if (!Zotero.Utilities.prototype.isEmpty(this.getTagSelection())) { if (!Zotero.Utilities.isEmpty(this.getTagSelection())) {
var tagSelector = document.getElementById('zotero-tag-selector'); var tagSelector = document.getElementById('zotero-tag-selector');
tagSelector.clearAll(); tagSelector.clearAll();
} }
@ -1547,7 +1547,7 @@ var ZoteroPane = new function()
return; return;
} }
var title = Zotero.Utilities.prototype.trim(newTitle.value); var title = Zotero.Utilities.trim(newTitle.value);
if (!title) { if (!title) {
return; return;
@ -1599,7 +1599,7 @@ var ZoteroPane = new function()
return; return;
} }
var name = Zotero.Utilities.prototype.trim(newName.value); var name = Zotero.Utilities.trim(newName.value);
if (!name) { if (!name) {
return; return;
@ -2492,7 +2492,7 @@ var ZoteroPane = new function()
var doi = item.getField('DOI'); var doi = item.getField('DOI');
if (doi) { if (doi) {
// Pull out DOI, in case there's a prefix // Pull out DOI, in case there's a prefix
doi = Zotero.Utilities.prototype.cleanDOI(doi); doi = Zotero.Utilities.cleanDOI(doi);
if (doi) { if (doi) {
uri = "http://dx.doi.org/" + encodeURIComponent(doi); uri = "http://dx.doi.org/" + encodeURIComponent(doi);
} }
@ -2720,12 +2720,12 @@ var ZoteroPane = new function()
if (!text) { if (!text) {
text = ''; text = '';
} }
text = Zotero.Utilities.prototype.trim(text); text = Zotero.Utilities.trim(text);
if (text) { if (text) {
text = '<blockquote' text = '<blockquote'
+ (citeURI ? ' cite="' + citeURI + '"' : '') + (citeURI ? ' cite="' + citeURI + '"' : '')
+ '>' + Zotero.Utilities.prototype.text2html(text) + "</blockquote>"; + '>' + Zotero.Utilities.text2html(text) + "</blockquote>";
} }
var item = new Zotero.Item('note'); var item = new Zotero.Item('note');
@ -2769,7 +2769,7 @@ var ZoteroPane = new function()
return false; return false;
} }
text = Zotero.Utilities.prototype.trim(text); text = Zotero.Utilities.trim(text);
if (!text.length) { if (!text.length) {
return false; return false;
@ -2777,7 +2777,7 @@ var ZoteroPane = new function()
text = '<blockquote' text = '<blockquote'
+ (citeURI ? ' cite="' + citeURI + '"' : '') + (citeURI ? ' cite="' + citeURI + '"' : '')
+ '>' + Zotero.Utilities.prototype.text2html(text) + "</blockquote>"; + '>' + Zotero.Utilities.text2html(text) + "</blockquote>";
var items = this.getSelectedItems(); var items = this.getSelectedItems();
if (this.itemsView.selection.count == 1 && items[0] && items[0].isNote()) { if (this.itemsView.selection.count == 1 && items[0] && items[0].isNote()) {
@ -3042,7 +3042,7 @@ var ZoteroPane = new function()
Zotero.debug(e); Zotero.debug(e);
} }
Zotero.Utilities.HTTP.processDocuments([url], processor, done, exception); Zotero.HTTP.processDocuments([url], processor, done, exception);
} }
// Otherwise create placeholder item, attach attachment, and update from that // Otherwise create placeholder item, attach attachment, and update from that
else { else {

View File

@ -847,14 +847,13 @@ function updatePDFToolsStatus() {
// If we haven't already generated the required and documentation messages // If we haven't already generated the required and documentation messages
if (!converterIsRegistered && !requiredLabel.hasChildNodes()) { if (!converterIsRegistered && !requiredLabel.hasChildNodes()) {
var utils = new Zotero.Utilities();
// Xpdf link // Xpdf link
var str = Zotero.getString('zotero.preferences.search.pdf.toolsRequired', var str = Zotero.getString('zotero.preferences.search.pdf.toolsRequired',
[Zotero.Fulltext.pdfConverterName, Zotero.Fulltext.pdfInfoName, [Zotero.Fulltext.pdfConverterName, Zotero.Fulltext.pdfInfoName,
'<a href="' + Zotero.Fulltext.pdfToolsURL + '">' '<a href="' + Zotero.Fulltext.pdfToolsURL + '">'
+ Zotero.Fulltext.pdfToolsName + '</a>']); + Zotero.Fulltext.pdfToolsName + '</a>']);
var parts = utils.parseMarkup(str); var parts = Zotero.Utilities.parseMarkup(str);
for (var i=0; i<parts.length; i++) { for (var i=0; i<parts.length; i++) {
var part = parts[i]; var part = parts[i];
if (part.type == 'text') { if (part.type == 'text') {
@ -883,7 +882,7 @@ function updatePDFToolsStatus() {
+ Zotero.getString('zotero.preferences.search.pdf.documentationLink') + Zotero.getString('zotero.preferences.search.pdf.documentationLink')
+ '</a>'; + '</a>';
var str = Zotero.getString('zotero.preferences.search.pdf.advancedUsers', link); var str = Zotero.getString('zotero.preferences.search.pdf.advancedUsers', link);
var parts = utils.parseMarkup(str); var parts = Zotero.Utilities.parseMarkup(str);
for (var i=0; i<parts.length; i++) { for (var i=0; i<parts.length; i++) {
var part = parts[i]; var part = parts[i];
@ -953,7 +952,7 @@ function checkPDFToolsDownloadVersion() {
+ Zotero.platform.replace(' ', '-') + '.latest'; + Zotero.platform.replace(' ', '-') + '.latest';
// Find latest version for this platform // Find latest version for this platform
var sent = Zotero.Utilities.HTTP.doGet(url, function (xmlhttp) { var sent = Zotero.HTTP.doGet(url, function (xmlhttp) {
try { try {
if (xmlhttp.status == 200) { if (xmlhttp.status == 200) {
var converterIsRegistered = Zotero.Fulltext.pdfConverterIsRegistered(); var converterIsRegistered = Zotero.Fulltext.pdfConverterIsRegistered();
@ -1082,7 +1081,7 @@ function installPDFTools(installVersions) {
} }
// Find latest version for this platform // Find latest version for this platform
var sent = Zotero.Utilities.HTTP.doHead(url, function (xmlhttp) { var sent = Zotero.HTTP.doHead(url, function (xmlhttp) {
try { try {
if (xmlhttp.status == 200) { if (xmlhttp.status == 200) {
// If doing both and on converter, chain pdfinfo // If doing both and on converter, chain pdfinfo
@ -1431,7 +1430,7 @@ Zotero_Preferences.Debug_Output = {
+ " (gzipped from " + oldLen + " bytes; " + " (gzipped from " + oldLen + " bytes; "
+ savings + "% savings)"); + savings + "% savings)");
if (Zotero.Utilities.HTTP.browserIsOffline()) { if (Zotero.HTTP.browserIsOffline()) {
ps.alert( ps.alert(
null, null,
Zotero.getString( Zotero.getString(

View File

@ -303,7 +303,7 @@ Zotero_RecognizePDF.Recognizer.prototype.recognize = function(file, libraryID, c
// look for DOI // look for DOI
var allText = lines.join("\n"); var allText = lines.join("\n");
Zotero.debug(allText); Zotero.debug(allText);
var m = Zotero.Utilities.prototype.cleanDOI(allText); var m = Zotero.Utilities.cleanDOI(allText);
if(m) { if(m) {
this._DOI = m[0]; this._DOI = m[0];
} }

View File

@ -334,7 +334,7 @@ var Zotero_RTFScan = new function() {
// make sure first name matches, if it exists // make sure first name matches, if it exists
if(creator.length > lowerLast.length) { if(creator.length > lowerLast.length) {
var firstName = Zotero.Utilities.prototype.trim(creator.substr(0, creator.length-lowerLast.length)); var firstName = Zotero.Utilities.trim(creator.substr(0, creator.length-lowerLast.length));
if(firstName.length) { if(firstName.length) {
// check to see whether the first name is all initials // check to see whether the first name is all initials
const initialRe = /^(?:[A-Z]\.? ?)+$/; const initialRe = /^(?:[A-Z]\.? ?)+$/;

View File

@ -1445,7 +1445,7 @@ Zotero.CollectionTreeView.prototype.drop = function(row, orient)
/* /*
if (type == 'item') { if (type == 'item') {
if (!Zotero.Utilities.prototype.isEmpty(changedCreators)) { if (!Zotero.Utilities.isEmpty(changedCreators)) {
io.dataIn.changedCreators = changedCreators; io.dataIn.changedCreators = changedCreators;
} }
} }

View File

@ -165,8 +165,8 @@ Zotero.Commons = new function() {
Zotero.debug("IA BUCKETS"); Zotero.debug("IA BUCKETS");
Zotero.debug(IABuckets); Zotero.debug(IABuckets);
var addBuckets = Zotero.Utilities.prototype.arrayDiff(IABuckets, currentBuckets); var addBuckets = Zotero.Utilities.arrayDiff(IABuckets, currentBuckets);
var removeBuckets = Zotero.Utilities.prototype.arrayDiff(currentBuckets, IABuckets); var removeBuckets = Zotero.Utilities.arrayDiff(currentBuckets, IABuckets);
Zotero.debug("ADD"); Zotero.debug("ADD");
Zotero.debug(addBuckets); Zotero.debug(addBuckets);
@ -397,7 +397,7 @@ Zotero.Commons = new function() {
this.slugify = function (input) { this.slugify = function (input) {
var slug = Zotero.Utilities.prototype.trim(input) var slug = Zotero.Utilities.trim(input)
.toLowerCase() .toLowerCase()
.replace(/[^a-z0-9 ._-]/g, "") .replace(/[^a-z0-9 ._-]/g, "")
//.replace(/ /g, "_"); //.replace(/ /g, "_");
@ -458,7 +458,7 @@ Zotero.Commons.Bucket.prototype.exists = function (callback, maxTries, tries) {
var self = this; var self = this;
Zotero.Utilities.HTTP.doHead(this.uri, function (xmlhttp) { Zotero.HTTP.doHead(this.uri, function (xmlhttp) {
switch (xmlhttp.status) { switch (xmlhttp.status) {
case 200: case 200:
callback(1); callback(1);
@ -511,7 +511,7 @@ Zotero.Commons.Bucket.prototype.getItems = function (callback) {
var progressWin = null; var progressWin = null;
var progressWinIcon = 'chrome://zotero/skin/treeitem-attachment-pdf.png'; var progressWinIcon = 'chrome://zotero/skin/treeitem-attachment-pdf.png';
var req = Zotero.Utilities.HTTP.doGet(uri, function (xmlhttp) { var req = Zotero.HTTP.doGet(uri, function (xmlhttp) {
if (xmlhttp.status != 200) { if (xmlhttp.status != 200) {
Zotero.debug(xmlhttp.status); Zotero.debug(xmlhttp.status);
Zotero.debug(xmlhttp.responseText); Zotero.debug(xmlhttp.responseText);
@ -620,7 +620,7 @@ Zotero.Commons.Bucket.prototype.getItems = function (callback) {
var rdfURI = self.downloadURI + '/' + zip.rdf; var rdfURI = self.downloadURI + '/' + zip.rdf;
Zotero.Utilities.HTTP.doGet(rdfURI, function (xmlhttp) { Zotero.HTTP.doGet(rdfURI, function (xmlhttp) {
// If RDF not available, skip item // If RDF not available, skip item
if (xmlhttp.status != 200) { if (xmlhttp.status != 200) {
Zotero.debug("RDF not found at " + xmlhttp.channel.originalURI.spec); Zotero.debug("RDF not found at " + xmlhttp.channel.originalURI.spec);
@ -1049,7 +1049,7 @@ Zotero.Commons.Bucket.prototype.updateMetadata = function(action, item, callback
var self = this; var self = this;
// get previous metadata. multiple language support difficult via IA s3. // get previous metadata. multiple language support difficult via IA s3.
Zotero.Utilities.HTTP.doGet(resource, function (xmlhttp) { Zotero.HTTP.doGet(resource, function (xmlhttp) {
if (xmlhttp.status == 404 || (xmlhttp.status == 200 && !xmlhttp.responseXML)) { if (xmlhttp.status == 404 || (xmlhttp.status == 200 && !xmlhttp.responseXML)) {
Zotero.Commons.error("Error updating bucket metadata"); Zotero.Commons.error("Error updating bucket metadata");
return; return;

View File

@ -39,7 +39,7 @@ Zotero.Connector = new function() {
* initializes a very rudimentary web server * initializes a very rudimentary web server
*/ */
this.init = function() { this.init = function() {
if (Zotero.Utilities.HTTP.browserIsOffline()) { if (Zotero.HTTP.browserIsOffline()) {
Zotero.debug('Browser is offline -- not initializing connector HTTP server'); Zotero.debug('Browser is offline -- not initializing connector HTTP server');
_registerOnlineObserver(); _registerOnlineObserver();
return; return;

View File

@ -113,7 +113,7 @@ Zotero.Collection.prototype._set = function (field, val) {
return; return;
case 'name': case 'name':
val = Zotero.Utilities.prototype.trim(val); val = Zotero.Utilities.trim(val);
break; break;
} }
@ -843,16 +843,16 @@ Zotero.Collection.prototype.diff = function (collection, includeMatches, ignoreO
var numDiffs = Zotero.Collections.diff(thisData, otherData, diff, includeMatches); var numDiffs = Zotero.Collections.diff(thisData, otherData, diff, includeMatches);
// For the moment, just compare children and increase numDiffs if any differences // For the moment, just compare children and increase numDiffs if any differences
var d1 = Zotero.Utilities.prototype.arrayDiff( var d1 = Zotero.Utilities.arrayDiff(
thisData.childCollections, otherData.childCollections thisData.childCollections, otherData.childCollections
); );
var d2 = Zotero.Utilities.prototype.arrayDiff( var d2 = Zotero.Utilities.arrayDiff(
otherData.childCollections, thisData.childCollections otherData.childCollections, thisData.childCollections
); );
var d3 = Zotero.Utilities.prototype.arrayDiff( var d3 = Zotero.Utilities.arrayDiff(
thisData.childItems, otherData.childItems thisData.childItems, otherData.childItems
); );
var d4 = Zotero.Utilities.prototype.arrayDiff( var d4 = Zotero.Utilities.arrayDiff(
otherData.childItems, thisData.childItems otherData.childItems, thisData.childItems
); );
numDiffs += d1.length + d2.length; numDiffs += d1.length + d2.length;

View File

@ -104,7 +104,7 @@ Zotero.Creator.prototype._set = function (field, val) {
case 'lastName': case 'lastName':
case 'shortName': case 'shortName':
if (val) { if (val) {
val = Zotero.Utilities.prototype.trim(val); val = Zotero.Utilities.trim(val);
} }
else { else {
val = ''; val = '';

View File

@ -332,8 +332,8 @@ Zotero.Creators = new function() {
for each(var field in Zotero.Creators.fields) { for each(var field in Zotero.Creators.fields) {
hashFields.push(fields[field]); hashFields.push(fields[field]);
} }
var ZU = new Zotero.Utilities;
return ZU.md5(hashFields.join('_')); return Zotero.Utilities.Internal.md5(hashFields.join('_'));
} }

View File

@ -631,7 +631,7 @@ Zotero.Item.prototype.inCollection = function(collectionID) {
*/ */
Zotero.Item.prototype.setField = function(field, value, loadIn) { Zotero.Item.prototype.setField = function(field, value, loadIn) {
if (typeof value == 'string') { if (typeof value == 'string') {
value = Zotero.Utilities.prototype.trim(value); value = Zotero.Utilities.trim(value);
} }
this._disabledCheck(); this._disabledCheck();
@ -1155,8 +1155,6 @@ Zotero.Item.prototype.save = function() {
lastPos++; lastPos++;
} }
var ZU = new Zotero.Utilities;
Zotero.DB.beginTransaction(); Zotero.DB.beginTransaction();
var isNew = !this.id || !this.exists(); var isNew = !this.id || !this.exists();
@ -2339,7 +2337,7 @@ Zotero.Item.prototype.getNote = function() {
// Convert non-HTML notes on-the-fly // Convert non-HTML notes on-the-fly
if (note) { if (note) {
if (!note.substr(0, 36).match(/^<div class="zotero-note znv[0-9]+">/)) { if (!note.substr(0, 36).match(/^<div class="zotero-note znv[0-9]+">/)) {
note = Zotero.Utilities.prototype.htmlSpecialChars(note); note = Zotero.Utilities.htmlSpecialChars(note);
note = '<div class="zotero-note znv1"><p>' note = '<div class="zotero-note znv1"><p>'
+ note.replace(/\n/g, '</p><p>') + note.replace(/\n/g, '</p><p>')
.replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;') .replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;')
@ -2376,7 +2374,7 @@ Zotero.Item.prototype.setNote = function(text) {
throw ("text must be a string in Zotero.Item.setNote() (was " + typeof text + ")"); throw ("text must be a string in Zotero.Item.setNote() (was " + typeof text + ")");
} }
text = Zotero.Utilities.prototype.trim(text); text = Zotero.Utilities.trim(text);
var oldText = this.getNote(); var oldText = this.getNote();
if (text == oldText) { if (text == oldText) {
@ -3083,7 +3081,7 @@ Zotero.Item.prototype.__defineGetter__('attachmentHash', function () {
return undefined; return undefined;
} }
return Zotero.Utilities.prototype.md5(file); return Zotero.Utilities.Internal.md5(file);
}); });
@ -3113,7 +3111,7 @@ Zotero.Item.prototype.__defineGetter__('attachmentText', function () {
// TODO: remove post-Fx3.0 // TODO: remove post-Fx3.0
if (!str.trim) { if (!str.trim) {
return Zotero.Utilities.prototype.trim(str); return Zotero.Utilities.trim(str);
} }
return str.trim(); return str.trim();
@ -3161,7 +3159,7 @@ Zotero.Item.prototype.__defineGetter__('attachmentText', function () {
else if (mimeType == 'text/html') { else if (mimeType == 'text/html') {
str = Zotero.File.getContents(file); str = Zotero.File.getContents(file);
str = Zotero.Utilities.prototype.unescapeHTML(str); str = Zotero.Utilities.unescapeHTML(str);
} }
else if (mimeType == 'text/plain') { else if (mimeType == 'text/plain') {
@ -3174,7 +3172,7 @@ Zotero.Item.prototype.__defineGetter__('attachmentText', function () {
// TODO: remove post-Fx3.0 // TODO: remove post-Fx3.0
if (!str.trim) { if (!str.trim) {
return Zotero.Utilities.prototype.trim(str); return Zotero.Utilities.trim(str);
} }
return str.trim(); return str.trim();
@ -3274,7 +3272,7 @@ Zotero.Item.prototype.addTag = function(name, type) {
throw ('Cannot add tag to unsaved item in Item.addTag()'); throw ('Cannot add tag to unsaved item in Item.addTag()');
} }
name = Zotero.Utilities.prototype.trim(name); name = Zotero.Utilities.trim(name);
if (!name) { if (!name) {
Zotero.debug('Not saving empty tag in Item.addTag()', 2); Zotero.debug('Not saving empty tag in Item.addTag()', 2);
@ -3426,7 +3424,7 @@ Zotero.Item.prototype.replaceTag = function(oldTagID, newTag) {
throw ('Cannot replace tag on unsaved item'); throw ('Cannot replace tag on unsaved item');
} }
newTag = Zotero.Utilities.prototype.trim(newTag); newTag = Zotero.Utilities.trim(newTag);
if (!newTag) { if (!newTag) {
Zotero.debug('Not replacing with empty tag', 2); Zotero.debug('Not replacing with empty tag', 2);

View File

@ -33,8 +33,8 @@ Zotero.Notes = new function() {
* Return first line (or first MAX_LENGTH characters) of note content * Return first line (or first MAX_LENGTH characters) of note content
**/ **/
function noteToTitle(text) { function noteToTitle(text) {
text = Zotero.Utilities.prototype.trim(text); text = Zotero.Utilities.trim(text);
text = Zotero.Utilities.prototype.unescapeHTML(text); text = Zotero.Utilities.unescapeHTML(text);
var max = this.MAX_TITLE_LENGTH; var max = this.MAX_TITLE_LENGTH;

View File

@ -96,7 +96,7 @@ Zotero.Tag.prototype._set = function (field, val) {
return; return;
case 'name': case 'name':
val = Zotero.Utilities.prototype.trim(val); val = Zotero.Utilities.trim(val);
break; break;
} }
@ -372,8 +372,8 @@ Zotero.Tag.prototype.save = function (full) {
var sql = "SELECT itemID FROM itemTags WHERE tagID=?"; var sql = "SELECT itemID FROM itemTags WHERE tagID=?";
var dbItemIDs = Zotero.DB.columnQuery(sql, tagID); var dbItemIDs = Zotero.DB.columnQuery(sql, tagID);
if (dbItemIDs) { if (dbItemIDs) {
removed = Zotero.Utilities.prototype.arrayDiff(dbItemIDs, currentIDs); removed = Zotero.Utilities.arrayDiff(dbItemIDs, currentIDs);
newids = Zotero.Utilities.prototype.arrayDiff(currentIDs, dbItemIDs); newids = Zotero.Utilities.arrayDiff(currentIDs, dbItemIDs);
} }
else { else {
newids = currentIDs; newids = currentIDs;
@ -381,10 +381,10 @@ Zotero.Tag.prototype.save = function (full) {
} }
else { else {
if (this._previousData.linkedItems) { if (this._previousData.linkedItems) {
removed = Zotero.Utilities.prototype.arrayDiff( removed = Zotero.Utilities.arrayDiff(
this._previousData.linkedItems, currentIDs this._previousData.linkedItems, currentIDs
); );
newids = Zotero.Utilities.prototype.arrayDiff( newids = Zotero.Utilities.arrayDiff(
currentIDs, this._previousData.linkedItems currentIDs, this._previousData.linkedItems
); );
} }
@ -483,10 +483,10 @@ Zotero.Tag.prototype.diff = function (tag, includeMatches, ignoreOnlyDateModifie
var numDiffs = Zotero.Tags.diff(thisData, otherData, diff, includeMatches); var numDiffs = Zotero.Tags.diff(thisData, otherData, diff, includeMatches);
// For the moment, just compare linked items and increase numDiffs if any differences // For the moment, just compare linked items and increase numDiffs if any differences
var d1 = Zotero.Utilities.prototype.arrayDiff( var d1 = Zotero.Utilities.arrayDiff(
otherData.linkedItems, thisData.linkedItems otherData.linkedItems, thisData.linkedItems
); );
var d2 = Zotero.Utilities.prototype.arrayDiff( var d2 = Zotero.Utilities.arrayDiff(
thisData.linkedItems, otherData.linkedItems thisData.linkedItems, otherData.linkedItems
); );
numDiffs += d1.length + d2.length; numDiffs += d1.length + d2.length;

View File

@ -77,7 +77,7 @@ Zotero.Tags = new function() {
* Returns the tagID matching given tag and type * Returns the tagID matching given tag and type
*/ */
function getID(name, type, libraryID) { function getID(name, type, libraryID) {
name = Zotero.Utilities.prototype.trim(name); name = Zotero.Utilities.trim(name);
var lcname = name.toLowerCase(); var lcname = name.toLowerCase();
if (!libraryID) { if (!libraryID) {
@ -119,7 +119,7 @@ Zotero.Tags = new function() {
* Returns all tagIDs for this tag (of all types) * Returns all tagIDs for this tag (of all types)
*/ */
function getIDs(name, libraryID) { function getIDs(name, libraryID) {
name = Zotero.Utilities.prototype.trim(name); name = Zotero.Utilities.trim(name);
var sql = "SELECT tagID FROM tags WHERE name=? AND libraryID"; var sql = "SELECT tagID FROM tags WHERE name=? AND libraryID";
var params = [name]; var params = [name];
if (libraryID) { if (libraryID) {
@ -137,7 +137,7 @@ Zotero.Tags = new function() {
* Returns an array of tag types for tags matching given tag * Returns an array of tag types for tags matching given tag
*/ */
function getTypes(name, libraryID) { function getTypes(name, libraryID) {
name = Zotero.Utilities.prototype.trim(name); name = Zotero.Utilities.trim(name);
var sql = "SELECT type FROM tags WHERE name=? AND libraryID"; var sql = "SELECT type FROM tags WHERE name=? AND libraryID";
var params = [name]; var params = [name];
if (libraryID) { if (libraryID) {
@ -285,7 +285,7 @@ Zotero.Tags = new function() {
function rename(tagID, name) { function rename(tagID, name) {
Zotero.debug('Renaming tag', 4); Zotero.debug('Renaming tag', 4);
name = Zotero.Utilities.prototype.trim(name); name = Zotero.Utilities.trim(name);
Zotero.DB.beginTransaction(); Zotero.DB.beginTransaction();

View File

@ -46,7 +46,7 @@ Zotero.DataServer = new function () {
return; return;
} }
if (Zotero.Utilities.HTTP.browserIsOffline()) { if (Zotero.HTTP.browserIsOffline()) {
Zotero.debug('Browser is offline -- not initializing data HTTP server'); Zotero.debug('Browser is offline -- not initializing data HTTP server');
_registerOnlineObserver() _registerOnlineObserver()
return; return;

View File

@ -1190,11 +1190,10 @@ Zotero.DBConnection.prototype._getDBConnection = function () {
// Levenshtein distance UDF // Levenshtein distance UDF
var lev = { var lev = {
ZU: new Zotero.Utilities,
onFunctionCall: function (arg) { onFunctionCall: function (arg) {
var a = arg.getUTF8String(0); var a = arg.getUTF8String(0);
var b = arg.getUTF8String(1); var b = arg.getUTF8String(1);
return this.ZU.levenshtein(a, b); return Zotero.Utilities.levenshtein(a, b);
} }
}; };
this._connection.createFunction('levenshtein', 2, lev); this._connection.createFunction('levenshtein', 2, lev);
@ -1213,7 +1212,7 @@ Zotero.DBConnection.prototype._getDBConnection = function () {
var rx = { var rx = {
onFunctionCall: function (arg) { onFunctionCall: function (arg) {
var str = arg.getUTF8String(0); var str = arg.getUTF8String(0);
return Zotero.Utilities.prototype.text2html(str, true); return Zotero.Utilities.text2html(str, true);
} }
}; };
this._connection.createFunction('text2html', 1, rx); this._connection.createFunction('text2html', 1, rx);

View File

@ -0,0 +1,610 @@
/**
* Functions for performing HTTP requests, both via XMLHTTPRequest and using a hidden browser
* @namespace
*/
Zotero.HTTP = new function() {
this.WebDAV = {};
/**
* Send an HTTP GET request via XMLHTTPRequest
*
* @param {nsIURI|String} url URL to request
* @param {Function} onDone Callback to be executed upon request completion
* @param {String} responseCharset Character set to force on the response
* @return {Boolean} True if the request was sent, or false if the browser is offline
*/
this.doGet = function(url, onDone, responseCharset) {
if (url instanceof Components.interfaces.nsIURI) {
// Don't display password in console
var disp = url.clone();
if (disp.password) {
disp.password = "********";
}
Zotero.debug("HTTP GET " + disp.spec);
url = url.spec;
}
else {
Zotero.debug("HTTP GET " + url);
}
if (this.browserIsOffline()){
return false;
}
// Workaround for "Accept third-party cookies" being off in Firefox 3.0.1
// https://www.zotero.org/trac/ticket/1070
if (Zotero.isFx30) {
const Cc = Components.classes;
const Ci = Components.interfaces;
var ds = Cc["@mozilla.org/webshell;1"].
createInstance(Components.interfaces.nsIDocShellTreeItem).
QueryInterface(Ci.nsIInterfaceRequestor);
ds.itemType = Ci.nsIDocShellTreeItem.typeContent;
var xmlhttp = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].
createInstance(Ci.nsIXMLHttpRequest);
xmlhttp.mozBackgroundRequest = true;
xmlhttp.open("GET", url, true);
xmlhttp.channel.loadGroup = ds.getInterface(Ci.nsILoadGroup);
xmlhttp.channel.loadFlags |= Ci.nsIChannel.LOAD_DOCUMENT_URI;
}
else {
var xmlhttp = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance();
// Prevent certificate/authentication dialogs from popping up
xmlhttp.mozBackgroundRequest = true;
xmlhttp.open('GET', url, true);
// Send cookie even if "Allow third-party cookies" is disabled (>=Fx3.6 only)
if (!Zotero.isFx35) {
var channel = xmlhttp.channel;
channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal);
channel.forceAllowThirdPartyCookie = true;
}
}
// Don't cache GET requests
xmlhttp.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
/** @ignore */
xmlhttp.onreadystatechange = function() {
_stateChange(xmlhttp, onDone, responseCharset);
};
xmlhttp.send(null);
return xmlhttp;
}
/**
* Send an HTTP POST request via XMLHTTPRequest
*
* @param {String} url URL to request
* @param {String} body Request body
* @param {Function} onDone Callback to be executed upon request completion
* @param {String} headers Request HTTP headers
* @param {String} responseCharset Character set to force on the response
* @return {Boolean} True if the request was sent, or false if the browser is offline
*/
this.doPost = function(url, body, onDone, headers, responseCharset) {
if (url instanceof Components.interfaces.nsIURI) {
// Don't display password in console
var disp = url.clone();
if (disp.password) {
disp.password = "********";
}
url = url.spec;
}
var bodyStart = body.substr(0, 1024);
// Don't display sync password or session id in console
bodyStart = bodyStart.replace(/password=[^&]+/, 'password=********');
bodyStart = bodyStart.replace(/sessionid=[^&]+/, 'sessionid=********');
Zotero.debug("HTTP POST "
+ (body.length > 1024 ?
bodyStart + '... (' + body.length + ' chars)' : bodyStart)
+ " to " + (disp ? disp.spec : url));
if (this.browserIsOffline()){
return false;
}
// Workaround for "Accept third-party cookies" being off in Firefox 3.0.1
// https://www.zotero.org/trac/ticket/1070
if (Zotero.isFx30) {
const Cc = Components.classes;
const Ci = Components.interfaces;
var ds = Cc["@mozilla.org/webshell;1"].
createInstance(Components.interfaces.nsIDocShellTreeItem).
QueryInterface(Ci.nsIInterfaceRequestor);
ds.itemType = Ci.nsIDocShellTreeItem.typeContent;
var xmlhttp = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].
createInstance(Ci.nsIXMLHttpRequest);
xmlhttp.mozBackgroundRequest = true;
xmlhttp.open("POST", url, true);
xmlhttp.channel.loadGroup = ds.getInterface(Ci.nsILoadGroup);
xmlhttp.channel.loadFlags |= Ci.nsIChannel.LOAD_DOCUMENT_URI;
}
else {
var xmlhttp = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance();
// Prevent certificate/authentication dialogs from popping up
xmlhttp.mozBackgroundRequest = true;
xmlhttp.open('POST', url, true);
// Send cookie even if "Allow third-party cookies" is disabled (>=Fx3.6 only)
if (!Zotero.isFx35) {
var channel = xmlhttp.channel;
channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal);
channel.forceAllowThirdPartyCookie = true;
}
}
if (headers) {
if (typeof headers == 'string') {
var msg = "doPost() now takes a headers object rather than a requestContentType -- update your code";
Zotero.debug(msg, 2);
Components.utils.reportError(msg);
headers = {
"Content-Type": headers
};
}
}
else {
headers = {};
}
if (!headers["Content-Type"]) {
headers["Content-Type"] = "application/x-www-form-urlencoded";
}
for (var header in headers) {
xmlhttp.setRequestHeader(header, headers[header]);
}
/** @ignore */
xmlhttp.onreadystatechange = function(){
_stateChange(xmlhttp, onDone, responseCharset);
};
xmlhttp.send(body);
return xmlhttp;
}
/**
* Send an HTTP HEAD request via XMLHTTPRequest
*
* @param {String} url URL to request
* @param {Function} onDone Callback to be executed upon request completion
* @param {Object} requestHeaders HTTP headers to include with request
* @return {Boolean} True if the request was sent, or false if the browser is offline
*/
this.doHead = function(url, onDone, requestHeaders) {
if (url instanceof Components.interfaces.nsIURI) {
// Don't display password in console
var disp = url.clone();
if (disp.password) {
disp.password = "********";
}
Zotero.debug("HTTP HEAD " + disp.spec);
url = url.spec;
}
else {
Zotero.debug("HTTP HEAD " + url);
}
if (this.browserIsOffline()){
return false;
}
// Workaround for "Accept third-party cookies" being off in Firefox 3.0.1
// https://www.zotero.org/trac/ticket/1070
if (Zotero.isFx30) {
const Cc = Components.classes;
const Ci = Components.interfaces;
var ds = Cc["@mozilla.org/webshell;1"].
createInstance(Components.interfaces.nsIDocShellTreeItem).
QueryInterface(Ci.nsIInterfaceRequestor);
ds.itemType = Ci.nsIDocShellTreeItem.typeContent;
var xmlhttp = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].
createInstance(Ci.nsIXMLHttpRequest);
// Prevent certificate/authentication dialogs from popping up
xmlhttp.mozBackgroundRequest = true;
xmlhttp.open("HEAD", url, true);
xmlhttp.channel.loadGroup = ds.getInterface(Ci.nsILoadGroup);
xmlhttp.channel.loadFlags |= Ci.nsIChannel.LOAD_DOCUMENT_URI;
}
else {
var xmlhttp = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance();
// Prevent certificate/authentication dialogs from popping up
xmlhttp.mozBackgroundRequest = true;
xmlhttp.open('HEAD', url, true);
// Send cookie even if "Allow third-party cookies" is disabled (>=Fx3.6 only)
if (!Zotero.isFx35) {
var channel = xmlhttp.channel;
channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal);
channel.forceAllowThirdPartyCookie = true;
}
}
if (requestHeaders) {
for (var header in requestHeaders) {
xmlhttp.setRequestHeader(header, requestHeaders[header]);
}
}
// Don't cache HEAD requests
xmlhttp.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
/** @ignore */
xmlhttp.onreadystatechange = function(){
_stateChange(xmlhttp, onDone);
};
xmlhttp.send(null);
return xmlhttp;
}
/**
* Send an HTTP OPTIONS request via XMLHTTPRequest
*
* @param {nsIURI} url
* @param {Function} onDone
* @return {XMLHTTPRequest}
*/
this.doOptions = function (uri, callback) {
// Don't display password in console
var disp = uri.clone();
if (disp.password) {
disp.password = "********";
}
Zotero.debug("HTTP OPTIONS for " + disp.spec);
if (Zotero.HTTP.browserIsOffline()){
return false;
}
var xmlhttp = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance();
// Prevent certificate/authentication dialogs from popping up
xmlhttp.mozBackgroundRequest = true;
xmlhttp.open('OPTIONS', uri.spec, true);
/** @ignore */
xmlhttp.onreadystatechange = function() {
_stateChange(xmlhttp, callback);
};
xmlhttp.send(null);
return xmlhttp;
}
//
// WebDAV methods
//
/**
* Send a WebDAV PROP* request via XMLHTTPRequest
*
* Returns false if browser is offline
*
* @param {String} method PROPFIND or PROPPATCH
* @param {nsIURI} uri
* @param {String} body XML string
* @param {Function} callback
* @param {Object} requestHeaders e.g. { Depth: 0 }
*/
this.WebDAV.doProp = function (method, uri, body, callback, requestHeaders) {
switch (method) {
case 'PROPFIND':
case 'PROPPATCH':
break;
default:
throw ("Invalid method '" + method
+ "' in Zotero.HTTP.doProp");
}
if (requestHeaders && requestHeaders.depth != undefined) {
var depth = requestHeaders.depth;
}
// Don't display password in console
var disp = uri.clone();
if (disp.password) {
disp.password = "********";
}
var bodyStart = body.substr(0, 1024);
Zotero.debug("HTTP " + method + " "
+ (depth != undefined ? "(depth " + depth + ") " : "")
+ (body.length > 1024 ?
bodyStart + "... (" + body.length + " chars)" : bodyStart)
+ " to " + disp.spec);
if (Zotero.HTTP.browserIsOffline()) {
Zotero.debug("Browser is offline", 2);
return false;
}
var xmlhttp = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance();
// Prevent certificate/authentication dialogs from popping up
xmlhttp.mozBackgroundRequest = true;
xmlhttp.open(method, uri.spec, true);
if (requestHeaders) {
for (var header in requestHeaders) {
xmlhttp.setRequestHeader(header, requestHeaders[header]);
}
}
xmlhttp.setRequestHeader("Content-Type", 'text/xml; charset="utf-8"');
xmlhttp.onreadystatechange = function() {
_stateChange(xmlhttp, callback);
};
xmlhttp.send(body);
return xmlhttp;
}
/**
* Send a WebDAV MKCOL request via XMLHTTPRequest
*
* @param {nsIURI} url
* @param {Function} onDone
* @return {XMLHTTPRequest}
*/
this.WebDAV.doMkCol = function (uri, callback) {
// Don't display password in console
var disp = uri.clone();
if (disp.password) {
disp.password = "********";
}
Zotero.debug("HTTP MKCOL " + disp.spec);
if (Zotero.HTTP.browserIsOffline()) {
return false;
}
var xmlhttp = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance();
// Prevent certificate/authentication dialogs from popping up
xmlhttp.mozBackgroundRequest = true;
xmlhttp.open('MKCOL', uri.spec, true);
xmlhttp.onreadystatechange = function() {
_stateChange(xmlhttp, callback);
};
xmlhttp.send(null);
return xmlhttp;
}
/**
* Send a WebDAV PUT request via XMLHTTPRequest
*
* @param {nsIURI} url
* @param {String} body String body to PUT
* @param {Function} onDone
* @return {XMLHTTPRequest}
*/
this.WebDAV.doPut = function (uri, body, callback) {
// Don't display password in console
var disp = uri.clone();
if (disp.password) {
disp.password = "********";
}
var bodyStart = "'" + body.substr(0, 1024) + "'";
Zotero.debug("HTTP PUT "
+ (body.length > 1024 ?
bodyStart + "... (" + body.length + " chars)" : bodyStart)
+ " to " + disp.spec);
if (Zotero.HTTP.browserIsOffline()) {
return false;
}
var xmlhttp = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance();
// Prevent certificate/authentication dialogs from popping up
xmlhttp.mozBackgroundRequest = true;
xmlhttp.open("PUT", uri.spec, true);
// Some servers (e.g., Jungle Disk DAV) return a 200 response code
// with Content-Length: 0, which triggers a "no element found" error
// in Firefox, so we override to text
xmlhttp.overrideMimeType("text/plain");
xmlhttp.onreadystatechange = function() {
_stateChange(xmlhttp, callback);
};
xmlhttp.send(body);
return xmlhttp;
}
/**
* Send a WebDAV PUT request via XMLHTTPRequest
*
* @param {nsIURI} url
* @param {Function} onDone
* @return {XMLHTTPRequest}
*/
this.WebDAV.doDelete = function (uri, callback) {
// Don't display password in console
var disp = uri.clone();
if (disp.password) {
disp.password = "********";
}
Zotero.debug("WebDAV DELETE to " + disp.spec);
if (Zotero.HTTP.browserIsOffline()) {
return false;
}
var xmlhttp = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance();
// Prevent certificate/authentication dialogs from popping up
xmlhttp.mozBackgroundRequest = true;
xmlhttp.open("DELETE", uri.spec, true);
// Firefox 3 throws a "no element found" error even with a
// 204 ("No Content") response, so we override to text
xmlhttp.overrideMimeType("text/plain");
xmlhttp.onreadystatechange = function() {
_stateChange(xmlhttp, callback);
};
xmlhttp.send(null);
return xmlhttp;
}
/**
* Get the Authorization header used by a channel
*
* As of Firefox 3.0.1 subsequent requests to higher-level directories
* seem not to authenticate properly and just return 401s, so this
* can be used to manually include the Authorization header in a request
*
* It can also be used to check whether a request was forced to
* use authentication
*
* @param {nsIChannel} channel
* @return {String|FALSE} Authorization header, or FALSE if none
*/
this.getChannelAuthorization = function (channel) {
try {
channel.QueryInterface(Components.interfaces.nsIHttpChannel);
var authHeader = channel.getRequestHeader("Authorization");
return authHeader;
}
catch (e) {
Zotero.debug(e);
return false;
}
}
/**
* Checks if the browser is currently in "Offline" mode
*
* @type Boolean
*/
this.browserIsOffline = function() {
return Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService).offline;
}
/**
* Load one or more documents in a hidden browser
*
* @param {String|String[]} urls URL(s) of documents to load
* @param {Function} processor Callback to be executed for each document loaded
* @param {Function} done Callback to be executed after all documents have been loaded
* @param {Function} exception Callback to be executed if an exception occurs
*/
this.processDocuments = function(urls, processor, done, exception) {
/**
* Removes event listener for the load event and deletes the hidden browser
*/
var removeListeners = function() {
hiddenBrowser.removeEventListener(loadEvent, onLoad, true);
Zotero.Browser.deleteHiddenBrowser(hiddenBrowser);
}
/**
* Loads the next page
* @inner
*/
var doLoad = function() {
if(urls.length) {
var url = urls.shift();
try {
Zotero.debug("loading "+url);
hiddenBrowser.loadURI(url);
} catch(e) {
removeListeners();
if(exception) {
exception(e);
return;
} else {
throw(e);
}
}
} else {
removeListeners();
if(done) done();
}
};
/**
* Callback to be executed when a page load completes
* @inner
*/
var onLoad = function() {
if(hiddenBrowser.contentDocument.location.href == "about:blank") return;
Zotero.debug(hiddenBrowser.contentDocument.location.href+" has been loaded");
if(hiddenBrowser.contentDocument.location.href != prevUrl) { // Just in case it fires too many times
prevUrl = hiddenBrowser.contentDocument.location.href;
try {
processor(hiddenBrowser.contentDocument);
} catch(e) {
removeListeners();
if(exception) {
exception(e);
return;
} else {
throw(e);
}
}
doLoad();
}
};
if(typeof(urls) == "string") urls = [urls];
var prevUrl;
var loadEvent = Zotero.isFx2 ? "load" : "pageshow";
var hiddenBrowser = Zotero.Browser.createHiddenBrowser();
hiddenBrowser.addEventListener(loadEvent, onLoad, true);
doLoad();
}
/**
* Handler for XMLHttpRequest state change
*
* @param {nsIXMLHttpRequest} XMLHttpRequest whose state just changed
* @param {Function} [onDone] Callback for request completion
* @param {String} [responseCharset] Character set to force on the response
* @private
*/
function _stateChange(xmlhttp, callback, responseCharset, data) {
switch (xmlhttp.readyState){
// Request not yet made
case 1:
break;
case 2:
break;
// Called multiple times while downloading in progress
case 3:
break;
// Download complete
case 4:
if (callback) {
// Override the content charset
if (responseCharset) {
xmlhttp.channel.contentCharset = responseCharset;
}
callback(xmlhttp, data);
}
break;
}
}
}

View File

@ -402,9 +402,9 @@ Zotero.OpenURL = new function() {
} }
if(value.indexOf(",") !== -1) { if(value.indexOf(",") !== -1) {
item.creators.push(Zotero.Utilities.prototype.cleanAuthor(value, type, true)); item.creators.push(Zotero.Utilities.cleanAuthor(value, type, true));
} else { } else {
item.creators.push(Zotero.Utilities.prototype.cleanAuthor(value, type, false)); item.creators.push(Zotero.Utilities.cleanAuthor(value, type, false));
} }
} else if(key == "rft.aucorp") { } else if(key == "rft.aucorp") {
complexAu.push({lastName:value, isInstitution:true}); complexAu.push({lastName:value, isInstitution:true});

View File

@ -43,7 +43,7 @@ Zotero.Integration.Compat = new function() {
function init() { function init() {
this.env = new Namespace("http://schemas.xmlsoap.org/soap/envelope/"); this.env = new Namespace("http://schemas.xmlsoap.org/soap/envelope/");
if (Zotero.Utilities.HTTP.browserIsOffline()) { if (Zotero.HTTP.browserIsOffline()) {
Zotero.debug('Browser is offline -- not initializing integration HTTP server'); Zotero.debug('Browser is offline -- not initializing integration HTTP server');
_registerOnlineObserver() _registerOnlineObserver()
return; return;

View File

@ -281,7 +281,7 @@ Zotero.MIME = new function(){
this.getMIMETypeFromURL = function (url, callback) { this.getMIMETypeFromURL = function (url, callback) {
Zotero.Utilities.HTTP.doHead(url, function(xmlhttp) { Zotero.HTTP.doHead(url, function(xmlhttp) {
if (xmlhttp.status != 200 && xmlhttp.status != 204) { if (xmlhttp.status != 200 && xmlhttp.status != 204) {
Zotero.debug("Attachment HEAD request returned with status code " Zotero.debug("Attachment HEAD request returned with status code "
+ xmlhttp.status + " in Zotero.MIME.getMIMETypeFromURL()", 2); + xmlhttp.status + " in Zotero.MIME.getMIMETypeFromURL()", 2);

View File

@ -210,8 +210,7 @@ Zotero.ProgressWindow = function(_window){
newHB.setAttribute("class", "zotero-progress-item-hbox"); newHB.setAttribute("class", "zotero-progress-item-hbox");
var newDescription = _progressWindow.document.createElement("description"); var newDescription = _progressWindow.document.createElement("description");
var utils = new Zotero.Utilities(); var parts = Zotero.Utilities.parseMarkup(text);
var parts = utils.parseMarkup(text);
for each(var part in parts) { for each(var part in parts) {
if (part.type == 'text') { if (part.type == 'text') {
var elem = _progressWindow.document.createTextNode(part.text); var elem = _progressWindow.document.createTextNode(part.text);

View File

@ -304,7 +304,7 @@ Zotero.QuickCopy = new function() {
} }
} }
var text = Zotero.Utilities.prototype.unescapeHTML(textXML.toXMLString()); var text = Zotero.Utilities.unescapeHTML(textXML.toXMLString());
text = text.replace(new RegExp(ztab, "g"), " "); text = text.replace(new RegExp(ztab, "g"), " ");
if (text.trim) { if (text.trim) {
@ -312,7 +312,7 @@ Zotero.QuickCopy = new function() {
} }
// TODO: Remove once >=Fx3.5 // TODO: Remove once >=Fx3.5
else { else {
text = Zotero.Utilities.prototype.trim(text) text = Zotero.Utilities.trim(text)
} }
// //

View File

@ -36,7 +36,7 @@ Zotero.Report = new function() {
var escapeXML = function (str) { var escapeXML = function (str) {
str = str.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\ud800-\udfff\ufffe\uffff]/g, '\u2B1A'); str = str.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\ud800-\udfff\ufffe\uffff]/g, '\u2B1A');
return Zotero.Utilities.prototype.htmlSpecialChars(str); return Zotero.Utilities.htmlSpecialChars(str);
} }
@ -224,7 +224,7 @@ Zotero.Report = new function() {
continue; continue;
} }
arr[i] = Zotero.Utilities.prototype.trim(arr[i] + ''); arr[i] = Zotero.Utilities.trim(arr[i] + '');
// Skip empty fields // Skip empty fields
if (!arr[i]) { if (!arr[i]) {

View File

@ -227,7 +227,7 @@ Zotero.Schema = new function(){
return; return;
} }
str = Zotero.Utilities.prototype.trim(str); str = Zotero.Utilities.trim(str);
Zotero.debug(str); Zotero.debug(str);
@ -906,7 +906,7 @@ Zotero.Schema = new function(){
} }
} }
var get = Zotero.Utilities.HTTP.doGet(url, function (xmlhttp) { var get = Zotero.HTTP.doGet(url, function (xmlhttp) {
var updated = _updateFromRepositoryCallback(xmlhttp, !!force); var updated = _updateFromRepositoryCallback(xmlhttp, !!force);
if (callback) { if (callback) {
callback(xmlhttp, updated) callback(xmlhttp, updated)
@ -1449,8 +1449,6 @@ Zotero.Schema = new function(){
Zotero.debug('Updating user data tables from version ' + fromVersion + ' to ' + toVersion); Zotero.debug('Updating user data tables from version ' + fromVersion + ' to ' + toVersion);
var ZU = new Zotero.Utilities;
Zotero.DB.beginTransaction(); Zotero.DB.beginTransaction();
try { try {
@ -2458,7 +2456,7 @@ Zotero.Schema = new function(){
var rows = Zotero.DB.query("SELECT * FROM itemDataValues WHERE value REGEXP '(^\\s+|\\s+$)'"); var rows = Zotero.DB.query("SELECT * FROM itemDataValues WHERE value REGEXP '(^\\s+|\\s+$)'");
if (rows) { if (rows) {
for each(var row in rows) { for each(var row in rows) {
var trimmed = Zotero.Utilities.prototype.trim(row.value); var trimmed = Zotero.Utilities.trim(row.value);
var valueID = Zotero.DB.valueQuery("SELECT valueID FROM itemDataValues WHERE value=?", trimmed); var valueID = Zotero.DB.valueQuery("SELECT valueID FROM itemDataValues WHERE value=?", trimmed);
if (valueID) { if (valueID) {
Zotero.DB.query("UPDATE OR REPLACE itemData SET valueID=? WHERE valueID=?", [valueID, row.valueID]); Zotero.DB.query("UPDATE OR REPLACE itemData SET valueID=? WHERE valueID=?", [valueID, row.valueID]);
@ -2494,7 +2492,7 @@ Zotero.Schema = new function(){
var rows = Zotero.DB.query("SELECT * FROM tags WHERE name REGEXP '(^\\s+|\\s+$)'"); var rows = Zotero.DB.query("SELECT * FROM tags WHERE name REGEXP '(^\\s+|\\s+$)'");
if (rows) { if (rows) {
for each(var row in rows) { for each(var row in rows) {
var trimmed = Zotero.Utilities.prototype.trim(row.name); var trimmed = Zotero.Utilities.trim(row.name);
var tagID = Zotero.DB.valueQuery("SELECT tagID FROM tags WHERE name=?", trimmed); var tagID = Zotero.DB.valueQuery("SELECT tagID FROM tags WHERE name=?", trimmed);
if (tagID) { if (tagID) {
Zotero.DB.query("UPDATE OR REPLACE itemTags SET tagID=? WHERE tagID=?", [tagID, row.tagID]); Zotero.DB.query("UPDATE OR REPLACE itemTags SET tagID=? WHERE tagID=?", [tagID, row.tagID]);

View File

@ -114,7 +114,7 @@ Zotero.Search.prototype._set = function (field, val) {
return; return;
case 'name': case 'name':
val = Zotero.Utilities.prototype.trim(val); val = Zotero.Utilities.trim(val);
break; break;
} }
@ -964,8 +964,6 @@ Zotero.Search.prototype._idsToTempTable = function (ids) {
* Build the SQL query for the search * Build the SQL query for the search
*/ */
Zotero.Search.prototype._buildQuery = function(){ Zotero.Search.prototype._buildQuery = function(){
var utils = new Zotero.Utilities();
var sql = 'SELECT itemID FROM items'; var sql = 'SELECT itemID FROM items';
var sqlParams = []; var sqlParams = [];
// Separate ANY conditions for 'required' condition support // Separate ANY conditions for 'required' condition support
@ -1341,13 +1339,13 @@ Zotero.Search.prototype._buildQuery = function(){
// to '00' so that a search for just a year works // to '00' so that a search for just a year works
// (and no year will just not find anything) // (and no year will just not find anything)
var sqldate = dateparts.year ? var sqldate = dateparts.year ?
utils.lpad(dateparts.year, '0', 4) : '____'; Zotero.Utilities.lpad(dateparts.year, '0', 4) : '____';
sqldate += '-' sqldate += '-'
sqldate += dateparts.month || dateparts.month === 0 ? sqldate += dateparts.month || dateparts.month === 0 ?
utils.lpad(dateparts.month + 1, '0', 2) : alt; Zotero.Utilities.lpad(dateparts.month + 1, '0', 2) : alt;
sqldate += '-'; sqldate += '-';
sqldate += dateparts.day ? sqldate += dateparts.day ?
utils.lpad(dateparts.day, '0', 2) : alt; Zotero.Utilities.lpad(dateparts.day, '0', 2) : alt;
if (sqldate!='____-__-__'){ if (sqldate!='____-__-__'){
go = true; go = true;

View File

@ -1067,7 +1067,7 @@ Zotero.Sync.Storage = new function () {
var entryName = entries.getNext(); var entryName = entries.getNext();
var b64re = /%ZB64$/; var b64re = /%ZB64$/;
if (entryName.match(b64re)) { if (entryName.match(b64re)) {
var fileName = Zotero.Utilities.Base64.decode( var fileName = Zotero.Utilities.Internal.Base64.decode(
entryName.replace(b64re, '') entryName.replace(b64re, '')
); );
} }
@ -1410,7 +1410,7 @@ Zotero.Sync.Storage = new function () {
//Zotero.debug("Adding file " + fileName); //Zotero.debug("Adding file " + fileName);
fileName = Zotero.Utilities.Base64.encode(fileName) + "%ZB64"; fileName = Zotero.Utilities.Internal.Base64.encode(fileName) + "%ZB64";
zipWriter.addEntryFile( zipWriter.addEntryFile(
fileName, fileName,
Components.interfaces.nsIZipWriter.COMPRESSION_DEFAULT, Components.interfaces.nsIZipWriter.COMPRESSION_DEFAULT,
@ -1814,7 +1814,7 @@ Zotero.Sync.Storage.QueueManager = new function () {
var kbRemaining = Zotero.getString( var kbRemaining = Zotero.getString(
'sync.storage.kbRemaining', 'sync.storage.kbRemaining',
Zotero.Utilities.prototype.numberFormat(remaining / 1024, 0) Zotero.Utilities.numberFormat(remaining / 1024, 0)
); );
var totalRequests = queue.totalRequests; var totalRequests = queue.totalRequests;
var filesRemaining = Zotero.getString( var filesRemaining = Zotero.getString(

View File

@ -224,7 +224,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype._getStorageModificationTime = funct
var self = this; var self = this;
Zotero.Utilities.HTTP.doGet(uri, function (req) { Zotero.HTTP.doGet(uri, function (req) {
self._checkResponse(req, self); self._checkResponse(req, self);
var funcName = "Zotero.Sync.Storage.WebDAV_getStorageModificationTime()"; var funcName = "Zotero.Sync.Storage.WebDAV_getStorageModificationTime()";
@ -288,7 +288,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype._getStorageModificationTime = funct
// Delete invalid .prop files // Delete invalid .prop files
if (invalid) { if (invalid) {
var msg = "Invalid mod date '" + Zotero.Utilities.prototype.ellipsize(mtime, 20) var msg = "Invalid mod date '" + Zotero.Utilities.ellipsize(mtime, 20)
+ "' for item " + Zotero.Items.getLibraryKeyHash(item); + "' for item " + Zotero.Items.getLibraryKeyHash(item);
Zotero.debug(msg, 1); Zotero.debug(msg, 1);
Components.utils.reportError(msg); Components.utils.reportError(msg);
@ -320,7 +320,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype._setStorageModificationTime = funct
<hash>{hash}</hash> <hash>{hash}</hash>
</properties>; </properties>;
Zotero.Utilities.HTTP.WebDAV.doPut(uri, prop.toXMLString(), function (req) { Zotero.HTTP.WebDAV.doPut(uri, prop.toXMLString(), function (req) {
switch (req.status) { switch (req.status) {
case 200: case 200:
case 201: case 201:
@ -707,7 +707,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.getLastSyncTime = function (callbac
if (!this._cachedCredentials) { if (!this._cachedCredentials) {
var self = this; var self = this;
Zotero.Utilities.HTTP.doOptions(this.rootURI, function (req) { Zotero.HTTP.doOptions(this.rootURI, function (req) {
self._checkResponse(req, self); self._checkResponse(req, self);
if (req.status != 200) { if (req.status != 200) {
@ -728,7 +728,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.getLastSyncTime = function (callbac
var uri = this.rootURI; var uri = this.rootURI;
var successFileURI = uri.clone(); var successFileURI = uri.clone();
successFileURI.spec += "lastsync"; successFileURI.spec += "lastsync";
Zotero.Utilities.HTTP.doHead(successFileURI, function (req) { Zotero.HTTP.doHead(successFileURI, function (req) {
var ts = undefined; var ts = undefined;
try { try {
if (req.responseText) { if (req.responseText) {
@ -783,7 +783,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.setLastSyncTime = function (callbac
var self = this; var self = this;
Zotero.Utilities.HTTP.WebDAV.doPut(successFileURI, " ", function (req) { Zotero.HTTP.WebDAV.doPut(successFileURI, " ", function (req) {
Zotero.debug(req.responseText); Zotero.debug(req.responseText);
Zotero.debug(req.status); Zotero.debug(req.status);
@ -865,7 +865,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.checkServer = function (callback) {
var self = this; var self = this;
// Test whether URL is WebDAV-enabled // Test whether URL is WebDAV-enabled
var request = Zotero.Utilities.HTTP.doOptions(uri, function (req) { var request = Zotero.HTTP.doOptions(uri, function (req) {
// Timeout // Timeout
if (req.status == 0) { if (req.status == 0) {
self._checkResponse(req, self); self._checkResponse(req, self);
@ -904,12 +904,12 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.checkServer = function (callback) {
// Get the Authorization header used in case we need to do a request // Get the Authorization header used in case we need to do a request
// on the parent below // on the parent below
var channelAuthorization = Zotero.Utilities.HTTP.getChannelAuthorization(req.channel); var channelAuthorization = Zotero.HTTP.getChannelAuthorization(req.channel);
var headers = { Depth: 0 }; var headers = { Depth: 0 };
// Test whether Zotero directory exists // Test whether Zotero directory exists
Zotero.Utilities.HTTP.WebDAV.doProp("PROPFIND", uri, xmlstr, function (req) { Zotero.HTTP.WebDAV.doProp("PROPFIND", uri, xmlstr, function (req) {
Zotero.debug(req.responseText); Zotero.debug(req.responseText);
Zotero.debug(req.status); Zotero.debug(req.status);
@ -918,7 +918,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.checkServer = function (callback) {
// Test if Zotero directory is writable // Test if Zotero directory is writable
var testFileURI = uri.clone(); var testFileURI = uri.clone();
testFileURI.spec += "zotero-test-file"; testFileURI.spec += "zotero-test-file";
Zotero.Utilities.HTTP.WebDAV.doPut(testFileURI, " ", function (req) { Zotero.HTTP.WebDAV.doPut(testFileURI, " ", function (req) {
Zotero.debug(req.responseText); Zotero.debug(req.responseText);
Zotero.debug(req.status); Zotero.debug(req.status);
@ -926,7 +926,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.checkServer = function (callback) {
case 200: case 200:
case 201: case 201:
case 204: case 204:
Zotero.Utilities.HTTP.doHead( Zotero.HTTP.doHead(
testFileURI, testFileURI,
function (req) { function (req) {
Zotero.debug(req.responseText); Zotero.debug(req.responseText);
@ -935,7 +935,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.checkServer = function (callback) {
switch (req.status) { switch (req.status) {
case 200: case 200:
// Delete test file // Delete test file
Zotero.Utilities.HTTP.WebDAV.doDelete( Zotero.HTTP.WebDAV.doDelete(
testFileURI, testFileURI,
function (req) { function (req) {
Zotero.debug(req.responseText); Zotero.debug(req.responseText);
@ -1034,7 +1034,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.checkServer = function (callback) {
// Zotero directory wasn't found, so see if at least // Zotero directory wasn't found, so see if at least
// the parent directory exists // the parent directory exists
Zotero.Utilities.HTTP.WebDAV.doProp("PROPFIND", parentURI, xmlstr, Zotero.HTTP.WebDAV.doProp("PROPFIND", parentURI, xmlstr,
function (req) { function (req) {
Zotero.debug(req.responseText); Zotero.debug(req.responseText);
Zotero.debug(req.status); Zotero.debug(req.status);
@ -1316,7 +1316,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.purgeOrphanedStorageFiles = functio
var self = this; var self = this;
Zotero.Utilities.HTTP.WebDAV.doProp("PROPFIND", uri, xmlstr, function (req) { Zotero.HTTP.WebDAV.doProp("PROPFIND", uri, xmlstr, function (req) {
Zotero.debug(req.responseText); Zotero.debug(req.responseText);
var funcName = "Zotero.Sync.Storage.purgeOrphanedStorageFiles()"; var funcName = "Zotero.Sync.Storage.purgeOrphanedStorageFiles()";
@ -1413,7 +1413,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.purgeOrphanedStorageFiles = functio
*/ */
Zotero.Sync.Storage.Session.WebDAV.prototype._createServerDirectory = function (callback) { Zotero.Sync.Storage.Session.WebDAV.prototype._createServerDirectory = function (callback) {
var uri = this.rootURI; var uri = this.rootURI;
Zotero.Utilities.HTTP.WebDAV.doMkCol(uri, function (req) { Zotero.HTTP.WebDAV.doMkCol(uri, function (req) {
Zotero.debug(req.responseText); Zotero.debug(req.responseText);
Zotero.debug(req.status); Zotero.debug(req.status);
@ -1536,7 +1536,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype._deleteStorageFiles = function (fil
deleteURI.QueryInterface(Components.interfaces.nsIURL); deleteURI.QueryInterface(Components.interfaces.nsIURL);
deleteURI.fileName = files[i]; deleteURI.fileName = files[i];
deleteURI.QueryInterface(Components.interfaces.nsIURI); deleteURI.QueryInterface(Components.interfaces.nsIURI);
Zotero.Utilities.HTTP.WebDAV.doDelete(deleteURI, function (req) { Zotero.HTTP.WebDAV.doDelete(deleteURI, function (req) {
switch (req.status) { switch (req.status) {
case 204: case 204:
// IIS 5.1 and Sakai return 200 // IIS 5.1 and Sakai return 200
@ -1586,7 +1586,7 @@ Zotero.Sync.Storage.Session.WebDAV.prototype._deleteStorageFiles = function (fil
} }
// Delete property file // Delete property file
Zotero.Utilities.HTTP.WebDAV.doDelete(deletePropURI, function (req) { Zotero.HTTP.WebDAV.doDelete(deletePropURI, function (req) {
switch (req.status) { switch (req.status) {
case 204: case 204:
// IIS 5.1 and Sakai return 200 // IIS 5.1 and Sakai return 200

View File

@ -111,7 +111,7 @@ Zotero.Sync.Storage.Session.ZFS.prototype._getStorageFileInfo = function (item,
var self = this; var self = this;
Zotero.Utilities.HTTP.doGet(uri, function (req) { Zotero.HTTP.doGet(uri, function (req) {
var funcName = "Zotero.Sync.Storage.Session.ZFS._getStorageFileInfo()"; var funcName = "Zotero.Sync.Storage.Session.ZFS._getStorageFileInfo()";
if (req.status == 404) { if (req.status == 404) {
@ -467,7 +467,7 @@ Zotero.Sync.Storage.Session.ZFS.prototype._getFileUploadParameters = function (i
} }
var mtime = item.attachmentModificationTime; var mtime = item.attachmentModificationTime;
var hash = Zotero.Utilities.prototype.md5(file); var hash = Zotero.Utilities.Internal.md5(file);
var body = "md5=" + hash + "&filename=" + encodeURIComponent(filename) var body = "md5=" + hash + "&filename=" + encodeURIComponent(filename)
+ "&filesize=" + file.fileSize + "&mtime=" + mtime; + "&filesize=" + file.fileSize + "&mtime=" + mtime;
@ -477,7 +477,7 @@ Zotero.Sync.Storage.Session.ZFS.prototype._getFileUploadParameters = function (i
var self = this; var self = this;
Zotero.Utilities.HTTP.doPost(uri, body, function (req) { Zotero.HTTP.doPost(uri, body, function (req) {
var funcName = "Zotero.Sync.Storage.Session.ZFS._getFileUploadParameters()"; var funcName = "Zotero.Sync.Storage.Session.ZFS._getFileUploadParameters()";
if (req.status == 413) { if (req.status == 413) {
@ -571,7 +571,7 @@ Zotero.Sync.Storage.Session.ZFS.prototype._getFileUploadParameters = function (i
try { try {
// Strip XML declaration and convert to E4X // Strip XML declaration and convert to E4X
var xml = new XML(Zotero.Utilities.prototype.trim(req.responseText.replace(/<\?xml.*\?>/, ''))); var xml = new XML(Zotero.Utilities.trim(req.responseText.replace(/<\?xml.*\?>/, '')));
} }
catch (e) { catch (e) {
self.onError("Invalid response retrieving file upload parameters"); self.onError("Invalid response retrieving file upload parameters");
@ -748,7 +748,7 @@ Zotero.Sync.Storage.Session.ZFS.prototype._onUploadComplete = function (httpRequ
var self = this; var self = this;
// Register upload on server // Register upload on server
Zotero.Utilities.HTTP.doPost(uri, body, function (req) { Zotero.HTTP.doPost(uri, body, function (req) {
if (req.status != 204) { if (req.status != 204) {
var msg = "Unexpected file registration status " + req.status var msg = "Unexpected file registration status " + req.status
+ " in Zotero.Sync.Storage._onUploadComplete()" + " in Zotero.Sync.Storage._onUploadComplete()"
@ -832,7 +832,7 @@ Zotero.Sync.Storage.Session.ZFS.prototype.getLastSyncTime = function (callback)
var uri = this.rootURI; var uri = this.rootURI;
// TODO: move to root uri // TODO: move to root uri
uri.spec += "?auth=1"; uri.spec += "?auth=1";
Zotero.Utilities.HTTP.doGet(uri, function (req) { Zotero.HTTP.doGet(uri, function (req) {
if (req.status != 200) { if (req.status != 200) {
var msg = "Unexpected status code " + req.status + " caching " var msg = "Unexpected status code " + req.status + " caching "
+ "authentication credentials in Zotero.Sync.Storage.Session.ZFS.getLastSyncTime()"; + "authentication credentials in Zotero.Sync.Storage.Session.ZFS.getLastSyncTime()";
@ -847,7 +847,7 @@ Zotero.Sync.Storage.Session.ZFS.prototype.getLastSyncTime = function (callback)
return; return;
} }
Zotero.Utilities.HTTP.doGet(successFileURI, function (req) { Zotero.HTTP.doGet(successFileURI, function (req) {
if (req.responseText) { if (req.responseText) {
Zotero.debug(req.responseText); Zotero.debug(req.responseText);
} }
@ -910,7 +910,7 @@ Zotero.Sync.Storage.Session.ZFS.prototype.setLastSyncTime = function (callback,
var self = this; var self = this;
Zotero.Utilities.HTTP.doPost(successFileURI, "", function (req) { Zotero.HTTP.doPost(successFileURI, "", function (req) {
Zotero.debug(req.responseText); Zotero.debug(req.responseText);
Zotero.debug(req.status); Zotero.debug(req.status);
@ -971,7 +971,7 @@ Zotero.Sync.Storage.Session.ZFS.prototype.purgeDeletedStorageFiles = function (c
var self = this; var self = this;
Zotero.Utilities.HTTP.doPost(uri, "", function (xmlhttp) { Zotero.HTTP.doPost(uri, "", function (xmlhttp) {
if (xmlhttp.status != 204) { if (xmlhttp.status != 204) {
if (callback) { if (callback) {
callback(false); callback(false);

View File

@ -253,7 +253,7 @@ Zotero.Styles = new function() {
if(source && !_styles[source]) { if(source && !_styles[source]) {
// need to fetch source // need to fetch source
if(source.substr(0, 7) == "http://" || source.substr(0, 8) == "https://") { if(source.substr(0, 7) == "http://" || source.substr(0, 8) == "https://") {
Zotero.Utilities.HTTP.doGet(source, function(xmlhttp) { Zotero.HTTP.doGet(source, function(xmlhttp) {
var success = false; var success = false;
var error = null; var error = null;
try { try {

View File

@ -395,8 +395,6 @@ Zotero.Sync.EventListener = new function () {
var isItem = Zotero.Sync.getObjectTypeName(objectTypeID) == 'item'; var isItem = Zotero.Sync.getObjectTypeName(objectTypeID) == 'item';
var ZU = new Zotero.Utilities;
Zotero.DB.beginTransaction(); Zotero.DB.beginTransaction();
if (event == 'delete') { if (event == 'delete') {
@ -504,7 +502,7 @@ Zotero.Sync.Runner = new function () {
this.sync = function (background) { this.sync = function (background) {
_warning = null; _warning = null;
if (Zotero.Utilities.HTTP.browserIsOffline()){ if (Zotero.HTTP.browserIsOffline()){
this.clearSyncTimeout(); // DEBUG: necessary? this.clearSyncTimeout(); // DEBUG: necessary?
var msg = "Zotero cannot sync while Firefox is in offline mode."; var msg = "Zotero cannot sync while Firefox is in offline mode.";
var e = new Zotero.Error(msg, 0, { dialogButtonText: null }) var e = new Zotero.Error(msg, 0, { dialogButtonText: null })
@ -1241,7 +1239,7 @@ Zotero.Sync.Server = new function () {
Zotero.Sync.Runner.setSyncStatus(Zotero.getString('sync.status.loggingIn')); Zotero.Sync.Runner.setSyncStatus(Zotero.getString('sync.status.loggingIn'));
Zotero.Utilities.HTTP.doPost(url, body, function (xmlhttp) { Zotero.HTTP.doPost(url, body, function (xmlhttp) {
_checkResponse(xmlhttp); _checkResponse(xmlhttp);
var response = xmlhttp.responseXML.childNodes[0]; var response = xmlhttp.responseXML.childNodes[0];
@ -1325,7 +1323,7 @@ Zotero.Sync.Server = new function () {
Zotero.Sync.Runner.setSyncStatus(Zotero.getString('sync.status.gettingUpdatedData')); Zotero.Sync.Runner.setSyncStatus(Zotero.getString('sync.status.gettingUpdatedData'));
Zotero.Utilities.HTTP.doPost(url, body, function (xmlhttp) { Zotero.HTTP.doPost(url, body, function (xmlhttp) {
Zotero.debug(xmlhttp.responseText); Zotero.debug(xmlhttp.responseText);
_checkResponse(xmlhttp); _checkResponse(xmlhttp);
@ -1352,7 +1350,7 @@ Zotero.Sync.Server = new function () {
_error(response.firstChild.firstChild.nodeValue); _error(response.firstChild.firstChild.nodeValue);
} }
var xml = Zotero.Utilities.prototype.trim(xmlhttp.responseText.replace(/<\?xml.*\?>\s*/, '')); var xml = Zotero.Utilities.trim(xmlhttp.responseText.replace(/<\?xml.*\?>\s*/, ''));
// Strip XML declaration and convert to E4X // Strip XML declaration and convert to E4X
xml = new XML(xml); xml = new XML(xml);
@ -1495,7 +1493,7 @@ Zotero.Sync.Server = new function () {
var url = _serverURL + 'uploadstatus'; var url = _serverURL + 'uploadstatus';
var body = _apiVersionComponent var body = _apiVersionComponent
+ '&' + Zotero.Sync.Server.sessionIDComponent; + '&' + Zotero.Sync.Server.sessionIDComponent;
Zotero.Utilities.HTTP.doPost(url, body, function (xmlhttp) { Zotero.HTTP.doPost(url, body, function (xmlhttp) {
uploadCallback(xmlhttp); uploadCallback(xmlhttp);
}); });
break; break;
@ -1559,7 +1557,7 @@ Zotero.Sync.Server = new function () {
+ " (gzipped from " + oldLen + " bytes; " + " (gzipped from " + oldLen + " bytes; "
+ savings + "% savings)"); + savings + "% savings)");
if (Zotero.Utilities.HTTP.browserIsOffline()) { if (Zotero.HTTP.browserIsOffline()) {
Zotero.debug('Browser is offline'); Zotero.debug('Browser is offline');
return false; return false;
} }
@ -1609,7 +1607,7 @@ Zotero.Sync.Server = new function () {
// Don't compress upload data // Don't compress upload data
else { else {
Zotero.Utilities.HTTP.doPost(url, body, uploadCallback); Zotero.HTTP.doPost(url, body, uploadCallback);
} }
} }
catch (e) { catch (e) {
@ -1637,7 +1635,7 @@ Zotero.Sync.Server = new function () {
var body = _apiVersionComponent var body = _apiVersionComponent
+ '&' + Zotero.Sync.Server.sessionIDComponent; + '&' + Zotero.Sync.Server.sessionIDComponent;
Zotero.Utilities.HTTP.doPost(url, body, function (xmlhttp) { Zotero.HTTP.doPost(url, body, function (xmlhttp) {
if (_invalidSession(xmlhttp)) { if (_invalidSession(xmlhttp)) {
Zotero.debug("Invalid session ID -- logging in"); Zotero.debug("Invalid session ID -- logging in");
_sessionID = false; _sessionID = false;
@ -1698,7 +1696,7 @@ Zotero.Sync.Server = new function () {
_sessionID = null; _sessionID = null;
Zotero.Utilities.HTTP.doPost(url, body, function (xmlhttp) { Zotero.HTTP.doPost(url, body, function (xmlhttp) {
_checkResponse(xmlhttp); _checkResponse(xmlhttp);
Zotero.debug(xmlhttp.responseText); Zotero.debug(xmlhttp.responseText);
@ -2223,7 +2221,7 @@ Zotero.Sync.Server = new function () {
if (extraInfo) { if (extraInfo) {
// Server errors will generally be HTML // Server errors will generally be HTML
extraInfo = Zotero.Utilities.prototype.unescapeHTML(extraInfo); extraInfo = Zotero.Utilities.unescapeHTML(extraInfo);
Components.utils.reportError(extraInfo); Components.utils.reportError(extraInfo);
} }
@ -2853,12 +2851,12 @@ Zotero.Sync.Server.Data = new function() {
} }
} }
// Add // Add
toAdd = Zotero.Utilities.prototype.arrayDiff(toAdd, existing); toAdd = Zotero.Utilities.arrayDiff(toAdd, existing);
var changed = toAdd.length > 0; var changed = toAdd.length > 0;
existing = existing.concat(toAdd); existing = existing.concat(toAdd);
var origLen = existing.length; var origLen = existing.length;
// Remove // Remove
existing = Zotero.Utilities.prototype.arrayDiff(existing, toRemove); existing = Zotero.Utilities.arrayDiff(existing, toRemove);
changed = changed || origLen != existing.length; changed = changed || origLen != existing.length;
// Set // Set
if (changed) { if (changed) {
@ -3220,7 +3218,7 @@ Zotero.Sync.Server.Data = new function() {
if (!itemIDs) { if (!itemIDs) {
return false; return false;
} }
var newItemIDs = Zotero.Utilities.prototype.arrayDiff(itemIDs, childItems); var newItemIDs = Zotero.Utilities.arrayDiff(itemIDs, childItems);
if (itemIDs.length == newItemIDs.length) { if (itemIDs.length == newItemIDs.length) {
return false; return false;
} }
@ -3462,7 +3460,7 @@ Zotero.Sync.Server.Data = new function() {
}; };
if (type == 'item') { if (type == 'item') {
if (!Zotero.Utilities.prototype.isEmpty(changedCreators)) { if (!Zotero.Utilities.isEmpty(changedCreators)) {
io.dataIn.changedCreators = changedCreators; io.dataIn.changedCreators = changedCreators;
} }
} }

View File

@ -29,8 +29,7 @@ Zotero.Timeline = new function () {
this.generateXMLList = generateXMLList; this.generateXMLList = generateXMLList;
function generateXMLDetails(items, dateType) { function generateXMLDetails(items, dateType) {
var ZU = new Zotero.Utilities(); var escapeXML = Zotero.Utilities.htmlSpecialChars;
var escapeXML = ZU.htmlSpecialChars;
var content = '<data>\n'; var content = '<data>\n';
for each(var arr in items) { for each(var arr in items) {

View File

@ -959,7 +959,7 @@ Zotero.Translate.prototype._generateSandbox = function() {
// add utilities // add utilities
this._sandbox.Zotero.Utilities = new Zotero.Utilities.Translate(this); this._sandbox.Zotero.Utilities = new Zotero.Utilities.Translate(this);
this._sandbox.Zotero.Utilities.HTTP = this._sandbox.Zotero.Utilities; this._sandbox.Zotero.HTTP = this._sandbox.Zotero.Utilities;
if(this.type == "export") { if(this.type == "export") {
// add routines to retrieve items and collections // add routines to retrieve items and collections
@ -1319,7 +1319,7 @@ Zotero.Translate.prototype._reportTranslationFailure = function(errorData) {
"&lastUpdated=" + encodeURIComponent(this.translator[0].lastUpdated) + "&lastUpdated=" + encodeURIComponent(this.translator[0].lastUpdated) +
"&diagnostic=" + encodeURIComponent(Zotero.getSystemInfo()) + "&diagnostic=" + encodeURIComponent(Zotero.getSystemInfo()) +
"&errorData=" + encodeURIComponent(errorData); "&errorData=" + encodeURIComponent(errorData);
Zotero.Utilities.HTTP.doPost("http://www.zotero.org/repo/report", postBody); Zotero.HTTP.doPost("http://www.zotero.org/repo/report", postBody);
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -336,7 +336,7 @@ Zotero.Zeroconf.RemoteLibrary.prototype.load = function () {
Zotero.Zeroconf.RemoteLibrary.prototype.loadItems = function (self, noNotify) { Zotero.Zeroconf.RemoteLibrary.prototype.loadItems = function (self, noNotify) {
var url = "http://" + this._host + ':' + this._port; var url = "http://" + this._host + ':' + this._port;
Zotero.Utilities.HTTP.doPost(url, '', function (xmlhttp) { Zotero.HTTP.doPost(url, '', function (xmlhttp) {
Zotero.debug(xmlhttp.responseText); Zotero.debug(xmlhttp.responseText);
self._items = []; self._items = [];

View File

@ -1485,7 +1485,7 @@ Zotero.Prefs = new function(){
return; return;
} }
str = Zotero.Utilities.prototype.trim(str.replace(/<\?xml.*\?>\s*/, '')); str = Zotero.Utilities.trim(str.replace(/<\?xml.*\?>\s*/, ''));
Zotero.debug(str); Zotero.debug(str);
var confirm = ps.confirm( var confirm = ps.confirm(
@ -1912,13 +1912,12 @@ Zotero.Date = new function(){
return date.toLocaleFormat('%Y-%m-%d %H:%M:%S'); return date.toLocaleFormat('%Y-%m-%d %H:%M:%S');
} }
var utils = new Zotero.Utilities(); year = Zotero.Utilities.lpad(year, '0', 4);
year = utils.lpad(year, '0', 4); month = Zotero.Utilities.lpad(month + 1, '0', 2);
month = utils.lpad(month + 1, '0', 2); day = Zotero.Utilities.lpad(day, '0', 2);
day = utils.lpad(day, '0', 2); hours = Zotero.Utilities.lpad(hours, '0', 2);
hours = utils.lpad(hours, '0', 2); minutes = Zotero.Utilities.lpad(minutes, '0', 2);
minutes = utils.lpad(minutes, '0', 2); seconds = Zotero.Utilities.lpad(seconds, '0', 2);
seconds = utils.lpad(seconds, '0', 2);
return year + '-' + month + '-' + day + ' ' return year + '-' + month + '-' + day + ' '
+ hours + ':' + minutes + ':' + seconds; + hours + ':' + minutes + ':' + seconds;
@ -1945,13 +1944,12 @@ Zotero.Date = new function(){
var minutes = date.getUTCMinutes(); var minutes = date.getUTCMinutes();
var seconds = date.getUTCSeconds(); var seconds = date.getUTCSeconds();
var utils = new Zotero.Utilities(); year = Zotero.Utilities.lpad(year, '0', 4);
year = utils.lpad(year, '0', 4); month = Zotero.Utilities.lpad(month + 1, '0', 2);
month = utils.lpad(month + 1, '0', 2); day = Zotero.Utilities.lpad(day, '0', 2);
day = utils.lpad(day, '0', 2); hours = Zotero.Utilities.lpad(hours, '0', 2);
hours = utils.lpad(hours, '0', 2); minutes = Zotero.Utilities.lpad(minutes, '0', 2);
minutes = utils.lpad(minutes, '0', 2); seconds = Zotero.Utilities.lpad(seconds, '0', 2);
seconds = utils.lpad(seconds, '0', 2);
return year + '-' + month + '-' + day + 'T' return year + '-' + month + '-' + day + 'T'
+ hours + ':' + minutes + ':' + seconds + 'Z'; + hours + ':' + minutes + ':' + seconds + 'Z';
@ -2217,11 +2215,11 @@ Zotero.Date = new function(){
var date = Zotero.Date.strToDate(str); var date = Zotero.Date.strToDate(str);
if(date.year) { if(date.year) {
var dateString = Zotero.Utilities.prototype.lpad(date.year, "0", 4); var dateString = Zotero.Utilities.lpad(date.year, "0", 4);
if(date.month) { if(date.month) {
dateString += "-"+Zotero.Utilities.prototype.lpad(date.month+1, "0", 2); dateString += "-"+Zotero.Utilities.lpad(date.month+1, "0", 2);
if(date.day) { if(date.day) {
dateString += "-"+Zotero.Utilities.prototype.lpad(date.day, "0", 2); dateString += "-"+Zotero.Utilities.lpad(date.day, "0", 2);
} }
} }
return dateString; return dateString;
@ -2234,8 +2232,6 @@ Zotero.Date = new function(){
return ''; return '';
} }
var utils = new Zotero.Utilities();
var parts = strToDate(str); var parts = strToDate(str);
// FIXME: Until we have a better BCE date solution, // FIXME: Until we have a better BCE date solution,
@ -2249,9 +2245,9 @@ Zotero.Date = new function(){
parts.month = typeof parts.month != "undefined" ? parts.month + 1 : ''; parts.month = typeof parts.month != "undefined" ? parts.month + 1 : '';
var multi = (parts.year ? utils.lpad(parts.year, '0', 4) : '0000') + '-' var multi = (parts.year ? Zotero.Utilities.lpad(parts.year, '0', 4) : '0000') + '-'
+ utils.lpad(parts.month, '0', 2) + '-' + Zotero.Utilities.lpad(parts.month, '0', 2) + '-'
+ (parts.day ? utils.lpad(parts.day, '0', 2) : '00') + (parts.day ? Zotero.Utilities.lpad(parts.day, '0', 2) : '00')
+ ' ' + ' '
+ str; + str;
return multi; return multi;

View File

@ -84,6 +84,7 @@ var xpcomFiles = [
'error', 'error',
'file', 'file',
'fulltext', 'fulltext',
'http',
'id', 'id',
'ingester', 'ingester',
'integration', 'integration',