Dialog Tutorial
This tutorial will show you how to use and create dialogs.
Dialogs are Windows with pre-defined templates and actions.
Usage
To create a dialog use the provided service:
[info] See the official API documentation for available dialogs and their arguments.
// name: dialog name (alert, confirm, prompt, color, font, file, progress)
// args: an object with arguments for given dialog
core.make("meeseOS/dialog", name, args, (btn, value) => {
// btn: which button was pressed (ex: ok, yes, no, cancel)
// value: the value of the dialog
});
You can also provide custom window options:
const options = {parent: <parent>, attributes: {modal: true}};
core.make("meeseOS/dialog", name, args, options, cb);
Custom Dialog
The default Dialog Service provider allows you to add (or override) dialogs:
import { Dialog } from "@meeseOS/dialogs";
class MyDialog extends Dialog {
constructor(core, args, callback) {
super(core, Object.assign({
foo: "My custom argument default"
}, args), callback)
}
render(options) {
super.render(options, ($content) => {
const el = document.createTextNode(this.args.foo);
$content.appendChild(el);
});
}
}
Registration
// Static
meeseOS.register(DialogServiceProvider, {
args: {
registry: {
"my-dialog": MyDialog
}
}
});
// Runtime
meeseOS.make("meeseOS/dialogs").register("my-dialog", MyDialog);
Programmatic
You can also use the CustomDialog
instance to make your own programmatically:
// Options
const options = {
buttons: ["ok", "cancel"],
window: {
title: "My Dialog",
dimension: {width: 400, height: 400}
}
};
// Get the value for button callback
const callbackValue = dialog => "My value";
// Same as demonstrated in Usage
const callbackButton = (button, value) => {};
// The window.render() wrapper callback
const callbackRender = ($innerContent, dialogWindow, dialog) => {};
core.make("meeseOS/dialogs")
.create(options, callbackValue, callbackButton)
.renderCustom(callbackRender);
Available buttons are:
ok
cancel
close
yes
no
You can add your own by giving strings not found in the list above, or an object:
{
label: string, // Button label
name: string, // The name that is used in the callback function
positive?: boolean // Example a "yes" is positive, while "no" is not
// Used for intitial focus resolver
}
Using @meeseOS/gui
components
Use the .render()
callback instead of .renderCustom()
to hook into the base renderer.
This allows you to extend the internal dialog view with .createView()
:
import { app, h } from "hyperapp";
import { ComponentName } from "@meeseOS/gui";
dialog.render($content => {
app({
// state
}, {
// actions
}, (state, actions) => dialog.createView([
h(ComponentName)
]), $content);
})
MeeseOS Web Desktop - © Aaron Meese <aaronjmeese@gmail.com>