let elDef = <div id="some">Text</div>;
will be compiled into let elDef = ["div", {id:"some"}, ["Text"]];
2. We extend DOM API to accept such constructs: element.append(elDef); // same thing as element.append("<div id=some>Text</div>");
element.prepend(elDef); // ditto
element.patch(elDef); // patch element's DOM by elDef
3. Add appropriate events: componentDidMount, componentWillUnmount, etc. for cases when tag in JSX (uppercased) resolves to a class or function. <carousel>
...
</carousel>
<nocarousel>
...
</nocarousel>
Old browsers and old machines are still there. <section class="carousel">
...
</section>
<style>
section.carousel {
controller: Carousel url(/js/carousel-desktop.js);
}
@media handheld {
section.carousel {
controller: Carousel url(/js/carousel-mobile.js);
}
}
</style> workspace "MyWorkspace"
configurations { "Debug", "Release" }
project "MyProject"
kind "ConsoleApp"
language "C++"
files { "**.h", "**.cpp" }
filter { "configurations:Debug" }
defines { "DEBUG" }
symbols "On"
filter { "configurations:Release" }
defines { "NDEBUG" }
optimize "On"
In that sense Premake looks significantly better than CMake with its esoteric constructs.
Having regular and robust PL to implement those 10% of configuration cases that cannot be defined with "standard" declarations is the way to go, IMO.
That's Sciter (https://sciter.com) and Sciter.Quark (https://quark.sciter.com) in particular, no?