mirror of https://github.com/Chocobozzz/PeerTube
Refactor plugin card
parent
087fc5dade
commit
29aedac8dc
|
@ -41,11 +41,14 @@ import {
|
|||
VideoAdminService,
|
||||
VideoListComponent
|
||||
} from './overview'
|
||||
import { PluginListInstalledComponent } from './plugins/plugin-list-installed/plugin-list-installed.component'
|
||||
import { PluginSearchComponent } from './plugins/plugin-search/plugin-search.component'
|
||||
import { PluginShowInstalledComponent } from './plugins/plugin-show-installed/plugin-show-installed.component'
|
||||
import { PluginsComponent } from './plugins/plugins.component'
|
||||
import { PluginApiService } from './plugins/shared/plugin-api.service'
|
||||
import {
|
||||
PluginApiService,
|
||||
PluginCardComponent,
|
||||
PluginListInstalledComponent,
|
||||
PluginsComponent,
|
||||
PluginSearchComponent,
|
||||
PluginShowInstalledComponent
|
||||
} from './plugins'
|
||||
import { JobService, LogsComponent, LogsService } from './system'
|
||||
import { DebugComponent, DebugService } from './system/debug'
|
||||
import { JobsComponent } from './system/jobs/jobs.component'
|
||||
|
@ -99,6 +102,7 @@ import { JobsComponent } from './system/jobs/jobs.component'
|
|||
PluginListInstalledComponent,
|
||||
PluginSearchComponent,
|
||||
PluginShowInstalledComponent,
|
||||
PluginCardComponent,
|
||||
|
||||
JobsComponent,
|
||||
LogsComponent,
|
||||
|
|
|
@ -1 +1,6 @@
|
|||
export * from './plugins.component'
|
||||
export * from './shared'
|
||||
export * from './plugin-list-installed'
|
||||
export * from './plugin-search'
|
||||
export * from './plugin-show-installed'
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
export * from './plugin-list-installed.component'
|
|
@ -7,39 +7,21 @@
|
|||
</div>
|
||||
|
||||
<div class="plugins" myInfiniteScroller (nearOfBottom)="onNearOfBottom()" [dataObservable]="onDataSubject.asObservable()">
|
||||
<div class="card plugin" *ngFor="let plugin of plugins">
|
||||
<div class="card-body">
|
||||
<div class="first-row">
|
||||
<span class="plugin-name">{{ plugin.name }}</span>
|
||||
<ng-container *ngFor="let plugin of plugins">
|
||||
<my-plugin-card [plugin]="plugin" [version]="plugin.version" [pluginType]="pluginType">
|
||||
<div ngProjectAs="buttons">
|
||||
<my-edit-button
|
||||
*ngIf="!isTheme(plugin)" [routerLink]="getShowRouterLink(plugin)" label="Settings" i18n-label
|
||||
[responsiveLabel]="true"
|
||||
></my-edit-button>
|
||||
|
||||
<span class="plugin-version">{{ plugin.version }}</span>
|
||||
<my-button
|
||||
class="update-button" *ngIf="isUpdateAvailable(plugin)" (click)="update(plugin)" [loading]="isUpdating(plugin)"
|
||||
[label]="getUpdateLabel(plugin)" icon="refresh" [attr.disabled]="isUpdating(plugin)" [responsiveLabel]="true"
|
||||
></my-button>
|
||||
|
||||
<a class="plugin-icon" target="_blank" rel="noopener noreferrer" [href]="plugin.homepage" i18n-title title="Plugin homepage (new window)">
|
||||
<my-global-icon iconName="home"></my-global-icon>
|
||||
</a>
|
||||
|
||||
<a class="plugin-icon" target="_blank" rel="noopener noreferrer" [href]="getPluginOrThemeHref(plugin.name)" i18n-title title="Plugin homepage (new window)">
|
||||
<my-global-icon iconName="npm"></my-global-icon>
|
||||
</a>
|
||||
|
||||
<div class="buttons">
|
||||
<my-edit-button
|
||||
*ngIf="!isTheme(plugin)" [routerLink]="getShowRouterLink(plugin)" label="Settings" i18n-label
|
||||
[responsiveLabel]="true"
|
||||
></my-edit-button>
|
||||
|
||||
<my-button
|
||||
class="update-button" *ngIf="isUpdateAvailable(plugin)" (click)="update(plugin)" [loading]="isUpdating(plugin)"
|
||||
[label]="getUpdateLabel(plugin)" icon="refresh" [attr.disabled]="isUpdating(plugin)" [responsiveLabel]="true"
|
||||
></my-button>
|
||||
|
||||
<my-delete-button (click)="uninstall(plugin)" label="Uninstall" i18n-label [responsiveLabel]="true"></my-delete-button>
|
||||
</div>
|
||||
<my-delete-button (click)="uninstall(plugin)" label="Uninstall" i18n-label [responsiveLabel]="true"></my-delete-button>
|
||||
</div>
|
||||
|
||||
<div class="second-row">
|
||||
<div class="description">{{ plugin.description }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</my-plugin-card>
|
||||
</ng-container>
|
||||
</div>
|
||||
|
|
|
@ -4,3 +4,8 @@
|
|||
.update-button[disabled=true] ::ng-deep .action-button {
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
my-edit-button,
|
||||
my-button {
|
||||
@include margin-right(10px);
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ import { PeerTubePlugin, PluginType } from '@shared/models'
|
|||
templateUrl: './plugin-list-installed.component.html',
|
||||
styleUrls: [
|
||||
'../shared/toggle-plugin-type.scss',
|
||||
'../shared/plugin-list.component.scss',
|
||||
'./plugin-list-installed.component.scss'
|
||||
]
|
||||
})
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
export * from './plugin-search.component'
|
|
@ -30,45 +30,29 @@
|
|||
</div>
|
||||
|
||||
<div class="plugins" myInfiniteScroller (nearOfBottom)="onNearOfBottom()" [dataObservable]="onDataSubject.asObservable()">
|
||||
<div class="card plugin" *ngFor="let plugin of plugins">
|
||||
<div class="card-body">
|
||||
<div class="first-row">
|
||||
<span class="plugin-name">{{ plugin.name }}</span>
|
||||
|
||||
<span class="plugin-version">{{ plugin.latestVersion }}</span>
|
||||
|
||||
<a class="plugin-icon" target="_blank" rel="noopener noreferrer" [href]="plugin.homepage" i18n-title title="Plugin homepage (new window)">
|
||||
<my-global-icon iconName="home"></my-global-icon>
|
||||
</a>
|
||||
|
||||
<a class="plugin-icon" target="_blank" rel="noopener noreferrer" [href]="getPluginOrThemeHref(plugin.name)" i18n-title title="Plugin npm package (new window)">
|
||||
<my-global-icon iconName="npm"></my-global-icon>
|
||||
</a>
|
||||
|
||||
<span *ngIf="plugin.installed" class="badge badge-success">Installed</span>
|
||||
|
||||
<ng-container *ngFor="let plugin of plugins" >
|
||||
<my-plugin-card [plugin]="plugin" [version]="plugin.latestVersion" [pluginType]="pluginType">
|
||||
<div ngProjectAs="badges">
|
||||
<span i18n *ngIf="plugin.installed" class="badge badge-success">Installed</span>
|
||||
|
||||
<span *ngIf="plugin.official" class="badge badge-primary" i18n i18n-title title="This plugin is developed by Framasoft">
|
||||
Official
|
||||
</span>
|
||||
|
||||
<div class="buttons">
|
||||
<my-edit-button
|
||||
*ngIf="plugin.installed === true && !isThemeSearch()" [routerLink]="getShowRouterLink(plugin)"
|
||||
label="Settings" i18n-label [responsiveLabel]="true"
|
||||
></my-edit-button>
|
||||
|
||||
<my-button
|
||||
class="update-button" *ngIf="plugin.installed === false" (click)="install(plugin)"
|
||||
[loading]="isInstalling(plugin)" label="Install" [responsiveLabel]="true"
|
||||
icon="cloud-download" [attr.disabled]="isInstalling(plugin)"
|
||||
></my-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="second-row">
|
||||
<div class="description">{{ plugin.description }}</div>
|
||||
<div ngProjectAs="buttons">
|
||||
<my-edit-button
|
||||
*ngIf="plugin.installed === true && !isThemeSearch()" [routerLink]="getShowRouterLink(plugin)"
|
||||
label="Settings" i18n-label [responsiveLabel]="true"
|
||||
></my-edit-button>
|
||||
|
||||
<my-button
|
||||
class="update-button" *ngIf="plugin.installed === false" (click)="install(plugin)"
|
||||
[loading]="isInstalling(plugin)" label="Install" [responsiveLabel]="true"
|
||||
icon="cloud-download" [attr.disabled]="isInstalling(plugin)"
|
||||
></my-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</my-plugin-card>
|
||||
</ng-container>
|
||||
</div>
|
||||
|
|
|
@ -11,7 +11,6 @@ import { PeerTubePluginIndex, PluginType } from '@shared/models'
|
|||
templateUrl: './plugin-search.component.html',
|
||||
styleUrls: [
|
||||
'../shared/toggle-plugin-type.scss',
|
||||
'../shared/plugin-list.component.scss',
|
||||
'./plugin-search.component.scss'
|
||||
]
|
||||
})
|
||||
|
@ -115,10 +114,6 @@ export class PluginSearchComponent implements OnInit {
|
|||
return !!this.installing[plugin.npmName]
|
||||
}
|
||||
|
||||
getPluginOrThemeHref (name: string) {
|
||||
return this.pluginApiService.getPluginOrThemeHref(this.pluginType, name)
|
||||
}
|
||||
|
||||
getShowRouterLink (plugin: PeerTubePluginIndex) {
|
||||
return [ '/admin', 'plugins', 'show', this.pluginService.nameToNpmName(plugin.name, this.pluginType) ]
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
export * from './plugin-show-installed.component'
|
|
@ -0,0 +1,2 @@
|
|||
export * from './plugin-api.service'
|
||||
export * from './plugin-card.component'
|
|
@ -0,0 +1,27 @@
|
|||
<div class="card plugin">
|
||||
<div class="card-body">
|
||||
<div class="first-row">
|
||||
<span class="plugin-name">{{ plugin.name }}</span>
|
||||
|
||||
<span class="plugin-version">{{ version }}</span>
|
||||
|
||||
<a class="plugin-icon" target="_blank" rel="noopener noreferrer" [href]="plugin.homepage" i18n-title title="Plugin homepage (new window)">
|
||||
<my-global-icon iconName="home"></my-global-icon>
|
||||
</a>
|
||||
|
||||
<a class="plugin-icon" target="_blank" rel="noopener noreferrer" [href]="getPluginOrThemeHref(plugin.name)" i18n-title title="Plugin homepage (new window)">
|
||||
<my-global-icon iconName="npm"></my-global-icon>
|
||||
</a>
|
||||
|
||||
<ng-content select="badges"></ng-content>
|
||||
|
||||
<div class="buttons">
|
||||
<ng-content select="buttons"></ng-content>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="second-row">
|
||||
<div class="description">{{ plugin.description }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -36,11 +36,8 @@
|
|||
|
||||
.buttons {
|
||||
@include margin-left(auto);
|
||||
width: max-content;
|
||||
|
||||
> *:not(:last-child) {
|
||||
@include margin-right(10px);
|
||||
}
|
||||
width: max-content;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
import { Component, Input } from '@angular/core'
|
||||
import { PeerTubePlugin, PeerTubePluginIndex, PluginType } from '@shared/models'
|
||||
import { PluginApiService } from './plugin-api.service'
|
||||
|
||||
@Component({
|
||||
selector: 'my-plugin-card',
|
||||
templateUrl: './plugin-card.component.html',
|
||||
styleUrls: [ './plugin-card.component.scss' ]
|
||||
})
|
||||
|
||||
export class PluginCardComponent {
|
||||
@Input() plugin: PeerTubePluginIndex | PeerTubePlugin
|
||||
@Input() version: string
|
||||
@Input() pluginType: PluginType
|
||||
|
||||
constructor (
|
||||
private pluginApiService: PluginApiService
|
||||
) {
|
||||
}
|
||||
|
||||
getPluginOrThemeHref (name: string) {
|
||||
return this.pluginApiService.getPluginOrThemeHref(this.pluginType, name)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue