pluginsSettingsTab.component.pug 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. .d-flex.mb-3
  2. h3(translate) Plugins
  3. button.btn.btn-secondary.btn-sm.ml-auto((click)='openPluginsFolder()')
  4. i.fas.fa-folder
  5. span(translate) Plugins folder
  6. .alert.alert-danger(*ngIf='errorMessage')
  7. strong(
  8. translate='Error in {plugin}:',
  9. [translateParams]='{plugin: erroredPlugin}'
  10. )
  11. pre {{errorMessage}}
  12. ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav')
  13. li(ngbNavItem)
  14. a(ngbNavLink, translate) Available
  15. ng-template(ngbNavContent)
  16. .input-group.mb-3.mt-3
  17. .input-group-prepend
  18. .input-group-text
  19. i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='!availablePluginsReady')
  20. i.fas.fa-fw.fa-search(*ngIf='availablePluginsReady')
  21. input.form-control(
  22. type='text',
  23. [(ngModel)]='_1',
  24. (ngModelChange)='searchAvailable(_1)',
  25. [placeholder]='"Search plugins"|translate'
  26. )
  27. ngb-accordion.mb-4(*ngIf='availablePlugins$', [closeOthers]='true')
  28. ng-container(*ngFor='let plugin of (availablePlugins$|async)')
  29. ngb-panel(*ngIf='!isAlreadyInstalled(plugin)')
  30. ng-template(ngbPanelTitle)
  31. .text-left
  32. strong.d-block {{plugin.name}}
  33. small.d-block.text-muted {{plugin.description}}
  34. ng-template(ngbPanelContent)
  35. .row
  36. .col-4
  37. button.btn.btn-primary.btn-block.justify-content-center(
  38. (click)='installPlugin(plugin)',
  39. [disabled]='busy.has(plugin.name)'
  40. )
  41. i.fas.fa-fw.fa-cloud-download(*ngIf='busy.get(plugin.name) != BusyState.Installing')
  42. i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy.get(plugin.name) == BusyState.Installing')
  43. span.ml-2(translate) Get
  44. button.btn.btn-secondary.btn-block.justify-content-center(
  45. *ngIf='plugin.homepage',
  46. (click)='showPluginHomepage(plugin)'
  47. )
  48. i.fas.fa-fw.fa-external-link-alt
  49. span.ml-2(translate) Homepage
  50. .col-8
  51. ng-container(*ngTemplateOutlet='pluginInfo; context: { plugin }')
  52. .mt-2 {{plugin.description}}
  53. li(ngbNavItem)
  54. a(ngbNavLink, translate) Installed
  55. ng-template(ngbNavContent)
  56. ngb-accordion.mb-4([closeOthers]='true')
  57. ng-container(*ngFor='let plugin of pluginManager.installedPlugins')
  58. ngb-panel
  59. ng-template(ngbPanelTitle)
  60. .text-left.mr-auto
  61. div
  62. strong {{plugin.name}}
  63. small.text-muted.ml-2(*ngIf='plugin.isBuiltin', translate) Built-in
  64. small.text-warning.ml-2(*ngIf='!isPluginEnabled(plugin)', translate) Disabled
  65. small.d-block.text-muted {{plugin.description}}
  66. button.btn.btn-primary.ml-2(
  67. *ngIf='knownUpgrades[plugin.name]',
  68. (click)='upgradePlugin(plugin)',
  69. [disabled]='busy.has(plugin.name)'
  70. )
  71. i.fas.fa-fw.fa-arrow-up(*ngIf='busy.get(plugin.name) != BusyState.Installing')
  72. i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy.get(plugin.name) == BusyState.Installing')
  73. span(
  74. translate='Upgrade to {version}',
  75. [translateParams]='{version: knownUpgrades[plugin.name].version}'
  76. )
  77. ng-template(ngbPanelContent)
  78. .row
  79. .col-4
  80. button.btn.btn-warning.btn-block.justify-content-center(
  81. (click)='togglePlugin(plugin)',
  82. *ngIf='isPluginEnabled(plugin)',
  83. [disabled]='!canDisablePlugin(plugin)',
  84. translate
  85. ) Disable
  86. button.btn.btn-success.btn-block.justify-content-center(
  87. (click)='togglePlugin(plugin)',
  88. *ngIf='canDisablePlugin(plugin) && !isPluginEnabled(plugin)',
  89. translate
  90. ) Enable
  91. button.btn.btn-danger.btn-block.justify-content-center(
  92. (click)='uninstallPlugin(plugin)',
  93. *ngIf='!plugin.isBuiltin',
  94. [disabled]='busy.has(plugin.name)'
  95. )
  96. i.fas.fa-fw.fa-trash(*ngIf='busy.get(plugin.name) != BusyState.Uninstalling')
  97. i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy.get(plugin.name) == BusyState.Uninstalling')
  98. span(translate) Uninstall
  99. .col-8
  100. ng-container(*ngTemplateOutlet='pluginInfo; context: { plugin }')
  101. .mt-2 {{plugin.description}}
  102. ng-template(#pluginInfo, let-plugin='plugin')
  103. .row.align-items-center
  104. .col-4
  105. strong(translate) Version
  106. .col-8
  107. span {{plugin.version}}
  108. .row.align-items-center
  109. .col-4
  110. strong(translate) Author
  111. .col-8
  112. .badge.badge-success(*ngIf='plugin.isOfficial')
  113. i.fas.fa-check
  114. span.ml-1(translate) Official
  115. a.btn.btn-link.px-0.w-auto((click)='showPluginInfo(plugin)', *ngIf='!plugin.isOfficial')
  116. span {{plugin.author}}
  117. i.fas.fa-fw.fa-external-link-alt.ml-2
  118. .mb-4([ngbNavOutlet]='nav')