You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.2 KiB
95 lines
2.2 KiB
package govue
|
|
|
|
import (
|
|
"fmt"
|
|
"git.ouxuan.net/3136352472/go-service-template/jsruntime"
|
|
"git.ouxuan.net/3136352472/go-service-template/pool"
|
|
"git.ouxuan.net/hasaki-service/hasaki-sdk/hskutils"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type GoVue struct {
|
|
StaticPath string
|
|
UseJsPath string
|
|
jsRuntimePool *pool.JsRuntimePool
|
|
}
|
|
|
|
func NewGoVueDefaultConfig() (gv *GoVue, err error) {
|
|
gv = &GoVue{}
|
|
err = gv.initRender()
|
|
return
|
|
}
|
|
|
|
func NewGoVue(staticPath, useJsPath string) (gv *GoVue, err error) {
|
|
gv = &GoVue{
|
|
StaticPath: staticPath,
|
|
UseJsPath: useJsPath,
|
|
}
|
|
err = gv.initRender()
|
|
return
|
|
}
|
|
|
|
func (gv *GoVue) initRender() (err error) {
|
|
mainFile := filepath.Join(hskutils.GetSelfFilePath(), "govue-runtime", "runtime.js")
|
|
var useFileName string
|
|
if gv.UseJsPath == "" {
|
|
useFileName = filepath.Join(hskutils.GetSelfFilePath(), "static", "use.js")
|
|
} else {
|
|
useFileName = gv.UseJsPath
|
|
}
|
|
gv.jsRuntimePool = pool.NewJsRuntimePool(mainFile, useFileName, jsruntime.Relys{
|
|
jsruntime.Rely{
|
|
FileName: filepath.Join("govue-runtime", "header.js"),
|
|
},
|
|
jsruntime.Rely{
|
|
FileName: filepath.Join("govue-runtime", "request.js"),
|
|
},
|
|
//jsruntime.Rely{
|
|
// FileName: filepath.Join("govue-runtime", "govue.js"),
|
|
//},
|
|
jsruntime.Rely{
|
|
FileName: filepath.Join("govue-js-src", "dist", "index.js"),
|
|
},
|
|
}, jsruntime.ModeSync)
|
|
return
|
|
}
|
|
|
|
func (gv *GoVue) LoadStaticResources(request *http.Request) (result []byte, err error) {
|
|
var path string
|
|
var staticDir string
|
|
var filePath = request.URL.Path
|
|
if gv.StaticPath == "" {
|
|
staticDir = filepath.Join(hskutils.GetSelfFilePath(), "static")
|
|
} else {
|
|
staticDir = gv.StaticPath
|
|
}
|
|
|
|
path = filepath.Join(staticDir, filePath)
|
|
|
|
fi, err := os.Stat(path)
|
|
if err != nil {
|
|
return
|
|
} else if fi.IsDir() {
|
|
filePath = filepath.Join(filePath, "index.html")
|
|
path = filepath.Join(staticDir, filePath)
|
|
}
|
|
|
|
result, err = ioutil.ReadFile(path)
|
|
if !hskutils.PathExists(path) || err != nil {
|
|
return
|
|
}
|
|
if filepath.Ext(path) != ".html" {
|
|
return
|
|
}
|
|
|
|
err = gv.jsRuntimePool.JsRuntimeCall(func(jr *jsruntime.JsRuntime) {
|
|
err = jr.Render(filePath, fmt.Sprintf("http://%s%s", request.Host, request.RequestURI), string(result), func(data string) {
|
|
result = []byte(data)
|
|
})
|
|
})
|
|
gv.jsRuntimePool.Log()
|
|
return
|
|
}
|