From 29d2b615dafa6f3a54910b72d303f74a97c4d822 Mon Sep 17 00:00:00 2001 From: s-ol Date: Thu, 1 Nov 2018 19:07:40 +1100 Subject: component get_or_create --- lib/component.server.moon | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'lib/component.server.moon') diff --git a/lib/component.server.moon b/lib/component.server.moon index 85d97eb..d717ff7 100644 --- a/lib/component.server.moon +++ b/lib/component.server.moon @@ -105,9 +105,14 @@ elements = setmetatable {}, __index: (name) => with val = (...) -> ReactiveElement name, ... @[name] = val +get_or_create = (elem, id, ...) -> + with ReactiveElement elem, ... + \set 'id', id + { :ReactiveVar, :ReactiveElement, + :get_or_create, :tohtml, :flush, :append, -- cgit v1.2.3 From 0fcadd15d802ab20167cade1608e93caa5072723 Mon Sep 17 00:00:00 2001 From: s-ol Date: Thu, 1 Nov 2018 19:54:46 +1100 Subject: fix server-side void tags --- lib/component.server.moon | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'lib/component.server.moon') diff --git a/lib/component.server.moon b/lib/component.server.moon index d717ff7..0026d32 100644 --- a/lib/component.server.moon +++ b/lib/component.server.moon @@ -1,5 +1,8 @@ import opairs from require 'lib.ordered' +void_tags = { 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr' } +void_tags = { t,t for t in *void_tags } + -- convert anything to HTML string -- val must be one of: -- * MMMElement (have a .render method that returns a string) @@ -97,9 +100,15 @@ class ReactiveElement tmp ..= "#{kk}: #{vv}; " v = tmp b ..= " #{k}=\"#{v}\"" - b ..= ">" .. table.concat @children, '' - b ..= "" - b + + if void_tags[@element] + assert #@children == 0, "void tag #{element} cannot have children!" + b .. ">" + else + b .. ">" + b ..= ">" .. table.concat @children, '' + b ..= "" + b elements = setmetatable {}, __index: (name) => with val = (...) -> ReactiveElement name, ... -- cgit v1.2.3