зеркало из https://github.com/mozilla/pjs.git
154 строки
5.8 KiB
JavaScript
154 строки
5.8 KiB
JavaScript
/* The contents of this file are subject to the Mozilla Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is the Bugzilla Bug Tracking System.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
|
* Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s): Myk Melez <myk@mozilla.org>
|
|
*/
|
|
|
|
// When the XUL window finishes loading, load the RDF data into it.
|
|
window.addEventListener('load', loadData, false);
|
|
|
|
// The base URL of this Bugzilla installation; derived from the page's URL.
|
|
var gBaseURL = window.location.href.replace(/duplicates\.(jar!|xul).*/, "");
|
|
|
|
function loadData()
|
|
{
|
|
// Loads the duplicates data as an RDF data source, attaches it to the tree,
|
|
// and rebuilds the tree to display the data.
|
|
|
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
|
|
|
// Get the RDF service so we can use it to load the data source.
|
|
var rdfService =
|
|
Components
|
|
.classes["@mozilla.org/rdf/rdf-service;1"]
|
|
.getService(Components.interfaces.nsIRDFService);
|
|
|
|
// When a bug report loads in the content iframe, a 'load' event bubbles up
|
|
// to the browser window, which calls this load handler again, which reloads
|
|
// the RDF data, which causes the tree to lose the selection. To prevent
|
|
// this, we have to remove this handler.
|
|
window.removeEventListener('load', loadData, false);
|
|
|
|
// The URL of the RDF file; by default for performance a static file
|
|
// generated by collectstats.pl, but a call to duplicates.cgi if the page's
|
|
// URL contains parameters (so we can dynamically generate the RDF data
|
|
// based on those parameters).
|
|
var dataURL = gBaseURL + "data/duplicates.rdf";
|
|
if (window.location.href.search(/duplicates\.xul\?.+/) != -1)
|
|
dataURL = window.location.href.replace(/(duplicates\.jar!\/)?duplicates\.xul\?/, "duplicates.cgi?ctype=rdf&");
|
|
|
|
// Get the data source and add it to the XUL tree's database to populate
|
|
// the tree with the data.
|
|
var dataSource = rdfService.GetDataSource(dataURL);
|
|
|
|
// If we're using the static file, add an observer that detects failed loads
|
|
// (in case this installation isn't generating the file nightly) and redirects
|
|
// to the CGI version when loading of the static version fails.
|
|
if (window.location.href.search(/duplicates\.xul\?.+/) == -1)
|
|
{
|
|
var sink = dataSource.QueryInterface(Components.interfaces.nsIRDFXMLSink);
|
|
sink.addXMLSinkObserver(StaticDataSourceObserver);
|
|
}
|
|
|
|
// Add the data source to the tree, set the tree's "ref" attribute
|
|
// to the base URL of the data source, and rebuild the tree.
|
|
var resultsTree = document.getElementById('results-tree');
|
|
resultsTree.database.AddDataSource(dataSource);
|
|
resultsTree.setAttribute('ref', gBaseURL + "data/duplicates.rdf");
|
|
resultsTree.builder.rebuild();
|
|
}
|
|
|
|
function getBugURI()
|
|
{
|
|
var tree = document.getElementById('results-tree');
|
|
var index = tree.currentIndex;
|
|
|
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
|
var builder = tree.builder.QueryInterface(Components.interfaces.nsIXULTreeBuilder);
|
|
var resource = builder.getResourceAtIndex(index);
|
|
|
|
return resource.Value;
|
|
}
|
|
|
|
function loadBugInWindow()
|
|
{
|
|
// Loads the selected bug in the browser window, replacing the duplicates report
|
|
// with the bug report.
|
|
|
|
var bugURI = getBugURI();
|
|
window.location = bugURI;
|
|
}
|
|
|
|
function loadBugInPane()
|
|
{
|
|
// Loads the selected bug in the iframe-based content pane that is part of
|
|
// this XUL document.
|
|
|
|
var splitter = document.getElementById('report-content-splitter');
|
|
var state = splitter.getAttribute('state');
|
|
if (state != "collapsed")
|
|
{
|
|
var bugURI = getBugURI();
|
|
var browser = document.getElementById('content-browser');
|
|
browser.setAttribute('src', bugURI);
|
|
}
|
|
}
|
|
|
|
var StaticDataSourceObserver = {
|
|
onBeginLoad: function(aSink) { } ,
|
|
onInterrupt: function(aSink) { } ,
|
|
onResume: function(aSink) { } ,
|
|
onEndLoad: function(aSink)
|
|
{
|
|
// Removes the observer from the data source so it doesn't stay around
|
|
// when duplicates.xul is reloaded from scratch.
|
|
|
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
|
|
|
aSink.removeXMLSinkObserver(StaticDataSourceObserver);
|
|
} ,
|
|
onError: function(aSink, aStatus, aErrorMsg)
|
|
{
|
|
// Tries the dynamic data source since the static one failed to load.
|
|
|
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
|
|
|
// Get the RDF service so we can use it to load the data source.
|
|
var rdfService =
|
|
Components
|
|
.classes["@mozilla.org/rdf/rdf-service;1"]
|
|
.getService(Components.interfaces.nsIRDFService);
|
|
|
|
// Remove the observer from the data source so it doesn't stay around
|
|
// when duplicates.xul is reloaded from scratch.
|
|
aSink.removeXMLSinkObserver(StaticDataSourceObserver);
|
|
|
|
// Remove the static data source from the tree.
|
|
var oldDataSource = aSink.QueryInterface(Components.interfaces.nsIRDFDataSource);
|
|
var resultsTree = document.getElementById('results-tree');
|
|
resultsTree.database.RemoveDataSource(oldDataSource);
|
|
|
|
// Munge the URL to point to the CGI and load the data source.
|
|
var dataURL = gBaseURL + "duplicates.cgi?ctype=rdf";
|
|
newDataSource = rdfService.GetDataSource(dataURL);
|
|
|
|
// Add the data source to the tree and rebuild the tree with the new data.
|
|
resultsTree.database.AddDataSource(newDataSource);
|
|
resultsTree.builder.rebuild();
|
|
}
|
|
};
|