-
-
Notifications
You must be signed in to change notification settings - Fork 56
feat: 🎸 Add support for self closing tag and control flow #180
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
de13683
f30bfca
53e2145
ae2bb91
f97f3fd
4ea7ef2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| <span>{{ '1' | transloco }}</span> | ||
| <span transloco="2"></span> | ||
| <ng-container *transloco="let t"> | ||
| <span>{{ t('3') }}</span> | ||
| </ng-container> | ||
| <ng-template transloco let-t> | ||
| <span>{{ t('4') }}</span> | ||
| </ng-template> | ||
|
|
||
|
|
||
| @if (a > b) { | ||
| <span>{{ '5' | transloco }}</span> | ||
| <span transloco="6"> | ||
| </span> | ||
| <ng-container *transloco="let t"> | ||
| <span>{{ t('7') }}</span> | ||
| </ng-container> | ||
| <ng-template transloco let-t> | ||
| <span>{{ t('8') }}</span> | ||
| </ng-template> | ||
| } @else if (b > a) { | ||
| <span>{{ '9' | transloco }}</span> | ||
| } @else { | ||
| <span [innerHtml]="'10' | transloco"></span> | ||
| } | ||
|
|
||
| @for (item of items; track item.id) { | ||
| {{ '11' | transloco }} | ||
| } @empty { | ||
| <span>{{ '12' | transloco }}</span> | ||
| } | ||
|
|
||
| @switch (condition) { | ||
| @case (caseA) { | ||
| <span>{{ '13' | transloco }}</span> | ||
| } | ||
| @default { | ||
| <span>{{ '14' | transloco }}</span> | ||
| } | ||
| } | ||
|
|
||
| @defer { | ||
| <span>{{ '15' | transloco }}</span> | ||
| } @error { | ||
| <span>{{ '16' | transloco }}</span> | ||
| } @placeholder { | ||
| <span>{{ '17' | transloco }}</span> | ||
| } @loading { | ||
| <span>{{ '18' | transloco }}</span> | ||
| } | ||
|
|
||
| <ng-container *transloco="let t"> | ||
| @if (a > b) { | ||
| <span>{{ t('19') }}</span> | ||
| } @else if (b > a) { | ||
| <span [innerHtml]="t('20')"></span> | ||
| } @else { | ||
| @for (item of items; track item.id) { | ||
| <span>{{ t('21') }}</span> | ||
| } @empty { | ||
| @switch (condition) { | ||
| @case (caseA) { | ||
| <span>{{ t('22') }}</span> | ||
| } | ||
| @default { | ||
| @defer { | ||
| <span>{{ '23' | transloco }}</span> | ||
| } @error { | ||
| <span transloco="24"></span> | ||
| } @placeholder { | ||
| <span>{{ t('25') }}</span> | ||
| } @loading { | ||
| <span>{{ t('26') }}</span> | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| </ng-container> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| <self-closing [value]="'1' | transloco" /> | ||
| <self-closing transloco="2" /> | ||
| <ng-container *transloco="let t"> | ||
| <self-closing [value]="t('3')" /> | ||
| </ng-container> | ||
| <ng-template transloco let-t> | ||
| <self-closing [value]="t('4')" /> | ||
| </ng-template> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -14,6 +14,17 @@ import { | |
| TmplAstElement, | ||
| TmplAstTemplate, | ||
| TmplAstTextAttribute, | ||
| TmplAstNode, | ||
| TmplAstDeferredBlock, | ||
| TmplAstDeferredBlockError, | ||
| TmplAstDeferredBlockLoading, | ||
| TmplAstDeferredBlockPlaceholder, | ||
| TmplAstForLoopBlock, | ||
| TmplAstForLoopBlockEmpty, | ||
| TmplAstIfBlockBranch, | ||
| TmplAstSwitchBlockCase, | ||
| TmplAstIfBlock, | ||
| TmplAstSwitchBlock, | ||
| } from '@angular/compiler'; | ||
|
|
||
| import { readFile } from '../../utils/file.utils'; | ||
|
|
@@ -98,3 +109,72 @@ export function isSupportedNode<Predicates extends any[]>( | |
| ): node is GuardedType<Predicates[number]> { | ||
| return predicates.some((predicate) => predicate(node)); | ||
| } | ||
|
|
||
| export function isBlockWithChildren( | ||
| node: unknown, | ||
| ): node is { children: TmplAstNode[] } { | ||
| return ( | ||
| node instanceof TmplAstDeferredBlockError || | ||
| node instanceof TmplAstDeferredBlockLoading || | ||
| node instanceof TmplAstDeferredBlockPlaceholder || | ||
| node instanceof TmplAstForLoopBlockEmpty || | ||
| node instanceof TmplAstIfBlockBranch || | ||
| node instanceof TmplAstSwitchBlockCase | ||
| ); | ||
| } | ||
|
|
||
| export function isTmplAstForLoopBlock( | ||
| node: unknown, | ||
| ): node is TmplAstForLoopBlock { | ||
| return node instanceof TmplAstForLoopBlock; | ||
| } | ||
|
|
||
| export function isTmplAstDeferredBlock( | ||
| node: unknown, | ||
| ): node is TmplAstDeferredBlock { | ||
| return node instanceof TmplAstDeferredBlock; | ||
| } | ||
|
|
||
| export function isTmplAstIfBlock(node: unknown): node is TmplAstIfBlock { | ||
| return node instanceof TmplAstIfBlock; | ||
| } | ||
|
|
||
| export function isTmplAstSwitchBlock( | ||
| node: unknown, | ||
| ): node is TmplAstSwitchBlock { | ||
| return node instanceof TmplAstSwitchBlock; | ||
| } | ||
|
|
||
| function isNotNull<T>(input: T | null): input is T { | ||
|
||
| return input !== null; | ||
| } | ||
|
|
||
| /** | ||
| * Returns children nodes of the given node if it's a block node. | ||
| */ | ||
| export function getChildrendNodesIfBlock(node: TmplAstNode): TmplAstNode[] { | ||
|
||
| if (isTmplAstIfBlock(node)) { | ||
| return node.branches; | ||
| } | ||
|
|
||
| if (isTmplAstForLoopBlock(node)) { | ||
| return [...node.children, ...[node.empty].filter(isNotNull)]; | ||
shaharkazaz marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| } | ||
|
|
||
| if (isTmplAstDeferredBlock(node)) { | ||
| return [ | ||
| ...node.children, | ||
| ...[node.loading, node.error, node.placeholder].filter(isNotNull), | ||
shaharkazaz marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| ]; | ||
| } | ||
|
|
||
| if (isTmplAstSwitchBlock(node)) { | ||
| return node.cases; | ||
| } | ||
|
|
||
| if (isBlockWithChildren(node)) { | ||
| return node.children; | ||
| } | ||
|
|
||
| return []; | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.