зеркало из https://github.com/mozilla/gecko-dev.git
158 строки
5.2 KiB
JavaScript
158 строки
5.2 KiB
JavaScript
// Note that there is a bug with resource: URLs right now.
|
|
|
|
//var FileURL = "file:///C:/matt/rdf/sidebar-browser.rdf";
|
|
var FileURL = "resource:/res/rdf/sidebar-browser.rdf";
|
|
// var the "NC" namespace. Used to construct resources
|
|
var NC = "http://home.netscape.com/NC-rdf#";
|
|
|
|
function writeRDF(title,content,customize,append)
|
|
{
|
|
// Get the RDF service
|
|
var RDF = Components.classes["component://netscape/rdf/rdf-service"].getService();
|
|
RDF = RDF.QueryInterface(Components.interfaces.nsIRDFService);
|
|
dump("RDF = " + RDF + "\n");
|
|
|
|
// Open the RDF file synchronously. This is tricky, because
|
|
// GetDataSource() will do it asynchronously. So, what we do is
|
|
// this. First try to manually construct the RDF/XML datasource
|
|
// and read it in. This might throw an exception if the datasource
|
|
// has already been read in once. In which case, we'll just get
|
|
// the existing datasource from the RDF service.
|
|
var datasource;
|
|
|
|
try {
|
|
datasource = Components.classes["component://netscape/rdf/datasource?name=xml-datasource"].createInstance();
|
|
datasource = datasource.QueryInterface(Components.interfaces.nsIRDFXMLDataSource);
|
|
datasource.Init(FileURL);
|
|
datasource.Open(true);
|
|
|
|
dump("datasource = " + datasource + ", opened for the first time.\n");
|
|
}
|
|
catch (ex) {
|
|
datasource = RDF.GetDataSource(FileURL);
|
|
dump("File:" + FileURL + " datasource = " + datasource + ", using registered datasource.\n");
|
|
}
|
|
|
|
|
|
// Create a "container" wrapper around the "NC:BrowserSidebarRoot"
|
|
// object. This makes it easier to manipulate the RDF:Seq correctly.
|
|
var container = Components.classes["component://netscape/rdf/container"].createInstance();
|
|
container = container.QueryInterface(Components.interfaces.nsIRDFContainer);
|
|
|
|
container.Init(datasource, RDF.GetResource("NC:BrowserSidebarRoot"));
|
|
dump("initialized container " + container + " on NC:BrowserSidebarRoot\n");
|
|
|
|
// Now append a new resource to it. The resource will have the URI
|
|
// "file:///D:/tmp/container.rdf#3".
|
|
var count = container.GetCount();
|
|
dump("container has " + count + " elements\n");
|
|
|
|
var element = RDF.GetResource(FileURL + "#" + count);
|
|
dump(FileURL + "#" + count + "\n");
|
|
|
|
if (append == 0 ) {
|
|
container.AppendElement(element);
|
|
//container.RemoveElement(element,true);
|
|
dump("appended " + element + " to the container\n");
|
|
|
|
// Now make some sidebar-ish assertions about it...
|
|
datasource.Assert(element,
|
|
RDF.GetResource(NC + "title"),
|
|
RDF.GetLiteral(title),
|
|
true);
|
|
|
|
datasource.Assert(element,
|
|
RDF.GetResource(NC + "content"),
|
|
RDF.GetLiteral(content),
|
|
true);
|
|
|
|
datasource.Assert(element,
|
|
RDF.GetResource(NC + "customize"),
|
|
RDF.GetLiteral(customize),
|
|
true);
|
|
|
|
dump("added assertions about " + element + "\n");
|
|
} else {
|
|
var element = 'file://C:/matt/rdf/sidebar-browser.rdf#bookmarks';
|
|
dump(element);
|
|
container.RemoveElement(element,true);
|
|
}
|
|
|
|
// Now serialize it back to disk
|
|
//datasource.Flush();
|
|
dump("wrote " + FileURL + " back to disk.\n");
|
|
}
|
|
|
|
|
|
|
|
|
|
function selected(event, node)
|
|
{
|
|
dump('node:\n' + node);
|
|
selectedNode_Title = node.getAttribute('title');
|
|
selectedNode_Content = node.getAttribute('content');
|
|
selectedNode_Customize = node.getAttribute('customize');
|
|
}
|
|
|
|
function Addit()
|
|
{
|
|
if (window.frames[0].selectedNode_Title != null) {
|
|
dump(window.frames[0].selectedNode_Title + '\n');
|
|
createOption();
|
|
} else {
|
|
dump('Nothing selected');
|
|
}
|
|
}
|
|
|
|
function createOption() {
|
|
|
|
var selectedNode_Title = window.frames[0].selectedNode_Title;
|
|
var selectedNode_Content = window.frames[0].selectedNode_Content;
|
|
var selectedNode_Customize = window.frames[0].selectedNode_Customize;
|
|
var list = parent.frames[0].document.getElementById('selectList');
|
|
dump('Here' + selectedNode_Title);
|
|
writeRDF(selectedNode_Title,selectedNode_Content,selectedNode_Customize,0)
|
|
//dump(option_title + "\n");
|
|
parent.frames[0].location.reload();
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
function createOption() {
|
|
|
|
var selectedNode_Title = window.frames[0].selectedNode_Title;
|
|
var selectedNode_Content = window.frames[0].selectedNode_Content;
|
|
var selectedNode_Customize = window.frames[0].selectedNode_Customize;
|
|
var list = parent.frames[0].document.getElementById('selectList');
|
|
|
|
//dump(option_title + "\n");
|
|
|
|
var optionSelect = parent.frames[0].createOptionTitle(selectedNode_Title);
|
|
var option = parent.frames[0].document.createElement('html:option');
|
|
dump(option + "\n");
|
|
|
|
option.setAttribute('title', selectedNode_Title);
|
|
option.setAttribute('customize', selectedNode_Content);
|
|
option.setAttribute('content', selectedNode_Customize);
|
|
|
|
|
|
option.appendChild(optionSelect);
|
|
|
|
return option;
|
|
}
|
|
|
|
|
|
function createOptionTitle(titletext)
|
|
{
|
|
dump('create optionText');
|
|
var title = parent.frames[0].document.createElement('html:option');
|
|
var textOption = parent.frames[0].document.createTextNode(titletext);
|
|
//should be able to use title.add actaully
|
|
dump("TextOption:\n" + textOption + "\n");
|
|
title.appendChild(textOption);
|
|
|
|
return textOption;
|
|
}
|
|
|
|
*/ |