Streamline browser.js and fix ZoteroItemUpdated event
This commit is contained in:
parent
59459df0ff
commit
9adbf332e3
1 changed files with 51 additions and 72 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue