VulpesOS/gaia/apps/verticalhome/js/app_manager.js
OverSu b38dea0597 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.
2026-09-30 23:13:03 +02:00

107 lines
2.7 KiB
JavaScript
Executable file

/* global ConfirmDialogHelper */
/* global BookmarksDatabase */
'use strict';
(function(exports) {
function AppManager() {
var grid = document.querySelector('gaia-grid');
var self = this;
navigator.mozApps.getSelf().onsuccess = function(evt) {
self.app = evt.target.result;
window.dispatchEvent(new CustomEvent('appmanager-ready'));
};
grid.addEventListener('removeitem', this);
}
AppManager.prototype = {
dialogVisible: false,
get self() {
return this.app;
},
/**
Handles the asyncrhonous removal of items on the grid after the DOM element
has been removed.
*/
handleItemRemoval: function(item) {
function errorLogger(err) {
console.error('Error while trying to remove', item.name, err);
}
switch (item.detail.type) {
case 'bookmark':
BookmarksDatabase.remove(item.identifier).catch(errorLogger);
break;
default:
console.error(
'Cannot handle remove for item type ',
item.detail.type
);
}
},
/**
* General event handler.
*/
handleEvent: function(e) {
var nameObj = {
name: e.detail && e.detail.name
};
switch(e.type) {
case 'removeitem':
if (this.dialogVisible) {
return;
}
this.dialogVisible = true;
if (e.detail.detail.type == 'app') {
var request = navigator.mozApps.mgmt.uninstall(e.detail.app);
request.onsuccess = () => {
e.detail.removeFromGrid();
this.dialogVisible = false;
};
request.onerror = () => {
console.error('Error while trying to remove',
e.detail.name, request.error);
this.dialogVisible = false;
};
break;
}
var dialog = new ConfirmDialogHelper({
type: 'remove',
title: {id: 'delete-title', args: nameObj},
body: {id: 'delete-body', args: nameObj},
cancel: {
title: 'cancel',
cb: () => {
this.dialogVisible = false;
}
},
confirm: {
title: 'delete',
type: 'danger',
cb: () => {
// immediately remove item from the grid!
e.detail.removeFromGrid();
// handle the real removal asynchronously
this.handleItemRemoval(e.detail);
this.dialogVisible = false;
}
}
});
dialog.show(document.body);
break;
}
}
};
exports.appManager = new AppManager();
}(window));