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 / fil2175B45BE46BA1400A4AE0901E1F58A4 < prev    next >
Text File  |  2010-07-12  |  12KB  |  393 lines

  1. if (typeof(Cc) === "undefined")
  2.   var Cc = Components.classes;
  3. if (typeof(Ci) === "undefined")
  4.   var Ci = Components.interfaces;
  5.  
  6. var YaFTab = {
  7.   nsIYa: Components.classes["@yandex.ru/yasearch;1"]
  8.                    .getService(Components.interfaces.nsIYaSearch)
  9.                    .wrappedJSObject,
  10.   
  11.   get nsIYaFTab() {
  12.     delete this.nsIYaFTab;
  13.     return this.nsIYaFTab = this.nsIYa.yaFTab;
  14.   },
  15.   
  16.   get settings() {
  17.     delete this.settings;
  18.     return this.settings = this.nsIYa.yaFTab.settings;
  19.   },
  20.   
  21.   get topChromeWin() {
  22.     return window.QueryInterface(Ci.nsIInterfaceRequestor)
  23.                  .getInterface(Ci.nsIWebNavigation)
  24.                  .QueryInterface(Ci.nsIDocShellTreeItem)
  25.                  .rootTreeItem
  26.                  .QueryInterface(Ci.nsIInterfaceRequestor)
  27.                  .getInterface(Ci.nsIDOMWindow)
  28.   },
  29.   
  30.   openYandexPage: function(aEvent) {
  31.     if (aEvent) {
  32.       aEvent.stopPropagation();
  33.       aEvent.preventDefault();
  34.     }
  35.     
  36.     let url = this.nsIYa.getLocaleDependedUrl("YandexWwwHost");
  37.     this.loadURI(url, aEvent || "tab", {clid:7});
  38.     
  39.     return false;
  40.   },
  41.   
  42.   formHistSvc: Cc["@mozilla.org/satchel/form-history;1"].getService(Ci.nsIFormHistory2),
  43.   
  44.   doSearch: function(aText) {
  45.     let searchbox = document.getElementById("ftab-search-box");
  46.     
  47.     let text = aText || searchbox.value || "";
  48.     if (!text.replace(/\s/g, ""))
  49.       return false;
  50.     
  51.     if (this.nsIYa.prefs.searchHistoryEnabled)
  52.       this.formHistSvc.addEntry("yasearch-history", text);
  53.     
  54.     let urlData = this.nsIYa.getSearchEngineUrl("www", text, null, {clid:8})
  55.     if (urlData && urlData.url)
  56.       this.loadURI(urlData.url, "tab");
  57.   },
  58.   
  59.   loadURI: function(aURL, aEvent, aStatData, aPostData, aRespectLoadTabPref) {
  60.     this.topChromeWin.Ya.loadURI(aURL, aEvent, aStatData, aPostData, aRespectLoadTabPref);
  61.   },
  62.   
  63.   clickThumb: function(aPageIndex, aEvent) {
  64.     if (aPageIndex >= 1 && aPageIndex <= this.settings.thumbsNmb) {
  65.       let thumb = this.thumbElements.filter(function(element) {
  66.         return aPageIndex == element.getAttribute("yaThumbIndex");
  67.       })[0];
  68.       
  69.       if (thumb)
  70.         return thumb.click(aEvent);
  71.     }
  72.     
  73.     return false;
  74.   },
  75.   
  76.   MIN_WIDTH: 550,
  77.   
  78.   onWindowResize: function() {
  79.     let width = (document.height - 115) / this.settings.screenFactor;
  80.     width = Math.min(width, window.innerWidth * 0.9);
  81.     width = parseInt(Math.max(width, this.MIN_WIDTH), 10);
  82.     
  83.     [ document.getElementById("ftab-search-box"),
  84.       this.editor.getElementByAnonid("page-url") ]
  85.     .forEach(function(textbox) {
  86.       if (textbox && textbox.popupset) {
  87.         Array.slice(textbox.popupset.childNodes)
  88.              .map(function(el) {
  89.                     if (el.localName=="panel" && el.hasAttribute("width"))
  90.                       el.removeAttribute("width");
  91.                   });
  92.       }
  93.     });
  94.     
  95.     document.getElementById("table-container").style.width = width + "px";
  96.   },
  97.   
  98.   onLoad: function() {
  99.     let browser = this.topChromeWin.gBrowser.getBrowserForDocument(document);
  100.     if (browser)
  101.       browser.mIconURL = document.getElementById("favicon").href;
  102.     
  103.     let pagesData = this.nsIYaFTab.createTabClient(this);
  104.     
  105.     let container = document.getElementById("thumbs-container");
  106.     while (container.firstChild)
  107.       container.removeChild(container.firstChild);
  108.     
  109.     container.appendChild(pagesData);
  110.     
  111.     this.onWindowResize();
  112.     
  113.     document.getElementById("container-stack").hidden = false;
  114.     
  115.     window.addEventListener("resize", this, false);
  116.     window.addEventListener("keypress", this, false);
  117.     window.addEventListener("click", this, false);
  118.     
  119.     this.DragAndDrop.init();
  120.   },
  121.   
  122.   onUnload: function() {
  123.     window.removeEventListener("resize", this, false);
  124.     window.removeEventListener("keypress", this, false);
  125.     window.removeEventListener("click", this, false);
  126.     
  127.     this.DragAndDrop.destroy();
  128.     
  129.     this.nsIYaFTab.destroyTabClient(this);
  130.   },
  131.   
  132.   handleEvent: function(aEvent) {
  133.     if (!aEvent.isTrusted)
  134.       return;
  135.     
  136.     switch (aEvent.type) {
  137.       case "click":
  138.         if (aEvent.button == 1) {
  139.           let node = aEvent.target;
  140.           
  141.           if (node == document.getElementById("search-container-link")) {
  142.             return this.openYandexPage(aEvent);
  143.           }
  144.           
  145.           let level = 0;
  146.           while (level++ < 10 && node && !("click" in node)) {
  147.             node = node.parentNode;
  148.           }
  149.           
  150.           if (node && "click" in node)
  151.             node.click(aEvent);
  152.         }
  153.         break;
  154.       
  155.       case "keypress":
  156.         if (aEvent.altKey && aEvent.keyCode && !(aEvent.ctrlKey || aEvent.metaKey)) {
  157.           let page = aEvent.keyCode - (aEvent.keyCode > 96 ? 96 : 48);
  158.           if (this.clickThumb(page)) {
  159.             aEvent.preventDefault();
  160.             aEvent.stopPropagation();
  161.           }
  162.         }
  163.         break;
  164.       
  165.       case "resize":
  166.         setTimeout(function(me) {me.onWindowResize();}, 50, this);
  167.         break;
  168.       
  169.       default:
  170.         break;
  171.     }
  172.   },
  173.   
  174.   get thumbElements() {
  175.     let res = Array.slice(document.getElementById("thumbs-container")
  176.                                   .getElementsByClassName("thumb-holder"));
  177.     return res;
  178.   },
  179.   
  180.   getPageProps: function(aData) {
  181.     let index = (aData instanceof HTMLElement) ? aData.getAttribute("yaThumbIndex") : aData;
  182.     return this.nsIYaFTab.getPageProps(index);
  183.   },
  184.   
  185.   observe: function(aTopic, aData) {
  186.     switch (aTopic) {
  187.       case "UPDATE_PROPS":
  188.         if (aData && (aData.url || aData.pageIndex)) {
  189.           let url = aData.url;
  190.           let pageIndex = aData.pageIndex;
  191.           
  192.           this.thumbElements.filter(function(element) {
  193.             return (pageIndex && pageIndex == element.getAttribute("yaThumbIndex")) ||
  194.                    (url && url == element.getAttribute("href"));
  195.           })
  196.           .forEach(function(element) {
  197.             element.updateProps(this.getPageProps(element));
  198.           }, this);
  199.           
  200.           if (url === this.editor.thumbHolder.getAttribute("href")) {
  201.             this.hanleNewURL(url, false);
  202.           }
  203.         }
  204.         break;
  205.       
  206.       default:
  207.         break;
  208.     }
  209.   },
  210.   
  211.   DragAndDrop: {
  212.     _isInited: false,
  213.     
  214.     init: function() {
  215.       if (this._isInited)
  216.         return;
  217.       
  218.       window.addEventListener("draggesture", this, false);
  219.       window.addEventListener(Ci.nsIDOMDataTransfer ? "drop" : "dragdrop", this, false);
  220.       window.addEventListener("dragover", this, false);
  221.       
  222.       this._isInited = true;
  223.     },
  224.     
  225.     destroy: function() {
  226.       if (!this._isInited)
  227.         return;
  228.       
  229.       window.removeEventListener("draggesture", this, false);
  230.       window.removeEventListener(Ci.nsIDOMDataTransfer ? "drop" : "dragdrop", this, false);
  231.       window.removeEventListener("dragover", this, false);
  232.       
  233.       this._isInited = false;
  234.     },
  235.     
  236.     handleEvent: function(aEvent) {
  237.       if (!aEvent.isTrusted)
  238.         return;
  239.  
  240.       switch (aEvent.type) {
  241.         case "draggesture":
  242.           let target = this._getThumbHolderFromEvent(aEvent);
  243.           
  244.           let fakeDragEvent = target === aEvent.target ? aEvent : {
  245.             screenX: aEvent.screenX,
  246.             screenY: aEvent.screenY,
  247.             target: target,
  248.             originalTarget: target,
  249.             stopPropagation: function() {},
  250.             dataTransfer: aEvent.dataTransfer
  251.           }
  252.           
  253.           nsDragAndDrop.startDrag(fakeDragEvent, this);
  254.           aEvent.stopPropagation();
  255.           break;
  256.         
  257.         case "dragdrop":
  258.         case "drop":
  259.           nsDragAndDrop.drop(aEvent, this);
  260.           break;
  261.  
  262.         case "dragover":
  263.           nsDragAndDrop.dragOver(aEvent, this);
  264.           break;
  265.         
  266.         default:
  267.           break;
  268.       }
  269.     },
  270.     
  271.     _getThumbHolderFromEvent: function(aEvent) {
  272.       let target = aEvent.target;
  273.       while (target && !(target.localName == "a" && target.getAttribute("class") == "thumb-holder"))
  274.         target = target.parentNode;
  275.       
  276.       return target && target.localName == "a" ? target : null;
  277.     },
  278.     
  279.     _getPageAttributeFromEvent: function(aAttrName, aEvent) {
  280.       let thumbHolder = this._getThumbHolderFromEvent(aEvent);
  281.       return thumbHolder ? thumbHolder.getAttribute(aAttrName) : null;
  282.     },
  283.     
  284.     getSupportedFlavours: function() {
  285.       let flavourSet = new FlavourSet();
  286.       flavourSet.appendFlavour("yaftab/page-index");
  287.       return flavourSet;
  288.     },
  289.     
  290.     onDragStart: function(aEvent, aXferData, aDragAction) {
  291.       let index = this._getPageAttributeFromEvent("yaThumbIndex", aEvent);
  292.       if (!index)
  293.         return;
  294.       
  295.       aXferData.data = new TransferData();
  296.       aXferData.data.addDataForFlavour("yaftab/page-index", index);
  297.       
  298.       let href = this._getPageAttributeFromEvent("href", aEvent);
  299.       if (href) {
  300.         aXferData.data.addDataForFlavour("text/unicode", href);
  301.         aXferData.data.addDataForFlavour("text/x-moz-url", href);
  302.       }
  303.     },
  304.     
  305.     onDragOver: function(aEvent, aFlavour, aSession) {},
  306.     
  307.     onDrop: function(aEvent, aXferData, aSession) {
  308.       if (aXferData.flavour.contentType !== "yaftab/page-index")
  309.         return;
  310.       
  311.       let xferData = aXferData.data.split("\n");
  312.       let fromIndex = parseInt(xferData[0],10);
  313.       if (!fromIndex)
  314.         return;
  315.       
  316.       let toIndex = this._getPageAttributeFromEvent("yaThumbIndex", aEvent);
  317.       if (!toIndex)
  318.         return false;
  319.       
  320.       aEvent.preventDefault();
  321.       
  322.       YaFTab.nsIYaFTab.swapPages(fromIndex, toIndex);
  323.     }
  324.   },
  325.   
  326.   getSitesFromHistory: function(aOnComplete) {
  327.     return this.nsIYaFTab.getSitesFromHistory(20, aOnComplete);
  328.   },
  329.   
  330.   get editor() {
  331.     delete this.editor;
  332.     return this.editor = document.getElementById("editor");
  333.   },
  334.   
  335.   showEditorForPage: function(aPageIndex) {
  336.     this.editor.open(aPageIndex, this.nsIYaFTab.getPageProps(aPageIndex));
  337.   },
  338.   
  339.   onEditorCallback: function(aPageIndex, aPageData, aOpenTimestamp) {
  340.     if (aPageData) {
  341.       this.nsIYaFTab.setPageProps(aPageIndex, aPageData, {checkedTimeMin: aOpenTimestamp});
  342.     }
  343.   },
  344.   
  345.   hanleNewURL: function(aURL, aRefreshData) {
  346.     let props = this.nsIYaFTab.getPropsForURL(aURL, aRefreshData);
  347.     
  348.     let editor = this.editor;
  349.     
  350.     editor.setText("title", props.title || "", true);
  351.     props.title = editor.getText("title");
  352.     
  353.     editor.thumbHolder.updateProps(props);
  354.   },
  355.   
  356.   getURLFromString: function(aString) {
  357.     return this.nsIYaFTab.getURLFromString(aString);
  358.   },
  359.   
  360.   get stringBundleSet() {
  361.     delete this.stringBundleSet;
  362.     
  363.     let sbs = Cc["@mozilla.org/intl/stringbundle;1"].createInstance(Ci.nsIStringBundleService);
  364.     return this.stringBundleSet = sbs.createBundle("chrome://yasearch/locale/ftab/ftab.properties");
  365.   },
  366.   
  367.   removePage: function(aPageIndex) {
  368.     let props = this.nsIYaFTab.getPageProps(aPageIndex);
  369.     let pageTitle = props ? (props.title || props.url || "") : "";
  370.     
  371.     let confirmTitle = this.stringBundleSet.GetStringFromName("dialogTitle");
  372.     let confirmMessage = this.stringBundleSet.GetStringFromName("thumbRemoveLabel");
  373.     if (pageTitle) {
  374.       if (pageTitle.length > 300)
  375.         pageTitle = pageTitle.substr(0, 300) + "...";
  376.       
  377.       confirmMessage += " " + this.stringBundleSet.formatStringFromName("thumbRemoveLabelTitle", [pageTitle], 1);
  378.     }
  379.     confirmMessage += "?";
  380.     
  381.     let rv = this.nsIYa.promptService.confirm(window, confirmTitle, confirmMessage);
  382.     if (rv)
  383.       this.nsIYaFTab.removePage(aPageIndex);
  384.   }
  385. };
  386.  
  387. window.addEventListener("pageshow", function(aLoadEvent) {
  388.   aLoadEvent.currentTarget.addEventListener("pagehide", function(aUnloadEvent) {
  389.     YaFTab.onUnload();
  390.   }, false);
  391.   
  392.   YaFTab.onLoad();
  393. }, false);