home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8614 / 8614.xpi / chrome / extension.jar / content / application / BrowserBridge.js < prev    next >
Encoding:
Text File  |  2010-02-10  |  4.0 KB  |  133 lines

  1. Glydo.BrowserBridge = Prototype.Class.create(Glydo.EventSource,{
  2.     initialize: function($super) {
  3.         $super();
  4.         Glydo.Utils.addListener(window,"load", this.init, this, false);
  5.         Glydo.Utils.addListener(window,"resize", this.onWindowResize,this,false);
  6.         Glydo.Utils.addListener(window,"unload", this.unload, this, false);
  7.     },
  8.  
  9.     init: function() {
  10.         var appcontent = document.getElementById('appcontent');
  11.         if (appcontent) {
  12.             Glydo.Utils.addListener(gBrowser,"DOMContentLoaded", this.onBrowserDomLoad, this, false);
  13.             Glydo.Utils.addListener(gBrowser,"load",this.onBrowserLoad, this, true);
  14.             var container = gBrowser.tabContainer;
  15.             if (container) {
  16.                 Glydo.Utils.addListener(container,"TabOpen", this.onTabOpen_FF_2_x, this, false);
  17.                 Glydo.Utils.addListener(container,"TabClose", this.onTabClose_FF_2_x, this, false);
  18.                 Glydo.Utils.addListener(container,"TabSelect", this.onTabSelect_FF_2_x, this, false);
  19.             } else {
  20.                 container = gBrowser.mPanelContainer;
  21.                 if (container) {
  22.                     Glydo.Utils.addListener(container,"DOMNodeInserted", this.onTabOpen_FF_x_15, this, false);
  23.                     Glydo.Utils.addListener(container,"DOMNodeRemoved", this.onTabClose_FF_x_15, this, false);
  24.                     Glydo.Utils.addListener(container,"select", this.onTabSelect_FF_x_15, this, false);
  25.                 }
  26.             }
  27.         }
  28.         Glydo.Utils.addListener(window, 'close', this.onWindowClose, this, true);
  29.         this.fire('onWindowLoaded',window);
  30.     },
  31.     
  32.     unload: function() {
  33.         this.fire('onWindowUnloaded',window);
  34.     },
  35.     
  36.     onWindowClose: function(event) {
  37.         this.fire('onWindowClose',window);
  38.     },
  39.     
  40.     onWindowResize: function(event) {
  41.         this.fire('onWindowResize',window);
  42.     },
  43.     
  44.     onBrowserDomLoad: function(event) {
  45.         var doc = event.originalTarget;
  46.         if (doc.nodeName == "#document") {
  47.             var mainDoc = doc;
  48.             while (mainDoc.defaultView.frameElement) {
  49.                 mainDoc = mainDoc.defaultView.frameElement.ownerDocument;
  50.             }
  51.             if (mainDoc === doc) {
  52.                 var br = this.findBrowserForDocument(mainDoc);
  53.                 this.fire('onMainDocDomLoad',br,mainDoc);
  54.             }
  55.         }
  56.     },
  57.     
  58.     onBrowserLoad: function(event) {
  59.     },
  60.     
  61.     onTabOpen_FF_2_x: function(event) {
  62.         var browser = event.target.linkedBrowser;
  63.         this.onTabOpen(browser);
  64.     },
  65.     
  66.     onTabClose_FF_2_x: function(event) {
  67.         var browser = event.target.linkedBrowser;
  68.         this.onTabClose(browser);
  69.     },
  70.     
  71.     onTabSelect_FF_2_x: function(event) {
  72.         var browser = gBrowser.selectedTab.linkedBrowser;
  73.         this.onTabSelect(browser);
  74.     },
  75.     
  76.     onTabOpen_FF_x_15: function(event) {
  77.         if (event.relatedNode != gBrowser.mPanelContainer) {
  78.             return; //Could be anywhere in the DOM (unless bubbling is caught at the interface?)
  79.         }
  80.         var browser;
  81.         if (event.target.localName == "browser") { // SeaMonkey
  82.             browser = event.target;
  83.         } else if (event.target.localName == "vbox") { // Firefox
  84.             browser = event.target.childNodes[1];
  85.         }
  86.         if (browser) {
  87.             this.onTabOpen(browser);
  88.         }
  89.     },
  90.     
  91.     onTabClose_FF_x_15: function(event) {
  92.         if (event.relatedNode != gBrowser.mPanelContainer) {
  93.             return; //Could be anywhere in the DOM (unless bubbling is caught at the interface?)
  94.         }
  95.         var browser;
  96.         if (event.target.localName == "browser") { // SeaMonkey
  97.             browser = event.target;
  98.         } else if (event.target.localName == "vbox") { // Firefox
  99.             browser = event.target.childNodes[1];
  100.         }
  101.         if (browser) {
  102.             this.onTabClose(browser);
  103.         }
  104.     },
  105.     
  106.     onTabSelect_FF_x_15: function(event) {
  107.         var browser = gBrowser.getBrowserAtIndex(gBrowser.mTabContainer.selectedIndex);
  108.         this.onTabSelect(browser);
  109.     },
  110.     
  111.     onTabOpen: function(browser) {
  112.         this.fire('onTabOpen',browser);
  113.     },
  114.     
  115.     onTabClose: function(browser) {
  116.         this.fire('onTabClose',browser);
  117.     },
  118.     
  119.     onTabSelect: function(browser) {
  120.         this.fire('onTabSelect',browser);
  121.     },
  122.     
  123.     findBrowserForDocument: function(doc) {
  124.         var num = gBrowser.browsers.length;
  125.         for (var i = 0; i < num; i++) {
  126.           var b = gBrowser.getBrowserAtIndex(i);
  127.           if (b && (b.contentDocument === doc)) {
  128.               return b;
  129.           }
  130.         }
  131.     }
  132. });
  133.