Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
118 lines
2.9 KiB
JavaScript
Executable file
118 lines
2.9 KiB
JavaScript
Executable file
'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));
|