@discoveryjs/cli
Version:
CLI tools to serve & build projects based on Discovery.js
67 lines (64 loc) • 2.15 kB
JavaScript
/* eslint-env browser */
import extensions from 'discovery-cli:extensions';
import encodings from 'discovery-cli:encodings';
import { Widget as ViewModel, navButtons, router, embed } from '@discoveryjs/discovery';
import { colorSchemeOptions } from './common.js';
export default function(setup, progressbar, embedState) {
const model = {
name: setup.name,
version: setup.version,
description: setup.description,
icon: setup.icon
};
const context = {
model,
models: setup.models
};
const viewModel = new ViewModel({
...model,
container: document.body,
styles: setup.styles,
inspector: setup.inspector,
...colorSchemeOptions(setup),
encodings,
context,
extensions: [
navButtons.indexPage,
navButtons.discoveryPage,
setup.inspector && navButtons.inspect,
navButtons.colorSchemeToggle || navButtons.darkmodeToggle,
setup.router && router,
setup.embed && embed.setup(embedState),
...extensions
],
defaultPage: [
{
view: 'switch',
content: [
{ when: () => viewModel.view.isDefined('app-header'), content: 'app-header:#.model' },
{ content: 'h1{ className: "default-header", data: #.model.name }' }
]
},
{
view: 'ul',
data: '#.models',
item: `link{
onClick: 'openModel'.actionHandler(slug, href),
data: {
slug,
text: name,
href: url
}
}`
}
]
});
if (typeof viewModel.setContext === 'function') {
// discoveryjs > 1.0.0-beta.90
return viewModel.setData(setup.data, { progressbar });
} else {
// discoveryjs <= 1.0.0-beta.90
viewModel.context = context;
return viewModel.setData(setup.data, viewModel.context, { progressbar });
}
}