diff options
author | teramako | 2008-06-26 15:36:26 +0000 |
---|---|---|
committer | teramako | 2008-06-26 15:36:26 +0000 |
commit | 0509d5a62fd75da7d9c8c7dc5220c097f54567e0 (patch) | |
tree | 2e489c0ba28b85a68d69a9425999dc7d03caad64 /gmperator.js | |
parent | af2c0797905ee7a0418aa62e42bf62871134f5d6 (diff) | |
download | vimperator-plugins-0509d5a62fd75da7d9c8c7dc5220c097f54567e0.tar.bz2 |
bug fix and add autocommand trigger "GMActiveScript"
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@14671 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'gmperator.js')
-rw-r--r-- | gmperator.js | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/gmperator.js b/gmperator.js index 4f1c051..c39be51 100644 --- a/gmperator.js +++ b/gmperator.js @@ -94,8 +94,9 @@ liberator.plugins.gmperator = (function(){ //{{{ var manager = { register: function (uri,sandbox,script){ var panelID = getPanelID(sandbox.window); + if (!panelID) return; var gmCon; - if (containers[panelID]){ + if (containers[panelID] && containers[panelID].uri == uri){ gmCon = containers[panelID]; } else { gmCon = new GmContainer(uri,sandbox); @@ -106,8 +107,10 @@ liberator.plugins.gmperator = (function(){ //{{{ gmCon.sandbox = sandbox; gmCon.addScript(script); gmCon.uri = uri; - autocommands.trigger('GMInjectedScript',uri+'\n'+script._filename); - log('gmpeartor: GMInjectedScript ' + uri+'\n'+script._filename, 8); + triggerGMEvent('GMInjectedScript', uri, script._filename); + if (panelID == this.currentPanel){ + triggerGMEvent('GMActiveScript', uri, script._filename); + } }, get gmScripts() GM_getConfig().scripts, get allItem() containers, @@ -167,14 +170,35 @@ liberator.plugins.gmperator = (function(){ //{{{ } } } - function updateGmContainerList(e){ - var t = e.target; + function updateGmContainerList(event){ + var t = event.target; if (t && t.localName == 'tab' && t.linkedPanel){ delete containers[t.linkedPanel]; delete plugins.gmperator[t.linkedPanel]; } } + function dispatchGMTabSelect(event){ + var panelID = event.originalTarget.linkedPanel; + var container; + if (container = containers[panelID]){ + liberator.log(panelID + '\n' + container.uri +'\n'+ container.scripts.length, 8); + container.scripts.forEach(function(script){ + triggerGMEvent('GMActiveScript', container.uri, script._filename); + }); + } + } + /** + * trigger autocommand + * @param {String} name Event name + * @param {String} uri + * @param {String} filename script filename + */ + function triggerGMEvent(name, uri, filename){ + liberator.autocommands.trigger(name, uri+'\n'+filename); + liberator.log('gmpeartor: '+ name + ' ' + uri+'\n'+filename, 8); + } getBrowser().mTabContainer.addEventListener('TabClose',updateGmContainerList,false); + getBrowser().mTabBox.addEventListener('TabSelect',dispatchGMTabSelect,false); // }}} return manager; })(); //}}} @@ -330,7 +354,12 @@ function GmContainer(uri,sandbox){ this.scripts = []; } GmContainer.prototype = { - addScript : function(script) !this.hasScript(script) && this.scripts.push(script) || false, + addScript : function(script) { + if (!this.hasScript(script)){ + return this.scripts.push(script) + } + return false; + }, hasScript : function(script){ var filename; switch( typeof(script) ){ @@ -338,7 +367,7 @@ GmContainer.prototype = { case 'string': filename = script; break; default: return null; } - return this.scripts.some(function(s) s.filename == filename); + return this.scripts.some(function(s) s._filename == filename); } }; // }}} function scriptsCompleter(filter,flag){ //{{{ |