Browse Source

Merge branch 'ios-ime-responder' of https://github.com/AvaloniaUI/Avalonia into ios-ime-responder

pull/8963/head
Benedikt Stebner 3 years ago
parent
commit
68ef75b373
  1. 8
      src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs
  2. 22
      src/Web/Avalonia.Web.Blazor/Interop/FocusHelperInterop.cs
  3. 1
      src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia.ts
  4. 9
      src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/FocusHelper.ts
  5. 14
      src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/InputHelper.ts

8
src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs

@ -32,8 +32,8 @@ namespace Avalonia.Web.Blazor
private SKHtmlCanvasInterop.GLInfo? _jsGlInfo = null;
private AvaloniaModule? _avaloniaModule = null;
private InputHelperInterop? _inputHelper = null;
private InputHelperInterop? _canvasHelper = null;
private InputHelperInterop? _containerHelper = null;
private FocusHelperInterop? _canvasHelper = null;
private FocusHelperInterop? _containerHelper = null;
private NativeControlHostInterop? _nativeControlHost = null;
private StorageProviderInterop? _storageProvider = null;
private ElementReference _htmlCanvas;
@ -256,8 +256,8 @@ namespace Avalonia.Web.Blazor
_avaloniaModule = await AvaloniaModule.ImportAsync(Js);
_canvasHelper = new InputHelperInterop(_avaloniaModule, _htmlCanvas);
_containerHelper = new InputHelperInterop(_avaloniaModule, _containerElement);
_canvasHelper = new FocusHelperInterop(_avaloniaModule, _htmlCanvas);
_containerHelper = new FocusHelperInterop(_avaloniaModule, _containerElement);
_inputHelper = new InputHelperInterop(_avaloniaModule, _inputElement);
_inputHelper.CompositionEvent += InputHelperOnCompositionEvent;

22
src/Web/Avalonia.Web.Blazor/Interop/FocusHelperInterop.cs

@ -0,0 +1,22 @@
using Microsoft.AspNetCore.Components;
namespace Avalonia.Web.Blazor.Interop;
internal class FocusHelperInterop
{
private const string FocusSymbol = "FocusHelper.focus";
private const string SetCursorSymbol = "FocusHelper.setCursor";
private readonly AvaloniaModule _module;
private readonly ElementReference _inputElement;
public FocusHelperInterop(AvaloniaModule module, ElementReference inputElement)
{
_module = module;
_inputElement = inputElement;
}
public void Focus() => _module.Invoke(FocusSymbol, _inputElement);
public void SetCursor(string kind) => _module.Invoke(SetCursorSymbol, _inputElement, kind);
}

1
src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia.ts

@ -1,5 +1,6 @@
export { DpiWatcher } from "./Avalonia/DpiWatcher"
export { InputHelper } from "./Avalonia/InputHelper"
export { FocusHelper } from "./Avalonia/FocusHelper"
export { NativeControlHost } from "./Avalonia/NativeControlHost"
export { SizeWatcher } from "./Avalonia/SizeWatcher"
export { SKHtmlCanvas } from "./Avalonia/SKHtmlCanvas"

9
src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/FocusHelper.ts

@ -0,0 +1,9 @@
export class FocusHelper {
public static focus(inputElement: HTMLElement) {
inputElement.focus();
}
public static setCursor(inputElement: HTMLInputElement, kind: string) {
inputElement.style.cursor = kind;
}
}

14
src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/InputHelper.ts

@ -13,18 +13,9 @@
public static clear(inputElement: HTMLInputElement) {
inputElement.value = "";
}
public static isInputElement( element : HTMLInputElement | HTMLElement ) : element is HTMLInputElement {
return ( element as HTMLInputElement).setSelectionRange !== undefined;
}
public static focus(inputElement: HTMLElement) {
public static focus(inputElement: HTMLInputElement) {
inputElement.focus();
if(this.isInputElement(inputElement))
{
(inputElement as HTMLInputElement).setSelectionRange(0,0);
}
inputElement.setSelectionRange(0,0);
}
public static setCursor(inputElement: HTMLInputElement, kind: string) {
@ -54,3 +45,4 @@
}
}
}

Loading…
Cancel
Save