Skip to content

Commit

Permalink
Cleanup: remove unnecessary type aliases and NoInlining annotations
Browse files Browse the repository at this point in the history
  • Loading branch information
Tarmil committed Jul 12, 2018
1 parent 01284d9 commit 0f569a5
Show file tree
Hide file tree
Showing 21 changed files with 150 additions and 194 deletions.
1 change: 0 additions & 1 deletion WebSharper.UI.CSharp/HTML.Client.fs
Expand Up @@ -3,7 +3,6 @@ namespace WebSharper.UI.Client
#nowarn "44" // HTML deprecated

open System
open System.Runtime.CompilerServices
open WebSharper
open WebSharper.JavaScript
open WebSharper.UI
Expand Down
4 changes: 0 additions & 4 deletions WebSharper.UI.Templating.Runtime/Runtime.fs
Expand Up @@ -34,7 +34,6 @@ open WebSharper.UI.Templating.AST
open WebSharper.Sitelets
open WebSharper.Sitelets.Content
open System.Collections.Concurrent
open System.Runtime.CompilerServices

module M = WebSharper.Core.Metadata
module J = WebSharper.Core.Json
Expand Down Expand Up @@ -108,11 +107,9 @@ type TemplateEvent<'TI, 'E when 'E :> DomEvent> =

type Handler private () =

[<MethodImpl(MethodImplOptions.NoInlining)>]
static member EventQ (holeName: string, isGenerated: bool, [<JavaScript>] f: Expr<DomElement -> DomEvent -> unit>) =
TemplateHole.EventQ(holeName, isGenerated, f)

[<MethodImpl(MethodImplOptions.NoInlining)>]
static member EventQ2<'E when 'E :> DomEvent> (key: string, holeName: string, ti: (unit -> TemplateInstance), [<JavaScript>] f: Expr<TemplateEvent<obj, 'E> -> unit>) =
Handler.EventQ(holeName, true, <@ fun el ev ->
let k = key
Expand All @@ -124,7 +121,6 @@ type Handler private () =
}
@>)

[<MethodImpl(MethodImplOptions.NoInlining)>]
static member CompleteHoles(key: string, filledHoles: seq<TemplateHole>, vars: array<string * ValTy>) : seq<TemplateHole> * CompletedHoles =
let filledVars = HashSet()
for h in filledHoles do
Expand Down
12 changes: 5 additions & 7 deletions WebSharper.UI.Templating.Runtime/RuntimeClient.fs
Expand Up @@ -21,7 +21,6 @@
module WebSharper.UI.Templating.Runtime.Client

open System
open System.Runtime.CompilerServices
open System.Collections.Generic
open FSharp.Quotations
open FSharp.Quotations.Patterns
Expand Down Expand Up @@ -50,15 +49,15 @@ type private TemplateInstanceProxy(c: Server.CompletedHoles, doc: Doc) =

member this.Hole(name) = allVars.[name]

[<Inline; MethodImpl(MethodImplOptions.NoInlining)>]
[<Inline>]
let AfterRenderQ(name: string, [<JavaScript>] f: Expr<Dom.Element -> unit>) =
TemplateHole.AfterRenderQ(name, f)

[<Inline; MethodImpl(MethodImplOptions.NoInlining)>]
[<Inline>]
let AfterRenderQ2(name: string, [<JavaScript>] f: Expr<unit -> unit>) =
AfterRenderQ(name, <@ fun el -> (WebSharper.JavaScript.Pervasives.As f)() @>)

[<Inline; MethodImpl(MethodImplOptions.NoInlining)>]
[<Inline>]
let LazyParseHtml (src: string) =
()
fun () -> As<Dom.Node[]>(JQuery.ParseHTML src)
Expand Down Expand Up @@ -209,11 +208,10 @@ type private RuntimeProxy =
[<Proxy(typeof<Server.Handler>)>]
type private HandlerProxy =

[<Inline; MethodImpl(MethodImplOptions.NoInlining)>]
[<Inline>]
static member EventQ (holeName: string, isGenerated: bool, f: Expr<Dom.Element -> Dom.Event -> unit>) =
TemplateHole.EventQ(holeName, isGenerated, f)

