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 / filA832FDCDC392E4342F2960667EFF9E7F < prev    next >
Text File  |  2010-07-12  |  11KB  |  353 lines

  1. var YaBookmarksUtils = {
  2.   get stringBundleSet() {
  3.     if (!this._strBS)
  4.       this._strBS = document.getElementById("yasearch-string-bundle-bookmarks");
  5.     return this._strBS;
  6.   },
  7.   
  8.   __IOService: null,
  9.   get _IOService() {
  10.     if (!this.__IOService)
  11.       this.__IOService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
  12.     
  13.     return this.__IOService;
  14.   },
  15.   
  16.   __missedIconCache: null,
  17.   
  18.   _openCacheEntry: function(aKey, aAccess) {
  19.     try {
  20.       if (!this.__missedIconCache) {
  21.         const CACHE_SERVICE = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService);
  22.         this.__missedIconCache = CACHE_SERVICE.createSession("YandexMissedFaviconCache", Ci.nsICache.STORE_ANYWHERE, true);
  23.         
  24.         if (!this.__missedIconCache)
  25.           return null;
  26.       }
  27.       
  28.       return this.__missedIconCache.openCacheEntry(aKey, aAccess, true);
  29.       
  30.     } catch(e) {}
  31.     
  32.     return null;
  33.   },
  34.   
  35.   __httpCacheSession: null,
  36.   get httpCacheSession() {
  37.     if (!this.__httpCacheSession) {
  38.       const CACHE_SERVICE = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService);
  39.       this.__httpCacheSession = CACHE_SERVICE.createSession("HTTP", Ci.nsICache.STORE_ANYWHERE, true);
  40.       this.__httpCacheSession.doomEntriesIfExpired = false;
  41.     }
  42.     
  43.     return this.__httpCacheSession;
  44.   },
  45.   
  46.   checkExpirationTime: function(aKey) {
  47.     try {
  48.       var cacheEntryDescriptor = this.httpCacheSession.openCacheEntry(aKey, Ci.nsICacheEntryDescriptor, false);
  49.       var expired = false;
  50.       var expirationTime = cacheEntryDescriptor.lastModified + 2592000;
  51.       
  52.       if (cacheEntryDescriptor.expirationTime < expirationTime) {
  53.         cacheEntryDescriptor.setExpirationTime(expirationTime);
  54.         cacheEntryDescriptor.markValid();
  55.         expired = true;
  56.       }
  57.       
  58.       cacheEntryDescriptor.close();
  59.       
  60.       if (expired) {
  61.         try {
  62.           cacheEntryDescriptor = this.httpCacheSession.openCacheEntry(aKey, Ci.nsICache.ACCESS_READ, false);
  63.         } catch(ex) {}
  64.       }
  65.     } catch(e) { }
  66.   },
  67.   
  68.   addToMissedIconCache: function(aKey, aError) {
  69.     var entry = this._openCacheEntry(aKey, Ci.nsICache.ACCESS_READ_WRITE);
  70.     if (!entry)
  71.       return;
  72.     
  73.     if (entry.accessGranted == Ci.nsICache.ACCESS_WRITE) {
  74.       entry.setMetaDataElement("Icon", "Missed");
  75.       entry.setExpirationTime(parseInt(Date.now()/1000, 10) + (aError ? 86400 : 3600));
  76.     }
  77.     
  78.     entry.markValid();
  79.     entry.close();
  80.   },
  81.   
  82.   _isIconKnownMissing: function(aKey) {
  83.     let e = this._openCacheEntry(aKey, Ci.nsICache.ACCESS_READ);
  84.     if (e) {
  85.       e.close();
  86.       return true;
  87.     }
  88.     
  89.     return false;
  90.   },
  91.   
  92.   _makeURI: function(aURL) {
  93.     let uri = null;
  94.     
  95.     try {
  96.       uri = this._IOService.newURI(aURL, null, null);
  97.     } catch(e) {
  98.       return false;
  99.     }
  100.     
  101.     return uri;
  102.   },
  103.   
  104.   _getHttpURIForURL: function(aURL) {
  105.     let uri = this._makeURI(aURL);
  106.     return (uri && /^https?$/.test(uri.scheme)) ? uri : false;
  107.   },
  108.   
  109.   getFaviconURL: function(aURL) {
  110.     if (!aURL)
  111.       return false;
  112.     
  113.     let uri = this._getHttpURIForURL(aURL);
  114.     if (!uri)
  115.       return false;
  116.     
  117.     let url = uri.prePath + "/favicon.ico";
  118.     
  119.     return this._isIconKnownMissing(url) ? false : url;
  120.   },
  121.   
  122.   getFaviconURI: function(aURL) {
  123.     let url = this.getFaviconURL(aURL);
  124.     return url ? this._getHttpURIForURL(url) : false;
  125.   },
  126.   
  127.   setFaviconForURL: function(aURL, aItem) {
  128.     return false;
  129.   },
  130.   
  131.   onDragStart: function(aEvent, aXferData, aDragAction) {
  132.     var target = aEvent.target;
  133.     
  134.     if (!/bookmark\-item/.test(target.getAttribute("class")))
  135.       return false;
  136.     
  137.     switch (target.localName) {
  138.       case "menuitem":
  139.         let mozUrlData = target.getAttribute("statustext") + "\n" + target.getAttribute("label");
  140.         
  141.         if ("dataTransfer" in aEvent) {
  142.           aEvent.dataTransfer.setData("text/x-moz-url", mozUrlData);
  143.           aEvent.dataTransfer.effectAllowed = "copyLink";
  144.         } else {
  145.           aXferData.data = new TransferData();
  146.           aXferData.data.addDataForFlavour("text/x-moz-url", mozUrlData);
  147.         }
  148.         
  149.         break;
  150.       
  151.       case "menu":
  152.         if (!("dataTransfer" in aEvent))
  153.           return false;
  154.         
  155.         let folderId = target.getAttribute("yafolderid");
  156.         let bookmarkFolder = Ya.nsIYa.bookmarksRawXml.bookmarks..folder.(@id == folderId)[0];
  157.         if (!bookmarkFolder)
  158.           return false;
  159.         
  160.         function createLink(linkElement) {
  161.           return {
  162.             title: linkElement.@name.toString(),
  163.             type: "text/x-moz-place",
  164.             uri: linkElement.@url.toString()
  165.           }
  166.         }
  167.         
  168.         function createFolder(folderElement) {
  169.           let data = {
  170.             title: folderElement.@name.toString(),
  171.             type: "text/x-moz-place-container",
  172.             children: []
  173.           };
  174.           
  175.           for each (var folder in folderElement.folder)
  176.             data.children.push(createFolder(folder));
  177.           
  178.           for each (var link in folderElement.links.link)
  179.             data.children.push(createLink(link));
  180.           
  181.           return data;
  182.         }
  183.         
  184.         let dt = aEvent.dataTransfer;
  185.         dt.setData("text/x-moz-place-container", YaUtils.JSON.stringify(createFolder(bookmarkFolder)));
  186.         dt.effectAllowed = "copy";
  187.         break;
  188.       
  189.       default:
  190.         return false;
  191.     }
  192.     
  193.     return true;
  194.   },
  195.   
  196.   hidePopups: function() {
  197.     [document.getElementById("yasearch-bookmarks-menupopup")]
  198.     .forEach(function(popup) {
  199.       if (popup && popup.hidePopup)
  200.         popup.hidePopup();
  201.     });
  202.   },
  203.   
  204.   bookmarksPopupHidden: function(aEvent) {
  205.     delete this.popupTarget;
  206.   },
  207.   
  208.   bookmarksPopupShow: function(aPopup) {
  209.     this.popupTarget = /bookmark\-item/.test(document.popupNode.getAttribute("class")) ? document.popupNode : null;
  210.     
  211.     if (!this.popupTarget)
  212.       return false;
  213.     
  214.     let menuItems = aPopup.getElementsByTagName("menuitem"),
  215.         menuItemsLength = menuItems.length,
  216.         targetIsFolder = (this.popupTarget.localName == "menu");
  217.     
  218.     for (var i = 0; i < 3; i++)
  219.       menuItems[i].hidden = targetIsFolder;
  220.     
  221.     menuItems[3].hidden = !targetIsFolder;
  222.     
  223.     menuItems[menuItemsLength - 2].hidden = targetIsFolder;
  224.     menuItems[menuItemsLength - 1].hidden = !targetIsFolder;
  225.     
  226.     if (targetIsFolder) {
  227.       let lastChild = this.popupTarget.firstChild.lastChild;
  228.       menuItems[3].setAttribute("disabled", !(lastChild && lastChild.localName == "menuitem"));
  229.     }
  230.     
  231.     return true;
  232.   },
  233.   
  234.   getFolderId: function(aEvent) {
  235.     var target = aEvent ? aEvent.target : this.popupTarget;
  236.     target = target.localName == "menu" ? target : target.parentNode.parentNode;
  237.     return target.hasAttribute("yafolderid") ? target.getAttribute("yafolderid") : null;
  238.   },
  239.   
  240.   getItemID: function(aItem) {
  241.     return aItem.getAttribute("yafolderid") || aItem.getAttribute("yalinkid") || null;
  242.   },
  243.   
  244.   addBookmark: function() {
  245.     Ya.addBookmark(this.getFolderId());
  246.   },
  247.   
  248.   deleteBookmark: function() {
  249.     var target = this.popupTarget;
  250.     
  251.     this.hidePopups();
  252.     
  253.     var type = target.localName == "menu" ? "folder" : "link",
  254.         name = target.getAttribute("label") || "";
  255.     
  256.     var rv = Ya.nsIYa.promptService.confirm(window,
  257.                         this.stringBundleSet.getString("ConfirmDelete" + type + "Title"),
  258.                         this.stringBundleSet.getFormattedString("ConfirmDelete" + type + "Msg", [name]));
  259.     if (rv)
  260.       Ya.nsIYa.bookmarksDeleteItem({ type: type,
  261.                                      id: this.getItemID(target),
  262.                                      callback: this.deleteBookmarkCallback });
  263.   },
  264.   
  265.   deleteBookmarkCallback: function(aErrorType) {
  266.     if (!aErrorType)
  267.       return;
  268.     
  269.     let t1 = [YaBookmarksUtils.stringBundleSet.getString("Action_delete_InTitle")];
  270.     let t2 = [YaBookmarksUtils.stringBundleSet.getString("Action_delete_InMessage")];
  271.     
  272.     if (aErrorType == "input")
  273.       t2.unshift(t1);
  274.     
  275.     let errorType = "Error_" + aErrorType + "_";
  276.     
  277.     Ya.nsIYa.promptService.alert(window,
  278.         YaBookmarksUtils.stringBundleSet.getFormattedString(errorType + "Title", t1),
  279.         YaBookmarksUtils.stringBundleSet.getFormattedString(errorType + "Message", t2)
  280.     );
  281.   },
  282.   
  283.   get _bmsvc() {
  284.     delete this._bmsvc;
  285.     return this._bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
  286.                                    .getService(Components.interfaces.nsINavBookmarksService);
  287.   },
  288.   
  289.   copyFolderToPersonalPanel: function(aBookmarkFolderId) {
  290.     let bookmarkFolder = Ya.nsIYa.bookmarksRawXml.bookmarks..folder.(@id == aBookmarkFolderId)[0];
  291.     if (!bookmarkFolder)
  292.       return null;
  293.     
  294.     return this._createFolder(this._bmsvc.toolbarFolder, bookmarkFolder);
  295.   },
  296.   
  297.   _createFolder: function(aPlacesFolderId, aBookmarkFolder) {
  298.     let bmsvc = this._bmsvc;
  299.     let newFolderId = bmsvc.createFolder(aPlacesFolderId, aBookmarkFolder.@name.toString(), bmsvc.DEFAULT_INDEX);
  300.     
  301.     for each (var folder in aBookmarkFolder.folder)
  302.       this._createFolder(newFolderId, folder);
  303.     
  304.     for each (var link in aBookmarkFolder.links.link)
  305.       this._createLink(newFolderId, link);
  306.     
  307.     return newFolderId;
  308.   },
  309.   
  310.   copyLinkToPersonalPanel: function(aBookmarkLinkId) {
  311.     let bookmarkLink = Ya.nsIYa.bookmarksRawXml.bookmarks..link.(@id == aBookmarkLinkId)[0];
  312.     if (!bookmarkLink)
  313.       return null;
  314.     
  315.     return this._createLink(this._bmsvc.toolbarFolder, bookmarkLink);
  316.   },
  317.   
  318.   _createLink: function(aPlacesFolderId, aBookmarkLink) {
  319.     let uri = this._makeURI(aBookmarkLink.@url.toString());
  320.     if (!uri)
  321.       return null;
  322.     
  323.     let name = aBookmarkLink.@name.toString();
  324.     let bmsvc = this._bmsvc;
  325.     
  326.     return bmsvc.insertBookmark(aPlacesFolderId, uri, bmsvc.DEFAULT_INDEX, name);
  327.   },
  328.   
  329.   copyBookmarkToPersonalPanel: function() {
  330.     var target = this.popupTarget;
  331.     
  332.     if (target.localName === "menu" && target.hasAttribute("yafolderid"))
  333.       return this.copyFolderToPersonalPanel(target.getAttribute("yafolderid"));
  334.     
  335.     if (target.localName === "menuitem" && target.hasAttribute("yalinkid"))
  336.       return this.copyLinkToPersonalPanel(target.getAttribute("yalinkid"));
  337.     
  338.     return null;
  339.   },
  340.   
  341.   editBookmark: function() {
  342.     Ya.addBookmark(this.getFolderId(), this.getItemID(this.popupTarget));
  343.   },
  344.   
  345.   openBookmark: function(aPlace) {
  346.     Ya.loadURI(this.popupTarget.getAttribute("statustext"), aPlace);
  347.   },
  348.   
  349.   openAllInTabs: function(aEvent) {
  350.     Ya.loadURIsInTabs(Ya.nsIYa.bookmarksGetLinksInFolder(this.getFolderId(aEvent)));
  351.     this.hidePopups();
  352.   }
  353. };