Use the right data type for mouse event args (#11332)

* Use the right data type for mouse event args

Fixes https://github.com/aspnet/AspNetCore/issues/11224
This commit is contained in:
Pranav K 2019-06-19 13:56:50 -07:00 committed by GitHub
parent 5f2760e9bc
commit a093059fce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 90 additions and 116 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -91,19 +91,9 @@ export class EventForDotNet<TData extends UIEventArgs> {
function parseDragEvent(event: any) {
return {
type: event.type,
detail: event.detail,
...parseMouseEvent(event),
dataTransfer: event.dataTransfer,
screenX: event.screenX,
screenY: event.screenY,
clientX: event.clientX,
clientY: event.clientY,
button: event.button,
buttons: event.buttons,
ctrlKey: event.ctrlKey,
shiftKey: event.shiftKey,
altKey: event.altKey,
metaKey: event.metaKey,
};
}

View File

@ -444,21 +444,10 @@ namespace Microsoft.AspNetCore.Components
public string Kind { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public string Type { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
}
public partial class UIDragEventArgs : Microsoft.AspNetCore.Components.UIEventArgs
public partial class UIDragEventArgs : Microsoft.AspNetCore.Components.UIMouseEventArgs
{
public UIDragEventArgs() { }
public bool AltKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long Button { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long Buttons { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long ClientX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long ClientY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public bool CtrlKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public Microsoft.AspNetCore.Components.DataTransfer DataTransfer { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long Detail { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public bool MetaKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long ScreenX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long ScreenY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public bool ShiftKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
}
public partial class UIErrorEventArgs : Microsoft.AspNetCore.Components.UIEventArgs
{
@ -521,13 +510,13 @@ namespace Microsoft.AspNetCore.Components
public bool AltKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long Button { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long Buttons { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long ClientX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long ClientY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public double ClientX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public double ClientY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public bool CtrlKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long Detail { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public bool MetaKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long ScreenX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long ScreenY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public double ScreenX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public double ScreenY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public bool ShiftKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
}
public partial class UIPointerEventArgs : Microsoft.AspNetCore.Components.UIMouseEventArgs
@ -564,13 +553,13 @@ namespace Microsoft.AspNetCore.Components
public partial class UITouchPoint
{
public UITouchPoint() { }
public long ClientX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long ClientY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public double ClientX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public double ClientY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long Identifier { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long PageX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long PageY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long ScreenX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public long ScreenY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public double PageX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public double PageY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public double ScreenX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public double ScreenY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
}
public partial class UIWheelEventArgs : Microsoft.AspNetCore.Components.UIMouseEventArgs
{

View File

@ -41,79 +41,13 @@ namespace Microsoft.AspNetCore.Components
/// <summary>
/// Supplies information about an drag event that is being raised.
/// </summary>
public class UIDragEventArgs : UIEventArgs
public class UIDragEventArgs : UIMouseEventArgs
{
/// <summary>
/// A count of consecutive clicks that happened in a short amount of time, incremented by one.
/// </summary>
public long Detail { get; set; }
/// <summary>
/// The data that underlies a drag-and-drop operation, known as the drag data store.
/// See <see cref="DataTransfer"/>.
/// </summary>
public DataTransfer DataTransfer { get; set; }
/// <summary>
/// The X coordinate of the mouse pointer in global (screen) coordinates.
/// </summary>
public long ScreenX { get; set; }
/// <summary>
/// The Y coordinate of the mouse pointer in global (screen) coordinates.
/// </summary>
public long ScreenY { get; set; }
/// <summary>
/// The X coordinate of the mouse pointer in local (DOM content) coordinates.
/// </summary>
public long ClientX { get; set; }
/// <summary>
/// The Y coordinate of the mouse pointer in local (DOM content) coordinates.
/// </summary>
public long ClientY { get; set; }
/// <summary>
/// The button number that was pressed when the mouse event was fired:
/// Left button=0,
/// middle button=1 (if present),
/// right button=2.
/// For mice configured for left handed use in which the button actions are reversed the values are instead read from right to left.
/// </summary>
public long Button { get; set; }
/// <summary>
/// The buttons being pressed when the mouse event was fired:
/// Left button=1,
/// Right button=2,
/// Middle (wheel) button=4,
/// 4th button (typically, "Browser Back" button)=8,
/// 5th button (typically, "Browser Forward" button)=16.
/// If two or more buttons are pressed, returns the logical sum of the values.
/// E.g., if Left button and Right button are pressed, returns 3 (=1 | 2).
/// </summary>
public long Buttons { get; set; }
/// <summary>
/// true if the control key was down when the event was fired. false otherwise.
/// </summary>
public bool CtrlKey { get; set; }
/// <summary>
/// true if the shift key was down when the event was fired. false otherwise.
/// </summary>
public bool ShiftKey { get; set; }
/// <summary>
/// true if the alt key was down when the event was fired. false otherwise.
/// </summary>
public bool AltKey { get; set; }
/// <summary>
/// true if the meta key was down when the event was fired. false otherwise.
/// </summary>
public bool MetaKey { get; set; }
}
/// <summary>
@ -268,22 +202,22 @@ namespace Microsoft.AspNetCore.Components
/// <summary>
/// The X coordinate of the mouse pointer in global (screen) coordinates.
/// </summary>
public long ScreenX { get; set; }
public double ScreenX { get; set; }
/// <summary>
/// The Y coordinate of the mouse pointer in global (screen) coordinates.
/// </summary>
public long ScreenY { get; set; }
public double ScreenY { get; set; }
/// <summary>
/// The X coordinate of the mouse pointer in local (DOM content) coordinates.
/// </summary>
public long ClientX { get; set; }
public double ClientX { get; set; }
/// <summary>
/// The Y coordinate of the mouse pointer in local (DOM content) coordinates.
/// </summary>
public long ClientY { get; set; }
public double ClientY { get; set; }
/// <summary>
/// The button number that was pressed when the mouse event was fired:
@ -465,34 +399,34 @@ namespace Microsoft.AspNetCore.Components
/// <summary>
/// The X coordinate of the touch point relative to the left edge of the screen.
/// </summary>
public long ScreenX { get; set; }
public double ScreenX { get; set; }
/// <summary>
/// The Y coordinate of the touch point relative to the top edge of the screen.
/// </summary>
public long ScreenY { get; set; }
public double ScreenY { get; set; }
/// <summary>
/// The X coordinate of the touch point relative to the left edge of the browser viewport, not including any scroll offset.
/// </summary>
public long ClientX { get; set; }
public double ClientX { get; set; }
/// <summary>
/// The Y coordinate of the touch point relative to the top edge of the browser viewport, not including any scroll offset.
/// </summary>
public long ClientY { get; set; }
public double ClientY { get; set; }
/// <summary>
/// The X coordinate of the touch point relative to the left edge of the document.
/// Unlike <see cref="ClientX"/>, this value includes the horizontal scroll offset, if any.
/// </summary>
public long PageX { get; set; }
public double PageX { get; set; }
/// <summary>
/// The Y coordinate of the touch point relative to the top of the document.
/// Unlike <see cref="ClientY"/>, this value includes the vertical scroll offset, if any.
/// </summary>
public long PageY { get; set; }
public double PageY { get; set; }
}
/// <summary>

View File

@ -1,7 +1,6 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Threading.Tasks;
using BasicTestApp;
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure;
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
@ -117,6 +116,40 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
Browser.Equal("onmousedown,onmouseup,", () => output.Text);
}
[Fact]
public void PointerDown_CanTrigger()
{
MountTestComponent<MouseEventComponent>();
var input = Browser.FindElement(By.Id("pointerdown_input"));
var output = Browser.FindElement(By.Id("output"));
Assert.Equal(string.Empty, output.Text);
var actions = new Actions(Browser).ClickAndHold(input);
actions.Perform();
Browser.Equal("onpointerdown", () => output.Text);
}
[Fact]
public void DragDrop_CanTrigger()
{
MountTestComponent<MouseEventComponent>();
var input = Browser.FindElement(By.Id("drag_input"));
var target = Browser.FindElement(By.Id("drop"));
var output = Browser.FindElement(By.Id("output"));
Assert.Equal(string.Empty, output.Text);
var actions = new Actions(Browser).DragAndDrop(input, target);
actions.Perform();
// drop doesn't seem to trigger in Selenium. But it's sufficient to determine "any" drag event works
Browser.Equal("ondragstart,", () => output.Text);
}
[Fact]
public void PreventDefault_AppliesToFormOnSubmitHandlers()
{

View File

@ -15,6 +15,13 @@
<p>
Mousedown: <input id="mousedown_input" @onmousedown="@OnMouseDown" @onmouseup="@OnMouseUp" />
</p>
<p>
Pointerdown: <input id="pointerdown_input" @onpointerdown="@OnPointerDown" />
</p>
<p>
<div id="drag_input" draggable="true" @ondragstart="@OnDragStart">Drag Me</div>
<div id="drop" @ondrop="@OnDrop" ondragover="event.preventDefault()" style="width: 100px; height: 100px; border: dotted">Drop Target</div>
</p>
<p>
<button @onclick="@Clear">Clear</button>
</p>
@ -63,6 +70,27 @@
StateHasChanged();
}
void OnPointerDown(UIPointerEventArgs e)
{
DumpEvent(e);
message += "onpointerdown";
StateHasChanged();
}
void OnDragStart(UIDragEventArgs e)
{
DumpEvent(e);
message += "ondragstart,";
StateHasChanged();
}
void OnDrop(UIDragEventArgs e)
{
DumpEvent(e);
message += "ondrop,";
StateHasChanged();
}
void DumpEvent(UIMouseEventArgs e)
{
Console.WriteLine(JsonSerializer.ToString(e));