[<MethodImpl(MethodImplOptions.NoInlining)>]
static member EventQ2<'E when 'E :> DomEvent> (key: string, holeName: string, ti: (unit -> TemplateInstance), [<JavaScript>] f: Expr<TemplateEvent<obj, 'E> -> unit>) =
TemplateHole.EventQ(holeName, true, <@ fun el ev ->
(%f) {
Expand All @@ -223,7 +221,7 @@ type private HandlerProxy =
}
@>)

[<JavaScript; MethodImpl(MethodImplOptions.NoInlining)>]
[<JavaScript>]
static member CompleteHoles(_: string, filledHoles: seq<TemplateHole>, vars: array<string * Server.ValTy>) : seq<TemplateHole> * Server.CompletedHoles =
let allVars = Dictionary<string, obj>()
let filledVars = HashSet()
Expand Down
2 changes: 0 additions & 2 deletions WebSharper.UI/Animation.fs
Expand Up @@ -88,7 +88,6 @@ type Anim =
[<JavaScript>]
module Anims =

[<MethodImpl(MethodImplOptions.NoInlining)>]
let List (Anim xs) =
xs

Expand All @@ -98,7 +97,6 @@ module Anims =
| Finally f -> f ()
| _ -> ())

[<MethodImpl(MethodImplOptions.NoInlining)>]
let Def d f =
{ Compute = f; Duration = d}

Expand Down
56 changes: 27 additions & 29 deletions WebSharper.UI/Attr.Client.fs
Expand Up @@ -31,16 +31,16 @@ type IAttrNode =
[<Name "NChanged">]
abstract Changed : View<unit>
[<Name "NGetChangeAnim">]
abstract GetChangeAnim : Element -> Anim
abstract GetChangeAnim : Dom.Element -> Anim
[<Name "NGetEnterAnim">]
abstract GetEnterAnim : Element -> Anim
abstract GetEnterAnim : Dom.Element -> Anim
[<Name "NGetExitAnim">]
abstract GetExitAnim : Element -> Anim
abstract GetExitAnim : Dom.Element -> Anim
[<Name "NSync">]
abstract Sync : Element -> unit
abstract Sync : Dom.Element -> unit

[<JavaScript; Sealed; Name "WebSharper.UI.AnimatedAttrNode">]
type AnimatedAttrNode<'T>(tr: Trans<'T>, view: View<'T>, push: Element -> 'T -> unit) =
type AnimatedAttrNode<'T>(tr: Trans<'T>, view: View<'T>, push: Dom.Element -> 'T -> unit) =
let mutable logical : option<'T> = None // current logical value
let mutable visible : option<'T> = None // current value pushed to the parent element
let mutable dirty = true // logical <> visible
Expand Down Expand Up @@ -101,8 +101,8 @@ type AnimatedAttrNode<'T>(tr: Trans<'T>, view: View<'T>, push: Element -> 'T ->
member a.Changed = updates

[<JavaScript; Sealed; Name "WebSharper.UI.DynamicAttrNode">]
type DynamicAttrNode<'T>(view: View<'T>, push: Element -> 'T -> unit) =
let mutable value = U
type DynamicAttrNode<'T>(view: View<'T>, push: Dom.Element -> 'T -> unit) =
let mutable value = JS.Undefined
let mutable dirty = false
let updates = view |> View.Map (fun x -> value <- x; dirty <- true)
interface IAttrNode with
Expand All @@ -123,19 +123,19 @@ type internal AttrProxy =
| [<Constant(null)>] A0
| A1 of IAttrNode
| A2 of AttrProxy * AttrProxy
| A3 of init: (Element -> unit)
| A4 of onAfterRender: (Element -> unit)
| A3 of init: (Dom.Element -> unit)
| A4 of onAfterRender: (Dom.Element -> unit)

[<JavaScript; Name "WebSharper.UI.Attrs">]
module Attrs =

type Dyn =
{
DynElem : Element
DynElem : Dom.Element
DynFlags : AttrFlags
DynNodes : IAttrNode []
[<OptionalField>]
OnAfterRender : option<Element -> unit>
OnAfterRender : option<Dom.Element -> unit>
}

let HasChangeAnim attr =
Expand Down Expand Up @@ -166,7 +166,7 @@ module Attrs =
let nodes = Queue()
let oar = Queue()
let rec loop node =
if not (Object.ReferenceEquals(node, null)) then // work around WS issue with UseNullAsTrueValue
if not (obj.ReferenceEquals(node, null)) then // work around WS issue with UseNullAsTrueValue
match node with
| A0 -> ()
| A1 n -> nodes.Enqueue n
Expand Down Expand Up @@ -216,8 +216,8 @@ module Attrs =

let AppendTree a b =
// work around WS issue with UseNullAsTrueValue
if Object.ReferenceEquals(a, null) then b
elif Object.ReferenceEquals(b, null) then a
if obj.ReferenceEquals(a, null) then b
elif obj.ReferenceEquals(b, null) then a
else
let x = A2 (a, b)
SetFlags x (Flags a ||| Flags b)
Expand All @@ -239,11 +239,9 @@ module Attrs =
SetFlags n flags
n

[<MethodImpl(MethodImplOptions.NoInlining)>]
let internal Dynamic view set =
A1 (DynamicAttrNode (view, set))

