Mercurial > hg > digilib
diff xul/content/sidebar/installer.js @ 199:49cb8a445126
restarting with version control of xul sidebar/toolbar
author | luginbue |
---|---|
date | Fri, 27 Feb 2004 11:24:53 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xul/content/sidebar/installer.js Fri Feb 27 11:24:53 2004 +0100 @@ -0,0 +1,173 @@ +//@@@@@@@@@@@@@@@@ +function MOZ_SidebarInstaller //<c><a>public<d>Mozilla Sidebar installer class +( +_title, //<p>string<d>Sidebar title +_url, //<p>string<d>Sidebar URL +_customize //<p>string<d>Sidebar customization +){ +const +INTERFACES = Components.interfaces, +nsIRDFRemoteDataSource = INTERFACES.nsIRDFRemoteDataSource, +nsIRDFService = INTERFACES.nsIRDFService, RDF_CID = "@mozilla.org/rdf/rdf-service;1", +nsIRDFContainer = INTERFACES.nsIRDFContainer, CONTAINER_CID = "@mozilla.org/rdf/container;1", +nsIProperties = INTERFACES.nsIProperties, DIR_SERV_CID = "@mozilla.org/file/directory_service;1", +nsIIOService = INTERFACES.nsIIOService, IO_SERVICE_CID = '@mozilla.org/network/io-service;1', +NC_NAMESPACE = 'http://home.netscape.com/NC-rdf#', +SIDEBAR_PANEL_URN = NC_NAMESPACE + 'panel-list', +SIDEBAR_CUR_URN = 'urn:sidebar:current-panel-list', +SIDEBAR_3RD_URN = 'urn:sidebar:3rdparty-panel:', +PANELS_RDF_FILE = "UPnls"; //directory services property to find panels.rdf +const +MSG_PANEL_IN_LIST = ' panel is already in Sidebar list\nSelect it in the Tabs > Customize Sidebar... menu', +MSG_PANEL_REFRESHED = ' panel successfully refreshed', +MSG_PANEL_ADDED = ' panel has been successfully added to your sidebar', +MSG_PANEL_SOURCE = 'Sidebar datasource is busted', +MSG_NO_RDF_FILE = 'panels.rdf file does not exist in your profile\nInstallation aborted'; + + + +//================ +this.MOZ_SidebarInstaller = function //<m>void<a>private<d>class constructor +( +title, //<p>string<d>Sidebar panel title +url, //<p>string<d>Sidebar panel URL +customize //<p>string<d>Sidebar panel customization preferences +){ +this.className = 'MOZ_SidebarInstaller'; +this.title = title; +this.url = url; +this.customize = customize; +this.setIn(); +}//</m>MOZ_SidebarInstaller + + + +//================ +this.setIn = function //<m>void<a>private<d>Instance i12n +(){ +this.rdf = Components.classes[RDF_CID].getService(nsIRDFService); +this.container = Components.classes[CONTAINER_CID].createInstance(nsIRDFContainer); +this.source = this.rdf.GetDataSource(this.getSource()); +this.currentResource = this.rdf.GetResource(SIDEBAR_CUR_URN); +this.installResource = this.rdf.GetResource(SIDEBAR_3RD_URN + this.url); +}//</m>setIn + + + +//================ +this.setUp = function //<m>void<a>public<d>Installation execution method +(){ +if(!this.source) return; +this.container.Init(this.source, this.getPanelList()); +if (this.container.IndexOf(this.installResource) == -1) { + this.setPanelResource(this.installResource); + this.setPanelRefresh(); + this.setOutput(this.title + MSG_PANEL_ADDED); +} else { + this.setPanelRefresh(); + this.setOutput(this.title + MSG_PANEL_REFRESHED); +} +}//</m>setUp + + + +//================ +this.setPanelResource = function //<m>void<a>public<d>Create a resource for the new panel and add it to the sidebar panel list +( +resource //<p>Object<d>Sidebar panel RDF resource +){ +this.setRDFTriple(resource, 'title', this.title, true); +this.setRDFTriple(resource, 'content', this.url, true); +if(this.customize) this.setRDFTriple(resource, 'customize', this.customize, true); +this.container.AppendElement(resource); +}//</m>setPanelResource + + + +//================ +this.setPanelRefresh = function //<m>void<a>public<d>Refresh Sidebar panels +(){ +this.setRDFTriple(this.currentResource, 'refresh', 'true', true); +this.setRDFTriple(this.currentResource, 'refresh', 'false', false); +this.source.QueryInterface(nsIRDFRemoteDataSource).Flush(); +}//</m>setPanelRefresh<d>& +/* +We pass a "refresh" event to all sidebars observers watching for this assertion (in sidebarOverlay.js) +*/ + + + +//================ +this.getPanelList = function //<m>Object<a>public<d>Get Sidebar panel resource +(){ +var +panelList = this.source.GetTarget(this.currentResource, this.rdf.GetResource(SIDEBAR_PANEL_URN), true); +if(panelList) panelList.QueryInterface(INTERFACES.nsIRDFResource); +else this.setOutput(MSG_PANEL_SOURCE); +return panelList; +}//</m>getPanelList + + + +//================ +this.getSource = function //<m>string<a>private<d>Get the Sidebar panels.rdf datasource URL +(){ +try{ + var + dirService = Components.classes[DIR_SERV_CID].getService(); + dirService = dirService.QueryInterface(nsIProperties); + var + sidebarFile = dirService.get(PANELS_RDF_FILE, INTERFACES.nsIFile); + if(!sidebarFile.exists()) throw MSG_NO_RDF_FILE; + var + ioService = Components.classes[IO_SERVICE_CID].getService(nsIIOService), + fileURL = ioService.newFileURI(sidebarFile); + fileURL = fileURL.QueryInterface(INTERFACES.nsIFileURL); + return fileURL.spec; + } +catch(e){ + return this.setOutput(e); + } +}//</m>getSource<d>& +/* +panels.rdf file is located in the user profile directory +If the file does not exist already, it is copied from /bin/defaults/profile/panels.rdf +*/ + + + +//================ +this.setRDFTriple = function //<m>void<a>private<d>Setup an assertion in the RDF datasource member +( +subject, //<p>string<d>Assertion subject +property, //<p>string<d>Assertion property +object, //<p>string<d>Assertion object +asserting //<p>boolean<d>Set or remove Assertion +){ +this.source[asserting ? 'Assert' : 'Unassert'](subject, this.rdf.GetResource(NC_NAMESPACE + property), this.rdf.GetLiteral(object), true); +}//</m>setRDFTriple + + + +//================ +this.setOutput = function //<m>boolean<a>private<d>Dump message to output console +( +output //<p>string<d>Message to output +){ +var +/*string*/out = //'[' + this.className + ']\n' + + output + '\n'; +window.alert(out); //dump(output); +return null; +}//</m>setOutput<d>& +/* +Use either console or window alert output +*/ + + + +this.MOZ_SidebarInstaller(_title, _url, _customize); +}//</c>MOZ_SidebarInstaller + + +