VulpesOS/gaia/apps/settings/js/panels/homescreens/panel.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

100 lines
2.9 KiB
JavaScript
Executable file

/**
* Manage wallpaper and replaceable home screens.
*/
define(function(require) {
'use strict';
const VERTICALHOME_MANIFEST =
'app://verticalhome.gaiamobile.org/manifest.webapp';
var SettingsListener = require('shared/settings_listener');
var SettingsPanel = require('modules/settings_panel');
var Wallpaper = require('panels/homescreens/wallpaper');
var HomescreenCols = require('panels/homescreens/homescreen_cols');
var HomescreenName = require('panels/homescreens/homescreen_name');
var elements = {};
var gridSelect = null;
return function ctor_homescreen_panel() {
var wallpaper = Wallpaper();
var homescreenCols = HomescreenCols();
var homescreenName = HomescreenName();
return SettingsPanel({
/**
* @param {HTMLElement} panel The panel HTML element.
*/
onInit: function hp_onInit(panel) {
elements = {
wallpaper: panel.querySelector('.wallpaper'),
wallpaperPreview: panel.querySelector('.wallpaper-preview'),
currentHomescreen: panel.querySelector('.current-homescreen')
};
elements.wallpaper.addEventListener('click',
wallpaper.selectWallpaper.bind(wallpaper));
SettingsListener.observe('homescreen.manifestURL', '', manifestURL => {
homescreenCols.verticalhomeActive =
manifestURL === VERTICALHOME_MANIFEST;
});
gridSelect = panel.querySelector('[name="grid.layout.cols"]');
gridSelect.addEventListener('change', function() {
homescreenCols.setCols(this.value);
});
},
onBeforeShow: function hp_onBeforeShow(panel, options) {
this._setWallpaperPreviewSrc(wallpaper.wallpaperSrc);
this._setHomescreenName(homescreenName.name);
this._updateCols(homescreenCols.cols);
homescreenCols.observe('cols', this._updateCols);
wallpaper.observe('wallpaperSrc', this._setWallpaperPreviewSrc);
homescreenName.observe('name', this._setHomescreenName);
},
onBeforeHide: function hp_onBeforeHide() {
wallpaper.unobserve('wallpaperSrc');
homescreenName.unobserve('name');
homescreenCols.unobserve('cols');
},
/**
* @param {String} src
* @private
*/
_setWallpaperPreviewSrc: function hp_setHomescreenName(src) {
elements.wallpaperPreview.src = src;
},
/**
* @param {Number} number The number of columns in the layout.
* @private
*/
_updateCols: function hdp_updateCols(number) {
if (!number) {
return;
}
var option =
gridSelect.querySelector('[value="' + number + '"]');
if (option) {
option.selected = true;
}
},
/**
* @param {String} name
* @private
*/
_setHomescreenName: function hp_setHomescreenName(name) {
elements.currentHomescreen.textContent = name;
}
});
};
});