[<MethodImpl(MethodImplOptions.NoInlining)>]
let internal Static attr =
A3 attr

Expand All @@ -265,13 +263,13 @@ type AttrProxy with
Array.ofSeqNonCopying xs
|> Array.TreeReduce Attr.Empty Attr.Append

static member OnAfterRenderImpl(q: Expr<Element -> unit>) =
static member OnAfterRenderImpl(q: Expr<Dom.Element -> unit>) =
As<Attr> (A4 (As q))

static member HandlerImpl(event: string, q: Expr<Element -> #DomEvent-> unit>) =
As<Attr> (Attrs.Static (fun el -> el.AddEventListener(event, (As<Element -> DomEvent -> unit> q) el, false)))
static member HandlerImpl(event: string, q: Expr<Dom.Element -> #Dom.Event-> unit>) =
As<Attr> (Attrs.Static (fun el -> el.AddEventListener(event, (As<Dom.Element -> Dom.Event -> unit> q) el, false)))

static member Handler (event: string) (q: Expr<Element -> #DomEvent-> unit>) =
static member Handler (event: string) (q: Expr<Dom.Element -> #Dom.Event-> unit>) =
AttrProxy.HandlerImpl(event, q)

[<JavaScript; Name "WebSharper.UI.CheckedInput">]
Expand Down Expand Up @@ -311,19 +309,19 @@ module Attr =
let DynamicStyle name view =
As<Attr> (Attrs.Dynamic view (fun el v -> DU.SetStyle el name v))

let Handler name (callback: Element -> #DomEvent -> unit) =
As<Attr> (Attrs.Static (fun el -> el.AddEventListener(name, As<DomEvent -> unit> (callback el), false)))
let Handler name (callback: Dom.Element -> #Dom.Event -> unit) =
As<Attr> (Attrs.Static (fun el -> el.AddEventListener(name, As<Dom.Event -> unit> (callback el), false)))

let HandlerView name (view: View<'T>) (callback: Element -> #DomEvent -> 'T -> unit) =
let init (el: Element) =
let HandlerView name (view: View<'T>) (callback: Dom.Element -> #Dom.Event -> 'T -> unit) =
let init (el: Dom.Element) =
let callback = callback el
el.AddEventListener(name, (fun (ev: DomEvent) -> View.Get (callback (As ev)) view), false)
el.AddEventListener(name, (fun (ev: Dom.Event) -> View.Get (callback (As ev)) view), false)
As<Attr> (Attrs.Static init)

let OnAfterRender (callback: Element -> unit) =
let OnAfterRender (callback: Dom.Element -> unit) =
As<Attr> (A4 callback)

let OnAfterRenderView (v: View<'T>) (callback: Element -> 'T -> unit) =
let OnAfterRenderView (v: View<'T>) (callback: Dom.Element -> 'T -> unit) =
let id = Fresh.Id()
Attr.Append
(OnAfterRender (fun el -> callback el el?(id)))
Expand Down Expand Up @@ -356,8 +354,8 @@ module Attr =
As<Attr> (Attrs.Dynamic view (fun el v ->
el?(name) <- v))

let CustomVar (var: Var<'a>) (set: Element -> 'a -> unit) (get: Element -> 'a option) =
let onChange (el: Element) (e: DomEvent) =
let CustomVar (var: Var<'a>) (set: Dom.Element -> 'a -> unit) (get: Dom.Element -> 'a option) =
let onChange (el: Dom.Element) (e: Dom.Event) =
var.UpdateMaybe(fun v ->
match get el with
| Some x as o when x <> v -> o
Expand Down
21 changes: 11 additions & 10 deletions WebSharper.UI/Attr.Client.fsi
Expand Up @@ -20,6 +20,7 @@

namespace WebSharper.UI.Client

open WebSharper.JavaScript
open WebSharper.UI

type CheckedInput<'T> =
Expand All @@ -40,7 +41,7 @@ module Attr =
val DynamicProp : name: string -> value: View<'T> -> Attr

/// Dynamic with a custom setter.
val DynamicCustom : set: (Element -> 'T -> unit) -> value: View<'T> -> Attr
val DynamicCustom : set: (Dom.Element -> 'T -> unit) -> value: View<'T> -> Attr

/// Sets a basic DOM attribute, such as `id` to a dynamic text value with an animation.
val Animated : name: string -> Trans<'T> -> view: View<'T> -> value: ('T -> string) -> Attr
Expand All @@ -55,19 +56,19 @@ module Attr =
val AnimatedStyle : name: string -> Trans<'T> -> view: View<'T> -> value: ('T -> string) -> Attr

/// Sets an event handler, for a given event such as `click`.
val Handler : name: string -> callback: (Element -> #DomEvent -> unit) -> Attr
val Handler : name: string -> callback: (Dom.Element -> #Dom.Event -> unit) -> Attr

/// Sets an event handler, for a given event such as `click`.
val HandlerView : name: string -> view: View<'T> -> callback: (Element -> #DomEvent -> 'T -> unit) -> Attr
val HandlerView : name: string -> view: View<'T> -> callback: (Dom.Element -> #Dom.Event -> 'T -> unit) -> Attr

/// Adds a callback to be called after the element has been inserted in the DOM.
/// The callback is guaranteed to be called only once, even if the element is moved or removed and reinserted.
val OnAfterRender : callback: (Element -> unit) -> Attr
val OnAfterRender : callback: (Dom.Element -> unit) -> Attr

/// Adds a callback to be called after the element has been inserted in the DOM,
/// which also receives the value of a view at the time of the event.
/// The callback is guaranteed to be called only once, even if the element is moved or removed and reinserted.
val OnAfterRenderView : view: View<'T> -> callback: (Element -> 'T -> unit) -> Attr
val OnAfterRenderView : view: View<'T> -> callback: (Dom.Element -> 'T -> unit) -> Attr

/// Sets a CSS class.
val Class : name: string -> Attr
Expand All @@ -89,7 +90,7 @@ module Attr =
val CustomValue : Var<'a> -> ('a -> string) -> (string -> 'a option) -> Attr when 'a : equality

/// Gets and sets custom properties on the element according to a Var.
val CustomVar : Var<'a> -> set: (Element -> 'a -> unit) -> get: (Element -> 'a option) -> Attr when 'a : equality
val CustomVar : Var<'a> -> set: (Dom.Element -> 'a -> unit) -> get: (Dom.Element -> 'a option) -> Attr when 'a : equality

/// Make the element's content editable and bind its text content to a Var.
val ContentEditableText : Var<string> -> Attr
Expand Down Expand Up @@ -126,14 +127,14 @@ module internal Attrs =
type Dyn

/// Inserts static attributes and computes dynamic attributes.
val Insert : Element -> Attr -> Dyn
val Insert : Dom.Element -> Attr -> Dyn

val Empty : Element -> Dyn
val Empty : Dom.Element -> Dyn

/// Synchronizes dynamic attributes.
/// Exception: does not sync nodes that animate change transitions.
/// Those synchronize when the relevant transition is played.
val Sync : Element -> Dyn -> unit
val Sync : Dom.Element -> Dyn -> unit

/// Dynamic updates of attributes.
val Updates : Dyn -> View<unit>
Expand All @@ -157,4 +158,4 @@ module internal Attrs =
val GetExitAnim : Dyn -> Anim

/// Get OnAfterRender callback, if any.
val GetOnAfterRender : Dyn -> option<Element -> unit>
val GetOnAfterRender : Dyn -> option<Dom.Element -> unit>
8 changes: 4 additions & 4 deletions WebSharper.UI/Doc.Client.fs
Expand Up @@ -49,23 +49,23 @@ module Doc =
As (Doc'.Async (As a))

[<Inline>]
let Template (el: Node[]) (fillWith: seq<TemplateHole>) : Doc =
let Template (el: Dom.Node[]) (fillWith: seq<TemplateHole>) : Doc =
As (Templates.Template el fillWith)

[<Inline>]
let LoadLocalTemplates baseName =
Templates.LoadLocalTemplates baseName

[<Inline>]
let LoadTemplate (baseName: string) (name: option<string>) (el: unit -> Node[]) =
let LoadTemplate (baseName: string) (name: option<string>) (el: unit -> Dom.Node[]) =
Templates.PrepareTemplate baseName name el

[<Inline>]
let NamedTemplate (baseName: string) (name: option<string>) (fillWith: seq<TemplateHole>) : Doc =
As (Templates.NamedTemplate baseName name fillWith)

[<Inline>]
let GetOrLoadTemplate (baseName: string) (name: option<string>) (el: unit -> Node[]) (fillWith: seq<TemplateHole>) : Doc =
let GetOrLoadTemplate (baseName: string) (name: option<string>) (el: unit -> Dom.Node[]) (fillWith: seq<TemplateHole>) : Doc =
As (Templates.GetOrLoadTemplate baseName name el fillWith)

[<Inline>]
Expand Down Expand Up @@ -123,7 +123,7 @@ module Doc =
Doc'.RunPrependById id (As tr)

[<Inline>]
let RunReplace (elt: Node) (doc: Doc) =
let RunReplace (elt: Dom.Node) (doc: Doc) =
Templates.LoadLocalTemplates ""
(doc :> IControlBody).ReplaceInDom(elt)

Expand Down

0 comments on commit 0f569a5

Please sign in to comment.