aboutsummaryrefslogtreecommitdiffstats
path: root/gmperator.js
diff options
context:
space:
mode:
authorteramako2008-06-26 15:36:26 +0000
committerteramako2008-06-26 15:36:26 +0000
commit0509d5a62fd75da7d9c8c7dc5220c097f54567e0 (patch)
tree2e489c0ba28b85a68d69a9425999dc7d03caad64 /gmperator.js
parentaf2c0797905ee7a0418aa62e42bf62871134f5d6 (diff)
downloadvimperator-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.js43
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){ //{{{