46 lines
2.3 KiB
Markdown
46 lines
2.3 KiB
Markdown
# Plugin system for editors in lexonomy
|
|
|
|
This is a simple user-space plugin system for Lexonomy.
|
|
|
|
## How it works?
|
|
|
|
It uses a javascript loader file, which loads plugins over the internet. This means that you need to serve plugins, which could be done
|
|
just serving static files, but we implemented our server code, which does one more trick. The plugin is loaded at the touch of "edit" button
|
|
and that is it.
|
|
|
|
## Plugin
|
|
|
|
Every plugin is a folder which is located where the server code is run from. A plugin consists of config.json file and any other file
|
|
you want. config.json instructs plugin loader which files to load. Currently we support three keys in config.json:
|
|
|
|
1. javascript: list of javascript files, local files have to be written as: `"$LOCATION$/file.js"
|
|
2. css: list of css stylesheets, local css have to be written as: `"$LOCATION$/file.js"
|
|
3. global: key-value list of `{'name': file}` - content of a file is stored in global variable name in browser javacsript. Same rule as above applies to local files.
|
|
|
|
Everytime you want to access local plugin files in javascript, css or wherever, you prepend `$LOCATION$/` to the url. The plugin server takes care, that correct url is generated. This settings is found in `URL` value in server python code.
|
|
|
|
In order for a plugin to work, javascript should export three function:
|
|
|
|
```js
|
|
plugin_init(div, entry)
|
|
plugin_render(div, entry)
|
|
plugin_save(div)
|
|
```
|
|
|
|
# Usage
|
|
|
|
To use it, you must first paste the [javascript loader](plugin-loader.js) into custom entry editor section of Lexonomy configuration.
|
|
Next, set correct url of your plugin. In order to work, the plugin must be accessible over HTTPS, if Lexonomy already runs on https.
|
|
In order to run a server, you need to run a default redis server and have these python packages installed: flask and redis.
|
|
Then you can run [flask server](plugin-server.py) on a server.
|
|
|
|
## Example
|
|
|
|
Let's say you are hosting plugins on lexonomyplugins.example.com and that there is a plugin (a folder) called myplugin in `CWD` of the server python process. You need to set:
|
|
|
|
* `plugin: "//lexonomyplugins.example.com/myplugin"` in javascript loader,
|
|
* `URL = "//lexonomyplugins.example.com/myplugin"` in python server,
|
|
* the config.json file of myapi plugin has to be in `"myplugin"` folder on server
|
|
|
|
This is it.
|