rendered paste bodydiff -Nur zotero@chnm.gmu.edu.orig/chrome/content/zotero/overlay.js zotero@chnm.gmu.edu/chrome/content/zotero/overlay.js--- zotero@chnm.gmu.edu.orig/chrome/content/zotero/overlay.js 2008-07-16 01:59:00.000000000 +0200+++ zotero@chnm.gmu.edu/chrome/content/zotero/overlay.js 2008-09-28 20:26:03.636275200 +0200@@ -186,9 +186,36 @@ }, 400); Zotero.Prefs.set('firstRun', false); }+ + refreshScuttleSiteListOnly(); } - + function refreshScuttleSiteListOnly()+ {+ var sql = "SELECT key AS domainPath, value AS isact FROM settings "+ + "WHERE setting='scuttleSite' ORDER BY domainPath COLLATE NOCASE";+ var siteData = Zotero.DB.query(sql);+ + var sitelist = "";+ Zotero.Prefs.set('scuttle.sitelist', sitelist);+ + if (!siteData) {+ return;+ }+ + + for (var i=0; i<siteData.length; i++) {+ + if (siteData[i].isact) sitelist += siteData[i].domainPath + ",";+ + }+ + sitelist = sitelist.substr(0, sitelist.length-1);+ Zotero.Prefs.set('scuttle.sitelist', sitelist);+ Zotero.log("initsitelist "+sitelist+Zotero.Prefs.get('scuttle.sitelist'), 0);+ + }+ /* * Called when the window closes */@@ -542,7 +569,13 @@ //set to Info tab document.getElementById('zotero-view-item').selectedIndex = 0; - this.selectItem(item.getID());+ //this.selectItem(item.getID());+ var si = function() {+ //alert("si " + ZoteroPane + ' ' + item + ' ' + item.getID());+ ZoteroPane.selectItem(item.getID());+ };+ + window.setTimeout(si, Zotero.tDelay); return item; }diff -Nur zotero@chnm.gmu.edu.orig/chrome/content/zotero/preferences/preferences.js zotero@chnm.gmu.edu/chrome/content/zotero/preferences/preferences.js--- zotero@chnm.gmu.edu.orig/chrome/content/zotero/preferences/preferences.js 2008-01-14 20:21:00.000000000 +0100+++ zotero@chnm.gmu.edu/chrome/content/zotero/preferences/preferences.js 2008-09-28 20:26:03.646289600 +0200@@ -34,6 +34,7 @@ populateQuickCopyList(); updateQuickCopyInstructions(); initSearchPane();+ refreshScuttleSiteList(); } @@ -334,6 +335,80 @@ } +function showScuttleSiteEditor(index) {+ var treechildren = document.getElementById('scuttle-serverSettings-rows');+ + if (index != undefined && index > -1 && index < treechildren.childNodes.length) {+ var treerow = treechildren.childNodes[index].firstChild;+ var domain = treerow.childNodes[0].getAttribute('label');+ var isact = treerow.childNodes[1].getAttribute('label');+ }+ + var io = {domain: domain, isact: isact, ok: false};+ window.openDialog('chrome://zotero/content/preferences/scuttleSiteEditor.xul', "zotero-preferences-scuttleSiteEditor", "chrome, modal", io);+ + if (!io.ok) {+ return;+ }+ + if (domain && domain != io.domain) {+ Zotero.DB.query("DELETE FROM settings WHERE setting='scuttleSite' AND key=?", [domain]);+ }+ + Zotero.DB.query("REPLACE INTO settings VALUES ('scuttleSite', ?, ?)", [io.domain, io.isact]);+ + refreshScuttleSiteList();+}++function refreshScuttleSiteList() {+ var treechildren = document.getElementById('scuttle-serverSettings-rows');+ while (treechildren.hasChildNodes()) {+ treechildren.removeChild(treechildren.firstChild);+ }+ + var sql = "SELECT key AS domainPath, value AS isact FROM settings "+ + "WHERE setting='scuttleSite' ORDER BY domainPath COLLATE NOCASE";+ var siteData = Zotero.DB.query(sql);+ + var sitelist = "";+ Zotero.Prefs.set('scuttle.sitelist', sitelist);+ + if (!siteData) {+ return;+ }+ + + for (var i=0; i<siteData.length; i++) {+ var treeitem = document.createElement('treeitem');+ var treerow = document.createElement('treerow');+ var domainCell = document.createElement('treecell');+ var isActCell = document.createElement('treecell');+ + domainCell.setAttribute('label', siteData[i].domainPath);+ isActCell.setAttribute('label', siteData[i].isact);++ if (siteData[i].isact) sitelist += siteData[i].domainPath + ",";+ + treerow.appendChild(domainCell);+ treerow.appendChild(isActCell);+ treeitem.appendChild(treerow);+ treechildren.appendChild(treeitem);+ }+ sitelist = sitelist.substr(0, sitelist.length-1);+ Zotero.Prefs.set('scuttle.sitelist', sitelist);+}++++function deleteSelectedScuttleSite() {+ var tree = document.getElementById('scuttle-serverSettings');+ var treeitem = tree.lastChild.childNodes[tree.currentIndex];+ var domainPath = treeitem.firstChild.firstChild.getAttribute('label');+ Zotero.DB.query("DELETE FROM settings WHERE setting='scuttleSite' AND key=?", [domainPath]);+ refreshScuttleSiteList();+}++ function rebuildIndexPrompt() { var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]. createInstance(Components.interfaces.nsIPromptService);diff -Nur zotero@chnm.gmu.edu.orig/chrome/content/zotero/preferences/preferences.xul zotero@chnm.gmu.edu/chrome/content/zotero/preferences/preferences.xul--- zotero@chnm.gmu.edu.orig/chrome/content/zotero/preferences/preferences.xul 2008-01-14 20:21:00.000000000 +0100+++ zotero@chnm.gmu.edu/chrome/content/zotero/preferences/preferences.xul 2008-09-28 20:26:03.646289600 +0200@@ -423,6 +423,60 @@ </groupbox> </prefpane> + <prefpane id="zotero-prefpane-scuttleservers"+ label="Scuttle servers"+ image="chrome://zotero/skin/prefs-general.png">+ + <preferences>+ <preference id="pref-scuttle-active" name="extensions.zotero.scuttle.active" type="bool"/>+ <preference id="pref-scuttle-showprogwin" name="extensions.zotero.scuttle.showprogwin" type="bool"/>+ <preference id="pref-scuttle-log" name="extensions.zotero.scuttle.log" type="bool"/>+ <preference id="pref-scuttle-sitelist" name="extensions.zotero.scuttle.sitelist" type="string"/>+ <preference id="pref-scuttle-clTimeout" name="extensions.zotero.scuttle.clTimeout" type="int"/>+ </preferences>+ + <groupbox>+ <caption label="Scuttle Servers"/>+ + <separator class="thin"/>+ <checkbox label="Activated?" preference="pref-scuttle-active"/>+ <label id="quickCopy-instructions">When activated, upon each command, Zotero will send a copy of create/update/insert sql commands to online scuttle servers, which are active in the list below. </label>+ <separator class="thin"/>+ + <label value="Scuttle servers:" control="scuttle-serverSettings"/>+ <label id="quickCopy-instructions">(must not contain a comma, as it is used for delimitation)</label>+ <tree flex="1" id="scuttle-serverSettings" hidecolumnpicker="true" rows="6" seltype="single"+ ondblclick="showScuttleSiteEditor(this.currentIndex)"+ onkeypress="if (event.keyCode == event.DOM_VK_DELETE) { deleteSelectedScuttleSite(); }">+ <treecols>+ <treecol id="scuttle-urlColumn" label="Domain/path to Scuttle" flex="1"/>+ <treecol id="scuttle-isActColumn" label="Active" flex="2"/>+ </treecols>+ <treechildren id="scuttle-serverSettings-rows"/>+ </tree>+ <separator class="thin"/>+ <hbox pack="end">+ <button label="-" onclick="deleteSelectedScuttleSite()"/>+ <button label="+" onclick="showScuttleSiteEditor()"/>+ </hbox>++ <separator class="thin"/>+ <checkbox label="Show progress windows?" preference="pref-scuttle-showprogwin"/>++ <separator class="thin"/>+ <checkbox label="Log to console?" preference="pref-scuttle-log"/>++ <separator class="thin"/>+ <hbox align="center">+ <label value="Callback timeout (ms)"/>+ <textbox size="10" preference="pref-scuttle-clTimeout"/>+ <label value="(&zotero.preferences.default; 30)"/>+ </hbox>+ + <separator/>+ </groupbox>+ + </prefpane> <!-- These mess up the prefwindow if they come before the prefpanes https://bugzilla.mozilla.org/show_bug.cgi?id=296418 -->diff -Nur zotero@chnm.gmu.edu.orig/chrome/content/zotero/preferences/scuttleSiteEditor.xul zotero@chnm.gmu.edu/chrome/content/zotero/preferences/scuttleSiteEditor.xul--- zotero@chnm.gmu.edu.orig/chrome/content/zotero/preferences/scuttleSiteEditor.xul 1970-01-01 01:00:00.000000000 +0100+++ zotero@chnm.gmu.edu/chrome/content/zotero/preferences/scuttleSiteEditor.xul 2008-09-28 20:26:03.646289600 +0200@@ -0,0 +1,45 @@+<?xml version="1.0"?>+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>+<?xml-stylesheet href="chrome://zotero/skin/preferences.css"?>++<!DOCTYPE window SYSTEM "chrome://zotero/locale/preferences.dtd">+<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"+ title="" buttons="cancel,accept"+ id="zotero-scuttleSiteEditor"+ onload="sizeToContent();"+ ondialogaccept="Zotero_scuttleSiteEditor.onAccept();">+ + <script src="chrome://zotero/content/include.js"/>+ <script src="preferences.js"/>+ + <script>+ <![CDATA[+ var Zotero_scuttleSiteEditor = new function () {+ this.onAccept = onAccept;+ + function onAccept() {+ var io = window.arguments[0];+ io.domain = document.getElementById('zotero-scuttleSite-domain').value;+ io.isact = Number(document.getElementById('zotero-scuttleSite-active').checked);+ io.ok = true;+ }+ }+ ]]>+ </script>+ + <vbox id="zotero-preferences-scuttleSiteEditor">+ <label value="Domain/path (e.g. http://mydomain.com/scuttle/)" control="zotero-scuttleSite-domain"/>+ <textbox id="zotero-scuttleSite-domain"/>+ <separator class="thin"/>+ <checkbox id="zotero-scuttleSite-active" label="Is Active?" />+ <separator class="thin"/>+ </vbox>+ + <script>+ <![CDATA[+ var io = window.arguments[0];+ document.getElementById('zotero-scuttleSite-domain').value = io.domain ? io.domain : '';+ document.getElementById('zotero-scuttleSite-active').checked = Boolean(io.isact);+ ]]>+ </script>+</dialog>diff -Nur zotero@chnm.gmu.edu.orig/chrome/content/zotero/xpcom/data_access.js zotero@chnm.gmu.edu/chrome/content/zotero/xpcom/data_access.js--- zotero@chnm.gmu.edu.orig/chrome/content/zotero/xpcom/data_access.js 2008-07-06 15:58:00.000000000 +0200+++ zotero@chnm.gmu.edu/chrome/content/zotero/xpcom/data_access.js 2008-09-28 20:26:03.666318400 +0200@@ -760,6 +760,7 @@ // // Existing item, update //+ var tempstat; if (this.getID()){ Zotero.debug('Updating database with new item data', 4); @@ -857,12 +858,15 @@ var del = new Array(); sql = "SELECT valueID FROM itemDataValues WHERE value=?";+ var valueStatementSQL = sql; var valueStatement = Zotero.DB.getStatement(sql); sql = "INSERT INTO itemDataValues VALUES (?,?)";+ var insertStatementSQL = sql; var insertStatement = Zotero.DB.getStatement(sql); sql = "REPLACE INTO itemData VALUES (?,?,?)";+ var replaceStatementSQL = sql; var replaceStatement = Zotero.DB.getStatement(sql); for (fieldID in this._changedItemData.items){@@ -887,6 +891,7 @@ var valueID = null; } valueStatement.reset();+ tempstat = Zotero.DB.getStatement(valueStatementSQL, [{string:value}] ); //trick for full getStatement if (!valueID) { valueID = Zotero.getRandomID('itemDataValues', 'valueID', 2097152); // stored in 3 bytes@@ -933,6 +938,7 @@ catch (e) { throw (Zotero.DB.getLastErrorString()); }+ tempstat = Zotero.DB.getStatement(insertStatementSQL, [{int: valueID}, value] ); //trick for full getStatement } } @@ -946,6 +952,7 @@ catch (e) { throw (Zotero.DB.getLastErrorString()); }+ tempstat = Zotero.DB.getStatement(replaceStatementSQL, [this.getID(), fieldID, valueID] ); //trick for full getStatement } // If field changed and is empty, mark row for deletion@@ -1033,12 +1040,15 @@ if (this._changedItemData.length){ // Use manual bound parameters to speed things up sql = "SELECT valueID FROM itemDataValues WHERE value=?";+ var valueStatementSQL = sql; var valueStatement = Zotero.DB.getStatement(sql); sql = "INSERT INTO itemDataValues VALUES (?,?)";+ var insertValueStatementSQL = sql; var insertValueStatement = Zotero.DB.getStatement(sql); sql = "INSERT INTO itemData VALUES (?,?,?)";+ var insertStatementSQL = sql; var insertStatement = Zotero.DB.getStatement(sql); for (fieldID in this._changedItemData.items){@@ -1055,6 +1065,8 @@ var valueID = null; } valueStatement.reset();+ tempstat = Zotero.DB.getStatement(valueStatementSQL, [{string:value}] ); //trick for full getStatement+ if (!valueID) { valueID = Zotero.getRandomID('itemDataValues', 'valueID', 2097152); // stored in 3 bytes@@ -1081,6 +1093,7 @@ catch (e) { throw (Zotero.DB.getLastErrorString()); }+ tempstat = Zotero.DB.getStatement(insertValueStatementSQL, [valueID, value] ); //trick for full getStatement } } @@ -1095,6 +1108,8 @@ throw(Zotero.DB.getLastErrorString()); } + tempstat = Zotero.DB.getStatement(insertStatementSQL, [this.getID(), fieldID, valueID] ); //trick for full getStatement+ Zotero.History.add('itemData', 'itemID-fieldID', [itemID, fieldID]); }@@ -2291,6 +2306,7 @@ } Zotero.debug('Deleting item ' + this.getID());+ // using sqlq array for extern sql - taken care of in db.query, db.getStatement var changedItems = []; var changedItemsNotifierData = {};diff -Nur zotero@chnm.gmu.edu.orig/chrome/content/zotero/xpcom/db.js zotero@chnm.gmu.edu/chrome/content/zotero/xpcom/db.js--- zotero@chnm.gmu.edu.orig/chrome/content/zotero/xpcom/db.js 2008-01-28 15:20:00.000000000 +0100+++ zotero@chnm.gmu.edu/chrome/content/zotero/xpcom/db.js 2008-09-28 21:16:08.627240000 +0200@@ -103,8 +103,35 @@ else { this._debug(sql,5); db.executeSimpleSQL(sql);+ Zotero.ssql = sql;+ var psq = function (insql) {+ if (!Zotero.ProcessingScuttleSQL) Zotero.ProcessScuttleSQL(insql);+ }+ + var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]+ .getService(Components.interfaces.nsIWindowMediator);+ var win = wm.getMostRecentWindow("");+ if (Zotero.ssql != "") + {+ // could be a list, parse+ Zotero.ssql = Zotero.ssql.replace(/\n/g,"").replace(/\r/g,"");+ var lista = Zotero.ssql.split(";");+ if (lista.length > 0) + {+ ilen = lista.length; + while (ilen > 0)+ {+ Zotero.sqlq.push(lista[ilen-1]);+ ilen -= 1;+ }+ }+ win.setTimeout(psq, Zotero.tDelay, Zotero.ssql); + } } ++ + if (op=='insert') { return db.lastInsertRowID; }@@ -183,7 +210,8 @@ */ Zotero.DBConnection.prototype.getStatement = function (sql, params) { var db = this._getDBConnection();- + var tsql = sql; + Zotero.ssql = ""; try { this._debug(sql,5); var statement = db.createStatement(sql);@@ -239,26 +267,50 @@ } // Bind the parameter as the correct type+ var value1; switch (type) { case 'int': this._debug('Binding parameter ' + (i+1) + ' of type int: ' + value, 5); statement.bindInt32Parameter(i, value);+ value1 = value; break; case 'string': this._debug('Binding parameter ' + (i+1) + ' of type string: "' + value + '"', 5); statement.bindUTF8StringParameter(i, value);+ value1 = "'"+ value.replace("'", "''", "g") +"'"; break; case 'null': this._debug('Binding parameter ' + (i+1) + ' of type NULL', 5); statement.bindNullParameter(i);+ value1 = value; break; }- }+ var tsql1 = tsql.replace("?", value1);+ tsql = tsql1;+ }+ }+ + var op = tsql.match(/^[^a-z]*[^ ]+/i);+ if (op) { op = op.toString().toLowerCase(); }+ if (op!='select') + Zotero.ssql = tsql;++ var psq = function (insql) {+ if (!Zotero.ProcessingScuttleSQL) Zotero.ProcessScuttleSQL(insql);+ }+ + var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]+ .getService(Components.interfaces.nsIWindowMediator);+ var win = wm.getMostRecentWindow("");+ if (Zotero.ssql != "") + {+ Zotero.sqlq.push(Zotero.ssql);+ win.setTimeout(psq, Zotero.tDelay, Zotero.ssql); } return statement; }diff -Nur zotero@chnm.gmu.edu.orig/chrome/content/zotero/xpcom/zotero.js zotero@chnm.gmu.edu/chrome/content/zotero/xpcom/zotero.js--- zotero@chnm.gmu.edu.orig/chrome/content/zotero/xpcom/zotero.js 2008-06-24 06:13:00.000000000 +0200+++ zotero@chnm.gmu.edu/chrome/content/zotero/xpcom/zotero.js 2008-09-29 00:11:12.360867200 +0200@@ -61,6 +61,18 @@ this.randomString = randomString; this.getRandomID = getRandomID; this.moveToUnique = moveToUnique;+ this.ProcessScuttleSQL = ProcessScuttleSQL;+ this.rqsts = 0;+ this.ProcessingScuttleSQL = false;+ this.tDelay = 30; // delay for setInterval calls+ this.__defineGetter__("tDelay", function(){+ return Zotero.Prefs.get('scuttle.clTimeout');+ });+ + this.__defineSetter__("tDelay", function(val){+ tDelay = val;+ Zotero.Prefs.set('scuttle.clTimeout', intval(val));+ }); // Public properties this.initialized = false;@@ -74,6 +86,10 @@ this.isMac; this.isWin; this.initialURL; // used by Schema to show the changelog on upgrades+ this.collectSQL = false; // not used, sqlq is+ this.csql = ""; //(total) //not used, sqlq is+ this.ssql=""; //(single) // nt used, sqlq is+ this.sqlq=[]; // sql queue array var _startupError; var _startupErrorHandler;@@ -869,10 +885,177 @@ file.moveTo(newFile.parent, newName); return file; }+ + function ProcessScuttleSQL(sql)+ {+ //Zotero.log(sql + " " + Zotero.sqlq.length, 0);+ var stlist = Zotero.Prefs.get('scuttle.sitelist');+ var showprogwin = Zotero.Prefs.get('scuttle.showprogwin');+ var act = Zotero.Prefs.get('scuttle.active');+ var dolog = Zotero.Prefs.get('scuttle.log');+ + var logger = act + "-" + stlist; + var status;+ var pw = new Zotero.ProgressWindow();+ var icon = 'chrome://zotero/skin/treeitem-attachment-' + 'snapshot' + '.png';+ + if (Zotero.sqlq.length < 1) return;+ else sql = Zotero.sqlq.shift();+ var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]+ .getService(Components.interfaces.nsIWindowMediator);+ var win = wm.getMostRecentWindow(""); ++ if (act && (stlist != ""))+ {+ + if ( (sql != "") ) + {+ //Zotero.csql += Zotero.ssql + ";\n";+ var tsql = sql.replace('CURRENT_TIMESTAMP', "DATETIME('NOW')");+ sql = tsql;+ if (sql.indexOf("(?") != -1) // unparsed, don't process+ {+ logger += " ign: " + sql;+ if ((Zotero.sqlq.length > 0) && (Zotero.rqsts==0)) win.setTimeout(Zotero.ProcessScuttleSQL, Zotero.tDelay);+ }+ else //parsed, do process+ {+ + if (showprogwin)+ {+ pw.changeHeadline("sending sql");+ //pw.addDescription("");+ pw.show(); /**/+ }+ // here stlist contains only active servers - could be null !! ... if (stlist.indexOf(",") != -1) // is a list + var stlista = stlist.split(",");+ var stlistlen = stlista.length; + + logger += stlistlen + ".." + sql + "\n"; + + // pass to each server. + Zotero.ProcessingScuttleSQL = true;+ sql = urlencode(sql);+ var querystring = "";+ var params = "sql="+sql;+ var b; + + for(i = 0; i < stlistlen; i++)+ {+ // start a new XMLHttpRequest + var xmlhttp = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();+ querystring = stlista[i]+'api/zoterosql.php';+ + logger += i + "-" + querystring + " " + params + " \n"; + + xmlhttp.open("POST", querystring, true);+ //xmlhttp.overrideMimeType("text/plain");+ xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");+ xmlhttp.setRequestHeader("Content-length", params.length);+ xmlhttp.setRequestHeader("Connection", "close");+ + status = false;+ try {+ logger += "_______rqsts is " + Zotero.rqsts + " \n";+ xmlhttp.send(params);+ Zotero.rqsts++;+ xmlhttp.onreadystatechange=function(xmlhttp)+ {+ if(this.readyState==4)+ {+ trep = "";+ //for (var j=0; j<Zotero.sqlq.length; j++) trep += Zotero.sqlq[j] + ",";+ if (dolog) Zotero.log("xmlhttp.response2 is " + this.readyState + " " + Zotero.rqsts + " " + Zotero.sqlq.length + " " + trep + " " + this.responseText, 0);+ Zotero.rqsts--;+ if (Zotero.rqsts == 0)+ {+ // ready to run another process from queue - only when all servers have answered a given request + Zotero.ProcessingScuttleSQL = false; + if (Zotero.sqlq.length > 0) win.setTimeout(Zotero.ProcessScuttleSQL, Zotero.tDelay);+ }+ } + }+ }+ catch (e) {+ status = false;+ }+ status = true;+ + logger += "midstatus is " + status + "\n";+ + // invalid now that it is via POST : TODO - change/remove + if (status) {+ logger += "xmlhttp.response is " + xmlhttp.responseText + "\n";+ } + + try {+ logger += "xmlhttp.status is " + xmlhttp.status + " xmlhttp.responseXML is " + xmlhttp.responseXML + "\n";+ + switch(xmlhttp.status) {+ case 503:+ logger += "statusthrottled";+ break;+ case 401:+ case 403:+ logger += "statusauthenticationfailed";+ break;+ case 200:+ status=true;+ default:+ break;+ }+ } catch (e) {+ logger += 'statusconnectionerror' + "\n";+ status = false;++ }+ + if(showprogwin) pw.addDescription("Server " + i + " " + status + " " + stlista[i]);++ }+ + if(showprogwin) pw.startCloseTimer(500);+ if (dolog) Zotero.log(status + " " + logger, 0); //uncomment to trace forwarded calls, and comment below + + }+ }+ else+ {+ if ((Zotero.sqlq.length > 0) && (Zotero.rqsts==0)) win.setTimeout(Zotero.ProcessScuttleSQL, Zotero.tDelay);+ }+ + }+ + if(showprogwin) if (pw._progressWindow) pw.startCloseTimer(500); //_progressWindow+ + + }+ + + function urlencode(str) + {+ str = escape(str);+ str = str.replace('+', '%2B');+ str = str.replace('%20', '+');+ str = str.replace('*', '%2A');+ str = str.replace('/', '%2F');+ str = str.replace('@', '%40');+ return str;+ }++ function urldecode(str) + {+ str = str.replace('+', ' ');+ str = unescape(str);+ return str;+ } + }; ++ Zotero.Prefs = new function(){ // Privileged methods this.init = init;diff -Nur zotero@chnm.gmu.edu.orig/defaults/preferences/zotero.js zotero@chnm.gmu.edu/defaults/preferences/zotero.js--- zotero@chnm.gmu.edu.orig/defaults/preferences/zotero.js 2008-05-27 14:52:08.000000000 +0200+++ zotero@chnm.gmu.edu/defaults/preferences/zotero.js 2008-09-28 20:26:03.736419200 +0200@@ -70,4 +70,9 @@ pref("extensions.zotero.integration.autoRegenerate", -1); // -1 = ask; 0 = no; 1 = yes // Annotation settings-pref("extensions.zotero.annotations.warnOnClose", true);\ No newline at end of file+pref("extensions.zotero.annotations.warnOnClose", true);++//scuttle+pref("extensions.zotero.scuttle.sitelist", '');+pref("extensions.zotero.scuttle.active", false);+pref("extensions.zotero.scuttle.clTimeout", 30);diff -Nur zotero@chnm.gmu.edu.orig/install.rdf zotero@chnm.gmu.edu/install.rdf--- zotero@chnm.gmu.edu.orig/install.rdf 2008-07-16 02:19:50.000000000 +0200+++ zotero@chnm.gmu.edu/install.rdf 2008-09-28 20:26:03.736419200 +0200@@ -6,7 +6,7 @@ <em:id>zotero@chnm.gmu.edu</em:id> <em:name>Zotero</em:name>- <em:version>1.0.7</em:version>+ <em:version>1.0.7scut</em:version> <em:creator>Center for History and New Media<br/>George Mason University</em:creator> <em:contributor>Dan Cohen</em:contributor> <em:contributor>Sean Takats</em:contributor>