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