mirror of https://github.com/Squidex/squidex.git
51 changed files with 688 additions and 789 deletions
@ -1,70 +1,62 @@ |
|||||
<sqx-title message="{app} | Assets" parameter1="app" [value1]="ctx.appName"></sqx-title> |
<sqx-title message="{app} | Assets" parameter1="app" [value1]="ctx.appName"></sqx-title> |
||||
|
|
||||
<sqx-panel desiredWidth="60rem"> |
<sqx-panel desiredWidth="60rem"> |
||||
<div class="panel-header"> |
<ng-container title> |
||||
<div class="panel-title-row"> |
Assets |
||||
<div class="float-right"> |
</ng-container> |
||||
<button class="btn btn-link btn-secondary" (click)="load(true)" title="Refresh Assets (CTRL + SHIFT + R)"> |
|
||||
<i class="icon-reset"></i> Refresh |
<ng-container header> |
||||
</button> |
<button class="btn btn-link btn-secondary" (click)="load(true)" title="Refresh Assets (CTRL + SHIFT + R)"> |
||||
|
<i class="icon-reset"></i> Refresh |
||||
<sqx-shortcut keys="ctrl+shift+r" (trigger)="load(true)"></sqx-shortcut> |
</button> |
||||
<sqx-shortcut keys="ctrl+shift+f" (trigger)="inputFind.focus()"></sqx-shortcut> |
|
||||
|
<sqx-shortcut keys="ctrl+shift+r" (trigger)="load(true)"></sqx-shortcut> |
||||
<form class="form-inline" (ngSubmit)="search()"> |
<sqx-shortcut keys="ctrl+shift+f" (trigger)="inputFind.focus()"></sqx-shortcut> |
||||
<input class="form-control" #inputFind [formControl]="assetsFilter" placeholder="Search for assets" /> |
|
||||
</form> |
<form class="form-inline" (ngSubmit)="search()"> |
||||
|
<input class="form-control" #inputFind [formControl]="assetsFilter" placeholder="Search for assets" /> |
||||
|
</form> |
||||
|
</ng-container> |
||||
|
|
||||
|
<ng-container content> |
||||
|
<div class="file-drop" (sqxFileDrop)="addFiles($event)"> |
||||
|
<h3 class="file-drop-header">Drop files here to upload</h3> |
||||
|
|
||||
|
<div class="file-drop-or">or</div> |
||||
|
|
||||
|
<div class="file-drop-button"> |
||||
|
<span class="btn btn-success" (click)="fileInput.click()"> |
||||
|
<span>Select File(s)</span> |
||||
|
|
||||
|
<input class="file-drop-button-input" type="file" (change)="addFiles($event.target.files)" #fileInput multiple /> |
||||
|
</span> |
||||
</div> |
</div> |
||||
|
|
||||
<h3 class="panel-title">Assets</h3> |
<div class="file-drop-info">Drop file on existing item to replace the asset with a newer version.</div> |
||||
</div> |
</div> |
||||
|
|
||||
<a class="panel-close" sqxParentLink isLazyLoaded="true"> |
<div class="row"> |
||||
<i class="icon-close"></i> |
<sqx-asset class="col-3" *ngFor="let file of newFiles" [initFile]="file" |
||||
</a> |
(failed)="onAssetFailed(file)" |
||||
</div> |
(loaded)="onAssetLoaded(file, $event)"> |
||||
|
</sqx-asset> |
||||
<div class="panel-main"> |
<sqx-asset class="col-3" *ngFor="let asset of assetsItems" [asset]="asset" |
||||
<div class="panel-content panel-content-scroll"> |
(deleting)="onAssetDeleting($event)" |
||||
<div class="file-drop" (sqxFileDrop)="addFiles($event)"> |
(updated)="onAssetUpdated($event)"> |
||||
<h3 class="file-drop-header">Drop files here to upload</h3> |
</sqx-asset> |
||||
|
</div> |
||||
<div class="file-drop-or">or</div> |
|
||||
|
|
||||
<div class="file-drop-button"> |
|
||||
<span class="btn btn-success" (click)="fileInput.click()"> |
|
||||
<span>Select File(s)</span> |
|
||||
|
|
||||
<input class="file-drop-button-input" type="file" (change)="addFiles($event.target.files)" #fileInput multiple /> |
|
||||
</span> |
|
||||
</div> |
|
||||
|
|
||||
<div class="file-drop-info">Drop file on existing item to replace the asset with a newer version.</div> |
|
||||
</div> |
|
||||
|
|
||||
<div class="row"> |
|
||||
<sqx-asset class="col-3" *ngFor="let file of newFiles" [initFile]="file" |
|
||||
(failed)="onAssetFailed(file)" |
|
||||
(loaded)="onAssetLoaded(file, $event)"> |
|
||||
</sqx-asset> |
|
||||
<sqx-asset class="col-3" *ngFor="let asset of assetsItems" [asset]="asset" |
|
||||
(deleting)="onAssetDeleting($event)" |
|
||||
(updated)="onAssetUpdated($event)"> |
|
||||
</sqx-asset> |
|
||||
</div> |
|
||||
|
|
||||
<div class="clearfix" *ngIf="assetsPager.numberOfItems > 0"> |
<div class="clearfix" *ngIf="assetsPager.numberOfItems > 0"> |
||||
<div class="float-right pagination"> |
<div class="float-right pagination"> |
||||
<span class="pagination-text">{{assetsPager.itemFirst}}-{{assetsPager.itemLast}} of {{assetsPager.numberOfItems}}</span> |
<span class="pagination-text">{{assetsPager.itemFirst}}-{{assetsPager.itemLast}} of {{assetsPager.numberOfItems}}</span> |
||||
|
|
||||
<button class="btn btn-link btn-secondary pagination-button" [disabled]="!assetsPager.canGoPrev" (click)="goPrev()"> |
<button class="btn btn-link btn-secondary pagination-button" [disabled]="!assetsPager.canGoPrev" (click)="goPrev()"> |
||||
<i class="icon-angle-left"></i> |
<i class="icon-angle-left"></i> |
||||
</button> |
</button> |
||||
<button class="btn btn-link btn-secondary pagination-button" [disabled]="!assetsPager.canGoNext" (click)="goNext()"> |
<button class="btn btn-link btn-secondary pagination-button" [disabled]="!assetsPager.canGoNext" (click)="goNext()"> |
||||
<i class="icon-angle-right"></i> |
<i class="icon-angle-right"></i> |
||||
</button> |
</button> |
||||
</div> |
|
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</div> |
</ng-container> |
||||
</sqx-panel> |
</sqx-panel> |
||||
|
|||||
@ -1,29 +1,21 @@ |
|||||
<sqx-panel desiredWidth="16rem"> |
<sqx-panel desiredWidth="16rem" isBlank="true"> |
||||
<div class="panel-header"> |
<ng-container title> |
||||
<div class="panel-title-row"> |
Activity |
||||
<h3 class="panel-title">Activity</h3> |
</ng-container> |
||||
</div> |
|
||||
|
|
||||
<a class="panel-close" sqxParentLink> |
|
||||
<i class="icon-close"></i> |
|
||||
</a> |
|
||||
</div> |
|
||||
|
|
||||
<div class="panel-main"> |
<ng-container content> |
||||
<div class="panel-content panel-content-blank"> |
<div *ngFor="let event of events | async" class="event"> |
||||
<div *ngFor="let event of events | async" class="event"> |
<div class="event-left"> |
||||
<div class="event-left"> |
<img class="user-picture" [attr.title]="event.actor | sqxUserNameRef:null" [attr.src]="event.actor | sqxUserPictureRef" /> |
||||
<img class="user-picture" [attr.title]="event.actor | sqxUserNameRef:null" [attr.src]="event.actor | sqxUserPictureRef" /> |
</div> |
||||
|
<div class="event-main"> |
||||
|
<div class="event-message"> |
||||
|
<span class="event-actor user-ref">{{event.actor | sqxUserNameRef:null}}</span> <span [innerHTML]="format(event.message) | async"></span> |
||||
</div> |
</div> |
||||
<div class="event-main"> |
<div class="event-created">{{event.created | sqxFromNow}}</div> |
||||
<div class="event-message"> |
|
||||
<span class="event-actor user-ref">{{event.actor | sqxUserNameRef:null}}</span> <span [innerHTML]="format(event.message) | async"></span> |
|
||||
</div> |
|
||||
<div class="event-created">{{event.created | sqxFromNow}}</div> |
|
||||
|
|
||||
<a class="event-load" (click)="loadVersion(event.version)">Load this Version</a> |
<a class="event-load" (click)="loadVersion(event.version)">Load this Version</a> |
||||
</div> |
</div> |
||||
</div> |
|
||||
</div> |
</div> |
||||
</div> |
</ng-container> |
||||
</sqx-panel> |
</sqx-panel> |
||||
@ -1,35 +1,27 @@ |
|||||
<sqx-title message="{app} | Schemas" parameter1="app" [value1]="ctx.appName"></sqx-title> |
<sqx-title message="{app} | Schemas" parameter1="app" [value1]="ctx.appName"></sqx-title> |
||||
|
|
||||
<sqx-panel theme="dark" desiredWidth="16rem"> |
<sqx-panel theme="dark" desiredWidth="16rem" showSecondHeader="true"> |
||||
<div class="panel-header"> |
<ng-container title> |
||||
<div class="panel-title-row"> |
Schemas |
||||
<h3 class="panel-title">Schemas</h3> |
</ng-container> |
||||
</div> |
|
||||
|
|
||||
<a class="panel-close" sqxParentLink isLazyLoaded="true"> |
|
||||
<i class="icon-close"></i> |
|
||||
</a> |
|
||||
|
|
||||
<div class="panel-header-row"> |
<ng-container secondHeader> |
||||
<sqx-shortcut keys="ctrl+shift+f" (trigger)="inputFind.focus()"></sqx-shortcut> |
<sqx-shortcut keys="ctrl+shift+f" (trigger)="inputFind.focus()"></sqx-shortcut> |
||||
|
|
||||
<div class="search-form"> |
<div class="search-form"> |
||||
<input class="form-control form-control-dark" #inputFind [formControl]="schemasFilter" placeholder="Search for schemas" /> |
<input class="form-control form-control-dark" #inputFind [formControl]="schemasFilter" placeholder="Search for schemas" /> |
||||
|
|
||||
<i class="icon-search"></i> |
<i class="icon-search"></i> |
||||
</div> |
|
||||
</div> |
</div> |
||||
</div> |
</ng-container> |
||||
|
|
||||
<div class="panel-main"> |
<ng-container content> |
||||
<div class="panel-content"> |
<ul class="nav nav-panel nav-dark nav-dark-bordered flex-column"> |
||||
<ul class="nav nav-panel nav-dark nav-dark-bordered flex-column"> |
<li class="nav-item" *ngFor="let schema of schemasFiltered | async"> |
||||
<li class="nav-item" *ngFor="let schema of schemasFiltered | async"> |
<a class="nav-link" [routerLink]="schema.name" routerLinkActive="active">{{schema.displayName}} <i class="icon-angle-right"></i></a> |
||||
<a class="nav-link" [routerLink]="schema.name" routerLinkActive="active">{{schema.displayName}} <i class="icon-angle-right"></i></a> |
</li> |
||||
</li> |
</ul> |
||||
</ul> |
</ng-container> |
||||
</div> |
|
||||
</div> |
|
||||
</sqx-panel> |
</sqx-panel> |
||||
|
|
||||
<router-outlet></router-outlet> |
<router-outlet></router-outlet> |
||||
@ -1,116 +1,108 @@ |
|||||
<sqx-title message="{app} | Rules Events" parameter1="app" [value1]="ctx.appName"></sqx-title> |
<sqx-title message="{app} | Rules Events" parameter1="app" [value1]="ctx.appName"></sqx-title> |
||||
|
|
||||
<sqx-panel desiredWidth="63rem"> |
<sqx-panel desiredWidth="63rem"> |
||||
<div class="panel-header"> |
<ng-container title> |
||||
<div class="panel-title-row"> |
Events |
||||
<div class="float-right"> |
</ng-container> |
||||
<button class="btn btn-link btn-secondary" (click)="load(true)" title="Refresh Events (CTRL + SHIFT + R)"> |
|
||||
<i class="icon-reset"></i> Refresh |
<ng-container header> |
||||
</button> |
<button class="btn btn-link btn-secondary" (click)="load(true)" title="Refresh Events (CTRL + SHIFT + R)"> |
||||
|
<i class="icon-reset"></i> Refresh |
||||
|
</button> |
||||
|
|
||||
<sqx-shortcut keys="ctrl+shift+r" (trigger)="load(true)"></sqx-shortcut> |
<sqx-shortcut keys="ctrl+shift+r" (trigger)="load(true)"></sqx-shortcut> |
||||
</div> |
</ng-container> |
||||
|
|
||||
<h3 class="panel-title">Events</h3> |
<ng-container content> |
||||
</div> |
<table class="table table-items table-fixed"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th class="cell-label"> |
||||
|
Status |
||||
|
</th> |
||||
|
<th class="cell-40"> |
||||
|
Event |
||||
|
</th> |
||||
|
<th class="cell-60"> |
||||
|
Description |
||||
|
</th> |
||||
|
<th class="cell-time"> |
||||
|
Created |
||||
|
</th> |
||||
|
<th class="cell-actions"> |
||||
|
|
||||
<a class="panel-close" sqxParentLink isLazyLoaded="true"> |
</th> |
||||
<i class="icon-close"></i> |
</tr> |
||||
</a> |
</thead> |
||||
</div> |
|
||||
|
|
||||
<div class="panel-main"> |
<tbody> |
||||
<div class="panel-content panel-content-scroll"> |
<ng-template ngFor let-event [ngForOf]="eventsItems"> |
||||
<table class="table table-items table-fixed"> |
<tr [class.expanded]="selectedEventId === event.id"> |
||||
<thead> |
<td class="cell-label"> |
||||
<tr> |
<span class="badge badge-pill badge-{{getBadgeClass(event.jobResult)}}">{{event.jobResult}}</span> |
||||
<th class="cell-label"> |
</td> |
||||
Status |
<td class="cell-40"> |
||||
</th> |
<span class="truncate">{{event.eventName}}</span> |
||||
<th class="cell-40"> |
</td> |
||||
Event |
<td class="cell-60"> |
||||
</th> |
<span class="truncate">{{event.description}}</span> |
||||
<th class="cell-60"> |
</td> |
||||
Description |
<td class="cell-time"> |
||||
</th> |
<small class="item-modified">{{event.created | sqxFromNow}}</small> |
||||
<th class="cell-time"> |
</td> |
||||
Created |
<td class="cell-actions"> |
||||
</th> |
<button type="button" class="btn btn-secondary table-items-edit-button" [class.active]="selectedEventId === event.id" (click)="selectEvent(event.id)"> |
||||
<th class="cell-actions"> |
<i class="icon-settings"></i> |
||||
|
</button> |
||||
</th> |
</td> |
||||
</tr> |
</tr> |
||||
</thead> |
<tr *ngIf="selectedEventId === event.id"> |
||||
|
<td colspan="5"> |
||||
<tbody> |
<div class="event-header"> |
||||
<ng-template ngFor let-event [ngForOf]="eventsItems"> |
<h3>Last Invocation</h3> |
||||
<tr [class.expanded]="selectedEventId === event.id"> |
</div> |
||||
<td class="cell-label"> |
|
||||
<span class="badge badge-pill badge-{{getBadgeClass(event.jobResult)}}">{{event.jobResult}}</span> |
<div class="row event-stats"> |
||||
</td> |
<div class="col-3"> |
||||
<td class="cell-40"> |
<span class="badge badge-pill badge-{{getBadgeClass(event.result)}}">{{event.result}}</span> |
||||
<span class="truncate">{{event.eventName}}</span> |
|
||||
</td> |
|
||||
<td class="cell-60"> |
|
||||
<span class="truncate">{{event.description}}</span> |
|
||||
</td> |
|
||||
<td class="cell-time"> |
|
||||
<small class="item-modified">{{event.created | sqxFromNow}}</small> |
|
||||
</td> |
|
||||
<td class="cell-actions"> |
|
||||
<button type="button" class="btn btn-secondary table-items-edit-button" [class.active]="selectedEventId === event.id" (click)="selectEvent(event.id)"> |
|
||||
<i class="icon-settings"></i> |
|
||||
</button> |
|
||||
</td> |
|
||||
</tr> |
|
||||
<tr *ngIf="selectedEventId === event.id"> |
|
||||
<td colspan="5"> |
|
||||
<div class="event-header"> |
|
||||
<h3>Last Invocation</h3> |
|
||||
</div> |
</div> |
||||
|
<div class="col-3"> |
||||
<div class="row event-stats"> |
Attempts: {{event.numCalls}} |
||||
<div class="col-3"> |
|
||||
<span class="badge badge-pill badge-{{getBadgeClass(event.result)}}">{{event.result}}</span> |
|
||||
</div> |
|
||||
<div class="col-3"> |
|
||||
Attempts: {{event.numCalls}} |
|
||||
</div> |
|
||||
<div class="col-3"> |
|
||||
Next: <span *ngIf="event.nextAttempt">{{event.nextAttempt | sqxFromNow}}</span> |
|
||||
</div> |
|
||||
<div class="col-3 text-right"> |
|
||||
<button class="btn btn-success btn-sm" (click)="enqueueEvent(event)"> |
|
||||
Enqueue |
|
||||
</button> |
|
||||
</div> |
|
||||
</div> |
</div> |
||||
<div class="row"> |
<div class="col-3"> |
||||
<div class="col-12"> |
Next: <ng-container *ngIf="event.nextAttempt">{{event.nextAttempt | sqxFromNow}}</ng-container> |
||||
<textarea class="event-dump form-control" readonly>{{event.lastDump}}</textarea> |
|
||||
</div> |
|
||||
</div> |
</div> |
||||
</td> |
<div class="col-3 text-right"> |
||||
</tr> |
<button class="btn btn-success btn-sm" (click)="enqueueEvent(event)"> |
||||
<tr class="spacer"></tr> |
Enqueue |
||||
</ng-template> |
</button> |
||||
</tbody> |
</div> |
||||
</table> |
</div> |
||||
|
<div class="row"> |
||||
|
<div class="col-12"> |
||||
|
<textarea class="event-dump form-control" readonly>{{event.lastDump}}</textarea> |
||||
|
</div> |
||||
|
</div> |
||||
|
</td> |
||||
|
</tr> |
||||
|
<tr class="spacer"></tr> |
||||
|
</ng-template> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
|
||||
<div class="clearfix" *ngIf="eventsPager.numberOfItems > 0"> |
<div class="clearfix" *ngIf="eventsPager.numberOfItems > 0"> |
||||
<div class="float-right pagination"> |
<div class="float-right pagination"> |
||||
<span class="pagination-text">{{eventsPager.itemFirst}}-{{eventsPager.itemLast}} of {{eventsPager.numberOfItems}}</span> |
<span class="pagination-text">{{eventsPager.itemFirst}}-{{eventsPager.itemLast}} of {{eventsPager.numberOfItems}}</span> |
||||
|
|
||||
<button class="btn btn-link btn-secondary pagination-button" [disabled]="!eventsPager.canGoPrev" (click)="goPrev()"> |
<button class="btn btn-link btn-secondary pagination-button" [disabled]="!eventsPager.canGoPrev" (click)="goPrev()"> |
||||
<i class="icon-angle-left"></i> |
<i class="icon-angle-left"></i> |
||||
</button> |
</button> |
||||
<button class="btn btn-link btn-secondary pagination-button" [disabled]="!eventsPager.canGoNext" (click)="goNext()"> |
<button class="btn btn-link btn-secondary pagination-button" [disabled]="!eventsPager.canGoNext" (click)="goNext()"> |
||||
<i class="icon-angle-right"></i> |
<i class="icon-angle-right"></i> |
||||
</button> |
</button> |
||||
</div> |
|
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</div> |
</ng-container> |
||||
</sqx-panel> |
</sqx-panel> |
||||
|
|
||||
<router-outlet></router-outlet> |
<router-outlet></router-outlet> |
||||
@ -1,127 +1,122 @@ |
|||||
<div class="modal-dialog modal-lg"> |
<sqx-modal-dialog large="true" (close)="cancel()"> |
||||
<div class="modal-content"> |
<ng-container title> |
||||
<div class="modal-header"> |
<ng-container *ngIf="mode === 'EditTrigger'"> |
||||
<h4 class="modal-title" *ngIf="mode === 'EditTrigger'"> |
Edit Trigger |
||||
Edit Trigger |
</ng-container> |
||||
</h4> |
<ng-container *ngIf="mode === 'EditAction'"> |
||||
<h4 class="modal-title" *ngIf="mode === 'EditAction'"> |
Edit Action |
||||
Edit Action |
</ng-container> |
||||
</h4> |
<ng-container *ngIf="mode === 'Wizard' && step === 1"> |
||||
<h4 class="modal-title" *ngIf="mode === 'Wizard' && step === 1"> |
Step 1 of 4: Select Trigger |
||||
Step 1 of 4: Select Trigger |
</ng-container> |
||||
</h4> |
<ng-container *ngIf="mode === 'Wizard' && step === 2"> |
||||
<h4 class="modal-title" *ngIf="mode === 'Wizard' && step === 2"> |
Step 2 of 4: Configure Trigger |
||||
Step 2 of 4: Configure Trigger |
</ng-container> |
||||
</h4> |
<ng-container *ngIf="mode === 'Wizard' && step === 3"> |
||||
<h4 class="modal-title" *ngIf="mode === 'Wizard' && step === 3"> |
Step 3 of 4: Select Action |
||||
Step 3 of 4: Select Action |
</ng-container> |
||||
</h4> |
<ng-container *ngIf="mode === 'Wizard' && step === 4"> |
||||
<h4 class="modal-title" *ngIf="mode === 'Wizard' && step === 4"> |
Step 4 of 4: Configure Action |
||||
Step 4 of 4: Configure Action |
</ng-container> |
||||
</h4> |
</ng-container> |
||||
|
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close" (click)="cancel()"> |
|
||||
<span aria-hidden="true">×</span> |
|
||||
</button> |
|
||||
</div> |
|
||||
|
|
||||
<div class="modal-body"> |
<ng-container content> |
||||
<div *ngIf="step === 1"> |
<ng-container *ngIf="step === 1"> |
||||
<span *ngFor="let trigger of ruleTriggers | sqxKeys" class="rule-element rule-element-{{trigger}}" (click)="selectTriggerType(trigger)"> |
<span *ngFor="let trigger of ruleTriggers | sqxKeys" class="rule-element rule-element-{{trigger}}" (click)="selectTriggerType(trigger)"> |
||||
<span class="rule-element-icon"> |
<span class="rule-element-icon"> |
||||
<i class="icon-trigger-{{trigger}}"></i> |
<i class="icon-trigger-{{trigger}}"></i> |
||||
</span> |
|
||||
<span class="rule-element-text"> |
|
||||
{{ruleTriggers[trigger].name}} |
|
||||
</span> |
|
||||
</span> |
</span> |
||||
</div> |
<span class="rule-element-text"> |
||||
|
{{ruleTriggers[trigger].name}} |
||||
<div *ngIf="step === 2 && schemas" class="modal-form"> |
</span> |
||||
<div [ngSwitch]="triggerType"> |
</span> |
||||
<div *ngSwitchCase="'AssetChanged'"> |
</ng-container> |
||||
<sqx-asset-changed-trigger #triggerControl |
|
||||
[trigger]="trigger" |
|
||||
(triggerChanged)="selectTrigger($event)"> |
|
||||
</sqx-asset-changed-trigger> |
|
||||
</div> |
|
||||
<div *ngSwitchCase="'ContentChanged'"> |
|
||||
<sqx-content-changed-trigger #triggerControl |
|
||||
[schemas]="schemas" |
|
||||
[trigger]="trigger" |
|
||||
(triggerChanged)="selectTrigger($event)"> |
|
||||
</sqx-content-changed-trigger> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
|
|
||||
<div *ngIf="step === 3"> |
<ng-container *ngIf="step === 2 && schemas"> |
||||
<span *ngFor="let action of ruleActions | sqxKeys" class="rule-element rule-element-{{action}}" (click)="selectActionType(action)"> |
<ng-container [ngSwitch]="triggerType"> |
||||
<span class="rule-element-icon"> |
<ng-container *ngSwitchCase="'AssetChanged'"> |
||||
<i class="icon-action-{{action}}"></i> |
<sqx-asset-changed-trigger #triggerControl |
||||
</span> |
[trigger]="trigger" |
||||
<span class="rule-element-text"> |
(triggerChanged)="selectTrigger($event)"> |
||||
{{ruleActions[action].name}} |
</sqx-asset-changed-trigger> |
||||
</span> |
</ng-container> |
||||
|
<ng-container *ngSwitchCase="'ContentChanged'"> |
||||
|
<sqx-content-changed-trigger #triggerControl |
||||
|
[schemas]="schemas" |
||||
|
[trigger]="trigger" |
||||
|
(triggerChanged)="selectTrigger($event)"> |
||||
|
</sqx-content-changed-trigger> |
||||
|
</ng-container> |
||||
|
</ng-container> |
||||
|
</ng-container> |
||||
|
|
||||
|
<ng-container *ngIf="step === 3"> |
||||
|
<span *ngFor="let action of ruleActions | sqxKeys" class="rule-element rule-element-{{action}}" (click)="selectActionType(action)"> |
||||
|
<span class="rule-element-icon"> |
||||
|
<i class="icon-action-{{action}}"></i> |
||||
|
</span> |
||||
|
<span class="rule-element-text"> |
||||
|
{{ruleActions[action].name}} |
||||
</span> |
</span> |
||||
</div> |
</span> |
||||
|
</ng-container> |
||||
|
|
||||
|
<ng-container *ngIf="step === 4"> |
||||
|
<ng-container [ngSwitch]="actionType"> |
||||
|
<ng-container *ngSwitchCase="'Algolia'"> |
||||
|
<sqx-algolia-action #actionControl |
||||
|
[action]="action" |
||||
|
(actionChanged)="selectAction($event)"> |
||||
|
</sqx-algolia-action> |
||||
|
</ng-container> |
||||
|
<ng-container *ngSwitchCase="'AzureQueue'"> |
||||
|
<sqx-azure-queue-action #actionControl |
||||
|
[action]="action" |
||||
|
(actionChanged)="selectAction($event)"> |
||||
|
</sqx-azure-queue-action> |
||||
|
</ng-container> |
||||
|
<ng-container *ngSwitchCase="'ElasticSearch'"> |
||||
|
<sqx-elastic-search-action #actionControl |
||||
|
[action]="action" |
||||
|
(actionChanged)="selectAction($event)"> |
||||
|
</sqx-elastic-search-action> |
||||
|
</ng-container> |
||||
|
<ng-container *ngSwitchCase="'Fastly'"> |
||||
|
<sqx-fastly-action #actionControl |
||||
|
[action]="action" |
||||
|
(actionChanged)="selectAction($event)"> |
||||
|
</sqx-fastly-action> |
||||
|
</ng-container> |
||||
|
<ng-container *ngSwitchCase="'Slack'"> |
||||
|
<sqx-slack-action #actionControl |
||||
|
[action]="action" |
||||
|
(actionChanged)="selectAction($event)"> |
||||
|
</sqx-slack-action> |
||||
|
</ng-container> |
||||
|
<ng-container *ngSwitchCase="'Webhook'"> |
||||
|
<sqx-webhook-action #actionControl |
||||
|
[action]="action" |
||||
|
(actionChanged)="selectAction($event)"> |
||||
|
</sqx-webhook-action> |
||||
|
</ng-container> |
||||
|
</ng-container> |
||||
|
</ng-container> |
||||
|
</ng-container> |
||||
|
|
||||
|
<ng-container footer> |
||||
|
<ng-container *ngIf="mode === 'Wizard' && step === 2"> |
||||
|
<button type="reset" class="float-left btn btn-secondary" (click)="cancel()">Cancel</button> |
||||
|
<button type="submit" class="float-right btn btn-primary" (click)="triggerControl.save()">Next</button> |
||||
|
</ng-container> |
||||
|
|
||||
<div *ngIf="step === 4" class="modal-form"> |
<ng-container *ngIf="mode !== 'Wizard' && step === 2"> |
||||
<div [ngSwitch]="actionType"> |
<button type="reset" class="float-left btn btn-secondary" (click)="cancel()">Cancel</button> |
||||
<div *ngSwitchCase="'Algolia'"> |
<button type="submit" class="float-right btn btn-primary" (click)="triggerControl.save()">Save</button> |
||||
<sqx-algolia-action #actionControl |
</ng-container> |
||||
[action]="action" |
|
||||
(actionChanged)="selectAction($event)"> |
|
||||
</sqx-algolia-action> |
|
||||
</div> |
|
||||
<div *ngSwitchCase="'AzureQueue'"> |
|
||||
<sqx-azure-queue-action #actionControl |
|
||||
[action]="action" |
|
||||
(actionChanged)="selectAction($event)"> |
|
||||
</sqx-azure-queue-action> |
|
||||
</div> |
|
||||
<div *ngSwitchCase="'ElasticSearch'"> |
|
||||
<sqx-elastic-search-action #actionControl |
|
||||
[action]="action" |
|
||||
(actionChanged)="selectAction($event)"> |
|
||||
</sqx-elastic-search-action> |
|
||||
</div> |
|
||||
<div *ngSwitchCase="'Fastly'"> |
|
||||
<sqx-fastly-action #actionControl |
|
||||
[action]="action" |
|
||||
(actionChanged)="selectAction($event)"> |
|
||||
</sqx-fastly-action> |
|
||||
</div> |
|
||||
<div *ngSwitchCase="'Slack'"> |
|
||||
<sqx-slack-action #actionControl |
|
||||
[action]="action" |
|
||||
(actionChanged)="selectAction($event)"> |
|
||||
</sqx-slack-action> |
|
||||
</div> |
|
||||
<div *ngSwitchCase="'Webhook'"> |
|
||||
<sqx-webhook-action #actionControl |
|
||||
[action]="action" |
|
||||
(actionChanged)="selectAction($event)"> |
|
||||
</sqx-webhook-action> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="modal-footer" *ngIf="step === 2 || step === 4"> |
|
||||
<div class="clearfix" *ngIf="mode === 'Wizard' && step === 2"> |
|
||||
<button type="reset" class="float-left btn btn-secondary" (click)="cancel()">Cancel</button> |
|
||||
<button type="submit" class="float-right btn btn-primary" (click)="triggerControl.save()">Next</button> |
|
||||
</div> |
|
||||
|
|
||||
<div class="clearfix" *ngIf="mode !== 'Wizard' && step === 2"> |
|
||||
<button type="reset" class="float-left btn btn-secondary" (click)="cancel()">Cancel</button> |
|
||||
<button type="submit" class="float-right btn btn-primary" (click)="triggerControl.save()">Save</button> |
|
||||
</div> |
|
||||
|
|
||||
<div class="clearfix" *ngIf="step === 4"> |
<ng-container *ngIf="step === 4"> |
||||
<button type="reset" class="float-left btn btn-secondary" (click)="cancel()">Cancel</button> |
<button type="reset" class="float-left btn btn-secondary" (click)="cancel()">Cancel</button> |
||||
<button type="submit" class="float-right btn btn-primary" (click)="actionControl.save()">Save</button> |
<button type="submit" class="float-right btn btn-primary" (click)="actionControl.save()">Save</button> |
||||
</div> |
</ng-container> |
||||
</div> |
</ng-container> |
||||
</div> |
</sqx-modal-dialog> |
||||
</div> |
|
||||
@ -1,107 +1,97 @@ |
|||||
<sqx-title message="{app} | Rules" parameter1="app" [value1]="ctx.appName"></sqx-title> |
<sqx-title message="{app} | Rules" parameter1="app" [value1]="ctx.appName"></sqx-title> |
||||
|
|
||||
<sqx-panel desiredWidth="54rem"> |
<sqx-panel desiredWidth="54rem"> |
||||
<div class="panel-header"> |
<ng-container title> |
||||
<div class="panel-title-row"> |
Rules |
||||
<div class="float-right"> |
</ng-container> |
||||
<button class="btn btn-link btn-secondary" (click)="load(true)" title="Refresh Assets (CTRL + SHIFT + R)"> |
|
||||
<i class="icon-reset"></i> Refresh |
|
||||
</button> |
|
||||
|
|
||||
<sqx-shortcut keys="ctrl+shift+r" (trigger)="load(true)"></sqx-shortcut> |
<ng-container header> |
||||
<sqx-shortcut keys="ctrl+shift+g" (trigger)="buttonNew.click()"></sqx-shortcut> |
<button class="btn btn-link btn-secondary" (click)="load(true)" title="Refresh Assets (CTRL + SHIFT + R)"> |
||||
|
<i class="icon-reset"></i> Refresh |
||||
<button class="btn btn-success" #buttonNew (click)="createNew()" title="New Rule (CTRL + M)"> |
</button> |
||||
<i class="icon-plus"></i> New |
|
||||
</button> |
|
||||
</div> |
|
||||
|
|
||||
<h3 class="panel-title"><i class="icon-rules"></i> Rules</h3> |
<sqx-shortcut keys="ctrl+shift+r" (trigger)="load(true)"></sqx-shortcut> |
||||
</div> |
<sqx-shortcut keys="ctrl+shift+g" (trigger)="buttonNew.click()"></sqx-shortcut> |
||||
|
|
||||
<a class="panel-close" sqxParentLink isLazyLoaded="true"> |
<button class="btn btn-success" #buttonNew (click)="createNew()" title="New Rule (CTRL + M)"> |
||||
<i class="icon-close"></i> |
<i class="icon-plus"></i> New |
||||
</a> |
</button> |
||||
</div> |
</ng-container> |
||||
|
|
||||
<div class="panel-main"> |
<ng-container content> |
||||
<div class="panel-content panel-content-scroll"> |
<div class="table-items-row table-items-row-empty" *ngIf="rules && rules.length === 0"> |
||||
<div class="table-items-row table-items-row-empty" *ngIf="rules && rules.length === 0"> |
No Rule created yet. |
||||
No Rule created yet. |
</div> |
||||
</div> |
|
||||
|
|
||||
<table class="table table-items table-fixed" *ngIf="rules && rules.length > 0"> |
<table class="table table-items table-fixed" *ngIf="rules && rules.length > 0"> |
||||
<tbody> |
<tbody> |
||||
<ng-template ngFor let-rule [ngForOf]="rules"> |
<ng-template ngFor let-rule [ngForOf]="rules"> |
||||
<tr> |
<tr> |
||||
<td class="cell-separator"> |
<td class="cell-separator"> |
||||
<h3>If</h3> |
<h3>If</h3> |
||||
</td> |
</td> |
||||
<td class="cell-auto"> |
<td class="cell-auto"> |
||||
<span class="rule-element rule-element-{{rule.triggerType}}" (click)="editTrigger(rule)"> |
<span class="rule-element rule-element-{{rule.triggerType}}" (click)="editTrigger(rule)"> |
||||
<span class="rule-element-icon"> |
<span class="rule-element-icon"> |
||||
<i class="icon-trigger-{{rule.triggerType}}"></i> |
<i class="icon-trigger-{{rule.triggerType}}"></i> |
||||
</span> |
|
||||
<span class="rule-element-text"> |
|
||||
{{ruleTriggers[rule.triggerType].name}} |
|
||||
</span> |
|
||||
</span> |
</span> |
||||
</td> |
<span class="rule-element-text"> |
||||
<td class="cell-separator"> |
{{ruleTriggers[rule.triggerType].name}} |
||||
<h3>then</h3> |
|
||||
</td> |
|
||||
<td class="cell-auto"> |
|
||||
<span class="rule-element rule-element-{{rule.actionType}}" (click)="editAction(rule)"> |
|
||||
<span class="rule-element-icon"> |
|
||||
<i class="icon-action-{{rule.actionType}}"></i> |
|
||||
</span> |
|
||||
<span class="rule-element-text"> |
|
||||
{{ruleActions[rule.actionType].name}} |
|
||||
</span> |
|
||||
</span> |
</span> |
||||
</td> |
</span> |
||||
<td class="cell-actions"> |
</td> |
||||
<sqx-toggle [ngModel]="rule.isEnabled" (ngModelChange)="toggleRule(rule)"></sqx-toggle> |
<td class="cell-separator"> |
||||
</td> |
<h3>then</h3> |
||||
<td class="cell-actions"> |
</td> |
||||
<button type="button" class="btn btn-link btn-danger" |
<td class="cell-auto"> |
||||
(sqxConfirmClick)="deleteRule(rule)" |
<span class="rule-element rule-element-{{rule.actionType}}" (click)="editAction(rule)"> |
||||
confirmTitle="Delete rule" |
<span class="rule-element-icon"> |
||||
confirmText="Do you really want to delete the rule?"> |
<i class="icon-action-{{rule.actionType}}"></i> |
||||
<i class="icon-bin2"></i> |
</span> |
||||
</button> |
<span class="rule-element-text"> |
||||
</td> |
{{ruleActions[rule.actionType].name}} |
||||
</tr> |
</span> |
||||
<tr class="spacer"></tr> |
</span> |
||||
</ng-template> |
</td> |
||||
</tbody> |
<td class="cell-actions"> |
||||
</table> |
<sqx-toggle [ngModel]="rule.isEnabled" (ngModelChange)="toggleRule(rule)"></sqx-toggle> |
||||
</div> |
</td> |
||||
|
<td class="cell-actions"> |
||||
|
<button type="button" class="btn btn-link btn-danger" |
||||
|
(sqxConfirmClick)="deleteRule(rule)" |
||||
|
confirmTitle="Delete rule" |
||||
|
confirmText="Do you really want to delete the rule?"> |
||||
|
<i class="icon-bin2"></i> |
||||
|
</button> |
||||
|
</td> |
||||
|
</tr> |
||||
|
<tr class="spacer"></tr> |
||||
|
</ng-template> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</ng-container> |
||||
|
|
||||
<div class="panel-sidebar"> |
<ng-container sidebar> |
||||
<a class="panel-link" routerLink="events" routerLinkActive="active" #linkHistory> |
<a class="panel-link" routerLink="events" routerLinkActive="active" #linkHistory> |
||||
<i class="icon-time"></i> |
<i class="icon-time"></i> |
||||
</a> |
</a> |
||||
|
|
||||
<a class="panel-link" routerLink="help" routerLinkActive="active" #linkHelp> |
<a class="panel-link" routerLink="help" routerLinkActive="active" #linkHelp> |
||||
<i class="icon-help"></i> |
<i class="icon-help"></i> |
||||
</a> |
</a> |
||||
|
|
||||
<sqx-onboarding-tooltip id="help" [for]="linkHelp" position="leftTop" after="180000"> |
<sqx-onboarding-tooltip id="help" [for]="linkHelp" position="leftTop" after="180000"> |
||||
Click the help icon to show a context specific help page. Go to <a href="https://docs.squidex.io" target="_blank">https://docs.squidex.io</a> for the full documentation. |
Click the help icon to show a context specific help page. Go to <a href="https://docs.squidex.io" target="_blank">https://docs.squidex.io</a> for the full documentation. |
||||
</sqx-onboarding-tooltip> |
</sqx-onboarding-tooltip> |
||||
</div> |
</ng-container> |
||||
</div> |
|
||||
</sqx-panel> |
</sqx-panel> |
||||
|
|
||||
<div class="modal" *sqxModalView="addRuleDialog;onRoot:true;closeAuto:false" @fade> |
<ng-container *sqxModalView="addRuleDialog;onRoot:true;closeAuto:false"> |
||||
<div class="modal-backdrop"></div> |
|
||||
|
|
||||
<sqx-rule-wizard [schemas]="schemas" [rule]="wizardRule" [mode]="wizardMode" |
<sqx-rule-wizard [schemas]="schemas" [rule]="wizardRule" [mode]="wizardMode" |
||||
(updated)="onRuleUpdated($event)" |
(updated)="onRuleUpdated($event)" |
||||
(cancelled)="addRuleDialog.hide()" |
(cancelled)="addRuleDialog.hide()" |
||||
(created)="onRuleCreated($event)"> |
(created)="onRuleCreated($event)"> |
||||
</sqx-rule-wizard> |
</sqx-rule-wizard> |
||||
</div> |
</ng-container> |
||||
|
|
||||
<router-outlet></router-outlet> |
<router-outlet></router-outlet> |
||||
@ -0,0 +1,3 @@ |
|||||
|
<ng-container *ngIf="error"> |
||||
|
<div class="form-alert form-alert-error" [innerHTML]="error" @fade></div> |
||||
|
</ng-container> |
||||
@ -0,0 +1,2 @@ |
|||||
|
@import '_mixins'; |
||||
|
@import '_vars'; |
||||
@ -0,0 +1,24 @@ |
|||||
|
/* |
||||
|
* Squidex Headless CMS |
||||
|
* |
||||
|
* @license |
||||
|
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. |
||||
|
*/ |
||||
|
|
||||
|
import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; |
||||
|
|
||||
|
import { fadeAnimation } from './../animations'; |
||||
|
|
||||
|
@Component({ |
||||
|
selector: 'sqx-form-error', |
||||
|
styleUrls: ['./form-error.component.scss'], |
||||
|
templateUrl: './form-error.component.html', |
||||
|
animations: [ |
||||
|
fadeAnimation |
||||
|
], |
||||
|
changeDetection: ChangeDetectionStrategy.OnPush |
||||
|
}) |
||||
|
export class FormErrorComponent { |
||||
|
@Input() |
||||
|
public error: string; |
||||
|
} |
||||
@ -1,17 +1,9 @@ |
|||||
<sqx-panel desiredWidth="16rem"> |
<sqx-panel desiredWidth="16rem" isBlank="true"> |
||||
<div class="panel-header"> |
<ng-container title> |
||||
<div class="panel-title-row"> |
Help |
||||
<h3 class="panel-title">Help</h3> |
</ng-container> |
||||
</div> |
|
||||
|
|
||||
<a class="panel-close" sqxParentLink> |
<ng-container content> |
||||
<i class="icon-close"></i> |
<p *ngFor="let section of helpSections | async" [innerHTML]="section"></p> |
||||
</a> |
</ng-container> |
||||
</div> |
|
||||
|
|
||||
<div class="panel-main"> |
|
||||
<div class="panel-content panel-content-blank"> |
|
||||
<p *ngFor="let section of helpSections | async" [innerHTML]="section"></p> |
|
||||
</div> |
|
||||
</div> |
|
||||
</sqx-panel> |
</sqx-panel> |
||||
@ -1,27 +1,19 @@ |
|||||
<sqx-panel desiredWidth="16rem"> |
<sqx-panel desiredWidth="16rem" isBlank="true"> |
||||
<div class="panel-header"> |
<ng-container title> |
||||
<div class="panel-title-row"> |
Activity |
||||
<h3 class="panel-title">Activity</h3> |
</ng-container> |
||||
</div> |
|
||||
|
|
||||
<a class="panel-close" sqxParentLink> |
|
||||
<i class="icon-close"></i> |
|
||||
</a> |
|
||||
</div> |
|
||||
|
|
||||
<div class="panel-main"> |
<ng-container content> |
||||
<div class="panel-content panel-content-blank"> |
<div *ngFor="let event of events | async" class="event"> |
||||
<div *ngFor="let event of events | async" class="event"> |
<div class="event-left"> |
||||
<div class="event-left"> |
<img class="user-picture" [attr.title]="event.actor | sqxUserNameRef:null" [attr.src]="event.actor | sqxUserPictureRef" /> |
||||
<img class="user-picture" [attr.title]="event.actor | sqxUserNameRef:null" [attr.src]="event.actor | sqxUserPictureRef" /> |
</div> |
||||
</div> |
<div class="event-main"> |
||||
<div class="event-main"> |
<div class="event-message"> |
||||
<div class="event-message"> |
<span class="event-actor user-ref">{{event.actor | sqxUserNameRef:null}}</span> <span [innerHTML]="format(event.message) | async"></span> |
||||
<span class="event-actor user-ref">{{event.actor | sqxUserNameRef:null}}</span> <span [innerHTML]="format(event.message) | async"></span> |
|
||||
</div> |
|
||||
<div class="event-created">{{event.created | sqxFromNow}}</div> |
|
||||
</div> |
</div> |
||||
</div> |
<div class="event-created">{{event.created | sqxFromNow}}</div> |
||||
|
</div> |
||||
</div> |
</div> |
||||
</div> |
</ng-container> |
||||
</sqx-panel> |
</sqx-panel> |
||||
Loading…
Reference in new issue