github.com/EngineerKamesh/gofullstack@v0.0.0-20180609171605-d41341d7d4ee/volume3/section3/client/localstorage.go (about) 1 package main 2 3 import ( 4 "github.com/gopherjs/gopherjs/js" 5 "honnef.co/go/js/dom" 6 ) 7 8 var localStorage = js.Global.Get("localStorage") 9 var D = dom.GetWindow().Document().(dom.HTMLDocument) 10 11 func run() { 12 saveButton := D.GetElementByID("saveButton").(*dom.HTMLButtonElement) 13 saveButton.AddEventListener("click", false, func(event dom.Event) { 14 Save() 15 }) 16 17 clearAllButton := D.GetElementByID("clearAllButton").(*dom.HTMLButtonElement) 18 clearAllButton.AddEventListener("click", false, func(event dom.Event) { 19 ClearAll() 20 }) 21 22 DisplayStorageContents() 23 } 24 25 func main() { 26 27 switch readyState := D.ReadyState(); readyState { 28 case "loading": 29 D.AddEventListener("DOMContentLoaded", false, func(dom.Event) { 30 go run() 31 }) 32 case "interactive", "complete": 33 run() 34 default: 35 println("Unexpected document.ReadyState value!") 36 } 37 } 38 39 func Save() { 40 41 itemKey := D.GetElementByID("itemKey").(*dom.HTMLInputElement) 42 itemValue := D.GetElementByID("itemValue").(*dom.HTMLInputElement) 43 44 if itemKey.Value == "" { 45 return 46 } 47 48 SetKeyValuePair(itemKey.Value, itemValue.Value) 49 itemKey.Value = "" 50 itemValue.Value = "" 51 DisplayStorageContents() 52 } 53 54 func ClearAll() { 55 localStorage.Call("clear") 56 DisplayStorageContents() 57 } 58 59 func SetKeyValuePair(itemKey string, itemValue string) { 60 localStorage.Call("setItem", itemKey, itemValue) 61 } 62 63 func DisplayStorageContents() { 64 65 itemList := D.GetElementByID("itemList") 66 itemList.SetInnerHTML("") 67 68 for i := 0; i < localStorage.Length(); i++ { 69 70 itemKey := localStorage.Call("key", i) 71 itemValue := localStorage.Call("getItem", itemKey) 72 73 dtElement := D.CreateElement("dt") 74 dtElement.SetInnerHTML(itemKey.String()) 75 76 ddElement := D.CreateElement("dd") 77 ddElement.SetInnerHTML(itemValue.String()) 78 79 itemList.AppendChild(dtElement) 80 itemList.AppendChild(ddElement) 81 } 82 83 }