mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-06 00:55:37 +00:00
77 lines
2.4 KiB
JavaScript
77 lines
2.4 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
'use strict';
|
|
|
|
/**
|
|
* Utility singleton for manipulating bookmarks.
|
|
*/
|
|
var Bookmarks = {
|
|
get metroRoot() {
|
|
return PlacesUtils.annotations.getItemsWithAnnotation('metro/bookmarksRoot', {})[0];
|
|
},
|
|
|
|
logging: false,
|
|
log: function(msg) {
|
|
if (this.logging) {
|
|
Services.console.logStringMessage(msg);
|
|
}
|
|
},
|
|
|
|
addForURI: function bh_addForURI(aURI, aTitle, callback) {
|
|
this.isURIBookmarked(aURI, function (isBookmarked) {
|
|
if (isBookmarked)
|
|
return;
|
|
|
|
let bookmarkTitle = aTitle || aURI.spec;
|
|
let bookmarkService = PlacesUtils.bookmarks;
|
|
let bookmarkId = bookmarkService.insertBookmark(Bookmarks.metroRoot,
|
|
aURI,
|
|
bookmarkService.DEFAULT_INDEX,
|
|
bookmarkTitle);
|
|
|
|
// XXX Used for browser-chrome tests
|
|
let event = document.createEvent("Events");
|
|
event.initEvent("BookmarkCreated", true, false);
|
|
window.dispatchEvent(event);
|
|
|
|
if (callback)
|
|
callback(bookmarkId);
|
|
});
|
|
},
|
|
|
|
_isMetroBookmark: function(aItemId) {
|
|
return PlacesUtils.bookmarks.getFolderIdForItem(aItemId) == Bookmarks.metroRoot;
|
|
},
|
|
|
|
isURIBookmarked: function bh_isURIBookmarked(aURI, callback) {
|
|
if (!callback)
|
|
return;
|
|
PlacesUtils.asyncGetBookmarkIds(aURI, aItemIds => {
|
|
callback(aItemIds && aItemIds.length > 0 && aItemIds.some(this._isMetroBookmark));
|
|
});
|
|
},
|
|
|
|
removeForURI: function bh_removeForURI(aURI, callback) {
|
|
// XXX blargle xpconnect! might not matter, but a method on
|
|
// nsINavBookmarksService that takes an array of items to
|
|
// delete would be faster. better yet, a method that takes a URI!
|
|
PlacesUtils.asyncGetBookmarkIds(aURI, (aItemIds) => {
|
|
aItemIds.forEach((aItemId) => {
|
|
if (this._isMetroBookmark(aItemId)) {
|
|
PlacesUtils.bookmarks.removeItem(aItemId);
|
|
}
|
|
});
|
|
|
|
if (callback)
|
|
callback();
|
|
|
|
// XXX Used for browser-chrome tests
|
|
let event = document.createEvent("Events");
|
|
event.initEvent("BookmarkRemoved", true, false);
|
|
window.dispatchEvent(event);
|
|
});
|
|
}
|
|
};
|