home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / AIMP2 / aimp_2.61.583.exe / $TEMP / YandexPackSetup.msi / fil43115CFC30D3CF3E477A10C17FEB7D1B < prev    next >
Text File  |  2010-07-12  |  13KB  |  400 lines

  1. (function () {
  2. var YaBloggers = {
  3.   nsIYa: Cc["@yandex.ru/yasearch;1"].getService(Ci.nsIYaSearch).wrappedJSObject,
  4.   
  5.   SHOW_VALUE_PREF_NAME: "yasearch.general.ui.show.bloggers.value",
  6.   
  7.   onWindowLoad: function() {
  8.     let URLInfo = this.nsIYa.yaURLInfo;
  9.     ["UNKNOWN", "TIMED_REQUEST", "REQUEST", "ERROR", "RESPONSE"]
  10.     .forEach(function(aStateName) {
  11.       let stateName = "BLOGGERS_STATE_" + aStateName;
  12.       this[stateName] = URLInfo[stateName];
  13.     }, this);
  14.     
  15.     this.showHideCounterLabel();
  16.     
  17.     Components.classes["@mozilla.org/preferences-service;1"]
  18.               .getService(Components.interfaces.nsIPrefBranchInternal)
  19.               .addObserver(this.SHOW_VALUE_PREF_NAME, this, false);
  20.     
  21.     Ya.Bloggers = this;
  22.     
  23.     this._Bloggers = this.nsIYa.Bloggers;
  24.     
  25.     let prefs = this.nsIYa.getCharPref("yasearch.bloggers.ui.prefs");
  26.     if (prefs) {
  27.       prefs = prefs.split(",");
  28.       
  29.       let x = parseInt(prefs[0], 10);
  30.       if (isNaN(x)) x = 0;
  31.       
  32.       let y = parseInt(prefs[1], 10);
  33.       if (isNaN(y)) y = 0;
  34.       
  35.       this.savedPosition = {x:x, y:y};
  36.     }
  37.     
  38.     let container = getBrowser().mTabContainer;
  39.     container.addEventListener("select", this, true);
  40.     container.addEventListener("TabClose", this, false);
  41.     
  42.     this.refreshData();
  43.     this.checkWindowVisible();
  44.     
  45.     let bloggersMenuPopup = this.bloggersMenuPopup;
  46.     if (bloggersMenuPopup)
  47.       bloggersMenuPopup.addEventListener("popupshowing", this, true);
  48.   },
  49.   
  50.   onWindowUnload: function() {
  51.     let bloggersMenuPopup = this.bloggersMenuPopup;
  52.     if (bloggersMenuPopup)
  53.       bloggersMenuPopup.removeEventListener("popupshowing", this, true);
  54.     
  55.     Components.classes["@mozilla.org/preferences-service;1"]
  56.               .getService(Components.interfaces.nsIPrefBranchInternal)
  57.               .removeObserver(this.SHOW_VALUE_PREF_NAME, this);
  58.     
  59.     if (this.savedPosition)
  60.       this.nsIYa.setCharPref("yasearch.bloggers.ui.prefs", this.savedPosition.x + "," + this.savedPosition.y);
  61.     
  62.     let container = getBrowser().mTabContainer;
  63.     container.removeEventListener("select", this, true);
  64.     container.removeEventListener("TabClose", this, false);
  65.     
  66.     if (this.win && "close" in this.win)
  67.       this.win.close();
  68.     
  69.     this.win = null;
  70.     
  71.     this._Bloggers = null;
  72.     
  73.     Ya.Bloggers = null;
  74.   },
  75.   
  76.   get bloggersButton() {
  77.     return document.getElementById("yasearch-bloggers-button");
  78.   },
  79.   
  80.   get bloggersMenuPopup() {
  81.     return document.getElementById("yasearch-bloggers-menupopup");
  82.   },
  83.   
  84.   showHideCounterLabel: function() {
  85.     let bloggersButton = this.bloggersButton;
  86.     if (bloggersButton) {
  87.       let show = this.nsIYa.getBoolPref(this.SHOW_VALUE_PREF_NAME);
  88.       bloggersButton.setAttribute("yaLabelHidden", !show);
  89.     }
  90.   },
  91.   
  92.   observe: function(aSubject, aTopic, aData) {
  93.     if (aTopic === "nsPref:changed") {
  94.       if (aData == this.SHOW_VALUE_PREF_NAME)
  95.         this.showHideCounterLabel();
  96.     }
  97.   },
  98.   
  99.   openLink: function(aEvent) {
  100.     let urlData = this.nsIYa.yaURLInfo.getURL(gBrowser.currentURI);
  101.     if (urlData) {
  102.       let url = urlData.prePath + urlData.nonQueryPath;
  103.       url = "http://blogs.yandex.ru/search.xml?text=" + encodeURIComponent('!link="' + url + '"');
  104.       Ya.loadURI(url, "new-tab", {action:3300});
  105.     }
  106.   },
  107.   
  108.   findParentByLocalName: function(aNode, aLocalName) {
  109.     let parent = aNode;
  110.     let names = [].concat(aLocalName);
  111.     
  112.     while (parent) {
  113.       for (let i = 0; i < names.length; ++i) {
  114.         if (parent.localName == names[i])
  115.           return parent;
  116.       }
  117.       parent = parent.parentNode;
  118.     }
  119.     
  120.     return null;
  121.   },
  122.   
  123.   get winForMouseEvents() {
  124.     return ("close" in this.win) ? this.win : window;
  125.   },
  126.   
  127.   handleEvent: function(aEvent) {
  128.     switch (aEvent.type) {
  129.       case "select":
  130.         this.showHide(document.getElementById("yasearch-bloggers") ?
  131.                            this._Bloggers.isWindowVisible(gBrowser.selectedTab) :
  132.                            false);
  133.         break;
  134.       
  135.       case "TabClose":
  136.         this._Bloggers.clearTabData(aEvent.target.linkedPanel);
  137.         break;
  138.       
  139.       case "mousemove":
  140.         let eventPoints = {x: aEvent.screenX, y: aEvent.screenY};
  141.         
  142.         let ts = Date.now();
  143.         if (ts - this.lastTS < 7)
  144.           return;
  145.         
  146.         this.lastTS = ts;
  147.         
  148.         let diff = {
  149.           x: this.lastXY.x - eventPoints.x,
  150.           y: this.lastXY.y - eventPoints.y
  151.         };
  152.         
  153.         if (diff.x == 0 && diff.y == 0)
  154.           return;
  155.         
  156.         this.handleMouseMove(diff);
  157.         
  158.         this.lastXY = eventPoints;
  159.         
  160.         break;
  161.         
  162.       case "mousedown":
  163.         var originalTarget = aEvent.originalTarget;
  164.         
  165.         if (aEvent.button == 0 &&
  166.             this.findParentByLocalName(originalTarget, "yawintitle") &&
  167.             originalTarget.localName != "toolbarbutton") {
  168.           
  169.           this.lastXY = {x: aEvent.screenX, y: aEvent.screenY};
  170.           this.lastTS = Date.now();
  171.           
  172.           var w = this.winForMouseEvents;
  173.           w.addEventListener("mouseup", this, false);
  174.           w.addEventListener("mousemove", this, false);
  175.         }
  176.         
  177.         break;
  178.       
  179.       case "mouseup":
  180.         var w = this.winForMouseEvents;
  181.         w.removeEventListener("mouseup", this, false);
  182.         w.removeEventListener("mousemove", this, false);
  183.         
  184.         this.checkWindowVisible();
  185.         
  186.         break;
  187.       
  188.       case "click":
  189.         var url = this.getUrlValue(aEvent.target);
  190.         if (url)
  191.           Ya.loadURI(url, "tab");
  192.         break;
  193.       
  194.       case "resize":
  195.         this.checkWindowVisible();
  196.         break;
  197.       
  198.       case "popupshowing":
  199.         let disabled = false;
  200.         
  201.         let bloggersButton = this.bloggersButton;
  202.         if (bloggersButton && parseInt(bloggersButton.getAttribute("yaLabel"), 10) == 0) {
  203.           let currentURI = gBrowser.currentURI;
  204.           disabled = !(currentURI && /https?/.test(currentURI.scheme));
  205.         }
  206.         
  207.         let menuitems = aEvent.target.getElementsByTagName("menuitem");
  208.         for (let i = 0, len = menuitems.length; i < len; i++)
  209.           menuitems[i].disabled = disabled;
  210.         
  211.         break;
  212.       
  213.       default:
  214.         break;
  215.     }
  216.   },
  217.   
  218.   getUrlValue: function(aNode) {
  219.     let node = aNode;
  220.     
  221.     while (node && "hasAttribute" in node) {
  222.       if (node.hasAttribute("url"))
  223.         return node.getAttribute("url");
  224.       node = node.parentNode;
  225.     }
  226.     
  227.     return null;
  228.   },
  229.   
  230.   hboxPopupShowing: function(aTooltip) {
  231.     let url = this.getUrlValue((("close" in this.win) ? this.win.document : document).tooltipNode);
  232.     return url ? aTooltip.firstChild.setAttribute("value", url) : false;
  233.   },
  234.   
  235.   checkWindowState: function() {
  236.     if (this.win && !document.getElementById("yasearch-bloggers"))
  237.       this.hide();
  238.   },
  239.   
  240.   changeMode: function(aMode) {
  241.     let mode = this._Bloggers.switchWindowMode(aMode) ? "top" : "bottom";
  242.     this.getWindowElement("yasearch-blogger-window-title").setAttribute("mode", mode);
  243.     if (mode == "bottom" && !this._Bloggers.isWindowVisible(gBrowser.selectedTab))
  244.       this.showHide(false);
  245.   },
  246.   
  247.   hide: function(aButton) {
  248.     this._Bloggers.hideTopModeWindow();
  249.     this.changeMode(false);
  250.     this.showHide(false);
  251.   },
  252.   
  253.   refreshData: function(aSkipCache, aTimeout, aManual) {
  254.     if (document.getElementById("yasearch-bloggers"))
  255.       this._Bloggers.getBloggersData(gBrowser.selectedTab, aSkipCache, aTimeout, aManual);
  256.   },
  257.   
  258.   setData: function(aData, aCheckWindowState) {
  259.     let selIndex = 3,
  260.         bbutton = this.bloggersButton;
  261.     
  262.     let count = aData ? aData.value : 0;
  263.     
  264.     if (bbutton) {
  265.       let yaIconAttr = 0;
  266.       
  267.       if (count) {
  268.         yaIconAttr = 1;
  269.         [0,100,1000,10000]
  270.         .every(function(aValue) {
  271.           return count > aValue ? !!yaIconAttr++ : false;
  272.         });
  273.       }
  274.       
  275.       bbutton.setAttribute("yaLabel", count || 0);
  276.       bbutton.setAttribute("yaIcon", yaIconAttr);
  277.       
  278.       let container = this.getWindowElement("yasearch-blogger-content-2");
  279.       let scroll = this.getWindowElement("yasearch-blogger-content-scroll");
  280.       
  281.       if (scroll) {
  282.         if (scroll.scrollBoxObject && scroll.hasAttribute("location")) {
  283.           try {
  284.             let yPos = {};
  285.             scroll.scrollBoxObject.getPosition({}, yPos);
  286.             this._Bloggers.persistScrollPosition(scroll.getAttribute("location"), yPos.value);
  287.           } catch(e) {}
  288.         }
  289.         
  290.         container.removeChild(container.firstChild);
  291.       }
  292.       
  293.       if (aData) {
  294.         if ((aData.buttonState & this.BLOGGERS_STATE_UNKNOWN) || aData.value === 0) {
  295.           selIndex = 3;
  296.         } else if (aData.buttonState & this.BLOGGERS_STATE_REQUEST) {
  297.           selIndex = 0;
  298.         } else if ((aData.windowState & this.BLOGGERS_STATE_TIMED_REQUEST) || (aData.windowState & this.BLOGGERS_STATE_REQUEST)) {
  299.           selIndex = 1;
  300.         } else if ((aData.windowState & this.BLOGGERS_STATE_RESPONSE) && aData.content) {
  301.           selIndex = 2;
  302.           let s = this.nsIYa.DOMUtils.replaceChildNodes(aData.content, container);
  303.           if (aData.scroll) {
  304.             setTimeout(function() {
  305.               s.firstChild.scrollByPixels(aData.scroll);
  306.             }, 0);
  307.           }
  308.         } else if ((aData.buttonState & this.BLOGGERS_STATE_ERROR) || (aData.windowState & this.BLOGGERS_STATE_ERROR)) {
  309.           selIndex = 4;
  310.         }
  311.       }
  312.     }
  313.     
  314.     selIndex = "" + selIndex;
  315.     let content = this.getWindowElement("yasearch-blogger-content");
  316.     if (content && content.selectedIndex != selIndex)
  317.       content.setAttribute("selectedIndex", selIndex);
  318.     
  319.     if (aData && aCheckWindowState &&
  320.         count && this.getWindowElement("yasearch-blogger-content") &&
  321.         (aData.buttonState & this.BLOGGERS_STATE_RESPONSE) &&
  322.         (aData.windowState & this.BLOGGERS_STATE_UNKNOWN))
  323.     {
  324.       this._Bloggers.getBloggersData(gBrowser.selectedTab);
  325.     }
  326.   },
  327.   
  328.   onTooltipShowing: function(aEvent) {
  329.     if (document.tooltipNode.tagName != "toolbarbutton")
  330.       return false;
  331.     
  332.     let bloggersButton = this.bloggersButton;
  333.     if (!bloggersButton)
  334.       return false;
  335.     
  336.     let bloggersCount = parseInt(bloggersButton.getAttribute("yaLabel"),10);
  337.     document.getElementById("yasearch-bloggers-tooltip-deck").selectedIndex = bloggersCount > 0 ? 1 : 0;
  338.     document.getElementById("yasearch-bloggers-tooltip-count").setAttribute("value", bloggersCount);
  339.     
  340.     return true;
  341.   },
  342.   
  343.   savedPosition: null,
  344.   
  345.   getWindowElement: function(aId) {
  346.     return this.win ? this.win.document.getElementById(aId) : null;
  347.   },
  348.   
  349.   handleMouseMove: function(aDiff) {
  350.     this.win.BloggersWindow.handleMouseMove(aDiff);
  351.   },
  352.   
  353.   checkWindowVisible: function() {
  354.     if (this.win)
  355.       this.win.BloggersWindow.checkWindowVisible();
  356.   },
  357.   
  358.   showHide: function(aState) {
  359.     let visible = (typeof aState == "undefined") ? !this.win : aState;
  360.     
  361.     if (typeof aState == "undefined" || !visible)
  362.       this._Bloggers.persistWindowVisible(gBrowser.selectedTab, visible);
  363.     
  364.     if (visible) {
  365.       if (!this.win) {
  366.         let flags = "chrome,dependent=yes";
  367.         
  368.         if (!this.nsIYa.AppInfo.OS.isWindows)
  369.           flags += ",popup=yes";
  370.         
  371.         if (!this.nsIYa.AppInfo.browser.isGreaterThenFx35)
  372.           flags += ",titlebar=no";
  373.         
  374.         this.win = this.nsIYa.windowWatcher.openWindow(window,
  375.                       "chrome://yasearch/content/bloggers/bloggers.xul",
  376.                       "_blank", flags, null);
  377.       }
  378.     } else if (this.win) {
  379.       if (typeof aState == "undefined") {//toolbarbutton.@oncommand
  380.         this.hide();
  381.       } else {
  382.         this.win.close();
  383.         this.win = null;
  384.       }
  385.     }
  386.   }
  387. }
  388.  
  389. window.addEventListener("load", function(aLoadEvent) {
  390.   aLoadEvent.currentTarget.removeEventListener("load", arguments.callee, false);
  391.   
  392.   aLoadEvent.currentTarget.addEventListener("unload", function(aUnloadEvent) {
  393.     aUnloadEvent.currentTarget.removeEventListener("unload", arguments.callee, false);
  394.     YaBloggers.onWindowUnload();
  395.   }, false);
  396.   
  397.   YaBloggers.onWindowLoad();
  398. }, false);
  399.  
  400. })();