Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 587b9ae

Browse files
committedSep 20, 2024·
Initial commit
0 parents  commit 587b9ae

File tree

13 files changed

+703
-0
lines changed

13 files changed

+703
-0
lines changed
 

‎.github/workflows/gh_pages.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: 📑 GitHub Pages
2+
on:
3+
push:
4+
branches:
5+
- "main"
6+
7+
permissions:
8+
contents: write
9+
10+
jobs:
11+
deploy:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v4
15+
- uses: actions/setup-python@v4
16+
with:
17+
python-version: 3.x
18+
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
19+
- uses: actions/cache@v3
20+
with:
21+
key: mkdocs-material-${{ env.cache_id }}
22+
path: .cache
23+
restore-keys: |
24+
mkdocs-material-
25+
- run: pip install mkdocs-material
26+
- run: mkdocs gh-deploy --force

‎.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.idea

‎README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Documentation for GodotJS
2+
3+
This project uses [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) to serve all docs.
4+
5+
6+
## Install
7+
8+
````pycon
9+
pip install mkdocs-material
10+
````
11+
12+
## Start
13+
14+
````shell
15+
mkdocs serve
16+
````
17+
18+
Goto: ``http://localhost:8000``
19+
20+
## Contribute
21+
You can change the documentation inside the `docs` folder.
22+
To add new pages you need to update `mkdocs.yml`.
23+
24+

‎docs/assets/images/favicon.ico

15 KB
Binary file not shown.

