mirror of https://github.com/Lissy93/dashy.git
Wrote a schema, to help users validate their app config
This commit is contained in:
parent
bd3dd6b964
commit
ea35f3a846
|
@ -0,0 +1,217 @@
|
||||||
|
/**
|
||||||
|
* This is the schema for the main app configuration (usually ./public/conf.yml)
|
||||||
|
* It enables the users data to be validated when making changes,
|
||||||
|
* and detailed warnings shown, to avoid any unexpected errors or issues
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
type: 'object',
|
||||||
|
required: ['sections'],
|
||||||
|
additionalProperties: false,
|
||||||
|
properties: {
|
||||||
|
|
||||||
|
/* Page Info */
|
||||||
|
pageInfo: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
title: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'Title and heading for the app',
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'Sub-title, displayed in header',
|
||||||
|
},
|
||||||
|
navLinks: {
|
||||||
|
type: 'array',
|
||||||
|
maxItems: 6,
|
||||||
|
description: 'Quick access links, displayed in header',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
additionalProperties: false,
|
||||||
|
required: ['title', 'path'],
|
||||||
|
properties: {
|
||||||
|
title: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
path: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
footerText: { type: 'string' },
|
||||||
|
},
|
||||||
|
required: ['title'],
|
||||||
|
additionalProperties: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
/* App Config */
|
||||||
|
appConfig: {
|
||||||
|
type: 'object',
|
||||||
|
description: 'Application configuration',
|
||||||
|
properties: {
|
||||||
|
backgroundImg: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'A URL to an image asset to be displayed as background',
|
||||||
|
},
|
||||||
|
theme: {
|
||||||
|
type: 'string',
|
||||||
|
default: 'Callisto',
|
||||||
|
description: 'A theme to be applied by default on first load',
|
||||||
|
},
|
||||||
|
enableFontAwesome: {
|
||||||
|
type: 'boolean',
|
||||||
|
default: true,
|
||||||
|
description: 'Should load font-awesome assets',
|
||||||
|
},
|
||||||
|
fontAwesomeKey: {
|
||||||
|
type: 'string',
|
||||||
|
pattern: '^[a-z0-9]{10}$',
|
||||||
|
description: 'API key for font-awesome',
|
||||||
|
},
|
||||||
|
cssThemes: {
|
||||||
|
type: 'array',
|
||||||
|
description: 'Theme names to be added to the dropdown',
|
||||||
|
items: {
|
||||||
|
type: 'string',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
externalStyleSheet: {
|
||||||
|
description: 'URL or URLs of external stylesheets to add to dropdown/ load',
|
||||||
|
type: [
|
||||||
|
'string', 'array'
|
||||||
|
],
|
||||||
|
items: {
|
||||||
|
type: 'string',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
customCss: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'Any custom CSS overides, must be minified',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
additionalProperties: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Sections */
|
||||||
|
sections: {
|
||||||
|
type: 'array',
|
||||||
|
description: 'Array of sections, containing items',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
required: ['name', 'items'],
|
||||||
|
additionalProperties: false,
|
||||||
|
properties: {
|
||||||
|
name: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'Title/ heading for a section',
|
||||||
|
},
|
||||||
|
icon: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'Icon will be displayed next to title',
|
||||||
|
},
|
||||||
|
/* Section Display Data */
|
||||||
|
displayData: {
|
||||||
|
type: 'object',
|
||||||
|
additionalProperties: false,
|
||||||
|
description: 'Optional meta data for customizing a section',
|
||||||
|
properties: {
|
||||||
|
collapsed: {
|
||||||
|
type: 'boolean',
|
||||||
|
default: false,
|
||||||
|
description: 'If true, section needs to be clicked to open',
|
||||||
|
},
|
||||||
|
color: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'Hex code, or HTML color for section fill',
|
||||||
|
},
|
||||||
|
customStyles: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'CSS overides for section container',
|
||||||
|
},
|
||||||
|
itemSize: {
|
||||||
|
enum: ['small', 'medium', 'large'],
|
||||||
|
default: 'medium',
|
||||||
|
description: 'Size of items within the section',
|
||||||
|
},
|
||||||
|
rows: {
|
||||||
|
type: 'number',
|
||||||
|
minimum: 1,
|
||||||
|
maximum: 5,
|
||||||
|
default: 1,
|
||||||
|
description: 'The amount of space that the section spans vertically',
|
||||||
|
},
|
||||||
|
cols: {
|
||||||
|
type: 'number',
|
||||||
|
minimum: 1,
|
||||||
|
maximum: 5,
|
||||||
|
default: 1,
|
||||||
|
description: 'The amount of space that the section spans horizontally',
|
||||||
|
},
|
||||||
|
layout: {
|
||||||
|
enum: ['grid', 'auto'],
|
||||||
|
default: 'auto',
|
||||||
|
description: 'If set to grid, items have uniform width, and itemCount can be set',
|
||||||
|
},
|
||||||
|
itemCountX: {
|
||||||
|
type: 'number',
|
||||||
|
minimum: 1,
|
||||||
|
maximum: 12,
|
||||||
|
description: 'Number of items per column',
|
||||||
|
},
|
||||||
|
itemCountY: {
|
||||||
|
type: 'number',
|
||||||
|
minimum: 1,
|
||||||
|
maximum: 12,
|
||||||
|
description: 'Number of items per row',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
/* Items within a section */
|
||||||
|
items: {
|
||||||
|
type: 'array',
|
||||||
|
description: 'Array of items to display with a section',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
additionalProperties: false,
|
||||||
|
required: ['title'],
|
||||||
|
properties: {
|
||||||
|
title: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'Text shown on the item',
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: true,
|
||||||
|
description: 'Short description, shown on hover or in a tooltip',
|
||||||
|
},
|
||||||
|
icon: {
|
||||||
|
type: 'string',
|
||||||
|
nullable: true,
|
||||||
|
description: 'An icon, either as a font-awesome identifier, local or remote URL, or auto-fetched favicon',
|
||||||
|
},
|
||||||
|
url: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'The destination to navigate to when item is clicked',
|
||||||
|
},
|
||||||
|
target: {
|
||||||
|
enum: ['newtab', 'sametab', 'iframe'],
|
||||||
|
default: 'newtab',
|
||||||
|
description: 'Opening method, when item is clicked',
|
||||||
|
},
|
||||||
|
color: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'A custom fill color of the item',
|
||||||
|
},
|
||||||
|
provider: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'Provider name, e.g. Microsoft',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
Loading…
Reference in New Issue