Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
136
gaia/apps/verticalhome/js/sources/bookmark.js
Executable file
136
gaia/apps/verticalhome/js/sources/bookmark.js
Executable file
|
|
@ -0,0 +1,136 @@
|
|||
'use strict';
|
||||
/* global GaiaGrid */
|
||||
/* global BookmarksDatabase */
|
||||
|
||||
(function(exports) {
|
||||
|
||||
var eventTypesToListenFor = ['added', 'updated', 'removed'];
|
||||
|
||||
/**
|
||||
* BookmarkSource is responsible for populating the iniial bookmark
|
||||
* results as well as keeping the grid in sync with the bookmark datastore.
|
||||
* @param {Object} store The backing database store class.
|
||||
*/
|
||||
function BookmarkSource(store) {
|
||||
this.store = store;
|
||||
this.entries = [];
|
||||
|
||||
eventTypesToListenFor.forEach(function iterateTypes(type) {
|
||||
BookmarksDatabase.addEventListener(type, this);
|
||||
}, this);
|
||||
}
|
||||
|
||||
BookmarkSource.prototype = {
|
||||
|
||||
/**
|
||||
* Synchronizes our local result set with datastre.
|
||||
*/
|
||||
synchronize: function() {
|
||||
var allAppBookmarks = {};
|
||||
var toAdd = [];
|
||||
var icons = app.grid.getIcons();
|
||||
|
||||
for (var i in icons) {
|
||||
var icon = icons[i];
|
||||
if (icon.detail.type !== 'bookmark') {
|
||||
continue;
|
||||
}
|
||||
allAppBookmarks[icon.detail.url] = icon;
|
||||
}
|
||||
|
||||
for (var j = 0, jLen = this.entries.length; j < jLen; j++) {
|
||||
var entry = this.entries[j];
|
||||
if (!allAppBookmarks[entry.detail.url]) {
|
||||
toAdd.push(entry);
|
||||
} else {
|
||||
delete allAppBookmarks[entry.detail.url];
|
||||
}
|
||||
}
|
||||
|
||||
for (i in allAppBookmarks) {
|
||||
this.removeIconFromGrid(allAppBookmarks[i].detail.url);
|
||||
}
|
||||
|
||||
for (i = 0; i < toAdd.length; i++) {
|
||||
this.addIconToGrid(toAdd[i].detail);
|
||||
}
|
||||
|
||||
app.itemStore.deferredSave(app.grid.getItems());
|
||||
},
|
||||
|
||||
/**
|
||||
* Populates the initial bookmark data.
|
||||
* @param {Function} success Called after we fetch all initial data.
|
||||
*/
|
||||
populate: function(success) {
|
||||
var self = this;
|
||||
BookmarksDatabase.getAll().then(function(systemBookmarks) {
|
||||
// We are going to iterate over system bookmarks
|
||||
Object.keys(systemBookmarks).forEach(function(id) {
|
||||
self.entries.push(new GaiaGrid.Bookmark(systemBookmarks[id]));
|
||||
});
|
||||
|
||||
success(self.entries);
|
||||
}, success);
|
||||
},
|
||||
|
||||
/**
|
||||
* General datastore event handler.
|
||||
* @param {Event} e
|
||||
*/
|
||||
handleEvent: function(e) {
|
||||
switch (e.type) {
|
||||
case 'added':
|
||||
case 'updated':
|
||||
this.addIconToGrid(e.target);
|
||||
app.itemStore.deferredSave(app.grid.getItems());
|
||||
break;
|
||||
case 'removed':
|
||||
// The 'id' of a bookmark is really the url.
|
||||
var id = e.target.id;
|
||||
this.removeIconFromGrid(id);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Adds a bookmark icon to the grid.
|
||||
*/
|
||||
addIconToGrid: function(detail) {
|
||||
|
||||
// If there is a pre-existing icon, just update it.
|
||||
var icons = app.grid.getIcons();
|
||||
var existing = icons[detail.id];
|
||||
if (existing) {
|
||||
existing.update(detail);
|
||||
app.grid.render();
|
||||
return;
|
||||
}
|
||||
|
||||
var bookmark = new GaiaGrid.Bookmark(detail);
|
||||
bookmark.setPosition(this.store.getNextPosition());
|
||||
this.entries.push(bookmark);
|
||||
|
||||
// Manually inject this book mark into the app item list for now.
|
||||
app.grid.appendItemToExpandedGroup(bookmark);
|
||||
|
||||
app.grid.render();
|
||||
},
|
||||
|
||||
/**
|
||||
* Removes a bookmark icon from the grid.
|
||||
*/
|
||||
removeIconFromGrid: function(url) {
|
||||
var icons = app.grid.getIcons();
|
||||
var appObject = icons[url];
|
||||
|
||||
if (appObject) {
|
||||
appObject.removeFromGrid();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
exports.BookmarkSource = BookmarkSource;
|
||||
|
||||
}(window));
|
||||
Loading…
Reference in a new issue