Last active
November 22, 2016 16:23
-
-
Save HerringtonDarkholme/155a2963f461be0caf0b3f8bf2fc5ef9 to your computer and use it in GitHub Desktop.
WTF have I written?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export type HTML = { | |
div: IfTag<HTML, 'div'> | |
p: IfTag<HTML, 'p'> | |
ul: UL<HTML> | |
ol: OL<HTML> | |
img: () => HTML | |
} | |
export type Comp<Parent, End extends string> = { | |
props(prop: {[k: string]: any}): Comp<Parent, End> | |
nativeOn(prop: {[k: string]: any}): Comp<Parent, End> | |
} & StartTag<Parent, End> | |
export type IfTag<Parent, End extends string> = { | |
if(condition: boolean): StartTag<{[K in keyof Parent]: Parent[K] & {else: Parent[K]}}, End> | |
(str: TemplateStringsArray, ...args: any[]): IfTag<Parent, End> | |
} & StartTag<Parent, End> | |
export type StartTag<Parent, End extends string> = { | |
class(nameHash: {[k: string]: boolean}): StartTag<Parent, End> | |
on(handlerHash: {[k: string]: Function}): StartTag<Parent, End> | |
for<T>(list: T[], func: (t: T, i: number) => HTML): {[K in End]: () => Parent} | |
} & Tag<Parent, End> | |
export type Tag<Parent, End extends string> = { | |
div: IfTag<IfTag<Parent, End>, 'div'> | |
p: IfTag<IfTag<Parent, End>, 'p'> | |
ul: UL<IfTag<Parent, End>> | |
img: () => IfTag<Parent, End> | |
} & {[K in End]: () => Parent} | |
export type UL<Parent> = { | |
li: IfTag<UL<Parent>, 'li'> | |
ul(): Parent | |
(str: TemplateStringsArray, ...args: any[]): UL<Parent> | |
} | |
export type OL<Parent> = { | |
li: Tag<OL<Parent>, 'li'> | |
ol(): Parent | |
if(condition: boolean): OL<{[K in keyof Parent]: Parent[K] & {else: Parent[K]}}> | |
(str: TemplateStringsArray, ...args: any[]): OL<Parent> | |
} | |
declare var h: HTML | |
h = h | |
.div | |
.div() | |
var k = h.div | |
k = h.div | |
.div | |
.div() | |
var j = h.div | |
.div | |
.div() | |
j = k | |
k = h.div | |
.div | |
.div() | |
.div | |
.div() | |
k = h.div | |
.p | |
.p() | |
.div | |
.div() | |
// h.div | |
// .p | |
// .div() | |
var ul = h.ul | |
ul = h.ul | |
.li | |
.li() | |
ul.ul() | |
ul.li | |
.div | |
k = h.div | |
.img() | |
h = h.img() | |
h = h.div.if(true) | |
.div() | |
h = h.div.on({}).for([], _ => h) | |
.div() | |
h.div.if(false) | |
.div() | |
.img.else() | |
.div.if(true) | |
.p.p() | |
.div() | |
.p.else | |
.p() | |
h = h.div`.test` | |
.div() | |
k = h.div`.test` | |
.ul`.test2` | |
.ul() | |
// k = h.div`.test` | |
// h.div | |
// .ul() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://github.com/HerringtonDarkholme/rectangular/blob/master/src/config.ts
https://github.com/HerringtonDarkholme/rectangular/blob/master/src/tags/index.ts