THIS IS A TEST INSTANCE ONLY! REPOSITORIES CAN BE DELETED AT ANY TIME!

This is Gitea test Portainer repository mirror from Github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

187 lines
7.9 KiB

  1. <rd-header>
  2. <rd-header-title title-text="Extension details"></rd-header-title>
  3. <rd-header-content>
  4. <a ui-sref="portainer.extensions">Portainer extensions</a> &gt; {{ extension.Name }}
  5. </rd-header-content>
  6. </rd-header>
  7. <div class="row" ng-if="extension">
  8. <div class="col-sm-12">
  9. <rd-widget>
  10. <rd-widget-body>
  11. <div style="display: flex;">
  12. <div style="flex-grow: 4; display: flex; flex-direction: column; justify-content: space-between;">
  13. <div class="form-group">
  14. <div class="text-muted" style="font-size: 150%;">
  15. {{ extension.Name }} extension
  16. </div>
  17. <div class="small text-muted" style="margin-top: 5px;">
  18. By <a href="https://portainer.io" href="_blank">Portainer.io</a>
  19. </div>
  20. </div>
  21. <div class="form-group">
  22. <div class="text-muted">
  23. {{ extension.ShortDescription }}
  24. </div>
  25. </div>
  26. </div>
  27. <div style="flex-grow: 1; border-left: 1px solid #777;">
  28. <div class="form-group" style="margin-left: 40px;">
  29. <div style="font-size: 125%; border-bottom: 2px solid #2d3e63; padding-bottom: 5px;">
  30. <span ng-if="extension.Enabled">Enabled</span>
  31. <span ng-if="!extension.Enabled && extension.License.Expiration && !extension.License.Valid">Expired</span>
  32. <span ng-if="!extension.Enabled && !extension.License.Expiration">{{ extension.Price }}</span>
  33. </div>
  34. <div class="small text-muted col-sm-12" style="margin: 15px 0 15px 0;" ng-if="!extension.Enabled">
  35. {{ extension.PriceDescription }}
  36. </div>
  37. <div style="margin-top: 10px; margin-bottom: 95px;" ng-if="!extension.Enabled && extension.Available">
  38. <label for="instances_qty" class="col-sm-7 control-label text-left" style="margin-top: 7px;">Instances</label>
  39. <div class="col-sm-5">
  40. <input type="number" class="form-control" ng-model="formValues.instances" id="instances_qty" placeholder="1" min="1">
  41. </div>
  42. </div>
  43. <div style="margin-top: 15px;" ng-if="!extension.Enabled && extension.Available">
  44. <a href="{{ extension.ShopURL }}&quantity={{ formValues.instances }}" target="_blank" class="btn btn-primary btn-sm" style="width: 100%; margin-left: 0;">
  45. Buy
  46. </a>
  47. </div>
  48. <div style="margin-top: 10px;" ng-if="!extension.Enabled && extension.Available">
  49. <a ui-sref="portainer.extensions" class="btn btn-primary btn-sm" style="width: 100%; margin-left: 0;">
  50. Add license key
  51. </a>
  52. </div>
  53. <div style="margin-top: 15px;" ng-if="!extension.Enabled && !extension.Available">
  54. <btn class="btn btn-primary btn-sm" style="width: 100%; margin-left: 0;" disabled>Coming soon</btn>
  55. </div>
  56. <div style="margin-top: 15px;" ng-if="extension.Enabled && extension.UpdateAvailable && !state.offlineUpdate">
  57. <button type="button" class="btn btn-primary btn-sm" ng-click="updateExtensionOnline(extension)" ng-disabled="state.onlineUpdateInProgress" button-spinner="state.onlineUpdateInProgress" style="width: 100%; margin-left: 0;">
  58. <span ng-hide="state.onlineUpdateInProgress">Update via Internet</span>
  59. <span ng-show="state.onlineUpdateInProgress">Updating extension...</span>
  60. </button>
  61. </div>
  62. <div style="margin-top: 5px;" ng-if="extension.Enabled">
  63. <button type="button" class="btn btn-danger btn-sm" ng-click="deleteExtension(extension)" ng-disabled="state.deleteInProgress" button-spinner="state.deleteInProgress" style="width: 100%; margin-left: 0;">
  64. <span ng-hide="state.deleteInProgress">Delete</span>
  65. <span ng-show="state.deleteInProgress">Deleting extension...</span>
  66. </button>
  67. </div>
  68. <div style="margin-top: 15px;" ng-if="extension.Enabled && extension.UpdateAvailable">
  69. <p>
  70. <a class="small interactive" ng-if="!state.offlineUpdate" ng-click="state.offlineUpdate = true;">
  71. <i class="fa fa-toggle-off space-right" aria-hidden="true"></i> Switch to offline update
  72. </a>
  73. <a class="small interactive" ng-if="state.offlineUpdate" ng-click="state.offlineUpdate = false;">
  74. <i class="fa fa-wifi space-right" aria-hidden="true"></i> Switch to online update
  75. </a>
  76. </p>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. </rd-widget-body>
  82. </rd-widget>
  83. </div>
  84. </div>
  85. <div class="row" ng-if="extension && state.offlineUpdate">
  86. <div class="col-sm-12">
  87. <rd-widget>
  88. <rd-widget-body>
  89. <form class="form-horizontal">
  90. <div class="col-sm-12 form-section-title">
  91. <span>
  92. Offline update
  93. </span>
  94. </div>
  95. <div class="form-group">
  96. <div class="col-sm-12">
  97. <p class="small text-muted" ng-if="state.offlineUpdate">
  98. You will need to upload the extension archive manually. You can download the latest version of our extensions <a target="_blank" href="https://download.portainer.io/extensions.zip">here</a>.
  99. </p>
  100. </div>
  101. </div>
  102. <div class="form-group" ng-if="state.offlineUpdate">
  103. <div class="col-sm-12">
  104. <button type="button" class="btn btn-primary btn-sm" ngf-select ng-model="formValues.ExtensionFile" style="margin-left: 0px;">Select file</button>
  105. <span style="margin-left: 5px;">
  106. {{ formValues.ExtensionFile.name }}
  107. <i class="fa fa-times red-icon" ng-if="!formValues.ExtensionFile" aria-hidden="true"></i>
  108. </span>
  109. </div>
  110. </div>
  111. <div class="form-group">
  112. <div class="col-sm-12">
  113. <button type="button" class="btn btn-primary btn-sm" ng-click="updateExtensionOffline(extension)" ng-disabled="state.offlineUpdateInProgress || !formValues.ExtensionFile" button-spinner="state.offlineUpdateInProgress" style="margin-left: 0px;">
  114. <span ng-hide="state.offlineUpdateInProgress">Update extension</span>
  115. <span ng-show="state.offlineUpdateInProgress">Updating extension...</span>
  116. </button>
  117. </div>
  118. </div>
  119. </form>
  120. </rd-widget-body>
  121. </rd-widget>
  122. </div>
  123. </div>
  124. <div class="row" ng-if="extension">
  125. <div class="col-sm-12">
  126. <rd-widget>
  127. <rd-widget-body>
  128. <div class="col-sm-12 form-section-title">
  129. <span>
  130. Description
  131. </span>
  132. </div>
  133. <div class="form-group" ng-if="extension.Description">
  134. <div class="text-muted" style="font-size: 90%;" ng-bind-html="extension.Description"></div>
  135. </div>
  136. <div class="form-group" ng-if="!extension.Description">
  137. <div class="small text-muted">
  138. <p>
  139. <i class="fa fa-exclamation-triangle orange-icon" aria-hidden="true"></i>
  140. Unable to provide a description in an offline environment.
  141. </p>
  142. </div>
  143. </div>
  144. </rd-widget-body>
  145. </rd-widget>
  146. </div>
  147. </div>
  148. <div class="row" ng-if="extension.Description && extension.Images">
  149. <div class="col-sm-12">
  150. <rd-widget>
  151. <rd-widget-body>
  152. <div class="col-sm-12 form-section-title">
  153. <span>
  154. Screenshots
  155. </span>
  156. </div>
  157. <div style="text-align: center;">
  158. <div ng-repeat="image in extension.Images" style="margin-top: 25px; cursor: zoom-in;">
  159. <img ng-src="{{image}}" ng-click="enlargeImage(image)" style="max-width: 1024px;" />
  160. </div>
  161. </div>
  162. </rd-widget-body>
  163. </rd-widget>
  164. </div>
  165. </div>