mirror of https://github.com/anoshenko/rui.git
				
				
				
			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; | ||||
| 	} | ||||
| 
 | ||||
| 	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 + "}"; | ||||
| } | ||||
| 
 | ||||
|  | @ -940,8 +958,8 @@ function radioButtonKeyClickEvent(element, event) { | |||
| 
 | ||||
| function editViewInputEvent(element) { | ||||
| 	var text = element.value | ||||
| 	text = text.replace(/\\/g, "\\\\") | ||||
| 	text = text.replace(/\"/g, "\\\"") | ||||
| 	text = text.replaceAll(/\\/g, "\\\\") | ||||
| 	text = text.replaceAll(/\"/g, "\\\"") | ||||
| 	var message = "textChanged{session=" + sessionID + ",id=" + element.id + ",text=\"" + text + "\"}" | ||||
| 	sendMessage(message); | ||||
| } | ||||
|  | @ -1147,7 +1165,7 @@ function loadImage(url) { | |||
| 	img.addEventListener("error", function(event) { | ||||
| 		var message = "imageError{session=" + sessionID + ",url=\"" + url + "\"";  | ||||
| 		if (event && event.message) { | ||||
| 			var text = event.message.replace(new RegExp("\"", 'g'), "\\\"") | ||||
| 			var text = event.message.replaceAll(new RegExp("\"", 'g'), "\\\"") | ||||
| 			message += ",message=\"" + text + "\"";  | ||||
| 		} | ||||
| 		sendMessage(message + "}") | ||||
|  | @ -1178,7 +1196,7 @@ function loadInlineImage(url, content) { | |||
| 	img.addEventListener("error", function(event) { | ||||
| 		var message = "imageError{session=" + sessionID + ",url=\"" + url + "\"";  | ||||
| 		if (event && event.message) { | ||||
| 			var text = event.message.replace(new RegExp("\"", 'g'), "\\\"") | ||||
| 			var text = event.message.replaceAll(new RegExp("\"", 'g'), "\\\"") | ||||
| 			message += ",message=\"" + text + "\"";  | ||||
| 		} | ||||
| 		sendMessage(message + "}") | ||||
|  | @ -1842,3 +1860,19 @@ function getCanvasContext(elementId) { | |||
| 	} | ||||
| 	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 | ||||
| 
 | ||||
| 	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 !border.setSingleBorderObject(side, node.Object()) { | ||||
| 					result = false | ||||
|  |  | |||
							
								
								
									
										8
									
								
								data.go
								
								
								
								
							
							
						
						
									
										8
									
								
								data.go
								
								
								
								
							|  | @ -18,7 +18,7 @@ type DataObject interface { | |||
| 	Tag() string | ||||
| 	PropertyCount() int | ||||
| 	Property(index int) DataNode | ||||
| 	PropertyWithTag(tag string) DataNode | ||||
| 	PropertyByTag(tag string) DataNode | ||||
| 	PropertyValue(tag string) (string, bool) | ||||
| 	PropertyObject(tag string) DataObject | ||||
| 	SetPropertyValue(tag, value string) | ||||
|  | @ -106,7 +106,7 @@ func (object *dataObject) Property(index int) DataNode { | |||
| 	return object.property[index] | ||||
| } | ||||
| 
 | ||||
| func (object *dataObject) PropertyWithTag(tag string) DataNode { | ||||
| func (object *dataObject) PropertyByTag(tag string) DataNode { | ||||
| 	if object.property != nil { | ||||
| 		for _, node := range object.property { | ||||
| 			if node.Tag() == tag { | ||||
|  | @ -118,14 +118,14 @@ func (object *dataObject) PropertyWithTag(tag string) DataNode { | |||
| } | ||||
| 
 | ||||
| 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 "", false | ||||
| } | ||||
| 
 | ||||
| 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 nil | ||||
|  |  | |||
|  | @ -270,7 +270,7 @@ func (picker *filePickerData) htmlDisabledProperties(self View, buffer *strings. | |||
| func (picker *filePickerData) handleCommand(self View, command string, data DataObject) bool { | ||||
| 	switch command { | ||||
| 	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() | ||||
| 			files := make([]FileInfo, count) | ||||
| 			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(url string) | ||||
| 
 | ||||
| 	ClientItem(key string) (string, bool) | ||||
| 	SetClientItem(key, value string) | ||||
| 	RemoveAllClientItems() | ||||
| 
 | ||||
| 	getCurrentTheme() Theme | ||||
| 	registerAnimation(props []AnimatedProperty) string | ||||
| 
 | ||||
|  | @ -183,6 +187,7 @@ type sessionData struct { | |||
| 	animationCounter int | ||||
| 	animationCSS     string | ||||
| 	updateScripts    map[string]*strings.Builder | ||||
| 	clientStorage    map[string]string | ||||
| } | ||||
| 
 | ||||
| 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.animationCSS = "" | ||||
| 	session.updateScripts = map[string]*strings.Builder{} | ||||
| 	session.clientStorage = map[string]string{} | ||||
| 
 | ||||
| 	if customTheme != "" { | ||||
| 		if theme, ok := CreateThemeFromText(customTheme); ok { | ||||
|  | @ -516,7 +522,7 @@ func (session *sessionData) handleRootSize(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() { | ||||
| 			if el.IsObject() { | ||||
| 				obj := el.Object() | ||||
|  | @ -591,6 +597,16 @@ func (session *sessionData) handleSessionInfo(params DataObject) { | |||
| 			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) { | ||||
|  | @ -610,6 +626,11 @@ func (session *sessionData) handleEvent(command string, data DataObject) { | |||
| 	case "sessionInfo": | ||||
| 		session.handleSessionInfo(data) | ||||
| 
 | ||||
| 	case "storageError": | ||||
| 		if text, ok := data.PropertyValue("error"); ok { | ||||
| 			ErrorLog(text) | ||||
| 		} | ||||
| 
 | ||||
| 	default: | ||||
| 		if viewID, ok := data.PropertyValue("id"); ok { | ||||
| 			if view := session.viewByHTMLID(viewID); view != nil { | ||||
|  | @ -641,3 +662,18 @@ func (session *sessionData) OpenURL(urlStr string) { | |||
| 	} | ||||
| 	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.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++ { | ||||
| 			if element := node.ArrayElement(i); element != nil && element.IsObject() { | ||||
| 				if obj := element.Object(); obj != nil { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue