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 / fil03B29CDBD7A70AE54F431427D6AF92A7 < prev    next >
Text File  |  2010-07-12  |  13KB  |  421 lines

  1. var gYaOverlay = {
  2.   _yaToolbarId: "yasearch-bar",
  3.   _yaIdPrefix: "yasearch",
  4.   _yaIdPrefixRE: /^yasearch\-/,
  5.   
  6.   _inited: false,
  7.   
  8.   init: function Overlay_init() {
  9.     if (!this._inited) {
  10.       this._inited = true;
  11.       Components.utils.import("resource://yasearch/bar.protocol.jsm", this);
  12.       this.ProtocolHandler.addHandler(this.barProtocolHandler);
  13.     }
  14.   },
  15.   
  16.   shutdown: function Overlay_destroy() {
  17.     if (this._inited) {
  18.       this._inited = false;
  19.       this.ProtocolHandler.removeHandler(this.barProtocolHandler);
  20.     }
  21.   },
  22.   
  23.   get _rdf() {
  24.     delete this._rdf;
  25.     return this._rdf = Cc["@mozilla.org/rdf/rdf-service;1"].getService(Ci.nsIRDFService);
  26.   },
  27.   
  28.   get _dataSource() {
  29.     delete this._dataSource;
  30.     return this._dataSource = this._rdf.GetDataSource("rdf:local-store");
  31.   },
  32.   
  33.   getRDFLiteralValue: function Overlay_getRDFLiteralValue(aSource, aProperty) {
  34.     let target = this._dataSource.GetTarget(aSource, aProperty, true);
  35.     if (target instanceof Ci.nsIRDFLiteral)
  36.       return target.Value;
  37.  
  38.     return null;
  39.   },
  40.   
  41.   setRDFLiteralValue: function Overlay_setRDFLiteralValue(aSource, aProperty, aTarget) {
  42.     try {
  43.       var oldTarget = this._dataSource.GetTarget(aSource, aProperty, true);
  44.       if (oldTarget) {
  45.         if (aTarget)
  46.           this._dataSource.Change(aSource, aProperty, oldTarget, this._rdf.GetLiteral(aTarget));
  47.         else
  48.           this._dataSource.Unassert(aSource, aProperty, oldTarget);
  49.       } else {
  50.         this._dataSource.Assert(aSource, aProperty, this._rdf.GetLiteral(aTarget), true);
  51.       }
  52.     } catch(e) {}
  53.   },
  54.   
  55.   _mirateHelpInfo: {
  56.     quote: {
  57.       newPrefsId: "yasearch.xbwidgets.http://bar.yandex.ru/packages/yandexbar#quote",
  58.       newInstId: "yasearch.cb-http://bar.yandex.ru/packages/yandexbar#quote-inst-",
  59.       oldPrefsId: "yasearch.xbwidgets.A78155FC-41D5-4304-BD60-A01D8C1FB9FA",
  60.       oldInstId: "yasearch.cb-A78155FC-41D5-4304-BD60-A01D8C1FB9FA-inst-"
  61.     },
  62.     
  63.     town: {
  64.       newPrefsId: "yasearch.xbwidgets.http://bar.yandex.ru/packages/yandexbar#town",
  65.       newInstId: "yasearch.cb-http://bar.yandex.ru/packages/yandexbar#town-inst-"
  66.     }
  67.   },
  68.   
  69.   _migrateInstCounter: 1,
  70.   
  71.   _generateNewMigrateInstId: function() {
  72.     return (Date.now() + this._migrateInstCounter++);
  73.   },
  74.   
  75.   _migrateQuoteItem: function(aOldQuoteId) {
  76.     let helpInfo = this._mirateHelpInfo.quote;
  77.     
  78.     let [, instId] = aOldQuoteId.split(helpInfo.oldInstId);
  79.     gYaSearchService.log("instId " + instId);
  80.     
  81.     let quoteInstIdPrefix = [helpInfo.newPrefsId, instId, "settings.quote-id"].join(".");
  82.     
  83.     let oldQuotePrefName = [helpInfo.oldPrefsId, instId, "quote-id"].join(".");
  84.     let oldQuoteId = gYaSearchService.getIntPref(oldQuotePrefName) || gYaSearchService.getCharPref(oldQuotePrefName);;
  85.     if (oldQuoteId) {
  86.       gYaSearchService.setCharPref(quoteInstIdPrefix, oldQuoteId);
  87.     }
  88.     gYaSearchService.resetPref(oldQuotePrefName);
  89.     
  90.     return helpInfo.newInstId + instId;
  91.   },
  92.   
  93.   _migrateCityItem: function(aOldCityId) {
  94.     let helpInfo = this._mirateHelpInfo.town;
  95.     let instId = this._generateNewMigrateInstId();
  96.     
  97.     let townInstIdPrefix = [helpInfo.newPrefsId, instId, "settings"].join(".");
  98.     
  99.     let props = this._getCityProps(aOldCityId);
  100.     
  101.     if (props.cityId)
  102.       gYaSearchService.setIntPref(townInstIdPrefix + ".id", props.cityId);
  103.     
  104.     if (props.weatherEnabledValue)
  105.       gYaSearchService.setBoolPref(townInstIdPrefix + ".show-weather", props.weatherEnabled);
  106.     
  107.     if (props.trafficEnabledValue)
  108.       gYaSearchService.setBoolPref(townInstIdPrefix + ".show-traffic", props.trafficEnabled);
  109.     
  110.     return helpInfo.newInstId + instId;
  111.   },
  112.   
  113.   _getCityProps: function(aOldCityId) {
  114.     var props = aOldCityId.split("-");
  115.     
  116.     function unescapePureLabel(aString) {
  117.       return aString.replace(/\$1/g, "-").replace(/\$2/g, ",");
  118.     }
  119.     
  120.     return {
  121.       cityId: props[3] || "",
  122.       
  123.       labelPure:      props[4] || "",
  124.       labelAliasPure: props[7] || "",
  125.       
  126.       get labelAlias()    { return unescapePureLabel(this.labelAliasPure) },
  127.       
  128.       weatherEnabledValue: props[5] || "",
  129.       trafficEnabledValue: props[6] || "",
  130.       
  131.       get weatherEnabled() {
  132.         return (this.weatherEnabledValue != "0");
  133.       },
  134.       
  135.       get trafficEnabled() {
  136.         return (this.trafficEnabledValue == "1");
  137.       }
  138.     }
  139.   },
  140.   
  141.   migrateWidgets: function(aLastVersion) {
  142.     if (aLastVersion >= "5.0")
  143.       return;
  144.     
  145.     let migrateHelpInfo = this._mirateHelpInfo;
  146.     
  147.     let oldTownUpdateInterval = gYaSearchService.getIntPref("yasearch.http.update.weathertraff.interval");
  148.     if (oldTownUpdateInterval !== null) {
  149.       gYaSearchService.setIntPref(migrateHelpInfo.town.newPrefsId + ".all.settings.update-interval", oldTownUpdateInterval);
  150.       gYaSearchService.resetPref("yasearch.http.update.weathertraff.interval");
  151.     }
  152.     
  153.     let oldQuoteUpdateInterval = gYaSearchService.getIntPref(migrateHelpInfo.quote.oldPrefsId + ".all.update-interval");
  154.     if (oldQuoteUpdateInterval !== null) {
  155.       gYaSearchService.setIntPref(migrateHelpInfo.quote.newPrefsId + ".all.settings.update-interval", oldQuoteUpdateInterval);
  156.       gYaSearchService.resetPref(migrateHelpInfo.quote.oldPrefsId + ".all.update-interval");
  157.     }
  158.     
  159.     let oldQuoteInstIdPrefix = migrateHelpInfo.quote.oldInstId;
  160.     
  161.     let dirty = false;
  162.     
  163.     let allResources = this._dataSource.GetAllResources();
  164.     let currentsetResource = this._rdf.GetResource("currentset");
  165.     
  166.     while (allResources.hasMoreElements()) {
  167.       let res = allResources.getNext().QueryInterface(Ci.nsIRDFResource);
  168.       let tool = res.Value;
  169.       
  170.       if (tool) {
  171.         let _dirty = false;
  172.         let currentsetIds;
  173.         
  174.         let toolbar = this._rdf.GetResource(tool);
  175.         let currentSet = this.getRDFLiteralValue(toolbar, currentsetResource);
  176.         if (currentSet && currentSet != "__empty") {
  177.           
  178.           [",yasearch-bloggers,separator,yasearch-spellchecker,",
  179.            ",yasearch-bookmarks,separator,yasearch-preferences,"]
  180.           .forEach(function(aDefaultsetNewPart) {
  181.             let oldPart = aDefaultsetNewPart.split("separator,").join("");
  182.             if (currentSet.indexOf(oldPart) > 0) {
  183.               currentSet = currentSet.replace(oldPart, aDefaultsetNewPart);
  184.               _dirty = true;
  185.             }
  186.           });
  187.           
  188.           currentsetIds = currentSet.split(",");
  189.           
  190.           for (let i = 0, len = currentsetIds.length; i < len; i++) {
  191.             if (currentsetIds[i]) {
  192.               let id = currentsetIds[i];
  193.               
  194.               if (id.indexOf("yasearch-city-") == 0) {
  195.                 currentsetIds[i] = this._migrateCityItem(id);
  196.                 _dirty = true;
  197.               } else if (id.indexOf(oldQuoteInstIdPrefix) == 0) {
  198.                 currentsetIds[i] = this._migrateQuoteItem(id);
  199.                 _dirty = true;
  200.               }
  201.             }
  202.           }
  203.         }
  204.         
  205.         if (_dirty) {
  206.           this.setRDFLiteralValue(toolbar, currentsetResource, currentsetIds.join(","));
  207.           dirty = true;
  208.         }
  209.       }
  210.     }
  211.     
  212.     if (dirty)
  213.       this._dataSource.QueryInterface(Ci.nsIRDFRemoteDataSource).Flush();
  214.   },
  215.   
  216.   get defaultset() {
  217.     delete this.defaultset;
  218.     return this.defaultset = this.overlayDocument.getElementById(this._yaToolbarId).getAttribute("defaultset");
  219.   },
  220.   
  221.   setToolbarCollapsedState: function Overlay_setCollapsedState(aCollapsedState) {
  222.     if (typeof aCollapsedState !== "boolean")
  223.       return;
  224.     
  225.     let newCollapsedState = aCollapsedState.toString();
  226.     
  227.     try {
  228.       let collapsedResource = this._rdf.GetResource("collapsed");
  229.       let toolbarResource = this._rdf.GetResource("chrome://browser/content/browser.xul#yasearch-bar");
  230.       let currentCollapsedState = this.getRDFLiteralValue(toolbarResource, collapsedResource);
  231.       
  232.       if ((currentCollapsedState || "false").toString() != newCollapsedState) {
  233.         this.setRDFLiteralValue(toolbarResource, collapsedResource, newCollapsedState);
  234.         this._dataSource.QueryInterface(Ci.nsIRDFRemoteDataSource).Flush();
  235.       }
  236.     } catch(e) {}
  237.   },
  238.   
  239.   get _CurrentsetIds() {
  240.     delete this._CurrentsetIds;
  241.     
  242.     this._CurrentsetIds = new G_HashTable();
  243.     
  244.     let allResources = this._dataSource.GetAllResources();
  245.     let currentsetResource = this._rdf.GetResource("currentset");
  246.     
  247.     let re = this._yaIdPrefixRE;
  248.     
  249.     while (allResources.hasMoreElements()) {
  250.       let res = allResources.getNext().QueryInterface(Ci.nsIRDFResource);
  251.       let tool = res.Value;
  252.       
  253.       if (tool) {
  254.         let toolbar = this._rdf.GetResource(tool);
  255.         let currentSet = this.getRDFLiteralValue(toolbar, currentsetResource);
  256.         if (currentSet) {
  257.           for each (let elemId in currentSet.split(",")) {
  258.             if (re.test(elemId)) {
  259.               this._CurrentsetIds.put(elemId, true);
  260.             }
  261.           }
  262.         }
  263.       }
  264.     }
  265.     
  266.     for each (let elemId in this.defaultset.split(",")) {
  267.       if (re.test(elemId)) {
  268.         this._CurrentsetIds.put(elemId, true);
  269.       }
  270.     }
  271.     
  272.     return this._CurrentsetIds;
  273.   },
  274.   
  275.   get CurrentsetIds() {
  276.     return this._CurrentsetIds;
  277.   },
  278.   
  279.   get ClonesData() {
  280.     delete this.ClonesData;
  281.     
  282.     this.ClonesData = new G_HashTable();
  283.     
  284.     let re = this._yaIdPrefixRE;
  285.     
  286.     this.ClonesData.getNodeForId = function(aId) {
  287.       if (!(typeof aId == "string" && re.test(aId)))
  288.         return null;
  289.       
  290.       return this.get(aId.split(/\-\d/)[0]);
  291.     }
  292.     
  293.     this.ClonesData.getCloneForId = function(aId) {
  294.       let cloned = null;
  295.       let node = this.getNodeForId(aId);
  296.       
  297.       if (node) {
  298.         cloned = node.cloneNode(true);
  299.         cloned.setAttribute("yadouble", "child");
  300.         cloned.setAttribute("id", aId);
  301.       }
  302.       
  303.       return cloned;
  304.     }
  305.     
  306.     let elements =
  307.         Array.slice(this.overlayDocument.getElementsByTagName("toolbaritem"))
  308.              .filter(function(el) {
  309.                return el.getAttribute("yadouble") == "parent" && re.test(el.getAttribute("id"));
  310.               });
  311.     
  312.     for each (var el in elements) {
  313.       this.ClonesData.put(el.getAttribute("id"), el);
  314.     }
  315.     
  316.     return this.ClonesData;
  317.   },
  318.   
  319.   get overlayDocument() {
  320.     delete this.overlayDocument;
  321.     
  322.     const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
  323.     
  324.     let overlayFile = gYaSearchService.getContentDir();
  325.     overlayFile.append("yasearch.xul");
  326.     
  327.     let overlayData = gYaSearchService.readFile(overlayFile);
  328.     let overlayDoc = gYaSearchService.domParser.parseFromString(overlayData, "text/xml");
  329.     
  330.     return this.overlayDocument = overlayDoc;
  331.   },
  332.   
  333.   insertToolbarItem: function(aId, aBeforeElement, aBrowser) {
  334.     if ((aBeforeElement instanceof Ci.nsIDOMElement) && !aBrowser)
  335.       return [];
  336.     
  337.     let newItemId = aId + "-" + Date.now();
  338.     let clone = this.ClonesData.getCloneForId(newItemId);
  339.     
  340.     if (!clone)
  341.       return [];
  342.     
  343.     function getBeforeElement(aToolbar) {
  344.       let node;
  345.       
  346.       if (aBeforeElement) {
  347.         if (aBeforeElement instanceof Ci.nsIDOMElement)
  348.           node = aBeforeElement;
  349.         else
  350.           node = aToolbar.getElementsByAttribute("id", aBeforeElement)[0];
  351.       }
  352.       
  353.       return node;
  354.     }
  355.     
  356.     let browsers = typeof aBrowser != "undefined" ? [aBrowser] : gYaSearchService.getWindows("navigator:browser");
  357.     
  358.     let newItemNode = null;
  359.     
  360.     for each (let browser in browsers) {
  361.       let toolbar = browser.document.getElementById(this._yaToolbarId);
  362.       if (toolbar) {
  363.         newItemNode = toolbar.ownerDocument.importNode(clone.cloneNode(true), true);
  364.         let beforeElt = getBeforeElement(toolbar);
  365.         
  366.         if (beforeElt)
  367.           toolbar.insertBefore(newItemNode, beforeElt);
  368.         else
  369.           toolbar.appendChild(newItemNode);
  370.       }
  371.     }
  372.     
  373.     return [newItemId, newItemNode];
  374.   },
  375.   
  376.   barProtocolHandler: {
  377.     canHandleSpec: function(aSpec) {
  378.       return aSpec === "browser-overlay";
  379.     },
  380.  
  381.     newURI: function(aSpec, aOriginalCharset, aBaseURI) {
  382.       if (aSpec === "browser-overlay") {
  383.         try {
  384.           let content = btoa(this._docontent());
  385.           
  386.           let uri =  Cc["@mozilla.org/network/simple-uri;1"].createInstance(Ci.nsIURI);
  387.           uri.spec = "data:application/vnd.mozilla.xul+xml;base64," + content;
  388.           
  389.           return uri;
  390.         } catch(e) {
  391.           gYaSearchService.log("gYaOverlay.newURI: can't create content URI\n" + e);
  392.         }
  393.       }
  394.  
  395.       return null;
  396.     },
  397.  
  398.     newChannel: function(aURI) {
  399.       return null;
  400.     },
  401.     
  402.     _docontent: function() {
  403.       let clonedOverlayDoc = gYaSearchService.domParser.parseFromString(' \
  404.           <overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> \
  405.             <toolbarpalette id="BrowserToolbarPalette"/> \
  406.           </overlay>', "text/xml");
  407.       
  408.       let toolbarPalette = clonedOverlayDoc.getElementById("BrowserToolbarPalette");
  409.       
  410.       let clonesData = gYaOverlay.ClonesData;
  411.       
  412.       for (let [id,] in gYaOverlay.CurrentsetIds) {
  413.         let clone = clonesData.getCloneForId(id);
  414.         if (clone)
  415.           toolbarPalette.appendChild(clone);
  416.       }
  417.       
  418.       return UConverter.ConvertFromUnicode(gYaSearchService.xmlSerializer.serializeToString(clonedOverlayDoc));
  419.     }
  420.   }
  421. };