mirror of https://github.com/Squidex/squidex.git
11 changed files with 287 additions and 474 deletions
@ -1,82 +1,78 @@ |
|||
<sqx-title message="{app} | Backups | Settings" parameter1="app" [value1]="ctx.appName"></sqx-title> |
|||
|
|||
<sqx-panel desiredWidth="50rem"> |
|||
<div class="panel-header"> |
|||
<div class="panel-title-row"> |
|||
<div class="float-right"> |
|||
<button class="btn btn-success" [disabled]="backups.length === 10" (click)="startBackup()"> |
|||
Start Backup |
|||
</button> |
|||
</div> |
|||
<ng-container title> |
|||
Backups |
|||
</ng-container> |
|||
|
|||
<h3 class="panel-title">Backups</h3> |
|||
</div> |
|||
<ng-container menu> |
|||
<button class="btn btn-success" [disabled]="backups.length === 10" (click)="startBackup()"> |
|||
Start Backup |
|||
</button> |
|||
</ng-container> |
|||
|
|||
<a class="panel-close" sqxParentLink> |
|||
<i class="icon-close"></i> |
|||
</a> |
|||
</div> |
|||
<ng-container content> |
|||
<div class="panel-alert panel-alert-danger" *ngIf="backups.length >= 10"> |
|||
Your have reached the maximum number of backups: 10. |
|||
</div> |
|||
|
|||
<div class="panel-main"> |
|||
<div class="panel-content"> |
|||
<div class="panel-alert panel-alert-danger" *ngIf="backups.length >= 10"> |
|||
Your have reached the maximum number of backups: 10. |
|||
</div> |
|||
|
|||
<div class="table-items-row" *ngFor="let backup of backups; trackBy: trackBy"> |
|||
<div class="row no-gutter"> |
|||
<div class="col col-auto"> |
|||
<div *ngIf="!backup.stopped" class="backup-status backup-status-pending spin"> |
|||
<i class="icon-hour-glass"></i> |
|||
</div> |
|||
<div *ngIf="backup.stopped && backup.isFailed" class="backup-status backup-status-failed"> |
|||
<i class="icon-exclamation"></i> |
|||
</div> |
|||
<div *ngIf="backup.stopped && !backup.isFailed" class="backup-status backup-status-success"> |
|||
<i class="icon-checkmark"></i> |
|||
</div> |
|||
<div class="table-items-row table-items-row-empty" *ngIf="backups && backups.length === 0"> |
|||
No backups created yet. |
|||
</div> |
|||
|
|||
<div class="table-items-row" *ngFor="let backup of backups; trackBy: trackBy"> |
|||
<div class="row no-gutter"> |
|||
<div class="col col-auto"> |
|||
<div *ngIf="!backup.stopped" class="backup-status backup-status-pending spin"> |
|||
<i class="icon-hour-glass"></i> |
|||
</div> |
|||
<div class="col col-auto"> |
|||
<div> |
|||
Started: |
|||
</div> |
|||
<div> |
|||
Duration: |
|||
</div> |
|||
<div *ngIf="backup.stopped && backup.isFailed" class="backup-status backup-status-failed"> |
|||
<i class="icon-exclamation"></i> |
|||
</div> |
|||
<div class="col col-auto"> |
|||
<div> |
|||
{{backup.started.toISOString()}} |
|||
</div> |
|||
<div *ngIf="backup.stopped"> |
|||
{{getDuration(backup) | sqxDuration}} |
|||
</div> |
|||
<div *ngIf="backup.stopped && !backup.isFailed" class="backup-status backup-status-success"> |
|||
<i class="icon-checkmark"></i> |
|||
</div> |
|||
<div class="col"> |
|||
<div> |
|||
<span title="Archived events"> |
|||
Events: <strong class="backup-progress">{{backup.handledEvents | sqxKNumber}}</strong> |
|||
</span>, |
|||
<span title="Archived assets"> |
|||
Assets: <strong class="backup-progress">{{backup.handledAssets | sqxKNumber}}</strong> |
|||
</span> |
|||
</div> |
|||
<div *ngIf="backup.stopped && !backup.isFailed"> |
|||
Download: |
|||
|
|||
<a href="{{getDownloadUrl(backup)}}" target="_blank"> |
|||
Ready |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="col col-auto"> |
|||
<div> |
|||
Started: |
|||
</div> |
|||
<div class="col col-auto"> |
|||
<button type="button" class="btn btn-link btn-danger" (sqxConfirmClick)="deleteBackup(backup)" confirmTitle="Delete backup" |
|||
confirmText="Do you really want to delete the backup?"> |
|||
<i class="icon-bin2"></i> |
|||
</button> |
|||
<div> |
|||
Duration: |
|||
</div> |
|||
</div> |
|||
<div class="col col-auto"> |
|||
<div> |
|||
{{backup.started.toISOString()}} |
|||
</div> |
|||
<div *ngIf="backup.stopped"> |
|||
{{getDuration(backup) | sqxDuration}} |
|||
</div> |
|||
</div> |
|||
<div class="col"> |
|||
<div> |
|||
<span title="Archived events"> |
|||
Events: <strong class="backup-progress">{{backup.handledEvents | sqxKNumber}}</strong> |
|||
</span>, |
|||
<span title="Archived assets"> |
|||
Assets: <strong class="backup-progress">{{backup.handledAssets | sqxKNumber}}</strong> |
|||
</span> |
|||
</div> |
|||
<div *ngIf="backup.stopped && !backup.isFailed"> |
|||
Download: |
|||
|
|||
<a href="{{getDownloadUrl(backup)}}" target="_blank"> |
|||
Ready |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="col col-auto"> |
|||
<button type="button" class="btn btn-link btn-danger" (sqxConfirmClick)="deleteBackup(backup)" confirmTitle="Delete backup" |
|||
confirmText="Do you really want to delete the backup?"> |
|||
<i class="icon-bin2"></i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</ng-container> |
|||
</sqx-panel> |
|||
@ -1,64 +1,38 @@ |
|||
<sqx-title message="{app} | Clients | Settings" parameter1="app" [value1]="ctx.appName"></sqx-title> |
|||
|
|||
<sqx-panel desiredWidth="44rem"> |
|||
<div class="panel-header"> |
|||
<div class="panel-title-row"> |
|||
<h3 class="panel-title">Clients</h3> |
|||
<ng-container title> |
|||
Clients |
|||
</ng-container> |
|||
|
|||
<ng-container content> |
|||
<div class="table-items-row table-items-row-empty" *ngIf="appClients && appClients.clients.length === 0"> |
|||
No client created yet. |
|||
</div> |
|||
|
|||
<a class="panel-close" sqxParentLink> |
|||
<i class="icon-close"></i> |
|||
</a> |
|||
</div> |
|||
|
|||
<div class="panel-main"> |
|||
<div class="panel-content panel-content-scroll"> |
|||
<div class="table-items-row table-items-row-empty" *ngIf="appClients && appClients.clients.length === 0"> |
|||
No client created yet. |
|||
</div> |
|||
|
|||
<div *ngFor="let client of appClients?.clients"> |
|||
<sqx-client [client]="client" |
|||
(updating)="updateClient(client, $event)" |
|||
(renaming)="renameClient(client, $event)" |
|||
(revoking)="revokeClient(client)"></sqx-client> |
|||
</div> |
|||
|
|||
<div class="table-items-footer" *ngIf="appClients"> |
|||
<form [formGroup]="addClientForm" (ngSubmit)="attachClient()"> |
|||
<div class="row no-gutters"> |
|||
<div class="col"> |
|||
<sqx-control-errors for="name" [submitted]="addClientFormSubmitted"></sqx-control-errors> |
|||
|
|||
<input type="text" class="form-control" formControlName="name" maxlength="40" placeholder="Enter client name" autocomplete="off" sqxLowerCaseInput /> |
|||
</div> |
|||
<div class="col col-auto pl-1"> |
|||
<button type="submit" class="btn btn-success" [disabled]="!hasName">Add Client</button> |
|||
</div> |
|||
<div class="col col-auto pl-1"> |
|||
<button type="reset" class="btn btn-secondary" (click)="cancelAttachClient()">Cancel</button> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
<div *ngFor="let client of appClients?.clients"> |
|||
<sqx-client [client]="client" |
|||
(updating)="updateClient(client, $event)" |
|||
(renaming)="renameClient(client, $event)" |
|||
(revoking)="revokeClient(client)"></sqx-client> |
|||
</div> |
|||
<div class="panel-sidebar"> |
|||
<a class="panel-link" routerLink="history" routerLinkActive="active" #linkHistory> |
|||
<i class="icon-time"></i> |
|||
</a> |
|||
<a class="panel-link" routerLink="help" routerLinkActive="active" #linkHelp> |
|||
<i class="icon-help"></i> |
|||
</a> |
|||
|
|||
<sqx-onboarding-tooltip id="history" [for]="linkHistory" position="leftTop" after="120000"> |
|||
The sidebar navigation contains useful context specific links. Here you can view the history how this schema has changed over time. |
|||
</sqx-onboarding-tooltip> |
|||
|
|||
<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. |
|||
</sqx-onboarding-tooltip> |
|||
<div class="table-items-footer" *ngIf="appClients"> |
|||
<form [formGroup]="addClientForm" (ngSubmit)="attachClient()"> |
|||
<div class="row no-gutters"> |
|||
<div class="col"> |
|||
<sqx-control-errors for="name" [submitted]="addClientFormSubmitted"></sqx-control-errors> |
|||
|
|||
<input type="text" class="form-control" formControlName="name" maxlength="40" placeholder="Enter client name" autocomplete="off" sqxLowerCaseInput /> |
|||
</div> |
|||
<div class="col col-auto pl-1"> |
|||
<button type="submit" class="btn btn-success" [disabled]="!hasName">Add Client</button> |
|||
</div> |
|||
<div class="col col-auto pl-1"> |
|||
<button type="reset" class="btn btn-secondary" (click)="cancelAttachClient()">Cancel</button> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</sqx-panel> |
|||
|
|||
<router-outlet></router-outlet> |
|||
</ng-container> |
|||
</sqx-panel> |
|||
@ -1,88 +1,62 @@ |
|||
<sqx-title message="{app} | Contributors | Settings" parameter1="app" [value1]="ctx.appName"></sqx-title> |
|||
|
|||
<sqx-panel desiredWidth="50rem"> |
|||
<div class="panel-header"> |
|||
<div class="panel-title-row"> |
|||
<h3 class="panel-title">Contributors</h3> |
|||
</div> |
|||
|
|||
<a class="panel-close" sqxParentLink> |
|||
<i class="icon-close"></i> |
|||
</a> |
|||
</div> |
|||
<ng-container title> |
|||
Contributors |
|||
</ng-container> |
|||
|
|||
<div class="panel-main"> |
|||
<div class="panel-content panel-content-scroll"> |
|||
<div class="panel-alert panel-alert-success" *ngIf="maxContributors > 0"> |
|||
Your plan allows up to {{maxContributors}} contributors. |
|||
</div> |
|||
|
|||
<table class="table table-items table-fixed"> |
|||
<tbody> |
|||
<ng-template ngFor let-contributor [ngForOf]="appContributors?.contributors"> |
|||
<tr> |
|||
<td class="cell-user"> |
|||
<img class="user-picture" [attr.title]="contributor.contributorId | sqxUserName" [attr.src]="contributor.contributorId | sqxUserPicture" /> |
|||
</td> |
|||
<td class="cell-auto"> |
|||
<span class="user-name table-cell">{{contributor.contributorId | sqxUserName}}</span> |
|||
</td> |
|||
<td class="cell-auto"> |
|||
<span class="user-email table-cell">{{contributor.contributorId | sqxUserEmail}}</span> |
|||
</td> |
|||
<td class="cell-time"> |
|||
<select class="form-control" [ngModel]="contributor.permission" (ngModelChange)="changePermission(contributor, $event)" [disabled]="userId === contributor.contributorId"> |
|||
<option *ngFor="let permission of usersPermissions" [ngValue]="permission">{{permission}}</option> |
|||
</select> |
|||
</td> |
|||
<td class="cell-actions"> |
|||
<button type="button" class="btn btn-link btn-danger" [disabled]="userId === contributor.contributorId" (click)="removeContributor(contributor)"> |
|||
<i class="icon-bin2"></i> |
|||
</button> |
|||
</td> |
|||
</tr> |
|||
<tr class="spacer"></tr> |
|||
</ng-template> |
|||
</tbody> |
|||
</table> |
|||
|
|||
<div class="table-items-footer" *ngIf="appContributors"> |
|||
<form [formGroup]="addContributorForm" (ngSubmit)="assignContributor()"> |
|||
<div class="row no-gutters"> |
|||
<div class="col"> |
|||
<sqx-autocomplete [source]="usersDataSource" formControlName="user" [inputName]="'contributor'" placeholder="Find existing user" displayProperty="email"> |
|||
<ng-template let-user="$implicit"> |
|||
<img class="user-picture autocomplete-user-picture" [attr.src]="user | sqxUserDtoPicture" /> |
|||
<ng-container content> |
|||
<div class="panel-alert panel-alert-success" *ngIf="maxContributors > 0"> |
|||
Your plan allows up to {{maxContributors}} contributors. |
|||
</div> |
|||
|
|||
<table class="table table-items table-fixed"> |
|||
<tbody> |
|||
<ng-template ngFor let-contributor [ngForOf]="appContributors?.contributors"> |
|||
<tr> |
|||
<td class="cell-user"> |
|||
<img class="user-picture" [attr.title]="contributor.contributorId | sqxUserName" [attr.src]="contributor.contributorId | sqxUserPicture" /> |
|||
</td> |
|||
<td class="cell-auto"> |
|||
<span class="user-name table-cell">{{contributor.contributorId | sqxUserName}}</span> |
|||
</td> |
|||
<td class="cell-auto"> |
|||
<span class="user-email table-cell">{{contributor.contributorId | sqxUserEmail}}</span> |
|||
</td> |
|||
<td class="cell-time"> |
|||
<select class="form-control" [ngModel]="contributor.permission" (ngModelChange)="changePermission(contributor, $event)" [disabled]="userId === contributor.contributorId"> |
|||
<option *ngFor="let permission of usersPermissions" [ngValue]="permission">{{permission}}</option> |
|||
</select> |
|||
</td> |
|||
<td class="cell-actions"> |
|||
<button type="button" class="btn btn-link btn-danger" [disabled]="userId === contributor.contributorId" (click)="removeContributor(contributor)"> |
|||
<i class="icon-bin2"></i> |
|||
</button> |
|||
</td> |
|||
</tr> |
|||
<tr class="spacer"></tr> |
|||
</ng-template> |
|||
</tbody> |
|||
</table> |
|||
|
|||
<div class="table-items-footer" *ngIf="appContributors"> |
|||
<form [formGroup]="addContributorForm" (ngSubmit)="assignContributor()"> |
|||
<div class="row no-gutters"> |
|||
<div class="col"> |
|||
<sqx-autocomplete [source]="usersDataSource" formControlName="user" [inputName]="'contributor'" placeholder="Find existing user" displayProperty="email"> |
|||
<ng-template let-user="$implicit"> |
|||
<img class="user-picture autocomplete-user-picture" [attr.src]="user | sqxUserDtoPicture" /> |
|||
|
|||
<span class="user-name autocomplete-user-name">{{user.displayName}}</span> |
|||
<span class="user-email autocomplete-user-email">{{user.email}}</span> |
|||
</ng-template> |
|||
</sqx-autocomplete> |
|||
</div> |
|||
<div class="col col-auto pl-1"> |
|||
<button type="submit" class="btn btn-success" [disabled]="!canAddContributor">Add Contributor</button> |
|||
</div> |
|||
<span class="user-name autocomplete-user-name">{{user.displayName}}</span> |
|||
<span class="user-email autocomplete-user-email">{{user.email}}</span> |
|||
</ng-template> |
|||
</sqx-autocomplete> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
<div class="panel-sidebar"> |
|||
<a class="panel-link" routerLink="history" routerLinkActive="active" #linkHistory> |
|||
<i class="icon-time"></i> |
|||
</a> |
|||
<a class="panel-link" routerLink="help" routerLinkActive="active" #linkHelp> |
|||
<i class="icon-help"></i> |
|||
</a> |
|||
|
|||
<sqx-onboarding-tooltip id="history" [for]="linkHistory" position="leftTop" after="120000"> |
|||
The sidebar navigation contains useful context specific links. Here you can view the history how this schema has changed over time. |
|||
</sqx-onboarding-tooltip> |
|||
|
|||
<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. |
|||
</sqx-onboarding-tooltip> |
|||
<div class="col col-auto pl-1"> |
|||
<button type="submit" class="btn btn-success" [disabled]="!canAddContributor">Add Contributor</button> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</sqx-panel> |
|||
|
|||
<router-outlet></router-outlet> |
|||
</ng-container> |
|||
</sqx-panel> |
|||
@ -1,56 +1,30 @@ |
|||
<sqx-title message="{app} | Languages | Settings" parameter1="app" [value1]="ctx.appName"></sqx-title> |
|||
|
|||
<sqx-panel desiredWidth="42rem"> |
|||
<div class="panel-header"> |
|||
<div class="panel-title-row"> |
|||
<h3 class="panel-title">Languages</h3> |
|||
</div> |
|||
|
|||
<a class="panel-close" sqxParentLink> |
|||
<i class="icon-close"></i> |
|||
</a> |
|||
</div> |
|||
<ng-container title> |
|||
Contributors |
|||
</ng-container> |
|||
|
|||
<div class="panel-main"> |
|||
<div class="panel-content panel-content-scroll"> |
|||
<div *ngFor="let language of appLanguages?.languages"> |
|||
<sqx-language [language]="language" [allLanguages]="appLanguages.languages" |
|||
(saving)="updateLanguage($event)" |
|||
(removing)="removeLanguage($event)"></sqx-language> |
|||
</div> |
|||
|
|||
<div class="table-items-footer" *ngIf="appLanguages"> |
|||
<form [formGroup]="addLanguageForm" (ngSubmit)="addLanguage()"> |
|||
<div class="row no-gutters"> |
|||
<div class="col"> |
|||
<select class="form-control language-select" formControlName="language"> |
|||
<option *ngFor="let language of newLanguages" [ngValue]="language">{{language.englishName}}</option> |
|||
</select> |
|||
</div> |
|||
<div class="col col-auto pl-1"> |
|||
<button type="submit" class="btn btn-success" [disabled]="!addLanguageForm.valid">Add Language</button> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
<ng-container content> |
|||
<div *ngFor="let language of appLanguages?.languages"> |
|||
<sqx-language [language]="language" [allLanguages]="appLanguages.languages" |
|||
(saving)="updateLanguage($event)" |
|||
(removing)="removeLanguage($event)"></sqx-language> |
|||
</div> |
|||
<div class="panel-sidebar"> |
|||
<a class="panel-link" routerLink="history" routerLinkActive="active" #linkHistory> |
|||
<i class="icon-time"></i> |
|||
</a> |
|||
<a class="panel-link" routerLink="help" routerLinkActive="active" #linkHelp> |
|||
<i class="icon-help"></i> |
|||
</a> |
|||
|
|||
<sqx-onboarding-tooltip id="history" [for]="linkHistory" position="leftTop" after="120000"> |
|||
The sidebar navigation contains useful context specific links. Here you can view the history how this schema has changed over time. |
|||
</sqx-onboarding-tooltip> |
|||
|
|||
<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. |
|||
</sqx-onboarding-tooltip> |
|||
<div class="table-items-footer" *ngIf="appLanguages"> |
|||
<form [formGroup]="addLanguageForm" (ngSubmit)="addLanguage()"> |
|||
<div class="row no-gutters"> |
|||
<div class="col"> |
|||
<select class="form-control language-select" formControlName="language"> |
|||
<option *ngFor="let language of newLanguages" [ngValue]="language">{{language.englishName}}</option> |
|||
</select> |
|||
</div> |
|||
<div class="col col-auto pl-1"> |
|||
<button type="submit" class="btn btn-success" [disabled]="!addLanguageForm.valid">Add Language</button> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</sqx-panel> |
|||
|
|||
<router-outlet></router-outlet> |
|||
</ng-container> |
|||
</sqx-panel> |
|||
@ -1,41 +1,23 @@ |
|||
<sqx-title message="{app} | Patterns | Settings" parameter1="app" [value1]="ctx.appName"></sqx-title> |
|||
|
|||
<sqx-panel desiredWidth="60rem"> |
|||
<div class="panel-header"> |
|||
<div class="panel-title-row"> |
|||
<h3 class="panel-title">Patterns</h3> |
|||
</div> |
|||
<ng-container title> |
|||
Contributors |
|||
</ng-container> |
|||
|
|||
<a class="panel-close" sqxParentLink> |
|||
<i class="icon-close"></i> |
|||
</a> |
|||
</div> |
|||
|
|||
<div class="panel-main"> |
|||
<div class="panel-content panel-content-scroll"> |
|||
<div *ngIf="appPatterns"> |
|||
<div *ngFor="let pattern of appPatterns.patterns"> |
|||
<sqx-pattern [pattern]="pattern" |
|||
(removing)="removePattern(pattern)" |
|||
(updating)="updatePattern(pattern, $event)"> |
|||
</sqx-pattern> |
|||
</div> |
|||
<sqx-pattern [isNew]="true" |
|||
(updating)="addPattern($event)"> |
|||
<ng-container content> |
|||
<ng-container *ngIf="appPatterns"> |
|||
<div *ngFor="let pattern of appPatterns.patterns"> |
|||
<sqx-pattern [pattern]="pattern" |
|||
(removing)="removePattern(pattern)" |
|||
(updating)="updatePattern(pattern, $event)"> |
|||
</sqx-pattern> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
<div class="panel-sidebar"> |
|||
<a class="panel-link" routerLink="history" routerLinkActive="active"> |
|||
<i class="icon-time"></i> |
|||
</a> |
|||
<a class="panel-link" routerLink="help" routerLinkActive="active"> |
|||
<i class="icon-help"></i> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<sqx-pattern [isNew]="true" |
|||
(updating)="addPattern($event)"> |
|||
</sqx-pattern> |
|||
</ng-container> |
|||
</ng-container> |
|||
</sqx-panel> |
|||
|
|||
<router-outlet></router-outlet> |
|||
@ -1,70 +1,62 @@ |
|||
<sqx-title message="{app} | Plans | Settings" parameter1="app" [value1]="ctx.appName"></sqx-title> |
|||
|
|||
<sqx-panel desiredWidth="61rem"> |
|||
<div class="panel-header"> |
|||
<div class="panel-title-row"> |
|||
<div class="float-right"> |
|||
<button class="btn btn-link btn-secondary" (click)="load(true)" title="Refresh Plans (CTRL + SHIFT + R)"> |
|||
<i class="icon-reset"></i> Refresh |
|||
</button> |
|||
|
|||
<sqx-shortcut keys="ctrl+shift+r" (trigger)="load(true)"></sqx-shortcut> |
|||
<ng-container title> |
|||
Contributors |
|||
</ng-container> |
|||
|
|||
<ng-container menu> |
|||
<button class="btn btn-link btn-secondary" (click)="load(true)" title="Refresh Plans (CTRL + SHIFT + R)"> |
|||
<i class="icon-reset"></i> Refresh |
|||
</button> |
|||
|
|||
<sqx-shortcut keys="ctrl+shift+r" (trigger)="load(true)"></sqx-shortcut> |
|||
</ng-container> |
|||
|
|||
<ng-container content> |
|||
<div *ngIf="plans"> |
|||
<div class="panel-alert panel-alert-danger" *ngIf="!planOwned"> |
|||
You have not created the subscription. Therefore you cannot change the plan. |
|||
</div> |
|||
|
|||
<h3 class="panel-title">Update Plan</h3> |
|||
</div> |
|||
|
|||
<a class="panel-close" sqxParentLink> |
|||
<i class="icon-close"></i> |
|||
</a> |
|||
</div> |
|||
|
|||
<div class="panel-main"> |
|||
<div class="panel-content"> |
|||
<div *ngIf="plans"> |
|||
<div class="panel-alert panel-alert-danger" *ngIf="!planOwned"> |
|||
You have not created the subscription. Therefore you cannot change the plan. |
|||
</div> |
|||
|
|||
<div class="text-muted text-center empty" *ngIf="plans.plans.length === 0"> |
|||
No plan configured, this app has unlimited usage. |
|||
</div> |
|||
<div class="text-muted text-center empty" *ngIf="plans.plans.length === 0"> |
|||
No plan configured, this app has unlimited usage. |
|||
</div> |
|||
|
|||
<div class="clearfix"> |
|||
<div class="card plan float-left" *ngFor="let plan of plans.plans"> |
|||
<div class="card-body plan-header text-center"> |
|||
<h4 class="card-title">{{plan.name}}</h4> |
|||
<h5 class="plan-price">{{plan.costs}}</h5> |
|||
<div class="clearfix"> |
|||
<div class="card plan float-left" *ngFor="let plan of plans.plans"> |
|||
<div class="card-body plan-header text-center"> |
|||
<h4 class="card-title">{{plan.name}}</h4> |
|||
<h5 class="plan-price">{{plan.costs}}</h5> |
|||
|
|||
<small class="text-muted">Per Month</small> |
|||
<small class="text-muted">Per Month</small> |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="plan-fact"> |
|||
{{plan.maxApiCalls | sqxKNumber}} API Calls |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="plan-fact"> |
|||
{{plan.maxApiCalls | sqxKNumber}} API Calls |
|||
</div> |
|||
<div class="plan-fact"> |
|||
{{plan.maxAssetSize | sqxFileSize}} Storage |
|||
</div> |
|||
<div class="plan-fact"> |
|||
{{plan.maxContributors}} Contributors |
|||
</div> |
|||
<div class="plan-fact"> |
|||
{{plan.maxAssetSize | sqxFileSize}} Storage |
|||
</div> |
|||
<div class="card-body"> |
|||
<button *ngIf="plan.id === plans.currentPlanId" class="btn btn-block btn-link btn-success plan-selected"> |
|||
✓ Selected |
|||
</button> |
|||
|
|||
<button *ngIf="plan.id !== plans.currentPlanId" class="btn btn-block btn-success" [disabled]="isDisabled || !planOwned" (click)="changePlan(plan.id)"> |
|||
Change |
|||
</button> |
|||
<div class="plan-fact"> |
|||
{{plan.maxContributors}} Contributors |
|||
</div> |
|||
</div> |
|||
<div class="card-body"> |
|||
<button *ngIf="plan.id === plans.currentPlanId" class="btn btn-block btn-link btn-success plan-selected"> |
|||
✓ Selected |
|||
</button> |
|||
|
|||
<button *ngIf="plan.id !== plans.currentPlanId" class="btn btn-block btn-success" [disabled]="isDisabled || !planOwned" (click)="changePlan(plan.id)"> |
|||
Change |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div *ngIf="plans.hasPortal" class="billing-portal-link"> |
|||
Go to <a target="_blank" href="{{portalUrl}}">Billing Portal</a> for payment history and subscription overview. |
|||
</div> |
|||
<div *ngIf="plans.hasPortal" class="billing-portal-link"> |
|||
Go to <a target="_blank" href="{{portalUrl}}">Billing Portal</a> for payment history and subscription overview. |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</ng-container> |
|||
</sqx-panel> |
|||
@ -1,64 +1,56 @@ |
|||
<sqx-title message="{app} | Settings" parameter1="app" [value1]="ctx.appName"></sqx-title> |
|||
|
|||
<sqx-panel theme="dark" desiredWidth="16rem"> |
|||
<div class="panel-header"> |
|||
<div class="panel-title-row"> |
|||
<h3 class="panel-title">Settings</h3> |
|||
</div> |
|||
|
|||
<a class="panel-close" sqxParentLink isLazyLoaded="true"> |
|||
<i class="icon-close"></i> |
|||
</a> |
|||
</div> |
|||
|
|||
<div class="panel-main"> |
|||
<div class="panel-content"> |
|||
<ul class="nav nav-panel nav-dark flex-column"> |
|||
<li class="nav-item" *ngIf="ctx.app.permission === 'Owner'"> |
|||
<a class="nav-link" routerLink="backups" routerLinkActive="active"> |
|||
Backups |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a class="nav-link" routerLink="clients" routerLinkActive="active"> |
|||
Clients |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item" *ngIf="ctx.app.permission === 'Owner'"> |
|||
<a class="nav-link" routerLink="contributors" routerLinkActive="active"> |
|||
Contributors |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a class="nav-link" routerLink="languages" routerLinkActive="active"> |
|||
Languages |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a class="nav-link" routerLink="patterns" routerLinkActive="active"> |
|||
Patterns |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item" *ngIf="ctx.app.permission === 'Owner'"> |
|||
<a class="nav-link" routerLink="plans" routerLinkActive="active"> |
|||
Subscription |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item" *ngIf="ctx.app.permission === 'Owner'"> |
|||
<a class="nav-link" routerLink="more" routerLinkActive="active"> |
|||
More |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
<ng-container title> |
|||
Settings |
|||
</ng-container> |
|||
|
|||
<ng-container content> |
|||
<ul class="nav nav-panel nav-dark flex-column"> |
|||
<li class="nav-item" *ngIf="ctx.app.permission === 'Owner'"> |
|||
<a class="nav-link" routerLink="backups" routerLinkActive="active"> |
|||
Backups |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a class="nav-link" routerLink="clients" routerLinkActive="active"> |
|||
Clients |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item" *ngIf="ctx.app.permission === 'Owner'"> |
|||
<a class="nav-link" routerLink="contributors" routerLinkActive="active"> |
|||
Contributors |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a class="nav-link" routerLink="languages" routerLinkActive="active"> |
|||
Languages |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a class="nav-link" routerLink="patterns" routerLinkActive="active"> |
|||
Patterns |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item" *ngIf="ctx.app.permission === 'Owner'"> |
|||
<a class="nav-link" routerLink="plans" routerLinkActive="active"> |
|||
Subscription |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
<li class="nav-item" *ngIf="ctx.app.permission === 'Owner'"> |
|||
<a class="nav-link" routerLink="more" routerLinkActive="active"> |
|||
More |
|||
<i class="icon-angle-right"></i> |
|||
</a> |
|||
</li> |
|||
</ul> |
|||
</ng-container> |
|||
</sqx-panel> |
|||
|
|||
<router-outlet></router-outlet> |
|||
Loading…
Reference in new issue