Streamline browser.js and fix ZoteroItemUpdated event

This commit is contained in:
Simon Kornblith 2011-07-13 23:56:37 +00:00
parent 59459df0ff
commit 9adbf332e3

View file

@ -45,7 +45,6 @@ var Zotero_Browser = new function() {
this.toggleMode = toggleMode; this.toggleMode = toggleMode;
this.toggleCollapsed = toggleCollapsed; this.toggleCollapsed = toggleCollapsed;
this.chromeLoad = chromeLoad; this.chromeLoad = chromeLoad;
this.chromeUnload = chromeUnload;
this.contentLoad = contentLoad; this.contentLoad = contentLoad;
this.contentHide = contentHide; this.contentHide = contentHide;
this.tabClose = tabClose; this.tabClose = tabClose;
@ -110,8 +109,6 @@ var Zotero_Browser = new function() {
window.addEventListener("load", window.addEventListener("load",
function(e) { Zotero_Browser.chromeLoad(e) }, false); function(e) { Zotero_Browser.chromeLoad(e) }, false);
window.addEventListener("unload",
function(e) { Zotero_Browser.chromeUnload(e) }, false);
ZoteroPane_Local.addReloadListener(reload); ZoteroPane_Local.addReloadListener(reload);
reload(); reload();
@ -321,27 +318,18 @@ var Zotero_Browser = new function() {
function(e) { Zotero_Browser.resize(e) }, false); function(e) { Zotero_Browser.resize(e) }, false);
} }
/*
* Called when chrome is unloaded
*/
function chromeUnload() {
}
/* /*
* An event handler called when a new document is loaded. Creates a new document * An event handler called when a new document is loaded. Creates a new document
* object, and updates the status of the capture icon * object, and updates the status of the capture icon
*/ */
function contentLoad(event) { function contentLoad(event) {
var isHTML = event.originalTarget instanceof HTMLDocument;
var doc = event.originalTarget; var doc = event.originalTarget;
var rootDoc = doc; var isHTML = doc instanceof HTMLDocument;
var rootDoc = (doc instanceof HTMLDocument ? doc.defaultView.top.document : doc);
var browser = Zotero_Browser.tabbrowser.getBrowserForDocument(rootDoc);
if(!browser) return;
if(isHTML) { if(isHTML) {
// get the appropriate root document to check which browser we're on
while(rootDoc.defaultView.frameElement) {
rootDoc = rootDoc.defaultView.frameElement.ownerDocument;
}
// ignore blacklisted domains // ignore blacklisted domains
try { try {
if(doc.domain) { if(doc.domain) {
@ -368,18 +356,6 @@ var Zotero_Browser = new function() {
} }
catch (e) {} catch (e) {}
// Figure out what browser this contentDocument is associated with
var browser;
var browsers = Zotero_Browser.tabbrowser.browsers;
var nBrowsers = Zotero_Browser.tabbrowser.browsers.length;
for(var i=0; i<nBrowsers; i++) {
if(rootDoc == browsers[i].contentDocument) {
browser = browsers[i]
break;
}
}
if(!browser) return;
// get data object // get data object
var tab = _getTabObject(browser); var tab = _getTabObject(browser);
@ -406,43 +382,56 @@ var Zotero_Browser = new function() {
tab.detectTranslators(rootDoc, doc); tab.detectTranslators(rootDoc, doc);
// register metadata updated event // register metadata updated event
doc.addEventListener("ZoteroItemUpdated", contentLoad, false); if(isHTML) {
var contentWin = doc.defaultView;
if(!contentWin.haveZoteroEventListener) {
contentWin.addEventListener("ZoteroItemUpdated", itemUpdated, false);
contentWin.haveZoteroEventListener = true;
Zotero.debug("event listener registered");
}
}
} }
/* /*
* called to unregister Zotero icon, etc. * called to unregister Zotero icon, etc.
*/ */
function contentHide(event) { function contentHide(event) {
if(event.originalTarget instanceof HTMLDocument) { var doc = event.originalTarget;
// Get root document if this is a frameset if(!(doc instanceof HTMLDocument)) return;
var doc = event.originalTarget;
var rootDoc = doc; var rootDoc = (doc instanceof HTMLDocument ? doc.defaultView.top.document : doc);
while(rootDoc.defaultView.frameElement) { var browser = Zotero_Browser.tabbrowser.getBrowserForDocument(rootDoc);
rootDoc = rootDoc.defaultView.frameElement.ownerDocument; if(!browser) return;
}
var tab = _getTabObject(browser);
// Figure out what browser this contentDocument is associated with if(!tab) return;
var browser;
for(var i=0; i<this.tabbrowser.browsers.length; i++) { if(doc == tab.page.document || doc == rootDoc) {
if(rootDoc == this.tabbrowser.browsers[i].contentDocument) { // clear translator only if the page on which the pagehide event was called is
browser = this.tabbrowser.browsers[i]; // either the page to which the translator corresponded, or the root document
break; // (the second check is probably paranoid, but won't hurt)
} tab.clear();
} }
var tab = _getTabObject(browser); // update status
if(!tab) return; if(Zotero_Browser.tabbrowser.selectedBrowser == browser) {
if(doc == tab.page.document || doc == rootDoc) { updateStatus();
// clear translator only if the page on which the pagehide event was called is }
// either the page to which the translator corresponded, or the root document }
// (the second check is probably paranoid, but won't hurt)
tab.clear(); /**
} * Called when item should be updated due to a DOM event
*/
// update status function itemUpdated(event) {
if(this.tabbrowser.selectedBrowser == browser) { try {
updateStatus(); var doc = event.originalTarget;
} var rootDoc = (doc instanceof HTMLDocument ? doc.defaultView.top.document : doc);
var browser = Zotero_Browser.tabbrowser.getBrowserForDocument(rootDoc);
var tab = _getTabObject(browser);
if(doc == tab.page.document || doc == rootDoc) tab.clear();
tab.detectTranslators(rootDoc, doc);
} catch(e) {
Zotero.debug(e);
} }
} }
@ -457,7 +446,6 @@ var Zotero_Browser = new function() {
tab.clear(); tab.clear();
// To execute if document object does not exist // To execute if document object does not exist
_deleteTabObject(event.target.linkedBrowser);
toggleMode(); toggleMode();
} }
@ -562,19 +550,10 @@ var Zotero_Browser = new function() {
*/ */
function _getTabObject(browser) { function _getTabObject(browser) {
if(!browser) return false; if(!browser) return false;
try { if(!browser.zoteroBrowserData) {
var key = browser.getAttribute("zotero-key"); browser.zoteroBrowserData = new Zotero_Browser.Tab(browser);
if(_browserData[key]) {
return _browserData[key];
}
} finally {
if(!key) {
var key = (new Date()).getTime();
browser.setAttribute("zotero-key", key);
return (_browserData[key] = new Zotero_Browser.Tab(browser));
}
} }
return false; return browser.zoteroBrowserData;
} }
/* /*