forked from mbk-lab/rui_orig
PropertyWithTag method of DataObject renamed to PropertyByTag
This commit is contained in:
parent
d3002ced0e
commit
c31b2f9d8c
|
@ -52,6 +52,24 @@ function sessionInfo() {
|
||||||
message += ",pixel-ratio=" + pixelRatio;
|
message += ",pixel-ratio=" + pixelRatio;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (localStorage.length > 0) {
|
||||||
|
message += ",storage="
|
||||||
|
lead = "_{"
|
||||||
|
for (var i = 0; i < localStorage.length; i++) {
|
||||||
|
var key = localStorage.key(i)
|
||||||
|
var value = localStorage.getItem(key)
|
||||||
|
key = key.replaceAll(/\\/g, "\\\\")
|
||||||
|
key = key.replaceAll(/\"/g, "\\\"")
|
||||||
|
key = key.replaceAll(/\'/g, "\\\'")
|
||||||
|
value = value.replaceAll(/\\/g, "\\\\")
|
||||||
|
value = value.replaceAll(/\"/g, "\\\"")
|
||||||
|
value = value.replaceAll(/\'/g, "\\\'")
|
||||||
|
message += lead + "\"" + key + "\"=\"" + value + "\""
|
||||||
|
lead = ","
|
||||||
|
}
|
||||||
|
message += "}"
|
||||||
|
}
|
||||||
|
|
||||||
return message + "}";
|
return message + "}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -940,8 +958,8 @@ function radioButtonKeyClickEvent(element, event) {
|
||||||
|
|
||||||
function editViewInputEvent(element) {
|
function editViewInputEvent(element) {
|
||||||
var text = element.value
|
var text = element.value
|
||||||
text = text.replace(/\\/g, "\\\\")
|
text = text.replaceAll(/\\/g, "\\\\")
|
||||||
text = text.replace(/\"/g, "\\\"")
|
text = text.replaceAll(/\"/g, "\\\"")
|
||||||
var message = "textChanged{session=" + sessionID + ",id=" + element.id + ",text=\"" + text + "\"}"
|
var message = "textChanged{session=" + sessionID + ",id=" + element.id + ",text=\"" + text + "\"}"
|
||||||
sendMessage(message);
|
sendMessage(message);
|
||||||
}
|
}
|
||||||
|
@ -1147,7 +1165,7 @@ function loadImage(url) {
|
||||||
img.addEventListener("error", function(event) {
|
img.addEventListener("error", function(event) {
|
||||||
var message = "imageError{session=" + sessionID + ",url=\"" + url + "\"";
|
var message = "imageError{session=" + sessionID + ",url=\"" + url + "\"";
|
||||||
if (event && event.message) {
|
if (event && event.message) {
|
||||||
var text = event.message.replace(new RegExp("\"", 'g'), "\\\"")
|
var text = event.message.replaceAll(new RegExp("\"", 'g'), "\\\"")
|
||||||
message += ",message=\"" + text + "\"";
|
message += ",message=\"" + text + "\"";
|
||||||
}
|
}
|
||||||
sendMessage(message + "}")
|
sendMessage(message + "}")
|
||||||
|
@ -1178,7 +1196,7 @@ function loadInlineImage(url, content) {
|
||||||
img.addEventListener("error", function(event) {
|
img.addEventListener("error", function(event) {
|
||||||
var message = "imageError{session=" + sessionID + ",url=\"" + url + "\"";
|
var message = "imageError{session=" + sessionID + ",url=\"" + url + "\"";
|
||||||
if (event && event.message) {
|
if (event && event.message) {
|
||||||
var text = event.message.replace(new RegExp("\"", 'g'), "\\\"")
|
var text = event.message.replaceAll(new RegExp("\"", 'g'), "\\\"")
|
||||||
message += ",message=\"" + text + "\"";
|
message += ",message=\"" + text + "\"";
|
||||||
}
|
}
|
||||||
sendMessage(message + "}")
|
sendMessage(message + "}")
|
||||||
|
@ -1842,3 +1860,19 @@ function getCanvasContext(elementId) {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function localStorageSet(key, value) {
|
||||||
|
try {
|
||||||
|
localStorage.setItem(key, value)
|
||||||
|
} catch (err) {
|
||||||
|
sendMessage("storageError{session=" + sessionID + ", error=`" + err + "`}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function localStorageClear() {
|
||||||
|
try {
|
||||||
|
localStorage.setItem(key, value)
|
||||||
|
} catch (err) {
|
||||||
|
sendMessage("storageError{session=" + sessionID + ", error=`" + err + "`}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -286,7 +286,7 @@ func (border *borderProperty) setBorderObject(obj DataObject) bool {
|
||||||
result := true
|
result := true
|
||||||
|
|
||||||
for _, side := range []string{Top, Right, Bottom, Left} {
|
for _, side := range []string{Top, Right, Bottom, Left} {
|
||||||
if node := obj.PropertyWithTag(side); node != nil {
|
if node := obj.PropertyByTag(side); node != nil {
|
||||||
if node.Type() == ObjectNode {
|
if node.Type() == ObjectNode {
|
||||||
if !border.setSingleBorderObject(side, node.Object()) {
|
if !border.setSingleBorderObject(side, node.Object()) {
|
||||||
result = false
|
result = false
|
||||||
|
|
8
data.go
8
data.go
|
@ -18,7 +18,7 @@ type DataObject interface {
|
||||||
Tag() string
|
Tag() string
|
||||||
PropertyCount() int
|
PropertyCount() int
|
||||||
Property(index int) DataNode
|
Property(index int) DataNode
|
||||||
PropertyWithTag(tag string) DataNode
|
PropertyByTag(tag string) DataNode
|
||||||
PropertyValue(tag string) (string, bool)
|
PropertyValue(tag string) (string, bool)
|
||||||
PropertyObject(tag string) DataObject
|
PropertyObject(tag string) DataObject
|
||||||
SetPropertyValue(tag, value string)
|
SetPropertyValue(tag, value string)
|
||||||
|
@ -106,7 +106,7 @@ func (object *dataObject) Property(index int) DataNode {
|
||||||
return object.property[index]
|
return object.property[index]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (object *dataObject) PropertyWithTag(tag string) DataNode {
|
func (object *dataObject) PropertyByTag(tag string) DataNode {
|
||||||
if object.property != nil {
|
if object.property != nil {
|
||||||
for _, node := range object.property {
|
for _, node := range object.property {
|
||||||
if node.Tag() == tag {
|
if node.Tag() == tag {
|
||||||
|
@ -118,14 +118,14 @@ func (object *dataObject) PropertyWithTag(tag string) DataNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (object *dataObject) PropertyValue(tag string) (string, bool) {
|
func (object *dataObject) PropertyValue(tag string) (string, bool) {
|
||||||
if node := object.PropertyWithTag(tag); node != nil && node.Type() == TextNode {
|
if node := object.PropertyByTag(tag); node != nil && node.Type() == TextNode {
|
||||||
return node.Text(), true
|
return node.Text(), true
|
||||||
}
|
}
|
||||||
return "", false
|
return "", false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (object *dataObject) PropertyObject(tag string) DataObject {
|
func (object *dataObject) PropertyObject(tag string) DataObject {
|
||||||
if node := object.PropertyWithTag(tag); node != nil && node.Type() == ObjectNode {
|
if node := object.PropertyByTag(tag); node != nil && node.Type() == ObjectNode {
|
||||||
return node.Object()
|
return node.Object()
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -270,7 +270,7 @@ func (picker *filePickerData) htmlDisabledProperties(self View, buffer *strings.
|
||||||
func (picker *filePickerData) handleCommand(self View, command string, data DataObject) bool {
|
func (picker *filePickerData) handleCommand(self View, command string, data DataObject) bool {
|
||||||
switch command {
|
switch command {
|
||||||
case "fileSelected":
|
case "fileSelected":
|
||||||
if node := data.PropertyWithTag("files"); node != nil && node.Type() == ArrayNode {
|
if node := data.PropertyByTag("files"); node != nil && node.Type() == ArrayNode {
|
||||||
count := node.ArraySize()
|
count := node.ArraySize()
|
||||||
files := make([]FileInfo, count)
|
files := make([]FileInfo, count)
|
||||||
for i := 0; i < count; i++ {
|
for i := 0; i < count; i++ {
|
||||||
|
|
38
session.go
38
session.go
|
@ -100,6 +100,10 @@ type Session interface {
|
||||||
// OpenURL opens the url in the new browser tab
|
// OpenURL opens the url in the new browser tab
|
||||||
OpenURL(url string)
|
OpenURL(url string)
|
||||||
|
|
||||||
|
ClientItem(key string) (string, bool)
|
||||||
|
SetClientItem(key, value string)
|
||||||
|
RemoveAllClientItems()
|
||||||
|
|
||||||
getCurrentTheme() Theme
|
getCurrentTheme() Theme
|
||||||
registerAnimation(props []AnimatedProperty) string
|
registerAnimation(props []AnimatedProperty) string
|
||||||
|
|
||||||
|
@ -183,6 +187,7 @@ type sessionData struct {
|
||||||
animationCounter int
|
animationCounter int
|
||||||
animationCSS string
|
animationCSS string
|
||||||
updateScripts map[string]*strings.Builder
|
updateScripts map[string]*strings.Builder
|
||||||
|
clientStorage map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSession(app Application, id int, customTheme string, params DataObject) Session {
|
func newSession(app Application, id int, customTheme string, params DataObject) Session {
|
||||||
|
@ -199,6 +204,7 @@ func newSession(app Application, id int, customTheme string, params DataObject)
|
||||||
session.animationCounter = 0
|
session.animationCounter = 0
|
||||||
session.animationCSS = ""
|
session.animationCSS = ""
|
||||||
session.updateScripts = map[string]*strings.Builder{}
|
session.updateScripts = map[string]*strings.Builder{}
|
||||||
|
session.clientStorage = map[string]string{}
|
||||||
|
|
||||||
if customTheme != "" {
|
if customTheme != "" {
|
||||||
if theme, ok := CreateThemeFromText(customTheme); ok {
|
if theme, ok := CreateThemeFromText(customTheme); ok {
|
||||||
|
@ -516,7 +522,7 @@ func (session *sessionData) handleRootSize(data DataObject) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (session *sessionData) handleResize(data DataObject) {
|
func (session *sessionData) handleResize(data DataObject) {
|
||||||
if node := data.PropertyWithTag("views"); node != nil && node.Type() == ArrayNode {
|
if node := data.PropertyByTag("views"); node != nil && node.Type() == ArrayNode {
|
||||||
for _, el := range node.ArrayElements() {
|
for _, el := range node.ArrayElements() {
|
||||||
if el.IsObject() {
|
if el.IsObject() {
|
||||||
obj := el.Object()
|
obj := el.Object()
|
||||||
|
@ -591,6 +597,16 @@ func (session *sessionData) handleSessionInfo(params DataObject) {
|
||||||
session.pixelRatio = f
|
session.pixelRatio = f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if node := params.PropertyByTag("storage"); node != nil && node.Type() == ObjectNode {
|
||||||
|
if obj := node.Object(); obj != nil {
|
||||||
|
for i := 0; i < obj.PropertyCount(); i++ {
|
||||||
|
if element := obj.Property(i); element.Type() == TextNode {
|
||||||
|
session.clientStorage[element.Tag()] = element.Text()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (session *sessionData) handleEvent(command string, data DataObject) {
|
func (session *sessionData) handleEvent(command string, data DataObject) {
|
||||||
|
@ -610,6 +626,11 @@ func (session *sessionData) handleEvent(command string, data DataObject) {
|
||||||
case "sessionInfo":
|
case "sessionInfo":
|
||||||
session.handleSessionInfo(data)
|
session.handleSessionInfo(data)
|
||||||
|
|
||||||
|
case "storageError":
|
||||||
|
if text, ok := data.PropertyValue("error"); ok {
|
||||||
|
ErrorLog(text)
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if viewID, ok := data.PropertyValue("id"); ok {
|
if viewID, ok := data.PropertyValue("id"); ok {
|
||||||
if view := session.viewByHTMLID(viewID); view != nil {
|
if view := session.viewByHTMLID(viewID); view != nil {
|
||||||
|
@ -641,3 +662,18 @@ func (session *sessionData) OpenURL(urlStr string) {
|
||||||
}
|
}
|
||||||
session.callFunc("openURL", urlStr)
|
session.callFunc("openURL", urlStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (session *sessionData) ClientItem(key string) (string, bool) {
|
||||||
|
value, ok := session.clientStorage[key]
|
||||||
|
return value, ok
|
||||||
|
}
|
||||||
|
|
||||||
|
func (session *sessionData) SetClientItem(key, value string) {
|
||||||
|
session.clientStorage[key] = value
|
||||||
|
session.bridge.callFunc("localStorageSet", key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (session *sessionData) RemoveAllClientItems() {
|
||||||
|
session.clientStorage = map[string]string{}
|
||||||
|
session.bridge.callFunc("localStorageClear")
|
||||||
|
}
|
||||||
|
|
|
@ -140,7 +140,7 @@ func (event *TouchEvent) init(data DataObject) {
|
||||||
|
|
||||||
event.Touches = []Touch{}
|
event.Touches = []Touch{}
|
||||||
event.TimeStamp = getTimeStamp(data)
|
event.TimeStamp = getTimeStamp(data)
|
||||||
if node := data.PropertyWithTag("touches"); node != nil && node.Type() == ArrayNode {
|
if node := data.PropertyByTag("touches"); node != nil && node.Type() == ArrayNode {
|
||||||
for i := 0; i < node.ArraySize(); i++ {
|
for i := 0; i < node.ArraySize(); i++ {
|
||||||
if element := node.ArrayElement(i); element != nil && element.IsObject() {
|
if element := node.ArrayElement(i); element != nil && element.IsObject() {
|
||||||
if obj := element.Object(); obj != nil {
|
if obj := element.Object(); obj != nil {
|
||||||
|
|
Loading…
Reference in New Issue