‎docs/documentation/api.md

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
All of Godot's APIs are defined within the `godot` namespace.
2+
3+
No API names have been renamed or changed, so you shouldn't need to change your habits.
4+
5+
| GDScript | JavaScript |
6+
| ---------------------- | ---------------------------- |
7+
| null | null |
8+
| int | number |
9+
| float | number |
10+
| String | string |
11+
| Array | Array |
12+
| Dictionary | Object |
13+
| NodePath | string |
14+
| Object | godot.Object |
15+
| Resource | godot.Resource |
16+
| Vector2 | godot.Vector2 |
17+
| Color | godot.Color |
18+
| sin(v) | godot.sin(v) |
19+
| print(v) | godot.print(v) |
20+
| PI | godot.PI |
21+
| Color.black | godot.Color.black |
22+
| Control.CursorShape | godot.Control.CursorShape |
23+
| Label.Align.ALIGN_LEFT | godot.Label.Align.ALIGN_LEFT |
24+
25+
## API specification:
26+
27+
- Keys of Dictionary are converted to String in JavaScript
28+
- Signals are defined as constants to their classes
29+
```
30+
godot.Control.resized === 'resized' // true
31+
```
32+
33+
### Additional functions
34+
35+
- `godot.register_signal(cls, signal_name)` to register signals
36+
- `godot.register_property(cls, name, default_value)` to define and export properties
37+
- `godot.register_class(cls, name)` to register named class manually
38+
- `godot.set_script_tooled(cls, tooled)` to set `tooled` of the class
39+
- `godot.set_script_icon(cls, path)` to set icon of the class
40+
- `godot.get_type(val)` Returns the internal type of the given `Variant` object, using the `godot.TYPE_*`
41+
- `godot.yield(target, signal)` Returns a Promise which will be resolved when the signal emitted
42+
- `requestAnimationFrame(callback)` registers a callback function to be called every frame, returns a request ID.
43+
- `cancelAnimationFrame(request_id)` to cancel a previously scheduled frame request
44+
- `require(module_id)` to load a CommonJS module or load a resource file
45+
- `$` is the alias of `Node.get_node`
46+
47+
### Using signals
48+
49+
Allow passing functions for `godot.Object.connect`, `godot.Object.disconnect`, and `godot.Object.is_connected`:
50+
51+
```js
52+
this.panel.connect(godot.Control.resized, (size) => {
53+
console.log("The size of the panel changed to:", size);
54+
});
55+
```
56+
57+
Using `await` to wait for signals
58+
59+
```js
60+
await godot.yield(
61+
this.get_tree().create_timer(1),
62+
godot.SceneTreeTimer.timeout
63+
);
64+
console.log("After one second to show");
65+
```
66+
67+
Preload resources with ECMAScript import statement
68+
69+
```js
70+
import ICON from "res://icon.png";
71+
```
72+
73+
### Multi-threading
74+
75+
Multi-threading with minimal [Worker API](https://developer.mozilla.org/en-US/docs/Web/API/Worker) (**This is an experimental feature**)
76+
77+
Start a new thread with Worker:
78+
79+
```js
80+
const worker = new Worker("worker.js"); // Run worker.js in a new thread context
81+
worker.postMessage({ type: "load_dlc", value: "dlc01.pck" });
82+
worker.onmessage = function (msg) {
83+
console.log("[MainThread] received message from worker thread:", msg);
84+
};
85+
```
86+
87+
Transfer value in different thread context with `godot.abandon_value` and `godot.adopt_value`:
88+
89+
```js
90+
// In worker thread
91+
let id = godot.abandon_value(object);
92+
postMessage({ type: "return_value", id: id });
93+
94+
// In the host thread
95+
worker.onmessage = function (msg) {
96+
if (typeof msg === "object" && msg.type === "return_value") {
97+
let value_from_worker = godot.adopt_value(msg.id);
98+
}
99+
};
100+
```

‎docs/documentation/getting-started.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
### How to export script class to Godot
2+
3+
1. Define your JavaScript class and inherit from a Godot class, then export it as the **default** entry:
4+
5+
```javascript title="my-sprite.mjs"
6+
// The default export entry is treated as an exported class to Godot
7+
export default class MySprite extends godot.Sprite {
8+
// this is _init() in GDScript
9+
constructor() {
10+
super();
11+
}
12+
13+
_ready() {}
14+
15+
_process(delta) {}
16+
}
17+
```
18+
19+
2. Save the script with extension `.mjs`
20+
3. Attach the script file to the node or resource object like you do with GDScript
21+
22+
### How to export signals
23+
24+
```javascript title="my-sprite.mjs"
25+
export default class MySprite extends godot.Sprite {}
26+
// register game_over signal to MySprite class
27+
godot.register_signal(MySprite, "game_over");
28+
```
29+
30+
### How to export properties
31+
32+
```javascript title="my-sprite.mjs"
33+
export default class MySprite extends godot.Sprite {
34+
_process(delta) {
35+
// Yes! We can use operators in JavaScript like GDScript
36+
this.position += this.direction * delta;
37+
}
38+
}
39+
// export 'direction' properties to MySprite Godot inspector
40+
godot.register_property(MySprite, "direction", new godot.Vector2(1, 0));
41+
```
42+
43+
There are 2 ways of using the `godot.register_property`. The third parameter can either be a default value for the property you're trying to export or an object giving a more detailed description of how the editor should show it.
44+
45+
```js
46+
function register_property(target: GodotClass | godot.Object, name: string, value: any);
47+
function register_property(target: GodotClass | godot.Object, name: string, info: PropertyInfo);
48+
```
49+
50+
So calling the `register_property` like this:
51+
52+
```js
53+
godot.register_property(MyClass, "number_value", 3.14);
54+
```
55+
56+
Is the simplified version of:
57+
58+
```js
59+
godot.register_property(MyClass, "number_value", {
60+
type: godot.TYPE_REAL,
61+
hint: godot.PropertyHint.PROPERTY_HINT_NONE,
62+
hint_string: "",
63+
default: 3.14,
64+
});
65+
```
66+
67+
For more detail on how to use it, [click here](https://github.com/Geequlim/ECMAScript/issues/24#issuecomment-655584829).

‎docs/documentation/gotchas.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Gotchas and limitations
2+
3+
Some common mistakes and limitations.
4+
5+
## Import dependency from `node_modules`
6+
7+
If you use `TypeScript` you may encounter the problem where dependencies from `node_modules` are not bundled correctly.
8+
9+
As a workaround you can create a new file `npm-modules.bundle.ts`:
10+
11+
```ts title="npm-modules.bundle.ts"
12+
import { default as dayjs } from "dayjs";
13+
export default { dayjs };
14+
```
15+
16+
In your class you can use the dependency like this:
17+
18+
```ts title="main.ts"
19+
import npm from "./npm-modules.bundle";
20+
21+
export default class Main extends godot.Node {
22+
_ready(): void {
23+
console.log(npm.dayjs().toString());
24+
}
25+
}
26+
```
27+
28+
With a bundler like `esbuild` you should build the `npm-modules.bundle.ts` with the `--bundle` option, but all the other classes like `main.ts` without it.
29+
30+
## Position.x is immutable
31+
32+
You cannot change `this.position.x` try to change `this.position`:
33+
34+
```javascript title="player.mjs"
35+
export default class Player extends godot.KinematicBody2D {
36+
constructor() {
37+
super();
38+
this.direction = new godot.Vector2(1, 0);
39+
}
40+
_ready() {}
41+
_process(delta) {
42+
this.position.x += this.direction.x; // <- breaks
43+
this.position += this.direction; // <- works
44+
}
45+
}
46+
godot.register_property(Player, "direction", new godot.Vector2(1, 0));
47+
```
48+
49+
## ``register_property`` has to be a target
50+
51+
You cannot change `this.position.x` try to change `this.position`:
52+
53+
```javascript title="player.mjs"
54+
export default class Player extends godot.KinematicBody2D {
55+
}
56+
// This works
57+
godot.register_property(Player, "directionWorks", new godot.Vector2(1, 0));
58+
// This breaks because `player` isn't a correct target
59+
godot.register_property(player, "directionBreaks", new godot.Vector2(1, 0));
60+
```

‎docs/documentation/typescript.md

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
- Run the menu command `Project > Tools > JavaScript > Generate TypeScript Project` from the Godot editor to generate a TypeScript project
2+
- Run `tsc -w -p .` under your project folder in the terminal to compile scripts
3+
4+
## Code completion
5+
6+
- Code completion in TS will automatically work once the TypeScript project is generated by the above steps.
7+
- Code completion in VSCode is achieved by the property `"types": "./godot.d.ts"` in the generated package.json file of the TypeScript project. The `godot.d.ts` file can be generated alone via the `Project > Tools > ECMAScript > Generate TypeScript Declaration File` editor menu option and added to a `package.json` file manually to achieve this without a full TypeScript project.
8+
9+
## Example
10+
11+
Compile your `ts` script to a `.mjs` file then we can attach it to a node in godot editor.
12+
13+
Most of the `register` functions are available as various decorators as seen below.
14+
15+
```ts
16+
import { signal, property, tool, onready, node } from "./decorators";
17+
18+
@tool // make the script runnable in godot editor
19+
export default class InputLine extends godot.HBoxContainer {
20+
// define a signal
21+
@signal
22+
static readonly OnTextChanged: string;
23+
24+
// expose a node property
25+
@node
26+
icon: godot.Sprite;
27+
28+
// register offset property with the godot inspector with default value of Vector2(0, 0)
29+
@property({ default: godot.Vector2.ZERO })
30+
offset: godot.Vector2;
31+
32+
// register properties for godot editor inspector
33+
@property({ type: godot.VariantType.TYPE_STRING })
34+
get title() {
35+
return this._title;
36+
}
37+
set title(v: string) {
38+
this._title = v;
39+
if (this._label) {
40+
this._label.text = v;
41+
}
42+
}
43+
private _title: string;
44+
45+
@property({ default: "Input text here" })
46+
get hint() {
47+
return this._hint;
48+
}
49+
set hint(v: string) {
50+
this._hint = v;
51+
if (this.edit) {
52+
this.edit.hint_tooltip = v;
53+
this.edit.placeholder_text = v;
54+
}
55+
}
56+
private _hint: string;
57+
58+
get label(): godot.Label {
59+
return this._label;
60+
}
61+
protected _label: godot.Label;
62+
63+
// call get_node('LineEdit') and assign the returned value to 'this.edit' automatically when the node is ready
64+
@onready("LineEdit")
65+
edit: godot.LineEdit;
66+
67+
get text(): string {
68+
return this.edit?.text;
69+
}
70+
71+
_ready() {
72+
// get first child with the type of godot.Label
73+
this._label = this.get_node(godot.Label);
74+
75+
// Apply the inspector filled values with property setters
76+
this.title = this.title;
77+
this.hint = this.hint;
78+
79+
this.edit.connect(godot.LineEdit.text_changed, (text: string) => {
80+
this.emit_signal(InputLine.OnTextChanged, text);
81+
});
82+
}
83+
}
84+
```
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
# Load json in singleton
2+
3+
This example shows how to load a file like a `config` inside a singleton to access it everywhere.
4+
5+
For the `TypeScript` examples, all `.ts` files will be compiled as `.mjs` to the folder `scripts/generated/**`.
6+
7+
> **Note:** If you use `TypeScript` you need to set `"resolveJsonModule": true` inside your `tsconfig.json`.
8+
9+
## 1. Create file
10+
11+
We create a new folder named `config` and a new file `test.json`.
12+
13+
Next we write this to the `test.json`:
14+
15+
```json title="test.json"
16+
{
17+
"test": true
18+
}
19+
```
20+
21+
## 2. Create the singleton
22+
23+
We create a new file inside our `src` folder like `read-config.(mjs|ts)` and add this code to it:
24+
25+
=== "JavaScript"
26+
27+
```javascript title="read-config.mjs"
28+
import TestJson from "res://config/test.json";
29+
30+
export default class ReadConfig extends godot.Node {
31+
static _singleton;
32+
33+
static get singleton() {
34+
return ReadConfig._singleton;
35+
}
36+
37+
constructor() {
38+
super();
39+
if (!ReadConfig._singleton) {
40+
ReadConfig._singleton = this;
41+
}
42+
}
43+
44+
// This property is available for other classes
45+
config = TestJson;
46+
}
47+
```
48+
49+
=== "TypeScript"
50+
51+
```ts title="read-config.ts"
52+
// @ts-ignore
53+
import TestJson from "res://config/test.json";
54+
55+
type TestType = {
56+
test: boolean;
57+
};
58+
59+
export default class ReadConfig extends godot.Node {
60+
static _singleton: ReadConfig;
61+
62+
static get singleton() {
63+
return ReadConfig._singleton;
64+
}
65+
66+
constructor() {
67+
super();
68+
if (!ReadConfig._singleton) {
69+
ReadConfig._singleton = this;
70+
}
71+
}
72+
73+
// This property is available for other classes
74+
config: TestType = TestJson as TestType;
75+
}
76+
```
77+
78+
## 3. Autoload singleton in project
79+
80+
We need to update the `[autoload]` inside `project.godot`:
81+
82+
```text title="project.godot"
83+
...
84+
[autoload]
85+
86+
; Use the generated `.mjs` file instead of `.ts`
87+
ReadConfig="*res://scripts/generated/read-config.mjs"
88+
...
89+
```
90+
91+
## 4. Use the singleton in other class
92+
93+
In another class e.g. `main.(mjs|ts)` you need to import the `ReadConfig` then you can access every public property and method from `ReadConfig` via `ReadConfig.singleton`:
94+
95+
=== "JavaScript"
96+
97+
```ts title="main.mjs"
98+
import ReadConfig from "./read-config";
99+
100+
export default class Main extends godot.Node {
101+
_ready() {
102+
console.log(ReadConfig.singleton.config.test); // prints "true"
103+
}
104+
}
105+
```
106+
107+
=== "TypeScript"
108+
109+
```ts title="main.ts"
110+
import ReadConfig from "./read-config";
111+
112+
export default class Main extends godot.Node {
113+
_ready(): void {
114+
console.log(ReadConfig.singleton.config.test); // prints "true"
115+
}
116+
}
117+
```

‎docs/examples/read-file-local.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Read file local
2+
3+
This example shows how to load any file as string from a local folder.
4+
5+
For the `TypeScript` examples, all `.ts` files will be compiled as `.mjs` to the folder `scripts/generated/**`.
6+
7+
## 1. Create the file you want to read
8+
9+
In this example we try to read a ``.csv`` file, but it should work with any other file as well.
10+
11+
We create a folder ``resources`` and add a new file `test.csv`:
12+
13+
````csv title="test.csv"
14+
keys,en,de
15+
HELLO,hello,hallo
16+
````
17+
18+
## 2. Read the file in class
19+
20+
We use [FileAccess](https://docs.godotengine.org/en/stable/classes/class_fileaccess.html) to read the file.
21+
22+
We create a new file ``read-local-file.(mjs|ts)``:
23+
24+
=== "JavaScript"
25+
26+
````ts title="read-local-file.mjs"
27+
export default class ReadLocalFile extends godot.Node {
28+
_ready() {
29+
const file = new godot.FileAccess();
30+
file.open("res://resources/test.csv", godot.FileAccess.ModeFlags.READ);
31+
let fileContent = "";
32+
while (!file.eof_reached()) {
33+
fileContent += `${file.get_line()}\n`;
34+
}
35+
console.log(fileContent);
36+
}
37+
}
38+
````
39+
=== "TypeScript"
40+
41+
````ts title="read-local-file.ts"
42+
export default class ReadLocalFile extends godot.Node {
43+
_ready(): void {
44+
const file = new godot.FileAccess();
45+
file.open("res://resources/test.csv", godot.FileAccess.ModeFlags.READ);
46+
let fileContent: string = "";
47+
while (!file.eof_reached()) {
48+
fileContent += `${file.get_line()}\n`;
49+
}
50+
console.log(fileContent);
51+
}
52+
}
53+
````
54+
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# Use GDScript in TypeScript
2+
3+
This example shows how to use a class written in GDScript in another TS class.
4+
5+
For the `TypeScript` examples, all `.ts` files will be compiled as `.mjs` to the folder `scripts/generated/**`.
6+
7+
## 1. Create the GDScript file
8+
9+
First we create a simple class with GDScript inside a new file `scripts/gd/GDTest.gd`:
10+
11+
````gdscript title="GDTest.gd"
12+
extends Node
13+
14+
func _ready():
15+
pass
16+
17+
func print_in_gd_test():
18+
print("gd_test")
19+
20+
````
21+
22+
## 2. Create a declaration (*.d.ts) for GDScript (only TypeScript)
23+
24+
For proper TypeScript support we need to add a ``gdtest.d.ts`` file:
25+
26+
````ts title="gdtest.d.ts"
27+
declare module "res://scripts/gd/GDTest.gd" {
28+
class GDTest {
29+
call(func: "print_in_gd_test"): void;
30+
31+
static new() {
32+
return this;
33+
}
34+
}
35+
export = GDTest;
36+
}
37+
````
38+
39+
## 3. Use the class inside your TS file
40+
41+
In the end we need to call the ``GDTest.gd`` from another `(.mjs|.ts)` file, like `main.(mjs|ts)`:
42+
43+
=== "JavaScript"
44+
````ts title="main.mjs"
45+
import GDTest from "res://scripts/gd/GDTest.gd";
46+
47+
export default class Main extends godot.Node {
48+
_ready() {
49+
const gdTest = GDTest.new();
50+
gdTest.call("print_in_gd_test");
51+
}
52+
}
53+
54+
````
55+
=== "TypeScript"
56+
````ts title="main.ts"
57+
import GDTest from "res://scripts/gd/GDTest.gd";
58+
59+
export default class Main extends godot.Node {
60+
_ready(): void {
61+
const gdTest: GDTest = GDTest.new();
62+
gdTest.call("print_in_gd_test");
63+
}
64+
}
65+
66+
````
67+
68+
> **Note:** The important thing here is that you use `new()` to instantiate and `call` to execute the function

‎docs/index.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
hide:
3+
- navigation
4+
- toc
5+
---
6+
7+
# GodotJS - JavaScript language binding for Godot game engine
8+
9+
This module implements JavaScript/TypeScript language support for the Godot game engine using [QuickJS](https://bellard.org/quickjs/) as the JavaScript engine.
10+
11+
12+
### Getting started
13+
14+
Read the [getting-started](https://godotjs.github.io/documentation/getting-started/).
15+
16+
## Features
17+
18+
- Almost complete ES2020 support
19+
- All Godot API available
20+
- Operator overriding for built-in types (Vector3, Color, etc)
21+
- TypeScript support
22+
- [Using third-party libraries from npm](https://github.com/GodotExplorer/ECMAScriptDemos/tree/master/npm_module)
23+
- Multi-thread support with Worker API
24+
- Full code completion support for all Godot APIs including signals and enumerations
25+
- Debug in Visual Studio Code with the [plugin](https://marketplace.visualstudio.com/items?itemName=geequlim.godot-javascript-debug) - currently not available for 4.x
26+
27+
## Getting the engine
28+
29+
No installation or setup necessary. The binaries for download are the complete, usable Godot editor and engine with JavaScript/TypeScript language support.
30+
31+
### Binary downloads
32+
33+
Download the binaries from the [release page](https://github.com/GodotExplorer/ECMAScript/releases).
34+
35+
### Compiling from source
36+
37+
- Clone the source code of [godot](https://github.com/godotengine/godot):
38+
- `git clone git@github.com:godotengine/godot.git` or
39+
- `git clone https://github.com/godotengine/godot.git`
40+
- This branch uses version `4.1` so checkout the version with: `git checkout 4.1`
41+
- Clone this module and put it into `godot/modules/javascript`:
42+
- `git clone git@github.com:Geequlim/ECMAScript.git godot/modules/javascript` or
43+
- `git clone https://github.com/Geequlim/ECMAScript.git godot/modules/javascript`
44+
- [Recompile the godot engine](https://docs.godotengine.org/en/4.1/development/compiling/index.html)
45+
- Use `scons` with those additional options `warnings=extra werror=yes module_text_server_fb_enabled=yes` to show all potential errors:
46+
- Windows: `scons platform=windows warnings=extra werror=yes module_text_server_fb_enabled=yes`
47+
- MacOS: `scons platform=macos arch=arm64 warnings=extra werror=yes module_text_server_fb_enabled=yes`
48+
49+
## Documentation, Tutorials & Demos
50+
51+
52+
Read this [documentation](https://godotjs.github.io/documentation/getting-started/) or look at the tutorials or demos:
53+
54+
- [ECMAScriptDemos](https://github.com/Geequlim/ECMAScriptDemos) - Demos
55+
- [godot-ECMAScript-cookbook](https://github.com/why-try313/godot-ECMAScript-cookbook/wiki) - Tutorial
56+
- [godot-typescript-starter](https://github.com/citizenll/godot-typescript-starter) - Template
57+
- [godot-js-template](https://github.com/fukaraadam-workspace/godot-js-template) - Template

‎mkdocs.yml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# yaml-language-server: $schema=https://squidfunk.github.io/mkdocs-material/schema.json
2+
site_name: GodotJS
3+
site_url: https://godotjs.github.io
4+
repo_url: https://github.com/Geequlim/ECMAScript
5+
site_description: JS/TS language binding for Godot
6+
7+
nav:
8+
- Home: index.md
9+
- Docs:
10+
- Getting Started: documentation/getting-started.md
11+
- API: documentation/api.md
12+
- TypeScript: documentation/typescript.md
13+
- Gotchas: documentation/gotchas.md
14+
- Examples:
15+
- Load JSON in Singleton: examples/load-json-in-singleton.md
16+
- Read file local: examples/read-file-local.md
17+
- Use GDScript in JS or TS: examples/use-gdscript-in-js-or-ts.md
18+
19+
theme:
20+
name: material
21+
favicon: assets/images/favicon.ico
22+
# logo: ./assets/logo.svg
23+
icon:
24+
repo: fontawesome/brands/github
25+
features:
26+
- navigation.tabs
27+
- navigation.instant
28+
- navigation.instant.prefetch
29+
- navigation.path
30+
- navigation.top
31+
- search.suggest
32+
- search.highlight
33+
- content.code.copy
34+
- content.tabs.link
35+
36+
markdown_extensions:
37+
- pymdownx.highlight:
38+
anchor_linenums: true
39+
line_spans: __span
40+
pygments_lang_class: true
41+
- pymdownx.inlinehilite
42+
- pymdownx.snippets
43+
- pymdownx.superfences
44+
- pymdownx.tabbed:
45+
alternate_style: true

0 commit comments

Comments
 (0)
Please sign in to comment.