// +build js package main import ( "github.com/gopherjs/gopherjs/js" "github.com/mame82/hvue" ) type CompHIDScriptCodeEditorData struct { *js.Object CodeMirrorOptions *CodeMirrorOptionsType `js:"codemirrorOptions"` } type CodeMirrorMode struct { *js.Object Name string `js:"name"` GlobalVars bool `js:"globalVars"` } type CodeMirrorExtraKeys struct { *js.Object CtrlSpace string `js:"Ctrl-Space"` } type CodeMirrorOptionsType struct { *js.Object Mode *CodeMirrorMode `js:"mode"` LineNumbers bool `js:"lineNumbers"` LineWrapping bool `js:"lineWrapping"` AutoCloseBrackets bool `js:"autoCloseBrackets"` ExtraKeys *CodeMirrorExtraKeys `js:"extraKeys"` } func newCompHIDScriptCodeEditorData(vm *hvue.VM) interface{} { data := &CompHIDScriptCodeEditorData{ Object: O() } data.CodeMirrorOptions = &CodeMirrorOptionsType{Object: O()} data.CodeMirrorOptions.Mode = &CodeMirrorMode{ Object: O() } data.CodeMirrorOptions.Mode.Name = "text/javascript" data.CodeMirrorOptions.Mode.GlobalVars = true //expose globalVars of mode for auto-complete with addon/hint/show-hint.js, addon/hint/javascript-hint.js" data.CodeMirrorOptions.ExtraKeys = &CodeMirrorExtraKeys{ Object: O() } data.CodeMirrorOptions.ExtraKeys.CtrlSpace = "autocomplete" data.CodeMirrorOptions.LineNumbers = true //data.CodeMirrorOptions.LineWrapping = true data.CodeMirrorOptions.AutoCloseBrackets = true return data } func InitComponentsHIDScript() { hvue.NewComponent( "hid-script-code-editor", hvue.Template(compHIDScriptCodeEditorTemplate), hvue.DataFunc(newCompHIDScriptCodeEditorData), hvue.ComputedWithGetSet( "scriptContent", func(vm *hvue.VM) interface{} { return vm.Get("$store").Get("state").Get("currentHIDScriptSource") }, func(vm *hvue.VM, newScriptContent *js.Object) { vm.Get("$store").Call("commit", VUEX_MUTATION_SET_CURRENT_HID_SCRIPT_SOURCE_TO, newScriptContent) }), ) hvue.NewComponent( "hid-script", hvue.Template(compHIDScriptTemplate), hvue.DataFunc(func(vm *hvue.VM) interface{} { data := struct { *js.Object ShowLoadHIDScriptModal bool `js:"ShowLoadHIDScriptModal"` ShowLoadHIDScriptPrependModal bool `js:"ShowLoadHIDScriptPrependModal"` ShowStoreHIDScriptModal bool `js:"ShowStoreHIDScriptModal"` ShowRansom bool `js:"ShowRansom"` }{Object: O()} data.ShowLoadHIDScriptModal = false data.ShowLoadHIDScriptPrependModal = false data.ShowStoreHIDScriptModal = false data.ShowRansom = false return &data }), hvue.Method("updateStoredHIDScriptsList", func(vm *hvue.VM) { vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_STORED_HID_SCRIPTS_LIST) }), hvue.Method("loadHIDScript", func(vm *hvue.VM, name string) { vm.Get("$q").Call("notify", "load " + name) updateReq := &jsLoadHidScriptSourceReq{Object:O()} updateReq.FileName = name updateReq.Mode = HID_SCRIPT_SOURCE_LOAD_MODE_REPLACE vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_CURRENT_HID_SCRIPT_SOURCE_FROM_REMOTE_FILE, updateReq) }), hvue.Method("loadHIDScriptPrepend", func(vm *hvue.VM, name string) { vm.Get("$q").Call("notify", "load prepend " + name) updateReq := &jsLoadHidScriptSourceReq{Object:O()} updateReq.FileName = name updateReq.Mode = HID_SCRIPT_SOURCE_LOAD_MODE_PREPEND vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_CURRENT_HID_SCRIPT_SOURCE_FROM_REMOTE_FILE, updateReq) }), hvue.Method("storeHIDScript", func(vm *hvue.VM, name *js.Object) { vm.Get("$q").Call("notify", "store " + name.String()) vm.Store.Call("dispatch", VUEX_ACTION_STORE_CURRENT_HID_SCRIPT_SOURCE_TO_REMOTE_FILE, name) }), hvue.Method("SendAndRun", func (vm *hvue.VM) { sourceCode := vm.Get("$store").Get("state").Get("currentHIDScriptSource").String() vm.Store.Call("dispatch", VUEX_ACTION_AND_AND_RUN_HID_SCRIPT, sourceCode) }), ) } const ( compHIDScriptTemplate = `
HIDScript editor
` compHIDScriptCodeEditorTemplate = ` ` )