mirror of https://github.com/anoshenko/rui.git
				
				
				
			Added "drop-effect-allowed" property
This commit is contained in:
		
							parent
							
								
									c9744168ba
								
							
						
					
					
						commit
						b76e3e56d8
					
				| 
						 | 
					@ -2144,10 +2144,10 @@ function dragAndDropEvent(element, event, tag) {
 | 
				
			||||||
	//event.preventDefault()
 | 
						//event.preventDefault()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let message = tag + "{session=" + sessionID + ",id=" + element.id + mouseEventData(element, event);
 | 
						let message = tag + "{session=" + sessionID + ",id=" + element.id + mouseEventData(element, event);
 | 
				
			||||||
 | 
						if (event.target) {
 | 
				
			||||||
 | 
							message += ",target=" + event.target.id;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if (event.dataTransfer) {
 | 
						if (event.dataTransfer) {
 | 
				
			||||||
		if (event.target) {
 | 
					 | 
				
			||||||
			message += ",target=" + event.target.id;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		let dataText = ""
 | 
							let dataText = ""
 | 
				
			||||||
		for (const item of event.dataTransfer.items) {
 | 
							for (const item of event.dataTransfer.items) {
 | 
				
			||||||
			const data = event.dataTransfer.getData(item.type);
 | 
								const data = event.dataTransfer.getData(item.type);
 | 
				
			||||||
| 
						 | 
					@ -2161,7 +2161,25 @@ function dragAndDropEvent(element, event, tag) {
 | 
				
			||||||
		if (dataText != "") {
 | 
							if (dataText != "") {
 | 
				
			||||||
			message += ',data="' + dataText + '"';
 | 
								message += ',data="' + dataText + '"';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							dataText = ""
 | 
				
			||||||
 | 
							for (const file of event.dataTransfer.files) {
 | 
				
			||||||
 | 
								if (dataText != "") {
 | 
				
			||||||
 | 
									dataText += ";";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								dataText += file.name;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (dataText != "") {
 | 
				
			||||||
 | 
								message += ',files="' + dataText + '"';
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (event.dataTransfer.effectAllowed && event.dataTransfer.effectAllowed != "uninitialized") {
 | 
				
			||||||
 | 
								message += ',effect-allowed="' + event.dataTransfer.effectAllowed + '"';
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (event.dataTransfer.dropEffect) {
 | 
				
			||||||
 | 
								message += ',drop-effect="' + event.dataTransfer.dropEffect + '"';
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	message += "}";
 | 
						message += "}";
 | 
				
			||||||
	sendMessage(message);
 | 
						sendMessage(message);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2193,14 +2211,12 @@ function dragStartEvent(element, event) {
 | 
				
			||||||
		let img = new Image();
 | 
							let img = new Image();
 | 
				
			||||||
  		img.src = image;
 | 
					  		img.src = image;
 | 
				
			||||||
		event.dataTransfer.setDragImage(img, x, y);
 | 
							event.dataTransfer.setDragImage(img, x, y);
 | 
				
			||||||
 | 
					 | 
				
			||||||
		let effect = element.getAttribute("data-drag-effect");
 | 
					 | 
				
			||||||
		if (effect) {
 | 
					 | 
				
			||||||
			event.dataTransfer.effectAllowed = effect;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// TODO drag effect
 | 
						let allowed = element.getAttribute("data-drop-effect-allowed");
 | 
				
			||||||
 | 
						if (allowed) {
 | 
				
			||||||
 | 
							event.dataTransfer.effectAllowed = allowed;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dragAndDropEvent(element, event, "drag-start-event");
 | 
						dragAndDropEvent(element, event, "drag-start-event");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2210,6 +2226,11 @@ function dragEndEvent(element, event) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function dragEnterEvent(element, event) {
 | 
					function dragEnterEvent(element, event) {
 | 
				
			||||||
 | 
						let effect = element.getAttribute("data-drop-effect");
 | 
				
			||||||
 | 
						if (effect) {
 | 
				
			||||||
 | 
							event.dataTransfer.dropEffect = effect;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dragAndDropEvent(element, event, "drag-enter-event")
 | 
						dragAndDropEvent(element, event, "drag-enter-event")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										322
									
								
								dragAndDrop.go
								
								
								
								
							
							
						
						
									
										322
									
								
								dragAndDrop.go
								
								
								
								
							| 
						 | 
					@ -39,7 +39,23 @@ const (
 | 
				
			||||||
	// Supported types: float, int, string.
 | 
						// Supported types: float, int, string.
 | 
				
			||||||
	DragImageYOffset PropertyName = "drag-image-y-offset"
 | 
						DragImageYOffset PropertyName = "drag-image-y-offset"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DragEffect is the constant for "drag-effect" property tag.
 | 
						// DropEffect is the constant for "drag-effect" property tag.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Used by View.
 | 
				
			||||||
 | 
						// Controls the feedback (typically visual) the user is given during a drag and drop operation.
 | 
				
			||||||
 | 
						// It will affect which cursor is displayed while dragging. For example, when the user hovers over a target drop element,
 | 
				
			||||||
 | 
						// the browser's cursor may indicate which type of operation will occur.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Supported types: int, string.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Values:
 | 
				
			||||||
 | 
						//   - 0 (DropEffectUndefined) or "undefined" - The property value is not defined (defaut value).
 | 
				
			||||||
 | 
						//   - 1 (DropEffectCopy) or "copy" - A copy of the source item may be made at the new location.
 | 
				
			||||||
 | 
						//   - 2 (DropEffectMove) or "move" - An item may be moved to a new location.
 | 
				
			||||||
 | 
						//   - 4 (DropEffectLink) or "link" - A link may be established to the source at the new location.
 | 
				
			||||||
 | 
						DropEffect PropertyName = "drag-effect"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// DropEffectAllowed is the constant for "drop-effect-allowed" property tag.
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
	// Used by View.
 | 
						// Used by View.
 | 
				
			||||||
	// Specifies the effect that is allowed for a drag operation.
 | 
						// Specifies the effect that is allowed for a drag operation.
 | 
				
			||||||
| 
						 | 
					@ -52,15 +68,15 @@ const (
 | 
				
			||||||
	// Supported types: int, string.
 | 
						// Supported types: int, string.
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
	// Values:
 | 
						// Values:
 | 
				
			||||||
	//   - 0 (DragEffectAll) or "all" - All operations are permitted (defaut value).
 | 
						//   - 0 (DropEffectUndefined) or "undefined" - The property value is not defined (defaut value). Equivalent to DropEffectAll
 | 
				
			||||||
	//   - 1 (DragEffectCopy) or "copy" - A copy of the source item may be made at the new location.
 | 
						//   - 1 (DropEffectCopy) or "copy" - A copy of the source item may be made at the new location.
 | 
				
			||||||
	//   - 2 (DragEffectMove) or "move" - An item may be moved to a new location.
 | 
						//   - 2 (DropEffectMove) or "move" - An item may be moved to a new location.
 | 
				
			||||||
	//   - 3 (DragEffectLink) or "link" - A link may be established to the source at the new location.
 | 
						//   - 3 (DropEffectLink) or "link" - A link may be established to the source at the new location.
 | 
				
			||||||
	//   - 4 (DragEffectCopyMove) or "copyMove" - A copy or move operation is permitted.
 | 
						//   - 4 (DropEffectCopyMove) or "copy|move" - A copy or move operation is permitted.
 | 
				
			||||||
	//   - 5 (DragEffectCopyLink) or "copyLink" - A copy or link operation is permitted.
 | 
						//   - 5 (DropEffectCopyLink) or "copy|link" - A copy or link operation is permitted.
 | 
				
			||||||
	//   - 6 (DragEffectLinkMove) or "linkMove" - A link or move operation is permitted.
 | 
						//   - 6 (DropEffectLinkMove) or "link|move" - A link or move operation is permitted.
 | 
				
			||||||
	//   - 7 (DragEffectNone) or "none" - The item may not be dropped.
 | 
						//   - 7 (DropEffectAll) or "all" or "copy|move|link" - All operations are permitted.
 | 
				
			||||||
	DragEffect PropertyName = "drag-effect"
 | 
						DropEffectAllowed PropertyName = "drag-effect-allowed"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DragStartEvent is the constant for "drag-start-event" property tag.
 | 
						// DragStartEvent is the constant for "drag-start-event" property tag.
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
| 
						 | 
					@ -116,36 +132,42 @@ const (
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
	DropEvent PropertyName = "drop-event"
 | 
						DropEvent PropertyName = "drop-event"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DragEffectAll - the value of the "drag-effect" property: all operations (copy, move, and link) are permitted (defaut value).
 | 
						// DropEffectUndefined - the value of the "drop-effect" and "drop-effect-allowed" properties: the value is not defined (default value).
 | 
				
			||||||
	DragEffectAll = 0
 | 
						DropEffectUndefined = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DragEffectCopy - the value of the "drag-effect" property: a copy of the source item may be made at the new location.
 | 
						// DropEffectNone - the value of the DropEffect field of the DragEvent struct: the item may not be dropped.
 | 
				
			||||||
	DragEffectCopy = 1
 | 
						DropEffectNone = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DragEffectMove - the value of the "drag-effect" property: an item may be moved to a new location.
 | 
						// DropEffectCopy - the value of the "drop-effect" and "drop-effect-allowed" properties: a copy of the source item may be made at the new location.
 | 
				
			||||||
	DragEffectMove = 2
 | 
						DropEffectCopy = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DragEffectLink - the value of the "drag-effect" property: a link may be established to the source at the new location.
 | 
						// DropEffectMove - the value of the "drop-effect" and "drop-effect-allowed" properties: an item may be moved to a new location.
 | 
				
			||||||
	DragEffectLink = 3
 | 
						DropEffectMove = 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DragEffectCopyMove - the value of the "drag-effect" property: a copy or move operation is permitted.
 | 
						// DropEffectLink - the value of the "drop-effect" and "drop-effect-allowed" properties: a link may be established to the source at the new location.
 | 
				
			||||||
	DragEffectCopyMove = 4
 | 
						DropEffectLink = 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DragEffectCopyLink - the value of the "drag-effect" property: a copy or link operation is permitted.
 | 
						// DropEffectCopyMove - the value of the "drop-effect-allowed" property: a copy or move operation is permitted.
 | 
				
			||||||
	DragEffectCopyLink = 5
 | 
						DropEffectCopyMove = DropEffectCopy + DropEffectMove
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DragEffectLinkMove - the value of the "drag-effect" property: a link or move operation is permitted.
 | 
						// DropEffectCopyLink - the value of the "drop-effect-allowed" property: a copy or link operation is permitted.
 | 
				
			||||||
	DragEffectLinkMove = 6
 | 
						DropEffectCopyLink = DropEffectCopy + DropEffectLink
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DragEffectNone - the value of the "drag-effect" property: the item may not be dropped.
 | 
						// DropEffectLinkMove - the value of the "drop-effect-allowed" property: a link or move operation is permitted.
 | 
				
			||||||
	DragEffectNone = 7
 | 
						DropEffectLinkMove = DropEffectLink + DropEffectMove
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// DropEffectAll - the value of the "drop-effect-allowed" property: all operations (copy, move, and link) are permitted (defaut value).
 | 
				
			||||||
 | 
						DropEffectAll = DropEffectCopy + DropEffectMove + DropEffectLink
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MouseEvent represent a mouse event
 | 
					// MouseEvent represent a mouse event
 | 
				
			||||||
type DragAndDropEvent struct {
 | 
					type DragAndDropEvent struct {
 | 
				
			||||||
	MouseEvent
 | 
						MouseEvent
 | 
				
			||||||
	Data   map[string]string
 | 
						Data          map[string]string
 | 
				
			||||||
	Target View
 | 
						Files         string
 | 
				
			||||||
 | 
						Target        View
 | 
				
			||||||
 | 
						EffectAllowed int
 | 
				
			||||||
 | 
						DropEffect    int
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (event *DragAndDropEvent) init(session Session, data DataObject) {
 | 
					func (event *DragAndDropEvent) init(session Session, data DataObject) {
 | 
				
			||||||
| 
						 | 
					@ -175,6 +197,136 @@ func (event *DragAndDropEvent) init(session Session, data DataObject) {
 | 
				
			||||||
	if targetId, ok := data.PropertyValue("target"); ok {
 | 
						if targetId, ok := data.PropertyValue("target"); ok {
 | 
				
			||||||
		event.Target = session.viewByHTMLID(targetId)
 | 
							event.Target = session.viewByHTMLID(targetId)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if effect, ok := data.PropertyValue("effect-allowed"); ok {
 | 
				
			||||||
 | 
							for i, value := range []string{"undefined", "copy", "move", "copyMove", "link", "copyLink", "linkMove", "all"} {
 | 
				
			||||||
 | 
								if value == effect {
 | 
				
			||||||
 | 
									event.EffectAllowed = i
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if effect, ok := data.PropertyValue("drop-effect"); ok && effect != "" {
 | 
				
			||||||
 | 
							for i, value := range []string{"none", "copy", "move", "", "link"} {
 | 
				
			||||||
 | 
								if value == effect {
 | 
				
			||||||
 | 
									event.DropEffect = i
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// TODO files
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func stringToDropEffect(text string) (int, bool) {
 | 
				
			||||||
 | 
						text = strings.Trim(text, " \t\n")
 | 
				
			||||||
 | 
						if n, ok := enumStringToInt(text, []string{"", "copy", "move", "", "link"}, false); ok {
 | 
				
			||||||
 | 
							switch n {
 | 
				
			||||||
 | 
							case DropEffectUndefined, DropEffectCopy, DropEffectMove, DropEffectLink:
 | 
				
			||||||
 | 
								return n, true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0, false
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (view *viewData) setDropEffect(value any) []PropertyName {
 | 
				
			||||||
 | 
						if !setSimpleProperty(view, DropEffect, value) {
 | 
				
			||||||
 | 
							if text, ok := value.(string); ok {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if n, ok := stringToDropEffect(text); ok {
 | 
				
			||||||
 | 
									if n == DropEffectUndefined {
 | 
				
			||||||
 | 
										view.setRaw(DropEffect, nil)
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										view.setRaw(DropEffect, n)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									invalidPropertyValue(DropEffect, value)
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							} else if i, ok := isInt(value); ok {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								switch i {
 | 
				
			||||||
 | 
								case DropEffectUndefined:
 | 
				
			||||||
 | 
									view.setRaw(DropEffect, nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								case DropEffectCopy, DropEffectMove, DropEffectLink:
 | 
				
			||||||
 | 
									view.setRaw(DropEffect, i)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									invalidPropertyValue(DropEffect, value)
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								notCompatibleType(DropEffect, value)
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return []PropertyName{DropEffect}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func stringToDropEffectAllowed(text string) (int, bool) {
 | 
				
			||||||
 | 
						if strings.Contains(text, "|") {
 | 
				
			||||||
 | 
							elements := strings.Split(text, "|")
 | 
				
			||||||
 | 
							result := 0
 | 
				
			||||||
 | 
							for _, element := range elements {
 | 
				
			||||||
 | 
								if n, ok := stringToDropEffect(element); ok && n != DropEffectUndefined {
 | 
				
			||||||
 | 
									result |= n
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									return 0, false
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return result, true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						text = strings.Trim(text, " \t\n")
 | 
				
			||||||
 | 
						if text != "" {
 | 
				
			||||||
 | 
							if n, ok := enumStringToInt(text, []string{"undefined", "copy", "move", "", "link", "", "", "all"}, false); ok {
 | 
				
			||||||
 | 
								return n, true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0, false
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (view *viewData) setDropEffectAllowed(value any) []PropertyName {
 | 
				
			||||||
 | 
						if !setSimpleProperty(view, DropEffectAllowed, value) {
 | 
				
			||||||
 | 
							if text, ok := value.(string); ok {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if n, ok := stringToDropEffectAllowed(text); ok {
 | 
				
			||||||
 | 
									if n == DropEffectUndefined {
 | 
				
			||||||
 | 
										view.setRaw(DropEffectAllowed, nil)
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										view.setRaw(DropEffectAllowed, n)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									invalidPropertyValue(DropEffectAllowed, value)
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								n, ok := isInt(value)
 | 
				
			||||||
 | 
								if !ok {
 | 
				
			||||||
 | 
									notCompatibleType(DropEffectAllowed, value)
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if n == DropEffectUndefined {
 | 
				
			||||||
 | 
									view.setRaw(DropEffectAllowed, nil)
 | 
				
			||||||
 | 
								} else if n > DropEffectUndefined && n <= DropEffectAll {
 | 
				
			||||||
 | 
									view.setRaw(DropEffectAllowed, n)
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									notCompatibleType(DropEffectAllowed, value)
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return []PropertyName{DropEffectAllowed}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func handleDragAndDropEvents(view View, tag PropertyName, data DataObject) {
 | 
					func handleDragAndDropEvents(view View, tag PropertyName, data DataObject) {
 | 
				
			||||||
| 
						 | 
					@ -227,7 +379,26 @@ func dragAndDropHtml(view View, buffer *strings.Builder) {
 | 
				
			||||||
		buffer.WriteString(` ondragstart="dragStartEvent(this, event)" `)
 | 
							buffer.WriteString(` ondragstart="dragStartEvent(this, event)" `)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	viewEventsHtml[DragAndDropEvent](view, []PropertyName{DragEndEvent, DragEnterEvent, DragLeaveEvent}, buffer)
 | 
						enterEvent := false
 | 
				
			||||||
 | 
						switch GetDropEffect(view) {
 | 
				
			||||||
 | 
						case DropEffectCopy:
 | 
				
			||||||
 | 
							buffer.WriteString(` data-drop-effect="copy" ondragenter="dragEnterEvent(this, event)"`)
 | 
				
			||||||
 | 
							enterEvent = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DropEffectMove:
 | 
				
			||||||
 | 
							buffer.WriteString(` data-drop-effect="move" ondragenter="dragEnterEvent(this, event)"`)
 | 
				
			||||||
 | 
							enterEvent = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DropEffectLink:
 | 
				
			||||||
 | 
							buffer.WriteString(` data-drop-effect="link" ondragenter="dragEnterEvent(this, event)"`)
 | 
				
			||||||
 | 
							enterEvent = true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if enterEvent {
 | 
				
			||||||
 | 
							viewEventsHtml[DragAndDropEvent](view, []PropertyName{DragEndEvent, DragLeaveEvent}, buffer)
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							viewEventsHtml[DragAndDropEvent](view, []PropertyName{DragEndEvent, DragEnterEvent, DragLeaveEvent}, buffer)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	session := view.Session()
 | 
						session := view.Session()
 | 
				
			||||||
	if img, ok := stringProperty(view, DragImage, session); ok && img != "" {
 | 
						if img, ok := stringProperty(view, DragImage, session); ok && img != "" {
 | 
				
			||||||
| 
						 | 
					@ -257,9 +428,9 @@ func dragAndDropHtml(view View, buffer *strings.Builder) {
 | 
				
			||||||
		buffer.WriteString(`" `)
 | 
							buffer.WriteString(`" `)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	effects := enumProperties[DragEffect].cssValues
 | 
						effects := []string{"undifined", "copy", "move", "copyMove", "link", "copyLink", "linkMove", "all"}
 | 
				
			||||||
	if n := GetDragEffect(view); n > 0 && n < len(effects) {
 | 
						if n := GetDropEffectAllowed(view); n > 0 && n < len(effects) {
 | 
				
			||||||
		buffer.WriteString(` data-drag-effect="`)
 | 
							buffer.WriteString(` data-drop-effect-allowed="`)
 | 
				
			||||||
		buffer.WriteString(effects[n])
 | 
							buffer.WriteString(effects[n])
 | 
				
			||||||
		buffer.WriteString(`" `)
 | 
							buffer.WriteString(`" `)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -326,21 +497,84 @@ func GetDragImageYOffset(view View, subviewID ...string) float64 {
 | 
				
			||||||
	return floatStyledProperty(view, subviewID, DragImageYOffset, 0)
 | 
						return floatStyledProperty(view, subviewID, DragImageYOffset, 0)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetDragEffect returns the effect that is allowed for a drag operation.
 | 
					// GetDropEffect returns the effect that is allowed for a drag operation.
 | 
				
			||||||
 | 
					// Controls the feedback (typically visual) the user is given during a drag and drop operation.
 | 
				
			||||||
 | 
					// It will affect which cursor is displayed while dragging.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Returns one of next values:
 | 
				
			||||||
 | 
					//   - 0 (DropEffectUndefined) - The value is not defined (all operations are permitted).
 | 
				
			||||||
 | 
					//   - 1 (DropEffectCopy) - A copy of the source item may be made at the new location.
 | 
				
			||||||
 | 
					//   - 2 (DropEffectMove) - An item may be moved to a new location.
 | 
				
			||||||
 | 
					//   - 4 (DropEffectLink) - A link may be established to the source at the new location.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | 
				
			||||||
 | 
					func GetDropEffect(view View, subviewID ...string) int {
 | 
				
			||||||
 | 
						if view = getSubview(view, subviewID); view != nil {
 | 
				
			||||||
 | 
							value := view.getRaw(DropEffect)
 | 
				
			||||||
 | 
							if value == nil {
 | 
				
			||||||
 | 
								value = valueFromStyle(view, DropEffect)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if value != nil {
 | 
				
			||||||
 | 
								switch value := value.(type) {
 | 
				
			||||||
 | 
								case int:
 | 
				
			||||||
 | 
									return value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								case string:
 | 
				
			||||||
 | 
									if value, ok := view.Session().resolveConstants(value); ok {
 | 
				
			||||||
 | 
										if n, ok := stringToDropEffect(value); ok {
 | 
				
			||||||
 | 
											return n
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									return DropEffectUndefined
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return DropEffectUndefined
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GetDropEffectAllowed returns the effect that is allowed for a drag operation.
 | 
				
			||||||
// The copy operation is used to indicate that the data being dragged will be copied from its present location to the drop location.
 | 
					// The copy operation is used to indicate that the data being dragged will be copied from its present location to the drop location.
 | 
				
			||||||
// The move operation is used to indicate that the data being dragged will be moved,
 | 
					// The move operation is used to indicate that the data being dragged will be moved,
 | 
				
			||||||
// and the link operation is used to indicate that some form of relationship
 | 
					// and the link operation is used to indicate that some form of relationship
 | 
				
			||||||
// or connection will be created between the source and drop locations.. Returns one of next values:
 | 
					// or connection will be created between the source and drop locations.
 | 
				
			||||||
//   - 0 (DragEffectAll) or "all" - All operations are permitted (defaut value).
 | 
					//
 | 
				
			||||||
//   - 1 (DragEffectCopy) or "copy" - A copy of the source item may be made at the new location.
 | 
					// Returns one of next values:
 | 
				
			||||||
//   - 2 (DragEffectMove) or "move" - An item may be moved to a new location.
 | 
					//   - 0 (DropEffectUndefined) - The value is not defined (all operations are permitted).
 | 
				
			||||||
//   - 3 (DragEffectLink) or "link" - A link may be established to the source at the new location.
 | 
					//   - 1 (DropEffectCopy) - A copy of the source item may be made at the new location.
 | 
				
			||||||
//   - 4 (DragEffectCopyMove) or "copyMove" - A copy or move operation is permitted.
 | 
					//   - 2 (DropEffectMove) - An item may be moved to a new location.
 | 
				
			||||||
//   - 5 (DragEffectCopyLink) or "copyLink" - A copy or link operation is permitted.
 | 
					//   - 4 (DropEffectLink) - A link may be established to the source at the new location.
 | 
				
			||||||
//   - 6 (DragEffectLinkMove) or "linkMove" - A link or move operation is permitted.
 | 
					//   - 3 (DropEffectCopyMove) - A copy or move operation is permitted.
 | 
				
			||||||
//   - 7 (DragEffectNone) or "none" - The item may not be dropped.
 | 
					//   - 5 (DropEffectCopyLink) - A copy or link operation is permitted.
 | 
				
			||||||
 | 
					//   - 6 (DropEffectLinkMove) - A link or move operation is permitted.
 | 
				
			||||||
 | 
					//   - 7 (DropEffectAll) - All operations are permitted.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | 
					// If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | 
				
			||||||
func GetDragEffect(view View, subviewID ...string) int {
 | 
					func GetDropEffectAllowed(view View, subviewID ...string) int {
 | 
				
			||||||
	return enumStyledProperty(view, subviewID, DragEffect, DragEffectAll, true)
 | 
						if view = getSubview(view, subviewID); view != nil {
 | 
				
			||||||
 | 
							value := view.getRaw(DropEffectAllowed)
 | 
				
			||||||
 | 
							if value == nil {
 | 
				
			||||||
 | 
								value = valueFromStyle(view, DropEffectAllowed)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if value != nil {
 | 
				
			||||||
 | 
								switch value := value.(type) {
 | 
				
			||||||
 | 
								case int:
 | 
				
			||||||
 | 
									return value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								case string:
 | 
				
			||||||
 | 
									if value, ok := view.Session().resolveConstants(value); ok {
 | 
				
			||||||
 | 
										if n, ok := stringToDropEffectAllowed(value); ok {
 | 
				
			||||||
 | 
											return n
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									return DropEffectUndefined
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return DropEffectUndefined
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -261,9 +261,9 @@ func (edit *editViewData) AppendText(text string) {
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		edit.setRaw(Text, text)
 | 
							edit.Set(Text, text)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		edit.setRaw(Text, GetText(edit)+text)
 | 
							edit.Set(Text, GetText(edit)+text)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -496,11 +496,6 @@ var enumProperties = map[PropertyName]enumPropertyData{
 | 
				
			||||||
		string(ColumnFill),
 | 
							string(ColumnFill),
 | 
				
			||||||
		[]string{"balance", "auto"},
 | 
							[]string{"balance", "auto"},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	DragEffect: {
 | 
					 | 
				
			||||||
		[]string{"all", "copy", "move", "link", "copyMove", "copyLink", "linkMove", "none"},
 | 
					 | 
				
			||||||
		"",
 | 
					 | 
				
			||||||
		[]string{"all", "copy", "move", "link", "copyMove", "copyLink", "linkMove", "none"},
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func notCompatibleType(tag PropertyName, value any) {
 | 
					func notCompatibleType(tag PropertyName, value any) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										73
									
								
								view.go
								
								
								
								
							
							
						
						
									
										73
									
								
								view.go
								
								
								
								
							| 
						 | 
					@ -479,6 +479,11 @@ func (view *viewData) setFunc(tag PropertyName, value any) []PropertyName {
 | 
				
			||||||
	case DragStartEvent, DragEndEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, DropEvent:
 | 
						case DragStartEvent, DragEndEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, DropEvent:
 | 
				
			||||||
		return setOneArgEventListener[View, DragAndDropEvent](view, tag, value)
 | 
							return setOneArgEventListener[View, DragAndDropEvent](view, tag, value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DropEffect:
 | 
				
			||||||
 | 
							return view.setDropEffect(value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DropEffectAllowed:
 | 
				
			||||||
 | 
							return view.setDropEffectAllowed(value)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return viewStyleSet(view, tag, value)
 | 
						return viewStyleSet(view, tag, value)
 | 
				
			||||||
| 
						 | 
					@ -509,16 +514,16 @@ func (view *viewData) propertyChanged(tag PropertyName) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch tag {
 | 
						switch tag {
 | 
				
			||||||
	case TabIndex:
 | 
						case TabIndex:
 | 
				
			||||||
		if value, ok := intProperty(view, TabIndex, view.Session(), 0); ok {
 | 
							if value, ok := intProperty(view, TabIndex, session, 0); ok {
 | 
				
			||||||
			session.updateProperty(view.htmlID(), "tabindex", strconv.Itoa(value))
 | 
								session.updateProperty(htmlID, "tabindex", strconv.Itoa(value))
 | 
				
			||||||
		} else if view.Focusable() {
 | 
							} else if view.Focusable() {
 | 
				
			||||||
			session.updateProperty(view.htmlID(), "tabindex", "0")
 | 
								session.updateProperty(htmlID, "tabindex", "0")
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			session.updateProperty(view.htmlID(), "tabindex", "-1")
 | 
								session.updateProperty(htmlID, "tabindex", "-1")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case Style, StyleDisabled:
 | 
						case Style, StyleDisabled:
 | 
				
			||||||
		session.updateProperty(view.htmlID(), "class", view.htmlClass(IsDisabled(view)))
 | 
							session.updateProperty(htmlID, "class", view.htmlClass(IsDisabled(view)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case Disabled:
 | 
						case Disabled:
 | 
				
			||||||
		tabIndex := GetTabIndex(view, htmlID)
 | 
							tabIndex := GetTabIndex(view, htmlID)
 | 
				
			||||||
| 
						 | 
					@ -775,7 +780,7 @@ func (view *viewData) propertyChanged(tag PropertyName) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case PerspectiveOriginX, PerspectiveOriginY:
 | 
						case PerspectiveOriginX, PerspectiveOriginY:
 | 
				
			||||||
		x, y := GetPerspectiveOrigin(view)
 | 
							x, y := GetPerspectiveOrigin(view)
 | 
				
			||||||
		session.updateCSSProperty(htmlID, "perspective-origin", transformOriginCSS(x, y, AutoSize(), view.Session()))
 | 
							session.updateCSSProperty(htmlID, "perspective-origin", transformOriginCSS(x, y, AutoSize(), session))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case BackfaceVisible:
 | 
						case BackfaceVisible:
 | 
				
			||||||
		if GetBackfaceVisible(view) {
 | 
							if GetBackfaceVisible(view) {
 | 
				
			||||||
| 
						 | 
					@ -786,7 +791,7 @@ func (view *viewData) propertyChanged(tag PropertyName) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case TransformOriginX, TransformOriginY, TransformOriginZ:
 | 
						case TransformOriginX, TransformOriginY, TransformOriginZ:
 | 
				
			||||||
		x, y, z := getTransformOrigin(view, session)
 | 
							x, y, z := getTransformOrigin(view, session)
 | 
				
			||||||
		session.updateCSSProperty(htmlID, "transform-origin", transformOriginCSS(x, y, z, view.Session()))
 | 
							session.updateCSSProperty(htmlID, "transform-origin", transformOriginCSS(x, y, z, session))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case Transform:
 | 
						case Transform:
 | 
				
			||||||
		css := ""
 | 
							css := ""
 | 
				
			||||||
| 
						 | 
					@ -813,7 +818,7 @@ func (view *viewData) propertyChanged(tag PropertyName) {
 | 
				
			||||||
		if view.getRaw(DragStartEvent) != nil || view.getRaw(DragData) != nil {
 | 
							if view.getRaw(DragStartEvent) != nil || view.getRaw(DragData) != nil {
 | 
				
			||||||
			session.updateProperty(htmlID, "ondragstart", "dragStartEvent(this, event)")
 | 
								session.updateProperty(htmlID, "ondragstart", "dragStartEvent(this, event)")
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			session.removeProperty(view.htmlID(), "ondragstart")
 | 
								session.removeProperty(htmlID, "ondragstart")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case DropEvent:
 | 
						case DropEvent:
 | 
				
			||||||
| 
						 | 
					@ -823,18 +828,18 @@ func (view *viewData) propertyChanged(tag PropertyName) {
 | 
				
			||||||
			if view.getRaw(DragOverEvent) != nil {
 | 
								if view.getRaw(DragOverEvent) != nil {
 | 
				
			||||||
				session.updateProperty(htmlID, "data-drag-over", "1")
 | 
									session.updateProperty(htmlID, "data-drag-over", "1")
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				session.removeProperty(view.htmlID(), "data-drag-over")
 | 
									session.removeProperty(htmlID, "data-drag-over")
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			session.removeProperty(view.htmlID(), "ondrop")
 | 
								session.removeProperty(htmlID, "ondrop")
 | 
				
			||||||
			session.removeProperty(view.htmlID(), "ondragover")
 | 
								session.removeProperty(htmlID, "ondragover")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case DragOverEvent:
 | 
						case DragOverEvent:
 | 
				
			||||||
		if view.getRaw(DragOverEvent) != nil {
 | 
							if view.getRaw(DragOverEvent) != nil {
 | 
				
			||||||
			session.updateProperty(htmlID, "data-drag-over", "1")
 | 
								session.updateProperty(htmlID, "data-drag-over", "1")
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			session.removeProperty(view.htmlID(), "data-drag-over")
 | 
								session.removeProperty(htmlID, "data-drag-over")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case DragData:
 | 
						case DragData:
 | 
				
			||||||
| 
						 | 
					@ -843,50 +848,66 @@ func (view *viewData) propertyChanged(tag PropertyName) {
 | 
				
			||||||
			session.updateProperty(htmlID, "data-drag", data)
 | 
								session.updateProperty(htmlID, "data-drag", data)
 | 
				
			||||||
			session.updateProperty(htmlID, "ondragstart", "dragStartEvent(this, event)")
 | 
								session.updateProperty(htmlID, "ondragstart", "dragStartEvent(this, event)")
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			session.removeProperty(view.htmlID(), "draggable")
 | 
								session.removeProperty(htmlID, "draggable")
 | 
				
			||||||
			session.removeProperty(view.htmlID(), "data-drag")
 | 
								session.removeProperty(htmlID, "data-drag")
 | 
				
			||||||
			if view.getRaw(DragStartEvent) == nil {
 | 
								if view.getRaw(DragStartEvent) == nil {
 | 
				
			||||||
				session.removeProperty(view.htmlID(), "ondragstart")
 | 
									session.removeProperty(htmlID, "ondragstart")
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case DragImage:
 | 
						case DragImage:
 | 
				
			||||||
		if img, ok := stringProperty(view, DragImage, view.session); ok && img != "" {
 | 
							if img, ok := stringProperty(view, DragImage, session); ok && img != "" {
 | 
				
			||||||
			img = strings.Trim(img, " \t")
 | 
								img = strings.Trim(img, " \t")
 | 
				
			||||||
			if img[0] == '@' {
 | 
								if img[0] == '@' {
 | 
				
			||||||
				img, ok = view.session.ImageConstant(img[1:])
 | 
									img, ok = session.ImageConstant(img[1:])
 | 
				
			||||||
				if !ok {
 | 
									if !ok {
 | 
				
			||||||
					session.removeProperty(view.htmlID(), "data-drag-image")
 | 
										session.removeProperty(htmlID, "data-drag-image")
 | 
				
			||||||
					return
 | 
										return
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			session.updateProperty(htmlID, "data-drag-image", img)
 | 
								session.updateProperty(htmlID, "data-drag-image", img)
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			session.removeProperty(view.htmlID(), "data-drag-image")
 | 
								session.removeProperty(htmlID, "data-drag-image")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case DragImageXOffset:
 | 
						case DragImageXOffset:
 | 
				
			||||||
		if f := GetDragImageXOffset(view); f != 0 {
 | 
							if f := GetDragImageXOffset(view); f != 0 {
 | 
				
			||||||
			session.updateProperty(htmlID, "data-drag-image-x", f)
 | 
								session.updateProperty(htmlID, "data-drag-image-x", f)
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			session.removeProperty(view.htmlID(), "data-drag-image-x")
 | 
								session.removeProperty(htmlID, "data-drag-image-x")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case DragImageYOffset:
 | 
						case DragImageYOffset:
 | 
				
			||||||
		if f := GetDragImageXOffset(view); f != 0 {
 | 
							if f := GetDragImageXOffset(view); f != 0 {
 | 
				
			||||||
			session.updateProperty(htmlID, "data-drag-image-y", f)
 | 
								session.updateProperty(htmlID, "data-drag-image-y", f)
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			session.removeProperty(view.htmlID(), "data-drag-image-y")
 | 
								session.removeProperty(htmlID, "data-drag-image-y")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case DragEffect:
 | 
						case DropEffect:
 | 
				
			||||||
		effects := enumProperties[DragEffect].cssValues
 | 
							effect := GetDropEffect(view)
 | 
				
			||||||
		if n := GetDragEffect(view); n > 0 && n < len(effects) {
 | 
							switch effect {
 | 
				
			||||||
			session.updateProperty(htmlID, "data-drag-effect", effects[n])
 | 
							case DropEffectCopy:
 | 
				
			||||||
 | 
								session.updateProperty(htmlID, "data-drop-effect", "copy")
 | 
				
			||||||
 | 
							case DropEffectMove:
 | 
				
			||||||
 | 
								session.updateProperty(htmlID, "data-drop-effect", "move")
 | 
				
			||||||
 | 
							case DropEffectLink:
 | 
				
			||||||
 | 
								session.updateProperty(htmlID, "data-drop-effect", "link")
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								session.removeProperty(htmlID, "data-drop-effect")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DropEffectAllowed:
 | 
				
			||||||
 | 
							effect := GetDropEffectAllowed(view)
 | 
				
			||||||
 | 
							if effect >= DropEffectCopy && effect >= DropEffectAll {
 | 
				
			||||||
 | 
								values := []string{"undifined", "copy", "move", "copyMove", "link", "copyLink", "linkMove", "all"}
 | 
				
			||||||
 | 
								session.updateProperty(htmlID, "data-drop-effect-allowed", values[effect])
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								session.removeProperty(htmlID, "data-drop-effect-allowed")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case DataList:
 | 
						case DataList:
 | 
				
			||||||
		updateInnerHTML(view.htmlID(), view.Session())
 | 
							updateInnerHTML(htmlID, session)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case Opacity:
 | 
						case Opacity:
 | 
				
			||||||
		if f, ok := floatTextProperty(view, Opacity, session, 0); ok {
 | 
							if f, ok := floatTextProperty(view, Opacity, session, 0); ok {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue