display link tag's title attribute on microsummary menu item while downloading generator

Patch by Justin Dolske.
bug=342231
r=myk
This commit is contained in:
myk%mozilla.org 2006-07-21 21:49:44 +00:00
Родитель d94a17c8fc
Коммит 65847c39bb
3 изменённых файлов: 49 добавлений и 38 удалений

Просмотреть файл

@ -207,8 +207,8 @@ var MicrosummaryPicker = {
if (microsummary.content != null)
menuItem.setAttribute("label", microsummary.content);
else {
menuItem.setAttribute("label", microsummary.generator ? microsummary.generator.name
: microsummary.generatorURI.spec);
menuItem.setAttribute("label", microsummary.generator.name ?
microsummary.generator.name : microsummary.generator.uri.spec);
microsummary.update();
}

Просмотреть файл

@ -34,9 +34,12 @@ interface nsIMicrosummaryObserver : nsISupports
};
[scriptable, uuid(ff3eba15-81de-4c24-bfcf-c8180dc3c00a)]
[scriptable, uuid(67ffe6b0-d4db-485c-ba20-5e2e8319b78d)]
interface nsIMicrosummaryGenerator : nsISupports
{
// Has the generator itself, which may be a remote resource, been loaded.
readonly attribute boolean loaded;
// An arbitrary descriptive name for this microsummary generator.
readonly attribute AUTF8String name;
@ -85,17 +88,13 @@ interface nsIMicrosummaryGenerator : nsISupports
};
[scriptable, uuid(f9d1a73c-e147-46f3-ba61-4f0bd33f5d47)]
[scriptable, uuid(1b1f232d-e65f-446a-9984-786578526072)]
interface nsIMicrosummary : nsISupports
{
// the URI of the page being summarized
readonly attribute nsIURI pageURI;
// The URI of the generator that generates this microsummary.
readonly attribute nsIURI generatorURI;
// The generator that generates this microsummary.
// Since generators can be remote resources, this may not always be available.
// The generator that generates this microsummary. May need to be loaded.
attribute nsIMicrosummaryGenerator generator;
// The content of the microsummary.

Просмотреть файл

@ -465,8 +465,7 @@ MicrosummaryService.prototype = {
var generator = this._localGenerators[genURISpec];
if (generator.appliesToURI(pageURI)) {
var microsummary = new Microsummary(pageURI, generator.uri);
microsummary.generator = generator;
var microsummary = new Microsummary(pageURI, generator);
// If this is the current microsummary for this bookmark, load the content
// from the datastore so it shows up immediately in microsummary picking UI.
@ -754,9 +753,11 @@ MicrosummaryService.prototype = {
var pageURI = this._getPageForBookmark(bookmarkID);
var generatorURI = this._uri(this._getField(bookmarkID, FIELD_MICSUM_GEN_URI));
var microsummary = new Microsummary(pageURI, generatorURI);
if (this._localGenerators[generatorURI.spec])
microsummary.generator = this._localGenerators[generatorURI.spec];
var localGenerator = this._localGenerators[generatorURI.spec];
var microsummary = new Microsummary(pageURI, localGenerator);
if (!localGenerator)
microsummary.generator.uri = generatorURI;
return microsummary;
},
@ -772,7 +773,7 @@ MicrosummaryService.prototype = {
*
*/
setMicrosummary: function MSS_setMicrosummary(bookmarkID, microsummary) {
this._setField(bookmarkID, FIELD_MICSUM_GEN_URI, microsummary.generatorURI.spec);
this._setField(bookmarkID, FIELD_MICSUM_GEN_URI, microsummary.generator.uri.spec);
if (microsummary.content)
this._updateMicrosummary(bookmarkID, microsummary);
else
@ -833,7 +834,7 @@ MicrosummaryService.prototype = {
var currentGen = this._getField(bookmarkID, FIELD_MICSUM_GEN_URI);
if (microsummary.generatorURI.equals(this._uri(currentGen)))
if (microsummary.generator.uri.equals(this._uri(currentGen)))
return true;
return false
@ -863,9 +864,12 @@ MicrosummaryService.prototype = {
var pageURI = this._getPageForBookmark(bookmarkID);
var generatorURI = this._uri(this._getField(bookmarkID, FIELD_MICSUM_GEN_URI));
var microsummary = new Microsummary(pageURI, generatorURI);
if (this._localGenerators[generatorURI.spec])
microsummary.generator = this._localGenerators[generatorURI.spec];
var localGenerator = this._localGenerators[generatorURI.spec];
var microsummary = new Microsummary(pageURI, localGenerator);
if (!localGenerator)
microsummary.generator.uri = generatorURI;
// A microsummary observer that calls the microsummary service
// to update the datastore when the microsummary finishes loading.
@ -897,10 +901,10 @@ MicrosummaryService.prototype = {
function Microsummary(pageURI, generatorURI) {
function Microsummary(pageURI, generator) {
this._observers = [];
this.pageURI = pageURI;
this.generatorURI = generatorURI;
this.generator = generator ? generator : new MicrosummaryGenerator();
}
Microsummary.prototype = {
@ -922,7 +926,7 @@ Microsummary.prototype = {
get content() {
// If we have everything we need to generate the content, generate it.
if (this._content == null &&
this.generator &&
this.generator.loaded &&
(this.pageContent || !this.generator.needsPageContent)) {
this._content = this.generator.generateMicrosummary(this.pageContent);
this.updateInterval = this.generator.calculateUpdateInterval(this.pageContent);
@ -937,10 +941,6 @@ Microsummary.prototype = {
},
set content(newValue) { this._content = newValue },
_generatorURI: null,
get generatorURI() { return this._generatorURI },
set generatorURI(newValue) { this._generatorURI = newValue },
_generator: null,
get generator() { return this._generator },
set generator(newValue) { this._generator = newValue },
@ -996,20 +996,20 @@ Microsummary.prototype = {
*/
update: function MS_update() {
LOG("microsummary.update called for page:\n " + this.pageURI.spec +
"\nwith generator:\n " + this.generatorURI.spec);
"\nwith generator:\n " + this.generator.uri.spec);
var t = this;
// If we don't have the generator, download it now. After it downloads,
// we'll re-call this method to continue updating the microsummary.
if (!this.generator) {
if (!this.generator.loaded) {
LOG("generator not yet loaded; downloading it");
var generatorCallback =
function MS_generatorCallback(resource) {
try { t._handleGeneratorLoad(resource) }
finally { resource.destroy() }
};
var resource = new MicrosummaryResource(this.generatorURI);
var resource = new MicrosummaryResource(this.generator.uri);
resource.load(generatorCallback);
return;
}
@ -1042,20 +1042,19 @@ Microsummary.prototype = {
},
_handleGeneratorLoad: function MS__handleGeneratorLoad(resource) {
var generator = new MicrosummaryGenerator();
generator.uri = resource.uri;
LOG(generator.uri.spec + " microsummary generator downloaded");
LOG(this.generator.uri.spec + " microsummary generator downloaded");
if (resource.isXML)
generator.initFromXML(resource.content);
this.generator.initFromXML(resource.content);
else if (resource.contentType == "text/plain")
generator.initFromText(resource.content);
this.generator.initFromText(resource.content);
else if (resource.contentType == "text/html")
generator.initFromText(resource.content.body.textContent);
this.generator.initFromText(resource.content.body.textContent);
else
throw("generator is neither XML nor plain text");
this.generator = generator;
this.update();
// Only trigger a [content] update if we were able to init the generator.
if (this.generator.loaded)
this.update();
},
_handlePageLoad: function MS__handlePageLoad(resource) {
@ -1125,6 +1124,10 @@ MicrosummaryGenerator.prototype = {
get content() { return this._content },
set content(newValue) { this._content = newValue },
_loaded: false,
get loaded() { return this._loaded },
set loaded(newValue) { this._loaded = newValue },
_rules: null,
/**
@ -1181,6 +1184,7 @@ MicrosummaryGenerator.prototype = {
*/
initFromText: function(text) {
this.content = text;
this.loaded = true;
},
/**
@ -1273,6 +1277,8 @@ MicrosummaryGenerator.prototype = {
|| templateNode.getElementsByTagNameNS(XSLT_NS, "stylesheet")[0];
}
// XXX Make sure the template is a valid XSL transform sheet.
this.loaded = true;
},
generateMicrosummary: function MSD_generateMicrosummary(pageContent) {
@ -1426,6 +1432,10 @@ MicrosummarySet.prototype = {
continue;
// Look for a TITLE attribute to give the generator a nice name in the UI.
var linkTitle = link.getAttribute("title");
// Unlike the "href" attribute, the "href" property contains
// an absolute URI spec, so we use it here to create the URI.
var generatorURI = this._ios.newURI(link.href,
@ -1445,7 +1455,9 @@ MicrosummarySet.prototype = {
continue;
}
var microsummary = new Microsummary(resource.uri, generatorURI);
var microsummary = new Microsummary(resource.uri, null);
microsummary.generator.name = linkTitle;
microsummary.generator.uri = generatorURI;
this.AppendElement(microsummary);
}
},