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
75
gaia/apps/settings/js/panels/addons/addons_list.js
Executable file
75
gaia/apps/settings/js/panels/addons/addons_list.js
Executable file
|
|
@ -0,0 +1,75 @@
|
|||
/**
|
||||
* UI for Addons panel's functionality.
|
||||
*
|
||||
* @module AddonsList
|
||||
*/
|
||||
define(function(require) {
|
||||
'use strict';
|
||||
|
||||
var SettingsService = require('modules/settings_service');
|
||||
var ListView = require('modules/mvvm/list_view');
|
||||
var AddonItemTemplateFactory = require('panels/addons/addons_template');
|
||||
var ObservableArray = require('modules/mvvm/observable_array');
|
||||
|
||||
function AddonsList(root, manager) {
|
||||
this._enabled = false;
|
||||
this._listRoot = root;
|
||||
this._addonManager = manager;
|
||||
this._addons = ObservableArray(this._sortByName(
|
||||
this._addonManager.addons.array));
|
||||
|
||||
['insert', 'remove'].forEach(e =>
|
||||
this._addonManager.addons.addEventListener(e, this._update.bind(this)));
|
||||
|
||||
var addonTemplate = AddonItemTemplateFactory(function onClick(addon) {
|
||||
SettingsService.navigate('addon-details', { addon: addon });
|
||||
});
|
||||
|
||||
this._listView = ListView(this._listRoot, this._addons, addonTemplate);
|
||||
}
|
||||
|
||||
AddonsList.prototype = {
|
||||
set enabled(value) {
|
||||
if (value !== this._enabled) {
|
||||
this._listView.enabled = this._enabled = value;
|
||||
}
|
||||
},
|
||||
|
||||
_sortByName: function(addons) {
|
||||
return addons.sort((a, b) => {
|
||||
return a._app.manifest.name.localeCompare(b._app.manifest.name);
|
||||
});
|
||||
},
|
||||
|
||||
_update: function() {
|
||||
return this._filter ?
|
||||
Promise.all(this._addonManager.addons.array.map(addon =>
|
||||
this._addonManager.addonAffectsApp(addon, this._filter).then(
|
||||
affects => affects ? addon : undefined))).then(
|
||||
addons => this._addons.reset(this._sortByName(
|
||||
addons.filter(addon => addon)))) :
|
||||
Promise.resolve(this._addons.reset(this._sortByName(
|
||||
this._addonManager.addons.array)));
|
||||
},
|
||||
|
||||
setFilter: function(manifestURL) {
|
||||
if (!manifestURL) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
this._filter = manifestURL;
|
||||
return this._update();
|
||||
},
|
||||
|
||||
unsetFilter: function() {
|
||||
if (!this._filter) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
delete this._filter;
|
||||
return this._update();
|
||||
}
|
||||
};
|
||||
|
||||
return function ctor_addons_list(root, manager) {
|
||||
return new AddonsList(root, manager);
|
||||
};
|
||||
});
|
||||
64
gaia/apps/settings/js/panels/addons/addons_template.js
Executable file
64
gaia/apps/settings/js/panels/addons/addons_template.js
Executable file
|
|
@ -0,0 +1,64 @@
|
|||
/**
|
||||
* The template function for generating an UI element for an Addon item.
|
||||
*
|
||||
* @module addons/addons_template
|
||||
*/
|
||||
define(function(require) {
|
||||
'use strict';
|
||||
|
||||
var ManifestHelper = require('shared/manifest_helper');
|
||||
|
||||
const PREFERRED_ICON_SIZE = 30 * (window.devicePixelRatio || 1);
|
||||
|
||||
function addonsTemplate(onClick, addon, recycled) {
|
||||
var manifest = new ManifestHelper(addon.instance.manifest ||
|
||||
addon.instance.updateManifest);
|
||||
var container = null;
|
||||
var link, span, small, icon;
|
||||
if (recycled) {
|
||||
container = recycled;
|
||||
link = container.querySelector('a');
|
||||
span = container.querySelector('span');
|
||||
small = container.querySelector('small');
|
||||
icon = container.querySelector('img');
|
||||
} else {
|
||||
container = document.createElement('li');
|
||||
link = document.createElement('a');
|
||||
span = document.createElement('span');
|
||||
small = document.createElement('small');
|
||||
icon = document.createElement('img');
|
||||
|
||||
link.href = '#';
|
||||
link.classList.add('menu-item');
|
||||
small.classList.add('menu-item-desc');
|
||||
|
||||
link.appendChild(icon);
|
||||
link.appendChild(span);
|
||||
link.appendChild(small);
|
||||
container.appendChild(link);
|
||||
}
|
||||
|
||||
navigator.mozApps.mgmt
|
||||
.getIcon(addon.instance, PREFERRED_ICON_SIZE).then((blob) => {
|
||||
icon.src = URL.createObjectURL(blob);
|
||||
}).catch(() => {
|
||||
icon.src = '../style/images/default.png';
|
||||
});
|
||||
|
||||
span.textContent = manifest.displayName;
|
||||
small.setAttribute('data-l10n-id', addon.enabled ? 'enabled' : 'disabled');
|
||||
addon.observe('enabled', function(enabled) {
|
||||
small.setAttribute('data-l10n-id', enabled ? 'enabled' : 'disabled');
|
||||
});
|
||||
|
||||
link.onclick = () => {
|
||||
onClick(addon);
|
||||
};
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
return function ctor_addonsTemplate(onClick) {
|
||||
return addonsTemplate.bind(null, onClick);
|
||||
};
|
||||
});
|
||||
44
gaia/apps/settings/js/panels/addons/panel.js
Executable file
44
gaia/apps/settings/js/panels/addons/panel.js
Executable file
|
|
@ -0,0 +1,44 @@
|
|||
define(function(require) {
|
||||
'use strict';
|
||||
|
||||
var SettingsPanel = require('modules/settings_panel');
|
||||
var AddonManager = require('modules/addon_manager');
|
||||
var AddonsList = require('panels/addons/addons_list');
|
||||
|
||||
return function ctor_addons_panel() {
|
||||
var addonsList;
|
||||
|
||||
return SettingsPanel({
|
||||
onInit: function(panel) {
|
||||
var listElement = panel.querySelector('.addon-list');
|
||||
var moreLink = panel.querySelector('.get-more-addons');
|
||||
|
||||
addonsList = AddonsList(listElement, AddonManager);
|
||||
moreLink.addEventListener('click', function() {
|
||||
moreLink.blur();
|
||||
// The addons list panel will update itself if new addon is installed.
|
||||
var activity = new window.MozActivity({
|
||||
name: 'marketplace-category',
|
||||
data: { slug: 'addons' }
|
||||
});
|
||||
// For workaround jshint.
|
||||
activity.onsuccess = function() {};
|
||||
});
|
||||
},
|
||||
|
||||
onBeforeShow: function(panel, options) {
|
||||
if (options && options.manifestURL) {
|
||||
return addonsList.setFilter(options.manifestURL).then(() =>
|
||||
addonsList.enabled = true);
|
||||
} else {
|
||||
addonsList.enabled = true;
|
||||
}
|
||||
},
|
||||
|
||||
onBeforeHide: function() {
|
||||
return addonsList.unsetFilter().then(() =>
|
||||
addonsList.enabled = false);
|
||||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
Loading…
Reference in a new issue