App Actions
os.compileApp(appId: string, content: any): SetAppOutputAction
Compiles the app with the given ID to display the given content. Each time this function is called, the app will be cleared and will display the specified content.
Used in tandem with os.registerApp(portalId, bot)
to create custom apps.
The first parameter is a string and is the ID of the app.
The second parameter is a any and
Examples
os.compileApp('myApp', <h1>Hello World!</h1>);
os.compileApp('myApp',
<button onClick={ () => os.toast("You clicked the button!")}>
Click Me!
</button>
);
os.compileApp('myApp',
<input onInput={ (e) => { tags.label = e.target.value } } />
);
os.compileApp('myApp',
<input type="range" min="0" max="100" onInput={ (e) => { tags.label = e.target.value } } />
);
os.listBuiltinTags(): string[]
Gets the list of tag names that are built-in to CasualOS.
Includes tags like #color
and #gridPortal
, but not user-defined ones like {@tag [dimension]}.
Examples
const builtinTags = os.listBuiltinTags();
os.toast(builtinTags);
os.registerApp(portalId: string, bot: (string | Bot)): Promise<void>
Registers a app with the given ID, bot, and options. Returns a promise that resolves when the app has been registered. Can be called multiple times with new options to override previous options.
Once setup, CasualOS will send a @onAppSetup
whisper to the given bot.
At this point, you can call os.compileApp(appId, content)
to set what the app displays.
CasualOS will also define a global variable {app}Bot
that points to the given bot.
Apps work by running the HTML you give it by calling os.compileApp(appId, content)
with the HTML you want the app to show.
Since JavaScript does not natively support HTML, we are using a special extension called JSX that adds HTML-like syntax to JavaScript.
At the most basic, JSX is like writing HTML inside JavaScript:
let htmlData = <div>
<h1>Hello World</h1>
</div>;
See this article for more information: Introducing JSX
CasualOS also includes a helper called html
that can be used to make HTML objects out of a string.
You can use it to convert a string into HTML by adding it before a string that uses backticks, like this:
let htmlData = html`
<div>
<h1>Hello World</h1>
</div>
`;
JSX is the preferred way to write HTML inside JavaScript since CasualOS can properly detect it and add helpful features like syntax highlighting and error messages.
The first parameter is a string and is the ID that the app should have.
The second parameter is a (string | Bot) and is the bot that should represent the app. This is the bot that recieves the
@onAppSetup
whisper and should generally be in charge of calling
os.compileApp(appId, content)
.
Examples
await os.registerApp('basicApp', thisBot);
os.compileApp('basicApp', <h1>Hello World!</h1>);
await os.registerApp('buttonApp', thisBot);
os.compileApp('buttonApp',
<button onClick={ () => os.toast("You clicked the button!") }>
Click Me!
</button>
);
await os.registerApp('inputApp', thisBot);
os.compileApp('inputApp',
<input onInput={ (e) => { tags.label = e.target.value } }>
);
os.registerTagPrefix(prefix: string, options?: RegisterPrefixOptions): Promise<void>
Specifies that the given prefix should be used to indicate that the tag contains script content.
Use this function to specify custom prefixes that function similarly to @
or 🧬
.
The first parameter is a string and is the prefix that should indicate that the rest of the tag value is a script.
The second parameter is optional and is a RegisterPrefixOptions and is the options that should be used for the prefix.
Examples
await os.registerTagPrefix("📖");
await os.registerTagPrefix("myPrefix");
await os.registerTagPrefix("🔺", {
language: "jsx"
});
await os.registerTagPrefix("🔺", {
language: "jsx"
name: 'Triangle'
});
os.unregisterApp(appId: string): Promise<void>
Unregisters and removes the app with the given ID. Returns a promise that resolves when the app has been removed.
The first parameter is a string and is the ID of the app.
Examples
await os.unregisterApp('myApp');