description | full_title |
---|---|
A guide for customizing visualization |
Visualization Customization Guide |
This guide will walk through the different ways of customizing OS.js.
The src/client/index.ejs
file can be used to add custom HTML and assets.
Most of the visuals are provided by Service Providers. You can replace these to make a fully custom environment.
See your src/client/index.js
bootstrap file for provider registration and src/client/index.scss
for the related imported stylesheets.
Since some of the styles can be configured by a user at runtime, some styles are defined in the client configuration (see desktop
section), like desktop and panels.
You can override these by adding it to your src/client/config.js
file and modifying the values.
[info] Note, that if users have already customized their settings, the changes to the default configuration won't affect the users. In an upcoming patch it will be able to migrate these changes. By default the settings are stored in the browser (
localStorage
) so you can clear these easily.
Example:
/* src/client/wallpaper.png */
import wallpaper from './wallpaper.png';
module.exports = {
desktop: {
settings: {
font: 'Roboto',
theme: 'StandardTheme',
sounds: 'FreedesktopSounds',
icons: 'GnomeIcons',
panels: [{
position: 'top',
items: [
{name: 'menu'},
{name: 'windows'},
{name: 'tray'},
{name: 'clock'}
]
}],
background: {
src: wallpaper,
color: '#000',
style: 'cover'
}
}
}
};
By default all of the visuals are defined by Themes in the form of Styles, Icons and Sounds.
If you want a completely customized experience you should look into these.
The stylesheet in src/client/index.scss
is for you to customize. You can include or add your own styles here as you see fit.
By using this file you can override the default styles like the background, wallpaper, etc. Example:
.osjs-root {
background-color: #000;
background-image: url('./wallpaper.png'); /* src/client/wallpaper.png */
}
[info] The "initial" styles is what is displayed before the user has logged in.
If you want to simply customize the already provided styles on a window, you can use the ID, or add a class name to a window:
[info] The CSS class is on the root window element.
When constructing a window, provide the following option(s):
{
id: 'MyWindowId',
attributes: {
classNames: ['MyWindowClass']
}
}
Then in your src/client/index.scss
stylesheet:
.Window_MyWindowId {
/* Styles */
}
.MyWindowClass {
/* Styles */
}
The base window DOM is constructed by a string with HTML.
You can change this on a per-window basis, or globally.
Add the styles to your client stylesheet file (see above).
When constructing a window, provide the following option:
{
// Using a string:
template: '<div>Your HTML content here</div>',
// Or using a callback:
// The original template is added as a string, so you can modify it as you see fit
template: (win, originalTemplate) => originalTemplate
}
This works just as above, except it is global and added to your src/client/config.js
file:
{
windows: {
template: String | Function
}
}
To customize the window behaviour (movement, interactions, etc.), provide your own instance via the service provider:
In your src/client/index.js
bootstrap file, modify the core provider:
osjs.register(CoreServiceProvider, {
args: {
windowBehavior: () => new WindowBehavior(osjs)
}
});
Use the WindowBehavior
class in @osjs/client
as your base class to extend these features.
To customize the initial splash screen you can override the internal class in your src/client/index.js
file:
import {Core, Splash} from '@osjs/client';
class CustomSplash extends Splash {
init() {
// This is the default, you can override this
this.$loading
.appendChild(document.createTextNode('Loading...'));
}
}
// In your bootstrap add an option to a callback
// to point to the new splash instance.
new Core(config, {
splash: core => new CustomSplash(core)
});