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
118
gaia/apps/homescreen/js/settings.js
Executable file
118
gaia/apps/homescreen/js/settings.js
Executable file
|
|
@ -0,0 +1,118 @@
|
|||
'use strict';
|
||||
|
||||
(function(exports) {
|
||||
|
||||
/**
|
||||
* Name of the global home screen settings datastore.
|
||||
*/
|
||||
const SETTINGS_STORE = 'homescreen_settings';
|
||||
|
||||
/**
|
||||
* Stored settings version, for use when changing/refactoring settings
|
||||
* storage.
|
||||
*/
|
||||
const SETTINGS_VERSION = 0;
|
||||
|
||||
/**
|
||||
* Name of the global home screen columns setting.
|
||||
*/
|
||||
const COLUMNS_SETTING = 'grid.cols';
|
||||
|
||||
/**
|
||||
* Name of the global home screen paging setting.
|
||||
*/
|
||||
const PAGING_SETTING = 'grid.paging';
|
||||
|
||||
function Settings() {
|
||||
// Initialise default settings
|
||||
this.small = false;
|
||||
this.scrollSnapping = false;
|
||||
this.firstRun = false;
|
||||
|
||||
// Listen to external settings changes
|
||||
if (navigator.getDataStores) {
|
||||
navigator.getDataStores(SETTINGS_STORE).then(stores => {
|
||||
if (stores.length < 1) {
|
||||
return Promise.reject('Settings datastore inaccessible');
|
||||
}
|
||||
|
||||
var signalChange = () => {
|
||||
this.save();
|
||||
window.dispatchEvent(new CustomEvent('settings-changed'));
|
||||
};
|
||||
|
||||
var syncSmallSetting = (signal) => {
|
||||
stores[0].get(COLUMNS_SETTING).then(cols => {
|
||||
var oldSmall = this.small;
|
||||
this.small = cols > 3;
|
||||
if (this.small !== oldSmall) {
|
||||
signalChange();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var syncPagingSetting = () => {
|
||||
stores[0].get(PAGING_SETTING).then(paging => {
|
||||
var oldSnapping = this.scrollSnapping;
|
||||
this.scrollSnapping = paging || false;
|
||||
if (this.scrollSnapping !== oldSnapping) {
|
||||
signalChange();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
stores[0].addEventListener('change', e => {
|
||||
switch (e.id) {
|
||||
case COLUMNS_SETTING:
|
||||
syncSmallSetting();
|
||||
break;
|
||||
case PAGING_SETTING:
|
||||
syncPagingSetting();
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
syncSmallSetting();
|
||||
syncPagingSetting();
|
||||
}, e => {
|
||||
console.error('Error retrieving home screen settings datastore:', e);
|
||||
});
|
||||
} else {
|
||||
console.error('Datastore API unavailable');
|
||||
}
|
||||
|
||||
// Restore existing settings
|
||||
var settingsString = localStorage.getItem('settings');
|
||||
if (!settingsString) {
|
||||
this.firstRun = true;
|
||||
return;
|
||||
}
|
||||
|
||||
var settings = JSON.parse(settingsString);
|
||||
if (settings.version !== SETTINGS_VERSION) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.small = settings.small || false;
|
||||
this.scrollSnapping = settings.scrollSnapping || false;
|
||||
|
||||
// Monitor global homescreen settings
|
||||
if (!navigator.getDataStores) {
|
||||
console.error('Datastore API unavailable');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Settings.prototype = {
|
||||
save: function() {
|
||||
localStorage.setItem('settings', JSON.stringify({
|
||||
version: SETTINGS_VERSION,
|
||||
small: this.small,
|
||||
scrollSnapping: this.scrollSnapping
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
exports.Settings = Settings;
|
||||
|
||||
}(window));
|
||||
Loading…
Reference in a new issue