зеркало из https://github.com/mozilla/ubiquity.git
Changed the spec of FeedPlugin#onSubscribeClick() so that plugins can use any info the link element contains. Made command feed titles reflect link@title.
This commit is contained in:
Родитель
7c4c336d03
Коммит
687cd16e9a
|
@ -74,7 +74,7 @@ function DefaultFeedPlugin(feedManager, messageService, webJsm,
|
|||
baseLocalUri,
|
||||
infos) {
|
||||
for each (let info in infos) {
|
||||
let uri = Utils.url(baseUri + info.page);
|
||||
let uri = Utils.uri(baseUri + info.page);
|
||||
|
||||
if (!feedManager.isUnsubscribedFeed(uri)) {
|
||||
let lcs = new LocalUriCodeSource(baseLocalUri + info.source);
|
||||
|
@ -88,30 +88,30 @@ function DefaultFeedPlugin(feedManager, messageService, webJsm,
|
|||
}
|
||||
};
|
||||
|
||||
this.onSubscribeClick = function DFP_onSubscribeClick(targetDoc,
|
||||
commandsUrl,
|
||||
mimetype) {
|
||||
var {location} = targetDoc;
|
||||
this.onSubscribeClick = function DFP_onSubscribeClick(pageUrl, targetLink) {
|
||||
var doc = targetLink.ownerDocument;
|
||||
var title = targetLink.title || Utils.gist.getName(doc) || doc.title;
|
||||
var commandsUrl = targetLink.href;
|
||||
// Clicking on "subscribe" takes them to the warning page:
|
||||
var title = Utils.gist.getName(targetDoc) || targetDoc.title;
|
||||
var confirmUrl = CONFIRM_URL + Utils.paramsToString({
|
||||
url: location.href,
|
||||
url: pageUrl,
|
||||
sourceUrl: commandsUrl,
|
||||
title: title,
|
||||
});
|
||||
|
||||
if (!isTrustedUrl(commandsUrl, mimetype)) {
|
||||
if (!isTrustedUrl(commandsUrl, targetLink.type)) {
|
||||
Utils.openUrlInBrowser(confirmUrl);
|
||||
return;
|
||||
}
|
||||
|
||||
function onSuccess(data) {
|
||||
feedManager.addSubscribedFeed({
|
||||
url: location.href,
|
||||
url: pageUrl,
|
||||
sourceUrl: commandsUrl,
|
||||
title: title,
|
||||
canAutoUpdate: true,
|
||||
sourceCode: data});
|
||||
sourceCode: data,
|
||||
});
|
||||
Utils.openUrlInBrowser(confirmUrl);
|
||||
}
|
||||
|
||||
|
@ -119,7 +119,9 @@ function DefaultFeedPlugin(feedManager, messageService, webJsm,
|
|||
webJsm.jQuery.ajax({
|
||||
url: commandsUrl,
|
||||
dataType: "text",
|
||||
success: onSuccess});
|
||||
success: onSuccess,
|
||||
error: Utils.log,
|
||||
});
|
||||
else
|
||||
onSuccess("");
|
||||
};
|
||||
|
|
|
@ -77,13 +77,13 @@ const DEFAULT_FEED_TYPE = "commands";
|
|||
|
||||
function FeedManager(annSvc) {
|
||||
this._annSvc = annSvc;
|
||||
this._plugins = {};
|
||||
this._feeds = {};
|
||||
this._plugins = {__proto__: null};
|
||||
this._feeds = {__proto__: null};
|
||||
this._hub = new EventHub();
|
||||
this._hub.attachMethods(this);
|
||||
}
|
||||
|
||||
var FMgrProto = FeedManager.prototype = {};
|
||||
var FMgrProto = FeedManager.prototype;
|
||||
|
||||
// === {{{FeedManager#registerPlugin()}}} ===
|
||||
// Registers a feed plugin with the feed manager. For an example feed
|
||||
|
@ -163,7 +163,7 @@ FMgrProto.getFeedForUrl = function FMgr_getFeedForUrl(url) {
|
|||
|
||||
FMgrProto.addSubscribedFeed = function FMgr_addSubscribedFeed(info) {
|
||||
let annSvc = this._annSvc;
|
||||
let uri = Utils.url(info.url);
|
||||
let uri = Utils.uri(info.url);
|
||||
let expiration = annSvc[info.isBuiltIn ? "EXPIRE_SESSION" : "EXPIRE_NEVER"];
|
||||
|
||||
annSvc.removePageAnnotation(uri, FEED_UNSUBSCRIBED_ANNO);
|
||||
|
@ -189,6 +189,7 @@ FMgrProto.addSubscribedFeed = function FMgr_addSubscribedFeed(info) {
|
|||
new Date().toUTCString(), 0, expiration);
|
||||
|
||||
this._hub.notifyListeners("subscribe", uri);
|
||||
return this;
|
||||
};
|
||||
|
||||
// === {{{FeedManager#isSubscribedFeed()}}} ===
|
||||
|
@ -222,57 +223,40 @@ FMgrProto.isUnsubscribedFeed = function FMgr_isSubscribedFeed(uri) (
|
|||
FMgrProto.installToWindow = function FMgr_installToWindow(window) {
|
||||
var self = this;
|
||||
|
||||
function onPageWithCommands(plugin, pageUrl, commandsUrl, document,
|
||||
mimetype) {
|
||||
if (!self.isSubscribedFeed(pageUrl))
|
||||
self.showNotification(plugin, document, commandsUrl, mimetype);
|
||||
}
|
||||
function onRelatedPage(plugin, pageUrl, link) {
|
||||
if (self.isSubscribedFeed(pageUrl) ||
|
||||
self.isSubscribedFeed(link.href)) return;
|
||||
|
||||
// Watch for any tags of the form <link rel="...">
|
||||
// on pages and add annotations for them if they exist.
|
||||
function onLinkAdded(event) {
|
||||
var {target} = event;
|
||||
if (!(target.rel in self._plugins) || !target.href)
|
||||
return;
|
||||
|
||||
var pageUrl = target.baseURI;
|
||||
var hashIndex = pageUrl.indexOf("#");
|
||||
if (hashIndex !== -1)
|
||||
pageUrl = pageUrl.slice(0, hashIndex);
|
||||
|
||||
onPageWithCommands(self._plugins[target.rel],
|
||||
pageUrl,
|
||||
target.href,
|
||||
target.ownerDocument,
|
||||
target.type);
|
||||
}
|
||||
|
||||
window.addEventListener("DOMLinkAdded", onLinkAdded, false);
|
||||
|
||||
for each (let plugin in this._plugins)
|
||||
if ("installToWindow" in plugin) plugin.installToWindow(window);
|
||||
};
|
||||
|
||||
// TODO: Add Documentation for this
|
||||
FMgrProto.showNotification = function showNotification(plugin,
|
||||
targetDoc,
|
||||
commandsUrl,
|
||||
mimetype,
|
||||
notify_message) {
|
||||
Utils.notify({
|
||||
target: targetDoc,
|
||||
label: (notify_message ||
|
||||
plugin.notify_message ||
|
||||
target: link.ownerDocument,
|
||||
label: (plugin.notifyMessage ||
|
||||
L("ubiquity.feedmanager.newcommandfound")),
|
||||
value: "ubiquity_notify_commands_available",
|
||||
value: "ubiquity_notify_feed_available",
|
||||
priority: "INFO_MEDIUM",
|
||||
buttons: [{
|
||||
accessKey: "S",
|
||||
callback: function onSubscribeClick(notification, button) {
|
||||
plugin.onSubscribeClick(targetDoc, commandsUrl, mimetype);
|
||||
plugin.onSubscribeClick(pageUrl, link);
|
||||
},
|
||||
label: L("ubiquity.feedmanager.subscribe"),
|
||||
}]});
|
||||
}
|
||||
|
||||
// Watch for any tags of the form <link rel="...">
|
||||
// on pages and add annotations for them if they exist.
|
||||
window.addEventListener("DOMLinkAdded", function onLinkAdded(event) {
|
||||
var {target} = event;
|
||||
if (!(target.rel in self._plugins) || !target.href) return;
|
||||
|
||||
var pageUrl = target.baseURI;
|
||||
var hashIndex = pageUrl.indexOf("#");
|
||||
if (hashIndex !== -1) pageUrl = pageUrl.slice(0, hashIndex);
|
||||
|
||||
onRelatedPage(self._plugins[target.rel], pageUrl, target);
|
||||
}, false);
|
||||
|
||||
for each (let plugin in this._plugins)
|
||||
if ("installToWindow" in plugin) plugin.installToWindow(window);
|
||||
};
|
||||
|
||||
// === {{{FeedManager#finalize()}}} ===
|
||||
|
|
|
@ -77,18 +77,16 @@ function LockedDownFeedPlugin(feedManager, messageService, webJsm) {
|
|||
|
||||
this.type = "locked-down-commands";
|
||||
|
||||
// === {{{LDFP#onSubscribeClick()}}} ===
|
||||
// === {{{LDFP#onSubscribeClick(pageUrl, targetLink)}}} ===
|
||||
//
|
||||
// This method is called by the feed manager whenever the user clicks
|
||||
// the "Subscribe..." button for any LDFP feed that they're presented
|
||||
// with.
|
||||
//
|
||||
// * {{{targetDoc}}} is the HTML document of the page with a
|
||||
// {{{<link rel="locked-down-commands">}}} tag.
|
||||
// * {{{commandsUrl}}} is the URL pointed to by the {{{href}}}
|
||||
// attribute of the aforementioned {{{<link>}}} tag.
|
||||
// * {{{mimetype}}} is the MIME type specified by the {{{type}}}
|
||||
// attribute of the aforementioned {{{<link>}}} tag.
|
||||
// * {{{pageUrl}}} is the URL of the page that includes {{{targetLink}}}.
|
||||
// Its fragment (hash) part is stripped beforehand.
|
||||
// * {{{targetLink}}} is the {{{<link rel="locked-down-commands">}}}
|
||||
// DOM element.
|
||||
//
|
||||
// This function has no return value.
|
||||
//
|
||||
|
@ -97,14 +95,14 @@ function LockedDownFeedPlugin(feedManager, messageService, webJsm) {
|
|||
// the user to the feed and then displays a non-modal message
|
||||
// confirming the subscription.
|
||||
|
||||
this.onSubscribeClick = function LDFP_onSubscribeClick(targetDoc,
|
||||
commandsUrl,
|
||||
mimetype) {
|
||||
feedManager.addSubscribedFeed({url: targetDoc.location.href,
|
||||
title: targetDoc.title,
|
||||
sourceUrl: commandsUrl,
|
||||
this.onSubscribeClick = function LDFP_onSubscribeClick(pageUrl, targetLink) {
|
||||
feedManager.addSubscribedFeed({
|
||||
url: pageUrl,
|
||||
title: targetLink.title || targetLink.ownerDocument.title,
|
||||
sourceUrl: targetLink.href,
|
||||
type: this.type,
|
||||
canAutoUpdate: true});
|
||||
canAutoUpdate: true,
|
||||
});
|
||||
//errorToLocalize
|
||||
messageService.displayMessage("Subscription successful!");
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче