Explorar o código

Fix tileselector closing when dragging outside it (#179)

This adds the dynamic function `Modal.modalClick` which is called on the
modal's element click event, but only if the corresponding mousedown was
fired directly on the modal's root element or root content
Leonardo Jeanteur %!s(int64=4) %!d(string=hai) anos
pai
achega
9a65d0d198
Modificáronse 2 ficheiros con 29 adicións e 11 borrados
  1. 28 10
      hide/comp/Modal.hx
  2. 1 1
      hide/comp/cdb/Cell.hx

+ 28 - 10
hide/comp/Modal.hx

@@ -2,17 +2,35 @@ package hide.comp;
 
 
 class Modal extends Component {
 class Modal extends Component {
 
 
-    public var content(default,null) : Element;
+	public var content(default,null) : Element;
+	var downTarget : Dynamic;
+	var upTarget : Dynamic;
 
 
-    public function new(?parent,?el) {
-        super(parent,el);
-        element.addClass('hide-modal');
-        element.on("click dblclick keydown keyup keypressed mousedown mouseup mousewheel",function(e) e.stopPropagation());
-        content = new Element("<div class='content'></div>").appendTo(element);
-    }
+	public function new(?parent,?el) {
+		super(parent,el);
+		element.addClass('hide-modal');
+		element.on("click dblclick keydown keyup keypressed mousedown mouseup mousewheel",function(e) e.stopPropagation());
+		content = new Element("<div class='content'></div>").appendTo(element);
 
 
-    public function close() {
-        element.remove();
-    }
+		var exterior = [element[0], content[0]];
+		element[0].addEventListener("mousedown", function(e) {
+			downTarget = e.target;
+		}, true);
+		element[0].addEventListener("mouseup", function(e) {
+			upTarget = e.target;
+		}, true);
+		element.on("click", function(e : js.jquery.Event) {
+			if( exterior.contains(downTarget) && exterior.contains(upTarget) ) {
+				modalClick(e);
+			}
+		});
+	}
+
+	public dynamic function modalClick(e: js.jquery.Event) {
+	}
+
+	public function close() {
+		element.remove();
+	}
 
 
 }
 }

+ 1 - 1
hide/comp/cdb/Cell.hx

@@ -709,7 +709,7 @@ class Cell extends Component {
 			});
 			});
 		case TTilePos:
 		case TTilePos:
 			var modal = new hide.comp.Modal(element);
 			var modal = new hide.comp.Modal(element);
-			modal.element.click(function(_) closeEdit());
+			modal.modalClick = function(_) closeEdit();
 
 
 			var t : cdb.Types.TilePos = currentValue;
 			var t : cdb.Types.TilePos = currentValue;
 			var file = t == null ? null : t.file;
 			var file = t == null ? null : t.file;