92 lines
1.8 KiB
Go
92 lines
1.8 KiB
Go
/*
|
|
*
|
|
* OttoJS Plugin Module
|
|
* Copyright Azareal 2016 - 2018
|
|
*
|
|
*/
|
|
package common
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/robertkrimen/otto"
|
|
)
|
|
|
|
type OttoPluginLang struct {
|
|
vm *otto.Otto
|
|
plugins map[string]*otto.Script
|
|
vars map[string]*otto.Object
|
|
}
|
|
|
|
func init() {
|
|
pluginLangs["ottojs"] = &OttoPluginLang{
|
|
plugins: make(map[string]*otto.Script),
|
|
vars: make(map[string]*otto.Object),
|
|
}
|
|
}
|
|
|
|
func (js *OttoPluginLang) Init() (err error) {
|
|
js.vm = otto.New()
|
|
js.vars["current_page"], err = js.vm.Object(`var current_page = {}`)
|
|
return err
|
|
}
|
|
|
|
func (js *OttoPluginLang) GetName() string {
|
|
return "ottojs"
|
|
}
|
|
|
|
func (js *OttoPluginLang) GetExts() []string {
|
|
return []string{".js"}
|
|
}
|
|
|
|
func (js *OttoPluginLang) AddPlugin(meta PluginMeta) (plugin *Plugin, err error) {
|
|
script, err := js.vm.Compile("./extend/"+meta.UName+"/"+meta.Main, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var pluginInit = func() error {
|
|
retValue, err := js.vm.Run(script)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if retValue.IsString() {
|
|
ret, err := retValue.ToString()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if ret != "" {
|
|
return errors.New(ret)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
var pluginActivate func() error
|
|
var pluginDeactivate func()
|
|
var pluginInstall func() error
|
|
var pluginUninstall func() error
|
|
|
|
plugin = NewPlugin(meta.UName, meta.Name, meta.Author, meta.URL, meta.Settings, meta.Tag, "ottojs", pluginInit, pluginActivate, pluginDeactivate, pluginInstall, pluginUninstall)
|
|
|
|
plugin.Data = script
|
|
return plugin, nil
|
|
}
|
|
|
|
/*func (js *OttoPluginLang) addHook(hook string, plugin string) {
|
|
hooks[hook] = func(data interface{}) interface{} {
|
|
switch d := data.(type) {
|
|
case Page:
|
|
currentPage := js.vars["current_page"]
|
|
currentPage.Set("Title", d.Title)
|
|
case TopicPage:
|
|
|
|
case ProfilePage:
|
|
|
|
case Reply:
|
|
|
|
default:
|
|
log.Print("Not a valid JS datatype")
|
|
}
|
|
}
|
|
}*/
|