1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-08 07:15:23 +02:00

refactor(icons): replace fa icons [EE-4459] (#7907)

refactor(icons): remove fontawesome EE-4459

refactor(icon) replace feather with lucide EE-4472
This commit is contained in:
Ali 2022-11-28 15:00:28 +13:00 committed by GitHub
parent 9dfac98a26
commit d78b762f7b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
498 changed files with 2102 additions and 2817 deletions

View file

@ -301,18 +301,6 @@ angular
},
};
var initEndpoint = {
name: 'portainer.init.endpoint',
url: '/endpoint',
views: {
'content@': {
templateUrl: './views/init/endpoint/initEndpoint.html',
controller: 'InitEndpointController',
controllerAs: 'ctrl',
},
},
};
var initAdmin = {
name: 'portainer.init.admin',
url: '/admin',
@ -440,7 +428,6 @@ angular
$stateRegistryProvider.register(groupCreation);
$stateRegistryProvider.register(home);
$stateRegistryProvider.register(init);
$stateRegistryProvider.register(initEndpoint);
$stateRegistryProvider.register(initAdmin);
$stateRegistryProvider.register(registries);
$stateRegistryProvider.register(registry);

View file

@ -1,5 +1,5 @@
<a class="ml-5 vertical-center be-indicator" href="{{ $ctrl.url }}" target="_blank" rel="noopener" ng-if="$ctrl.limitedToBE">
<ng-transclude></ng-transclude>
<pr-icon icon="'briefcase'" feather="true" class-name="'icon icon-sm vertical-center'"></pr-icon>
<pr-icon icon="'briefcase'" class-name="'space-right be-indicator-icon'"></pr-icon>
<span class="be-indicator-label">Business Edition Feature</span>
</a>

View file

@ -9,8 +9,7 @@ export function buildOption<T extends number | string>(
label: string,
description: string,
value: T,
feature?: FeatureId,
featherIcon?: IconProps['featherIcon']
feature?: FeatureId
): BoxSelectorOption<T> {
return { id, icon, label, description, value, feature, featherIcon };
return { id, icon, label, description, value, feature };
}

View file

@ -7,7 +7,10 @@
{{ $ctrl.titleText }}
</span>
<span class="small" style="float: right" ng-if="$ctrl.dismissAction">
<a ng-click="$ctrl.dismissAction()"><i class="fa fa-times"></i> dismiss</a>
<a ng-click="$ctrl.dismissAction()">
<pr-icon icon="'x'"></pr-icon>
dismiss</a
>
</span>
</div>
<div class="form-group">

View file

@ -4,12 +4,12 @@
<div class="toolBar">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="$ctrl.titleIcon" feather="true"></pr-icon>
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
</div>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true" class-name="'searchIcon'"></pr-icon>
<pr-icon icon="'search'" class-name="'searchIcon'"></pr-icon>
<input
type="text"
class="searchInput"
@ -26,7 +26,7 @@
ng-disabled="$ctrl.state.selectedItemCount === 0"
ng-click="$ctrl.removeAction($ctrl.state.selectedItems)"
>
<pr-icon icon="'trash-2'" feather="true"></pr-icon>
<pr-icon icon="'trash-2'"></pr-icon>
Remove
</button>
</div>

View file

@ -1,7 +1,7 @@
<div class="datatable">
<table class="table table-hover">
<div class="col-sm-12">
<i class="fa fa-search searchIcon" aria-hidden="true"></i>
<pr-icon icon="'search'" class-name="'searchIcon'"></pr-icon>
<input
type="text"
class="searchInput"
@ -41,7 +41,8 @@
<span ng-if="item.Inherited" class="text-muted small" style="margin-left: 2px"><code style="font-size: 85% !important">inherited</code></span>
</td>
<td>
<i class="fa" ng-class="item.Type === 'user' ? 'fa-user' : 'fa-users'" aria-hidden="true" style="margin-right: 2px"></i>
<pr-icon ng-if="item.Type === 'user'" icon="'user'" class-name="'mr-0.5'"></pr-icon>
<pr-icon ng-if="!item.Type === 'user'" icon="'users'" class-name="'mr-0.5'"></pr-icon>
{{ item.Type }}
</td>
</tr>

View file

@ -22,7 +22,7 @@
<input type="radio" id="access_administrators" ng-model="$ctrl.formData.Ownership" value="administrators" />
<label for="access_administrators" data-cy="portainer-selectAdminAccess">
<div class="boxselector_header">
<pr-icon icon="'eye-off'" feather="true"></pr-icon>
<pr-icon icon="'eye-off'"></pr-icon>
Administrators
</div>
<p class="boxselector_content">I want to restrict the management of this resource to administrators only</p>
@ -32,7 +32,7 @@
<input type="radio" id="access_restricted" ng-model="$ctrl.formData.Ownership" value="restricted" />
<label for="access_restricted" data-cy="portainer-selectRestrictedAccess">
<div class="boxselector_header">
<pr-icon icon="'users'" feather="true"></pr-icon>
<pr-icon icon="'users'"></pr-icon>
Restricted
</div>
<p class="boxselector_content"> I want to restrict the management of this resource to a set of users and/or teams </p>
@ -42,7 +42,7 @@
<input type="radio" id="access_private" ng-model="$ctrl.formData.Ownership" value="private" />
<label for="access_private">
<div class="boxselector_header">
<pr-icon icon="'eye-off'" feather="true"></pr-icon>
<pr-icon icon="'eye-off'"></pr-icon>
Private
</div>
<p> I want to restrict this resource to be manageable by myself only </p>
@ -52,7 +52,7 @@
<input type="radio" id="access_restricted" ng-model="$ctrl.formData.Ownership" value="restricted" />
<label for="access_restricted">
<div class="boxselector_header">
<pr-icon icon="'users'" feather="true"></pr-icon>
<pr-icon icon="'users'"></pr-icon>
Restricted
</div>

View file

@ -1,13 +1,13 @@
<div class="row">
<div class="col-sm-12">
<rd-widget ng-if="ctrl.availableUsersAndTeams && ctrl.accessControlledEntity">
<rd-widget-header icon="user-check" feather-icon="true" title-text="Create access"></rd-widget-header>
<rd-widget-header icon="user-check" title-text="Create access"></rd-widget-header>
<rd-widget-body>
<form class="form-horizontal">
<div ng-if="ctrl.entityType !== 'registry'" class="form-group">
<span class="col-sm-12 small text-warning">
<p class="vertical-center">
<pr-icon icon="'alert-circle'" mode="'warning'" feather="true"></pr-icon>
<pr-icon icon="'alert-circle'" mode="'warning'"></pr-icon>
Adding user access will require the affected user(s) to logout and login for the changes to be taken into account.
</p>
</span>
@ -48,7 +48,7 @@
data-cy="access-createAccess"
>
<span ng-hide="ctrl.state.actionInProgress" class="vertical-center">
<pr-icon icon="'plus'" feather="true"></pr-icon>
<pr-icon icon="'plus'"></pr-icon>
Create access
</span>
<span ng-show="ctrl.state.actionInProgress">Creating access...</span>

View file

@ -1,7 +1,7 @@
<information-panel title-text="Information">
<span class="small">
<p class="text-muted">
<i class="fa fa-flask orange-icon" aria-hidden="true" style="margin-right: 2px"></i>
<pr-icon icon="'flask-conical'" mode="'warning'"></pr-icon>
This is a beta feature.
</p>
</span>

View file

@ -5,7 +5,7 @@ angular.module('portainer.app').directive('buttonSpinner', function buttonSpinne
spinning: '=buttonSpinner',
},
transclude: true,
template: '<ng-transclude></ng-transclude><span ng-show="spinning"><i class="fa fa-circle-notch fa-spin" style="margin-left: 2px;"></i>&nbsp;</span>',
template: '<ng-transclude></ng-transclude><span ng-show="spinning"><pr-icon icon="\'loader-2\'" class-name="\'animate-spin-slow ml-0.5\'"></pr-icon>&nbsp;</span>',
};
return directive;

View file

@ -1,10 +1,10 @@
<span>
<button type="button" class="btn btn-link nopadding" ng-click="$ctrl.copyValueText()" title="Copy Value">
<pr-icon icon="'clipboard'" feather="true"></pr-icon>
<pr-icon icon="'clipboard'"></pr-icon>
Copy
</button>
<span ng-class="{ 'copy-button-fadeout': $ctrl.state.isFading }" class="copy-button-copy-text">
<pr-icon icon="'check'" feather="true"></pr-icon>
<pr-icon icon="'check'"></pr-icon>
copied
</span>
</span>

View file

@ -18,9 +18,9 @@
<div ng-show="commonCustomTemplateForm.template_title.$invalid">
<div class="mt-2 small text-warning">
<div ng-messages="commonCustomTemplateForm.template_title.$error">
<p class="vertical-center" ng-message="required"> <pr-icon icon="'alert-triangle'" feather="true" mode="'warning'"></pr-icon> Title is required. </p>
<p class="vertical-center" ng-message="required"> <pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon> Title is required. </p>
<p class="vertical-center" ng-message="pattern">
<pr-icon icon="'alert-triangle'" feather="true" mode="'warning'"></pr-icon>
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
This field must consist of lower case alphanumeric characters, '_' or '-' (e.g. 'my-name', or 'abc-123').
</p>
</div>
@ -40,7 +40,7 @@
<div class="mt-2 small text-warning">
<div ng-show="commonCustomTemplateForm.description.$invalid">
<div ng-messages="commonCustomTemplateForm.description.$error">
<p class="vertical-center" ng-message="required"> <pr-icon icon="'alert-triangle'" feather="true" mode="'warning'"></pr-icon> Description is required.</p>
<p class="vertical-center" ng-message="required"> <pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon> Description is required.</p>
</div>
</div>
</div>

View file

@ -3,11 +3,13 @@
<rd-widget-body classes="no-padding">
<div class="toolBar vertical-center !gap-x-5 !gap-y-1 flex-wrap">
<div class="toolBarTitle vertical-center">
<pr-icon icon="$ctrl.titleIcon" feather="true" class-name="'icon-nested-blue'" mode="'primary'"></pr-icon>
<div class="widget-icon space-right">
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
</div>
Custom Templates
</div>
<div class="searchBar vertical-center !mr-0">
<pr-icon icon="'search'" feather="true" class-name="'searchIcon'"></pr-icon>
<pr-icon icon="'search'" class-name="'searchIcon'"></pr-icon>
<input
type="text"
class="searchInput"
@ -20,7 +22,7 @@
</div>
<div class="actionBar">
<button type="button" class="btn btn-sm btn-primary" ui-state="$ctrl.createPath">
<pr-icon icon="'plus'" feather="true"></pr-icon>
<pr-icon icon="'plus'"></pr-icon>
Add Custom Template
</button>
</div>
@ -36,11 +38,11 @@
<template-item-actions>
<div ng-if="$ctrl.isEditAllowed(template)" class="vertical-center">
<a ui-state="$ctrl.editPath" ui-state-params="{id: template.Id}" ng-click="$event.stopPropagation();" class="btn btn-secondary btn-sm vertical-center">
<pr-icon icon="'edit'" feather="true"></pr-icon>
<pr-icon icon="'edit'"></pr-icon>
Edit
</a>
<button class="btn btn-dangerlight btn-sm vertical-center" ng-click="$ctrl.onDeleteClick(template.Id); $event.stopPropagation();">
<pr-icon icon="'trash-2'" feather="true"></pr-icon>
<pr-icon icon="'trash-2'"></pr-icon>
Delete
</button>
</div>

View file

@ -4,12 +4,12 @@
<div class="toolBar vertical-center">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="$ctrl.titleIcon" feather="true"></pr-icon>
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
</div>
<span>{{ $ctrl.titleText }}</span>
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true" class="searchIcon"></pr-icon>
<pr-icon icon="'search'" class="searchIcon"></pr-icon>
<input
type="text"
class="searchInput"
@ -27,11 +27,11 @@
ng-disabled="$ctrl.state.selectedItemCount === 0"
ng-click="$ctrl.removeAction($ctrl.state.selectedItems)"
>
<pr-icon icon="'trash-2'" feather="true" class-name="'icon-white'"></pr-icon>
<pr-icon icon="'trash-2'" class-name="'icon-white'"></pr-icon>
<span>Remove</span>
</button>
<button type="button" class="btn btn-sm btn-primary vertical-center" ng-click="$ctrl.onClickAdd()">
<pr-icon icon="'plus'" feather="true" class-name="'icon-white'"></pr-icon>
<pr-icon icon="'plus'" class-name="'icon-white'"></pr-icon>
<span>Add access token</span>
</button>
</div>

View file

@ -1,6 +1,6 @@
<span class="setting" ng-class="{ 'setting-active': $ctrl.state.isOpen }" uib-dropdown dropdown-append-to-body auto-close="disabled" is-open="$ctrl.state.isOpen">
<span uib-dropdown-toggle aria-label="Columns">
<pr-icon icon="'columns'" feather="true"></pr-icon>
<pr-icon icon="'columns'"></pr-icon>
</span>
<div class="dropdown-menu dropdown-menu-right" uib-dropdown-menu>
<div class="tableMenu">

View file

@ -4,13 +4,13 @@
<div class="toolBar">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="$ctrl.titleIcon" feather="true"></pr-icon>
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
</div>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true" class="searchIcon"></pr-icon>
<pr-icon icon="'search'" class="searchIcon"></pr-icon>
<input
type="text"
class="searchInput"
@ -30,11 +30,11 @@
ng-click="$ctrl.removeAction($ctrl.state.selectedItems)"
data-cy="endpoint-removeEndpointButton"
>
<pr-icon icon="'trash-2'" feather="true" class-name="'icon-white'"></pr-icon>
<pr-icon icon="'trash-2'" class-name="'icon-white'"></pr-icon>
<span>Remove</span>
</button>
<button type="button" class="btn btn-sm btn-primary h-fit" ng-click="$ctrl.setReferrer()" ui-sref="portainer.wizard.endpoints" data-cy="endpoint-addEndpointButton">
<pr-icon icon="'plus'" feather="true" class-name="'icon-white'"></pr-icon>
<pr-icon icon="'plus'" class-name="'icon-white'"></pr-icon>
<span>Add environment</span>
</button>
</div>
@ -116,7 +116,7 @@
<td>{{ item.GroupName }}</td>
<td>
<a ui-sref="portainer.endpoints.endpoint.access({id: item.Id})">
<pr-icon icon="'users'" feather="true"></pr-icon>
<pr-icon icon="'users'"></pr-icon>
Manage access
</a>
</td>

View file

@ -3,8 +3,8 @@
<div class="filter-button">
<span uib-dropdown-toggle class="table-filter vertical-center" ng-class="{ 'filter-active': $ctrl.isEnabled() }">
Filter
<pr-icon ng-if="$ctrl.isEnabled()" icon="'check'" feather="true"></pr-icon>
<pr-icon ng-if="!$ctrl.isEnabled()" icon="'filter'" feather="true"></pr-icon>
<pr-icon ng-if="$ctrl.isEnabled()" icon="'check'"></pr-icon>
<pr-icon ng-if="!$ctrl.isEnabled()" icon="'filter'"></pr-icon>
</span>
</div>
<div class="dropdown-menu" style="min-width: 0" uib-dropdown-menu>

View file

@ -4,12 +4,12 @@
<div class="toolBar">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="$ctrl.titleIcon" feather="true"></pr-icon>
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
</div>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true"></pr-icon>
<pr-icon icon="'search'"></pr-icon>
<input
type="text"
class="searchInput"
@ -29,11 +29,11 @@
ng-click="$ctrl.removeAction($ctrl.state.selectedItems)"
data-cy="endpointGroup-removeGroupButton"
>
<pr-icon icon="'trash-2'" feather="true"></pr-icon>
<pr-icon icon="'trash-2'"></pr-icon>
Remove
</button>
<button type="button" class="btn btn-sm btn-primary h-fit" ui-sref="portainer.groups.new" data-cy="endpointGroup-addGroupButton">
<pr-icon icon="'plus'" feather="true"></pr-icon>Add group
<pr-icon icon="'plus'"></pr-icon>Add group
</button>
</div>
</div>
@ -76,7 +76,7 @@
<td>
<div class="vertical-center">
<a ui-sref="portainer.groups.group.access({id: item.Id})">
<pr-icon icon="'users'" feather="true"></pr-icon>
<pr-icon icon="'users'"></pr-icon>
Manage access
</a>
</div>

View file

@ -2,13 +2,11 @@ import angular from 'angular';
import 'angular-utils-pagination';
import { datatableTitlebar } from './titlebar';
import { datatableSortIcon } from './sort-icon';
import { datatablePagination } from './pagination';
import { datatableFilter } from './filter';
export default angular
.module('portainer.shared.datatable', ['angularUtils.directives.dirPagination'])
.component('datatableTitlebar', datatableTitlebar)
.component('datatableSortIcon', datatableSortIcon)
.component('datatablePagination', datatablePagination)
.component('datatableFilter', datatableFilter).name;

View file

@ -4,12 +4,12 @@
<div class="toolBar">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="$ctrl.titleIcon" feather="true"></pr-icon>
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
</div>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true" class-name="'searchIcon'"></pr-icon>
<pr-icon icon="'search'" class-name="'searchIcon'"></pr-icon>
<input
type="text"
class="searchInput"
@ -30,10 +30,10 @@
ng-click="$ctrl.removeAction($ctrl.state.selectedItems)"
data-cy="registry-removeRegistryButton"
>
<pr-icon icon="'trash-2'" feather="true"></pr-icon>Remove
<pr-icon icon="'trash-2'"></pr-icon>Remove
</button>
<button type="button" class="btn btn-sm btn-primary h-fit vertical-center !ml-0" ui-sref="portainer.registries.new" data-cy="registry-addRegistryButton">
<pr-icon icon="'plus'" feather="true"></pr-icon>Add registry
<pr-icon icon="'plus'"></pr-icon>Add registry
</button>
</div>
</div>
@ -107,10 +107,10 @@
ng-if="$ctrl.canManageAccess(item)"
ng-click="$ctrl.redirectToManageAccess(item)"
>
<pr-icon icon="'users'" feather="true"></pr-icon>Manage access
<pr-icon icon="'users'"></pr-icon>Manage access
</button>
<be-feature-indicator feature="$ctrl.limitedFeature" ng-if="$ctrl.canBrowse(item)">
<span class="text-muted" style="padding-right: 5px"> <pr-icon icon="'search'" feather="true"></pr-icon> Browse </span>
<span class="text-muted" style="padding-right: 5px"> <pr-icon icon="'search'"></pr-icon> Browse </span>
</be-feature-indicator>
<span ng-if="!$ctrl.canBrowse(item) && !$ctrl.canManageAccess(item)"> - </span>

View file

@ -1,5 +0,0 @@
export default class datatableSortIconController {
isCurrentSortOrder() {
return this.selectedSortKey === this.key;
}
}

View file

@ -1,9 +0,0 @@
<i
class="fa fa-sort-alpha-down"
ng-class="{
'fa-sort-alpha-down': !$ctrl.reverseOrder,
'fa-sort-alpha-up': $ctrl.reverseOrder,
}"
aria-hidden="true"
ng-if="$ctrl.isCurrentSortOrder()"
></i>

View file

@ -1,11 +0,0 @@
import controller from './datatable-sort-icon.controller';
export const datatableSortIcon = {
bindings: {
key: '@',
selectedSortKey: '@',
reverseOrder: '<',
},
controller,
templateUrl: './datatable-sort-icon.html',
};

View file

@ -4,12 +4,12 @@
<div class="toolBar vertical-center !gap-x-5 !gap-y-1 flex-wrap">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="'layers'" feather="true"></pr-icon>
<pr-icon icon="'layers'"></pr-icon>
</div>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center !mr-0">
<pr-icon icon="'search'" feather="true" class-name="'searchIcon'"></pr-icon>
<pr-icon icon="'search'" class-name="'searchIcon'"></pr-icon>
<input
type="text"
class="searchInput"
@ -30,7 +30,7 @@
ng-click="$ctrl.removeAction($ctrl.state.selectedItems)"
data-cy="stack-removeStackButton"
>
<pr-icon icon="'trash-2'" feather="true"></pr-icon>Remove
<pr-icon icon="'trash-2'"></pr-icon>Remove
</button>
<button
ng-disabled="!$ctrl.createEnabled"
@ -40,14 +40,14 @@
authorization="PortainerStackCreate"
data-cy="stack-addStackButton"
>
<pr-icon icon="'plus'" feather="true"></pr-icon>Add stack
<pr-icon icon="'plus'"></pr-icon>Add stack
</button>
</div>
<div class="settings">
<datatable-columns-visibility columns="$ctrl.columnVisibility.columns" on-change="($ctrl.onColumnVisibilityChange)"></datatable-columns-visibility>
<span class="setting ml-2" ng-class="{ 'setting-active': $ctrl.settings.open }" uib-dropdown dropdown-append-to-body auto-close="disabled" is-open="$ctrl.settings.open">
<span uib-dropdown-toggle aria-label="Settings">
<pr-icon icon="'more-vertical'" feather="true"></pr-icon>
<pr-icon icon="'more-vertical'"></pr-icon>
</span>
<div class="dropdown-menu dropdown-menu-right" uib-dropdown-menu>
<div class="tableMenu">
@ -72,7 +72,7 @@
<option value="300">5min</option>
</select>
<span>
<pr-icon id="refreshRateChange" icon="'check'" feather="true" mode="'success'" size="'sm'"></pr-icon>
<pr-icon id="refreshRateChange" icon="'check'" mode="'success'" style="display: none"></pr-icon>
</span>
</div>
</div>
@ -106,8 +106,8 @@
<div>
<span uib-dropdown-toggle ng-class="['table-filter vertical-center !ml-1', { 'filter-active': $ctrl.filters.state.enabled }]">
Filter
<pr-icon ng-if="$ctrl.filters.state.enabled" icon="'check'" feather="true" size="'sm'"></pr-icon>
<pr-icon ng-if="!$ctrl.filters.state.enabled" icon="'filter'" feather="true" size="'sm'"></pr-icon>
<pr-icon ng-if="$ctrl.filters.state.enabled" icon="'check'" size="'sm'"></pr-icon>
<pr-icon ng-if="!$ctrl.filters.state.enabled" icon="'filter'" size="'sm'"></pr-icon>
</span>
</div>
<div class="dropdown-menu" uib-dropdown-menu>
@ -197,7 +197,7 @@
uib-tooltip="This stack was created inside an environment that is no longer registered inside Portainer."
>
Orphaned
<pr-icon icon="'alert-circle'" feather="true" class-name="'ml-0.5'" mode="'warning'"></pr-icon>
<pr-icon icon="'alert-circle'" class-name="'ml-0.5'" mode="'warning'"></pr-icon>
</span>
<span
ng-if="item.External"
@ -208,7 +208,7 @@
uib-tooltip="This stack was created outside of Portainer. Control over this stack is limited."
>
Limited
<pr-icon icon="'alert-circle'" feather="true" class-name="'ml-0.5'" mode="'warning'"></pr-icon>
<pr-icon icon="'alert-circle'" class-name="'ml-0.5'" mode="'warning'"></pr-icon>
</span>
<span ng-if="item.Regular">Total</span>
</td>
@ -222,7 +222,7 @@
</td>
<td>
<span class="vertical-center">
<pr-icon ng-attr-icon="item.ResourceControl.Ownership | ownershipicon" feather="true" class-name="'icon ml-0.5'"></pr-icon>
<pr-icon ng-attr-icon="item.ResourceControl.Ownership | ownershipicon" class-name="'icon ml-0.5'"></pr-icon>
{{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}
</span>
</td>

View file

@ -3,13 +3,13 @@
<div class="toolBar vertical-center !gap-x-5 !gap-y-1 flex-wrap w-full relative">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="$ctrl.titleIcon" feather="true"></pr-icon>
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
</div>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true"></pr-icon>
<pr-icon icon="'search'"></pr-icon>
<input
type="text"
class="searchInput"
@ -26,7 +26,7 @@
ng-disabled="$ctrl.state.selectedItemCount === 0"
ng-click="$ctrl.onRemove($ctrl.state.selectedItems)"
>
<pr-icon icon="'trash-2'" feather="true"></pr-icon>Remove
<pr-icon icon="'trash-2'"></pr-icon>Remove
</button>
</div>
</div>

View file

@ -4,12 +4,12 @@
<div class="toolBar">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="$ctrl.titleIcon" feather="true"></pr-icon>
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
</div>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true"></pr-icon>
<pr-icon icon="'search'"></pr-icon>
<input
type="text"
class="searchInput"
@ -21,7 +21,7 @@
</div>
<div class="actionBar !gap-3">
<button type="button" class="btn btn-sm btn-dangerlight h-fit" ng-disabled="$ctrl.state.selectedItemCount === 0" ng-click="$ctrl.removeAction($ctrl.state.selectedItems)">
<pr-icon icon="'trash-2'" feather="true"></pr-icon>Remove
<pr-icon icon="'trash-2'"></pr-icon>Remove
</button>
</div>
</div>

View file

@ -1,6 +1,6 @@
<div class="toolBar">
<div class="toolBarTitle">
<pr-icon icon="$ctrl.icon" feather="$ctrl.featherIcon" class-name="space-right"></pr-icon>
<pr-icon icon="$ctrl.icon" class-name="'space-right'"></pr-icon>
{{ $ctrl.title }}
<be-feature-indicator feature="$ctrl.feature"></be-feature-indicator>
</div>

View file

@ -3,7 +3,6 @@ export const datatableTitlebar = {
icon: '@',
title: '@',
feature: '@',
featherIcon: '<',
},
templateUrl: './datatable-titlebar.html',
};

View file

@ -4,13 +4,13 @@
<div class="toolBar vertical-center !gap-x-5 !gap-y-1 flex-wrap">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="$ctrl.titleIcon" feather="true"></pr-icon>
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
</div>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true"></pr-icon>
<pr-icon icon="'search'"></pr-icon>
<input
type="text"
class="searchInput"
@ -29,7 +29,7 @@
ng-click="$ctrl.removeAction($ctrl.state.selectedItems)"
data-cy="user-removeUserButton"
>
<pr-icon icon="'trash-2'" feather="true"></pr-icon>Remove
<pr-icon icon="'trash-2'"></pr-icon>Remove
</button>
</div>
</div>
@ -88,9 +88,9 @@
</td>
<td>
<span class="vertical-center">
<pr-icon icon="'svg-usercircle'" ng-if="item.Role === 1 && !item.isTeamLeader"></pr-icon>
<pr-icon icon="'user'" ng-if="item.Role !== 1 && item.isTeamLeader" feather="true"></pr-icon>
<pr-icon icon="'user-plus'" ng-if="item.Role !== 1 && !item.isTeamLeader" feather="true"></pr-icon>
<pr-icon icon="'user'" ng-if="item.Role === 1 && !item.isTeamLeader"></pr-icon>
<pr-icon icon="'user'" ng-if="item.Role !== 1 && item.isTeamLeader"></pr-icon>
<pr-icon icon="'user-plus'" ng-if="item.Role !== 1 && !item.isTeamLeader"></pr-icon>
{{ item.RoleName ? item.RoleName : '-' }}
</span>
</td>

View file

@ -1,7 +1,7 @@
<div class="row" ng-if="$ctrl.isDemo">
<div class="col-lg-12 col-md-12 col-xs-12">
<rd-widget>
<rd-widget-header icon="fa-exclamation-triangle" title-text="Feature not available"> </rd-widget-header>
<rd-widget-header icon="alert-triangle" title-text="Feature not available"> </rd-widget-header>
<rd-widget-body>
<span class="small text-muted">{{ $ctrl.content }}</span>
</rd-widget-body>

View file

@ -31,7 +31,7 @@
<input type="radio" id="tls_client_ca" ng-model="$ctrl.formData.TLSMode" value="tls_client_ca" />
<label for="tls_client_ca">
<div class="boxselector_header">
<pr-icon icon="'shield'" feather="true"></pr-icon>
<pr-icon icon="'shield'"></pr-icon>
TLS with server and client verification
</div>
<p>Use client certificates and server verification</p>
@ -41,7 +41,7 @@
<input type="radio" id="tls_client_noca" ng-model="$ctrl.formData.TLSMode" value="tls_client_noca" />
<label for="tls_client_noca">
<div class="boxselector_header">
<pr-icon icon="'shield'" feather="true"></pr-icon>
<pr-icon icon="'shield'"></pr-icon>
TLS with client verification only
</div>
<p>Use client certificates without server verification</p>
@ -51,7 +51,7 @@
<input type="radio" id="tls_ca" ng-model="$ctrl.formData.TLSMode" value="tls_ca" />
<label for="tls_ca">
<div class="boxselector_header">
<pr-icon icon="'shield'" feather="true"></pr-icon>
<pr-icon icon="'shield'"></pr-icon>
TLS with server verification only
</div>
<p>Only verify the server certificate</p>
@ -61,7 +61,7 @@
<input type="radio" id="tls_only" ng-model="$ctrl.formData.TLSMode" value="tls_only" />
<label for="tls_only">
<div class="boxselector_header">
<pr-icon icon="'shield'" feather="true"></pr-icon>
<pr-icon icon="'shield'"></pr-icon>
TLS only
</div>
<p>No server/client verification</p>
@ -81,8 +81,8 @@
<button type="button" class="btn btn-sm btn-primary" ngf-select ng-model="$ctrl.formData.TLSCACert">Select file</button>
<span class="space-left">
{{ $ctrl.formData.TLSCACert.name }}
<pr-icon icon="'check'" ng-if="$ctrl.formData.TLSCACert && $ctrl.formData.TLSCACert === $ctrl.endpoint.TLSConfig.TLSCACert" mode="'success'" feather="true"></pr-icon>
<pr-icon icon="'x'" ng-if="!$ctrl.formData.TLSCACert" mode="'danger'" feather="true"></pr-icon>
<pr-icon icon="'check'" ng-if="$ctrl.formData.TLSCACert && $ctrl.formData.TLSCACert === $ctrl.endpoint.TLSConfig.TLSCACert" mode="'success'"></pr-icon>
<pr-icon icon="'x'" ng-if="!$ctrl.formData.TLSCACert" mode="'danger'"></pr-icon>
</span>
</div>
</div>
@ -96,8 +96,8 @@
<button type="button" class="btn btn-sm btn-primary" ngf-select ng-model="$ctrl.formData.TLSCert">Select file</button>
<span class="space-left">
{{ $ctrl.formData.TLSCert.name }}
<pr-icon icon="'check'" ng-if="$ctrl.formData.TLSCert && $ctrl.formData.TLSCert === $ctrl.endpoint.TLSConfig.TLSCert" mode="'success'" feather="true"></pr-icon>
<pr-icon icon="'x'" ng-if="!$ctrl.formData.TLSCert" mode="'danger'" feather="true"></pr-icon>
<pr-icon icon="'check'" ng-if="$ctrl.formData.TLSCert && $ctrl.formData.TLSCert === $ctrl.endpoint.TLSConfig.TLSCert" mode="'success'"></pr-icon>
<pr-icon icon="'x'" ng-if="!$ctrl.formData.TLSCert" mode="'danger'"></pr-icon>
</span>
</div>
</div>
@ -109,8 +109,8 @@
<button type="button" class="btn btn-sm btn-primary" ngf-select ng-model="$ctrl.formData.TLSKey">Select file</button>
<span class="space-left">
{{ $ctrl.formData.TLSKey.name }}
<pr-icon icon="'check'" ng-if="$ctrl.formData.TLSKey && $ctrl.formData.TLSKey === $ctrl.endpoint.TLSConfig.TLSKey" mode="'success'" feather="true"></pr-icon>
<pr-icon icon="'x'" ng-if="!$ctrl.formData.TLSKey" mode="'danger'" feather="true"></pr-icon>
<pr-icon icon="'check'" ng-if="$ctrl.formData.TLSKey && $ctrl.formData.TLSKey === $ctrl.endpoint.TLSConfig.TLSKey" mode="'success'"></pr-icon>
<pr-icon icon="'x'" ng-if="!$ctrl.formData.TLSKey" mode="'danger'"></pr-icon>
</span>
</div>
</div>

View file

@ -16,18 +16,18 @@
<div ng-if="$ctrl.mode == 'advanced'" class="environment-variables-panel--advanced">
<div class="col-sm-12 text-clickable">
<button type="button" class="btn btn-link btn-sm hover:no-underline !ml-0 p-0 vertical-center" ng-click="$ctrl.switchEnvMode()">
<pr-icon icon="'list'" feather="true"></pr-icon> Simple mode
<pr-icon icon="'list'"></pr-icon> Simple mode
</button>
</div>
<div class="col-sm-12 small text-muted">
<pr-icon icon="'alert-circle'" mode="'primary'" feather="true"></pr-icon>
<pr-icon icon="'alert-circle'" mode="'primary'"></pr-icon>
Switch to simple mode to define variables line by line, or load from .env file
</div>
<div class="form-group" style="margin-left: 1px">
<code-editor identifier="environment-variables-editor" placeholder="e.g. key=value" value="$ctrl.editorText" yml="false" on-change="($ctrl.editorUpdate)"></code-editor>
</div>
<div class="col-sm-12 small text-muted" ng-if="$ctrl.showHelpMessage">
<pr-icon icon="'alert-circle'" mode="'primary'" feather="true"></pr-icon>
<pr-icon icon="'alert-circle'" mode="'primary'"></pr-icon>
Environment changes will not take effect until redeployment occurs manually or via webhook.
</div>
</div>

View file

@ -16,9 +16,9 @@
<div class="form-group" style="margin-top: 5px" ng-show="$ctrl[$ctrl.formName].name.$invalid">
<div class="col-sm-12 small">
<div ng-messages="$ctrl[$ctrl.formName].name.$error">
<p ng-message="required"> <pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon> Name is required. </p>
<p ng-message="required"> <pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon> Name is required. </p>
<p ng-message="pattern">
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
This field must consist alphanumeric characters, '-' or '_', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-var', or 'MY_VAR123').
</p>
</div>
@ -43,14 +43,17 @@
<div class="form-group" ng-show="$ctrl[$ctrl.formName].value.$invalid">
<div class="col-sm-12 small text-warning">
<div ng-messages="$ctrl[$ctrl.formName].value.$error">
<p ng-message="pattern"> <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> Value is invalid. </p>
<p ng-message="pattern">
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
Value is invalid.
</p>
</div>
</div>
</div>
</div>
<div>
<button class="btn btn-dangerlight" type="button" ng-click="$ctrl.onRemove($ctrl.index)">
<pr-icon icon="'trash-2'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'trash-2'" size="'md'"></pr-icon>
</button>
</div>
</ng-form>

View file

@ -1,15 +1,13 @@
<div class="environment-variables-simple-mode">
<div class="col-sm-12">
<button type="button" class="btn btn-link btn-sm hover:no-underline !ml-0 p-0" ng-click="$ctrl.onSwitchModeClick()">
<pr-icon icon="'edit'" feather="true"></pr-icon> Advanced mode
</button>
<button type="button" class="btn btn-link btn-sm hover:no-underline !ml-0 p-0" ng-click="$ctrl.onSwitchModeClick()"> <pr-icon icon="'edit'"></pr-icon> Advanced mode </button>
</div>
<div class="col-sm-12 small text-muted">
<pr-icon icon="'alert-circle'" mode="'primary'" feather="true"></pr-icon>
<pr-icon icon="'alert-circle'" mode="'primary'"></pr-icon>
Switch to advanced mode to copy & paste multiple variables
</div>
<div class="col-sm-12 environment-variables-simple-mode--actions">
<button type="button" class="btn btn-sm btn-default" ng-click="$ctrl.add()"> <pr-icon icon="'plus'" feather="true"></pr-icon> Add an environment variable </button>
<button type="button" class="btn btn-sm btn-default" ng-click="$ctrl.add()"> <pr-icon icon="'plus'"></pr-icon> Add an environment variable </button>
<button
type="button"
class="btn btn-sm btn-default"
@ -19,10 +17,10 @@
ngf-max-size="1MB"
ngf-model-invalid="errorFile"
>
<pr-icon icon="'upload'" feather="true"></pr-icon> Load variables from .env file
<pr-icon icon="'upload'"></pr-icon> Load variables from .env file
</button>
<span class="space-left" ng-if="errorFile.$error == 'maxSize'">
<i class="fa fa-times red-icon space-right" aria-hidden="true"></i>
<pr-icon icon="'x'" mode="'warning'" class-name="'space-right'"></pr-icon>
File too large! Try uploading a file smaller than 1MB
</span>
</div>
@ -36,7 +34,7 @@
></environment-variables-simple-mode-item>
</div>
<div class="col-sm-12 small text-muted" ng-if="$ctrl.ngModel.length > 0 && $ctrl.showHelpMessage">
<pr-icon icon="'alert-circle'" mode="'primary'" feather="true"></pr-icon>
<pr-icon icon="'alert-circle'" mode="'primary'"></pr-icon>
Environment changes will not take effect until redeployment occurs manually or via webhook.
</div>
</div>

View file

@ -6,13 +6,13 @@
<input type="text" name="name" class="form-control" ng-model="$ctrl.variable" ng-change="$ctrl.onChangePath($ctrl.variable)" required />
</div>
<button class="btn btn-dangerlight" type="button" ng-click="$ctrl.removeValue()" title="Remove">
<pr-icon icon="'trash-2'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'trash-2'" size="'md'"></pr-icon>
</button>
</div>
<div ng-show="$ctrl[$ctrl.formName].name.$invalid">
<div class="small text-warning">
<div ng-messages="$ctrl[$ctrl.formName].name.$error" class="mt-1">
<p class="vertical-center" ng-message="required"> <pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon> Path is required. </p>
<p class="vertical-center" ng-message="required"> <pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon> Path is required. </p>
</div>
</div>
</div>

View file

@ -4,9 +4,7 @@
<label class="control-label text-left">Additional paths</label>
</div>
<div class="col-sm-9 pt-1">
<span class="label label-default interactive vertical-center" ng-click="$ctrl.add()">
<pr-icon icon="'plus'" size="'sm'" mode="'alt'" feather="true"></pr-icon> <span>add file</span>
</span>
<span class="label label-default interactive vertical-center" ng-click="$ctrl.add()"> <pr-icon icon="'plus'" size="'sm'" mode="'alt'"></pr-icon> <span>add file</span> </span>
</div>
</div>
<div class="col-sm-12 form-inline">

View file

@ -12,7 +12,7 @@
</div>
</div>
<div class="small mt-1 mb-3" ng-if="$ctrl.model.RepositoryAuthentication && $ctrl.showAuthExplanation">
<pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
<span class="text-muted">Enabling authentication will store the credentials and it is advisable to use a git service account</span>
</div>
<div ng-if="$ctrl.model.RepositoryAuthentication" class="row">

View file

@ -12,7 +12,7 @@
</div>
</div>
<div class="small vertical-center" ng-if="$ctrl.model.RepositoryAutomaticUpdates">
<pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
<span class="text-warning"
>Any changes to this stack or application made locally in Portainer will be overridden, which may cause service interruption. Do you wish to continue?</span
>
@ -38,10 +38,10 @@
<div class="col-sm-8">
<span class="text-muted"> {{ $ctrl.model.RepositoryWebhookURL | truncatelr }} </span>
<button type="button" class="btn btn-sm btn-light btn-sm space-left vertical-center" ng-if="$ctrl.model.RepositoryWebhookURL" ng-click="$ctrl.copyWebhook()">
<pr-icon icon="'copy'" size="'sm'" feather="true"></pr-icon> Copy link
<pr-icon icon="'copy'" size="'sm'"></pr-icon> Copy link
</button>
<span>
<pr-icon icon="'check'" mode="'success'" feather="true" style="display: none"></pr-icon>
<pr-icon icon="'check'" mode="'success'" style="display: none"></pr-icon>
</span>
</div>
</div>
@ -62,9 +62,9 @@
<div class="form-group col-md-12 pt-1" ng-show="autoUpdateForm.repository_fetch_interval.$touched && autoUpdateForm.repository_fetch_interval.$invalid">
<div class="small text-warning">
<div ng-messages="autoUpdateForm.repository_fetch_interval.$error">
<p ng-message="required"> <pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon> This field is required.</p>
<p ng-message="invalidIntervalFormat"> <pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon> Please enter a valid time interval.</p>
<p ng-message="minimumInterval"> <pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon> Minimum interval is 1m</p>
<p ng-message="required"> <pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon> This field is required.</p>
<p ng-message="invalidIntervalFormat"> <pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon> Please enter a valid time interval.</p>
<p ng-message="minimumInterval"> <pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon> Minimum interval is 1m</p>
</div>
</div>
</div>
@ -97,11 +97,11 @@
</div>
</div>
<div class="small vertical-center" ng-if="$ctrl.model.RepositoryAutomaticUpdates">
<pr-icon icon="'info'" mode="'primary'" feather="true"></pr-icon>
<pr-icon icon="'info'" mode="'primary'"></pr-icon>
<span class="text-muted">When enabled, enforces automatic deployment at each interval or webhook invocation.</span>
</div>
<div class="small vertical-center" ng-if="!$ctrl.model.RepositoryAutomaticUpdates">
<pr-icon icon="'info'" mode="'primary'" feather="true"></pr-icon>
<pr-icon icon="'info'" mode="'primary'"></pr-icon>
<span class="text-muted">When enabled, updates from the git repository will occur automatically at an interval or webhook.</span>
</div>
</ng-form>

View file

@ -1,7 +1,7 @@
<ng-form name="pathForm">
<div class="form-group">
<span class="col-sm-12 text-muted small vertical-center">
<pr-icon icon="'info'" mode="'primary'" feather="true"></pr-icon>
<pr-icon icon="'info'" mode="'primary'"></pr-icon>
<span
>Indicate the path to the {{ $ctrl.deployMethod == 'compose' ? 'Compose' : 'Manifest' }} file from the root of your repository.
<span ng-if="$ctrl.isDockerStandalone">

View file

@ -1,6 +1,6 @@
<div class="form-group">
<span class="col-sm-12 text-muted small vertical-center">
<pr-icon icon="'info'" mode="'primary'" feather="true"></pr-icon>
<pr-icon icon="'info'" mode="'primary'"></pr-icon>
<span>
Specify a reference of the repository using the following syntax: branches with <code>refs/heads/branch_name</code> or tags with <code>refs/tags/tag_name</code>. If not
specified, will use the default <code>HEAD</code> reference normally the <code>master</code> branch.

View file

@ -8,7 +8,7 @@
<div class="small text-warning">
<div ng-messages="endpointGroupForm.group_name.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
This field is required.
</p>
</div>

View file

@ -10,7 +10,8 @@
<div class="col-sm-12">
<p>
<a class="small interactive" ng-click="$ctrl.state.showConfig = !$ctrl.state.showConfig">
<i ng-class="['fa space-right', { 'fa-minus': $ctrl.state.showConfig, 'fa-plus': !$ctrl.state.showConfig }]" aria-hidden="true"></i>
<pr-icon ng-if="$ctrl.state.showConfig" icon="'minus'" class-name="'mr-1'"></pr-icon>
<pr-icon ng-if="!$ctrl.state.showConfig" icon="'plus'" class-name="'mr-1'"></pr-icon>
{{ $ctrl.state.showConfig ? 'Hide' : 'Advanced' }} configuration
</a>
</p>
@ -37,7 +38,10 @@
analytics-category="kubernetes"
analytics-event="kubernetes-application-edit-git-pull"
>
<span ng-show="!$ctrl.state.redeployInProgress"> <i class="fa fa-sync space-right" aria-hidden="true"></i> Pull and update application </span>
<span ng-show="!$ctrl.state.redeployInProgress">
<pr-icon icon="'refresh-cw'" class="!mr-1"></pr-icon>
Pull and update application
</span>
<span ng-show="$ctrl.state.redeployInProgress">In progress...</span>
</button>
<button

View file

@ -10,7 +10,8 @@
<div class="col-sm-12">
<p>
<a class="small interactive" ng-click="$ctrl.state.showConfig = !$ctrl.state.showConfig">
<i ng-class="['fa space-right', { 'fa-minus': $ctrl.state.showConfig, 'fa-plus': !$ctrl.state.showConfig }]" aria-hidden="true"></i>
<pr-icon ng-if="$ctrl.state.showConfig" icon="'minus'" class-name="'mr-1'"></pr-icon>
<pr-icon ng-if="!$ctrl.state.showConfig" icon="'plus'" class-name="'mr-1'"></pr-icon>
{{ $ctrl.state.showConfig ? 'Hide' : 'Advanced' }} configuration
</a>
</p>
@ -37,7 +38,10 @@
analytics-category="kubernetes"
analytics-event="kubernetes-application-edit-git-pull"
>
<span ng-show="!$ctrl.state.redeployInProgress"> <i class="fa fa-sync space-right" aria-hidden="true"></i> Pull and update application </span>
<span ng-show="!$ctrl.state.redeployInProgress">
<pr-icon icon="'refresh-cw'" class="!mr-1"></pr-icon>
Pull and update application
</span>
<span ng-show="$ctrl.state.redeployInProgress">In progress...</span>
</button>
<button

View file

@ -18,11 +18,11 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormEcr.registry_name.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
<p ng-message="used" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
A registry with the same name already exists.
</p>
</div>
@ -52,7 +52,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormEcr.registry_url.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -88,7 +88,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormEcr.registry_access_key.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -107,7 +107,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormEcr.registry_secret_access_key.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -126,11 +126,11 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormEcr.registry_region.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
<p ng-message="used" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
A registry with the same name already exists.
</p>
</div>

View file

@ -9,11 +9,11 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormAzure.registry_name.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
<p ng-message="used" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
A registry with the same name already exists.
</p>
</div>
@ -34,7 +34,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormAzure.registry_url.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -52,7 +52,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormAzure.registry_username.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -70,7 +70,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormAzure.registry_password.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>

View file

@ -16,11 +16,11 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormCustom.registry_name.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
<p ng-message="used" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
A registry with the same name already exists.
</p>
</div>
@ -41,7 +41,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormCustom.registry_url.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -75,7 +75,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormCustom.registry_username.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -93,7 +93,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormCustom.registry_password.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>

View file

@ -18,11 +18,11 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormDockerhub.registry_name.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
<p ng-message="used" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
A registry with the same name already exists.
</p>
</div>
@ -40,7 +40,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormDockerhub.registry_username.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -58,7 +58,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormDockerhub.registry_password.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>

View file

@ -3,11 +3,11 @@
<rd-widget-body classes="no-padding">
<div class="toolBar vertical-center">
<div class="toolBarTitle vertical-center">
<pr-icon icon="$ctrl.titleIcon" feather="true" class-name="'icon-blue'"></pr-icon>
<pr-icon icon="$ctrl.titleIcon" class-name="'icon-blue'"></pr-icon>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true" class="searchIcon"></pr-icon>
<pr-icon icon="'search'" class="searchIcon"></pr-icon>
<input type="text" class="searchInput" ng-model="$ctrl.state.textFilter" ng-change="$ctrl.onTextFilterChange()" placeholder="Search..." auto-focus />
</div>
</div>

View file

@ -18,7 +18,7 @@
<div class="small text-warning">
<div ng-messages="registryFormGitlab.registry_username.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -36,7 +36,7 @@
<div class="small text-warning">
<div ng-messages="registryFormGitlab.registry_perso_acc_token.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -54,7 +54,7 @@
ng-if="!$ctrl.state.overrideConfiguration"
ng-click="$ctrl.state.overrideConfiguration = true;"
>
<pr-icon icon="'tool'" feather="true"></pr-icon>
<pr-icon icon="'wrench'"></pr-icon>
Override default configuration
</button>
<button
@ -63,7 +63,7 @@
ng-if="$ctrl.state.overrideConfiguration"
ng-click="$ctrl.state.overrideConfiguration = false; $ctrl.resetDefaults()"
>
<pr-icon icon="'settings'" feather="true"></pr-icon>
<pr-icon icon="'settings'"></pr-icon>
Use default configuration
</button>
</div>
@ -81,7 +81,7 @@
<div class="small text-warning">
<div ng-messages="registryFormGitlab.instance_url.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -102,7 +102,7 @@
<div class="small text-warning">
<div ng-messages="registryFormGitlab.registry_url.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -126,7 +126,7 @@
<div class="form-group">
<span class="col-sm-12 text-muted small"> Select the project's registries you want to manage. Portainer will create one registry for each selected project. </span>
<span class="col-sm-12 text-muted small vertical-center">
<pr-icon icon="'alert-triangle'" feather="true" class-name="'icon-warning'"></pr-icon>
<pr-icon icon="'alert-triangle'" class-name="'icon-warning'"></pr-icon>
If you can't select a project, make sure that registry feature is activated on it.
</span>
</div>

View file

@ -16,11 +16,11 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormProGet.registry_name.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
<p ng-message="used" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
A registry with the same name already exists.
</p>
</div>
@ -41,7 +41,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormProGet.registry_url.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -62,7 +62,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormProGet.registry_base_url.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -81,7 +81,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormProGet.registry_username.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -99,7 +99,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormProGet.registry_password.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>

View file

@ -9,11 +9,11 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormQuay.registry_name.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
<p ng-message="used" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
A registry with the same name already exists.
</p>
</div>
@ -31,7 +31,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormQuay.registry_username.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -49,7 +49,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormQuay.registry_password.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>
@ -81,7 +81,7 @@
<div class="small text-warning">
<div ng-messages="$ctrl.registryFormQuay.organisation_name.$error">
<p ng-message="required" class="vertical-center">
<pr-icon icon="'alert-triangle'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'"></pr-icon>
This field is required.
</p>
</div>

View file

@ -21,10 +21,10 @@
<div class="col-sm-12 small text-warning">
<div ng-messages="stackTemplateForm.template_name.$error">
<p ng-message="pattern" class="vertical-center">
<pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
<span>This field must consist of lower case alphanumeric characters, '_' or '-' (e.g. 'my-name', or 'abc-123').</span>
</p>
<p ng-message="required" class="vertical-center"><pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon>This field is required.</p>
<p ng-message="required" class="vertical-center"> <pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>This field is required. </p>
</div>
</div>
</div>
@ -69,12 +69,12 @@
<button type="button" class="btn btn-default" ng-click="$ctrl.unselectTemplate($ctrl.template)">Hide</button>
<div class="form-group" ng-if="$ctrl.state.formValidationError">
<div class="col-sm-12 small text-danger" ng-if="$ctrl.state.formValidationError">
<p class="vertical-center"><pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon>{{ $ctrl.state.formValidationError }}</p>
<p class="vertical-center"> <pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>{{ $ctrl.state.formValidationError }} </p>
</div>
</div>
<div class="form-group" ng-if="!$ctrl.state.deployable">
<div class="col-sm-12 small text-danger" ng-if="!$ctrl.state.deployable">
<p class="vertical-center"><pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon>This template type cannot be deployed on this environment.</p>
<p class="vertical-center"> <pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>This template type cannot be deployed on this environment. </p>
</div>
</div>
</div>

View file

@ -17,7 +17,8 @@
<div class="col-sm-12">
<p>
<a class="small interactive" ng-click="$ctrl.state.showConfig = !$ctrl.state.showConfig">
<i ng-class="{ 'fa fa-minus space-right': $ctrl.state.showConfig, 'fa fa-plus space-right': !$ctrl.state.showConfig }" aria-hidden="true"></i>
<pr-icon ng-if="$ctrl.state.showConfig" icon="'minus'" class-name="'mr-1'"></pr-icon>
<pr-icon ng-if="!$ctrl.state.showConfig" icon="'plus'" class-name="'mr-1'"></pr-icon>
{{ $ctrl.state.showConfig ? 'Hide' : 'Advanced' }} configuration
</a>
</p>
@ -48,7 +49,10 @@
analytics-event="docker-stack-pull-redeploy"
analytics-category="docker"
>
<span ng-hide="$ctrl.state.redeployInProgress"> <i class="fa fa-sync space-right" aria-hidden="true"></i> Pull and redeploy </span>
<span ng-hide="$ctrl.state.redeployInProgress">
<pr-icon icon="'refresh-cw'" class="!mr-1"></pr-icon>
Pull and redeploy
</span>
<span ng-show="$ctrl.state.redeployInProgress">In progress...</span>
</button>

View file

@ -2,7 +2,7 @@
<div class="toolBar">
<div class="toolBarTitle">{{ $ctrl.title }}</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true" class-name="'searchIcon'"></pr-icon>
<pr-icon icon="'search'" class-name="'searchIcon'"></pr-icon>
<input
type="text"
class="searchInput"

View file

@ -2,7 +2,10 @@
<rd-widget>
<rd-widget-body classes="no-padding">
<div class="toolBar">
<div class="toolBarTitle"> <i class="fa fa-bolt" aria-hidden="true" style="margin-right: 2px"></i> {{ $ctrl.titleText }} </div>
<div class="toolBarTitle">
<pr-icon icon="'zap'" class-name="'mr-0.5'"></pr-icon>
{{ $ctrl.titleText }}
</div>
</div>
<div class="blocklist">

View file

@ -1,7 +1,7 @@
<div class="row" ng-if="$ctrl.registry">
<div class="col-lg-12 col-md-12 col-xs-12">
<rd-widget>
<rd-widget-header icon="radio" feather-icon="true" title-text="Registry"></rd-widget-header>
<rd-widget-header icon="radio" title-text="Registry"></rd-widget-header>
<rd-widget-body classes="no-padding">
<table class="table">
<tbody>

View file

@ -5,11 +5,11 @@
<button type="button" class="btn btn-link nopadding" ng-click="$ctrl.show = !$ctrl.show" title="Show/Hide value">
<div ng-if="!$ctrl.show">
<pr-icon icon="'eye-off'" feather="true"></pr-icon>
<pr-icon icon="'eye-off'"></pr-icon>
Show</div
>
<div ng-if="$ctrl.show">
<pr-icon icon="'eye'" feather="true"></pr-icon>
<pr-icon icon="'eye'"></pr-icon>
Hide</div
>
</button>

View file

@ -23,7 +23,7 @@
<div class="col-sm-12 small text-warning">
<div ng-messages="dupStackForm.new_stack_name.$error">
<p ng-message="pattern">
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
<span>This field must consist of lower case alphanumeric characters, '_' or '-' (e.g. 'my-name', or 'abc-123').</span>
</p>
</div>
@ -42,7 +42,10 @@
style="margin-top: 7px; margin-left: 0"
button-spinner="$ctrl.state.migrationInProgress"
>
<span ng-hide="$ctrl.state.migrationInProgress"> <i class="fa fa-long-arrow-alt-right space-right" aria-hidden="true"></i> Migrate </span>
<span ng-hide="$ctrl.state.migrationInProgress">
<pr-icon icon="'arrow-right'" class-name="'mr-1'"></pr-icon>
Migrate
</span>
<span ng-show="$ctrl.state.migrationInProgress">Migration in progress...</span>
</button>
<button
@ -52,7 +55,10 @@
style="margin-top: 7px; margin-left: 0"
button-spinner="$ctrl.state.duplicationInProgress"
>
<span ng-hide="$ctrl.state.duplicationInProgress"> <i class="fa fa-clone space-right" aria-hidden="true"></i> Duplicate </span>
<span ng-hide="$ctrl.state.duplicationInProgress">
<pr-icon icon="'copy'" class-name="'space-right'"></pr-icon>
Duplicate
</span>
<span ng-show="$ctrl.state.duplicationInProgress">Duplication in progress...</span>
</button>
</div>

View file

@ -3,7 +3,7 @@
<div class="blocklist-item-box">
<!-- template-image -->
<div class="vertical-center justify-center min-w-[56px]">
<fallback-image src="$ctrl.model.Logo" fallback-icon="'svg-rocket'" class-name="'blocklist-item-logo'" size="'3xl'"></fallback-image>
<fallback-image src="$ctrl.model.Logo" fallback-icon="'rocket'" class-name="'blocklist-item-logo'" size="'3xl'"></fallback-image>
</div>
<!-- !template-image -->
<!-- template-details -->
@ -15,7 +15,7 @@
</span>
<div class="inline-flex items-center space-left blocklist-item-subtitle">
<div ng-if="$ctrl.model.Type != 3" class="vertical-center">
<i class="fab fa-linux space-right" aria-hidden="true" ng-if="$ctrl.model.Platform === 1 || $ctrl.model.Platform === 'linux' || !$ctrl.model.Platform"></i>
<pr-icon ng-if="$ctrl.model.Platform === 1 || $ctrl.model.Platform === 'linux' || !$ctrl.model.Platform" icon="'svg-linux'" class="mr-1"></pr-icon>
<span ng-if="!$ctrl.model.Platform"> &amp; </span>
<pr-icon
icon="'svg-microsoft'"

View file

@ -3,12 +3,12 @@
<div class="toolBar">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="$ctrl.titleIcon" feather="true"></pr-icon>
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
</div>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true" class-name="'searchIcon'"></pr-icon>
<pr-icon icon="'search'" class-name="'searchIcon'"></pr-icon>
<input
type="text"
class="searchInput"
@ -22,7 +22,7 @@
</div>
<div class="actionBar !gap-3" ng-if="$ctrl.showAddAction">
<button type="button" class="btn btn-sm btn-primary h-fit vertical-center !ml-0" ui-sref="docker.templates.new" data-cy="template-addTemplateButton">
<pr-icon icon="'plus'" feather="true"></pr-icon>Add template
<pr-icon icon="'plus'"></pr-icon>Add template
</button>
</div>
</div>

View file

@ -1,12 +1,12 @@
<div class="mt-6">
<rd-widget>
<rd-widget-header icon="sliders" feather-icon="true" title-text="User theme"></rd-widget-header>
<rd-widget-header icon="sliders" title-text="User theme"></rd-widget-header>
<rd-widget-body>
<form class="form-horizontal">
<box-selector radio-name="'theme'" value="$ctrl.state.userTheme" options="$ctrl.state.availableThemes" on-change="($ctrl.setTheme)"></box-selector>
</form>
<p class="mt-2 vertical-center">
<pr-icon icon="'alert-circle'" class-name="'icon-primary'" feather="true"></pr-icon>
<pr-icon icon="'alert-circle'" class-name="'icon-primary'"></pr-icon>
Dark and High-contrast theme are experimental. Some UI components might not display properly.
</p>
</rd-widget-body>

View file

@ -10,7 +10,7 @@ export const rdWidgetCustomHeader = {
<div class="row">
<span class="pull-left">
<img class="custom-header-ico space-right" ng-src="{{$ctrl.icon}}" ng-if="$ctrl.icon" alt="header-icon"></img>
<i class="fa fa-rocket" aria-hidden="true" ng-if="!$ctrl.icon"></i>
<pr-icon ng-if="!$ctrl.icon" icon="'rocket'"></pr-icon>
<span class="text-muted"> {{$ctrl.titleText}} </span>
</span>
<span class="pull-right col-xs-6 col-sm-4" ng-transclude></span>

View file

@ -3,7 +3,6 @@ export const rdWidgetTitle = {
bindings: {
titleText: '@',
icon: '@',
featherIcon: '<',
classes: '@?',
parentClasses: '@?',
},
@ -15,7 +14,7 @@ export const rdWidgetTitle = {
<div class="row">
<span ng-class="$ctrl.classes" class="pull-left vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="$ctrl.icon" feather="$ctrl.featherIcon"></pr-icon>
<pr-icon icon="$ctrl.icon"></pr-icon>
</div>
<span ng-transclude="title">{{ $ctrl.titleText }}</span>
</span>

View file

@ -1,9 +1,14 @@
import moment from 'moment';
import _ from 'lodash-es';
import filesize from 'filesize';
import { Eye, EyeOff, Users, Cloud } from 'lucide-react';
import { Eye, EyeOff, Users } from 'react-feather';
import Kube from '@/assets/ico/kube.svg?c';
import DockerIcon from '@/assets/ico/vendor/docker-icon.svg?c';
import MicrosoftIcon from '@/assets/ico/vendor/microsoft-icon.svg?c';
import NomadIcon from '@/assets/ico/vendor/nomad-icon.svg?c';
import { ResourceControlOwnership as RCO } from '@/react/portainer/access-control/types';
import { EnvironmentType } from '@/react/portainer/environments/types';
export function truncateLeftRight(text, max, left, right) {
max = isNaN(max) ? 50 : max;
@ -94,14 +99,23 @@ export function endpointTypeName(type) {
}
export function environmentTypeIcon(type) {
if (type === 3) {
return 'fab fa-microsoft';
} else if (type === 4) {
return 'fa fa-cloud';
} else if (type === 5 || type === 6 || type === 7) {
return 'fas fa-dharmachakra';
switch (type) {
case EnvironmentType.Azure:
return MicrosoftIcon;
case EnvironmentType.EdgeAgentOnDocker:
return Cloud;
case EnvironmentType.AgentOnKubernetes:
case EnvironmentType.EdgeAgentOnKubernetes:
case EnvironmentType.KubernetesLocal:
return Kube;
case EnvironmentType.AgentOnDocker:
case EnvironmentType.Docker:
return DockerIcon;
case EnvironmentType.EdgeAgentOnNomad:
return NomadIcon;
default:
throw new Error(`type ${type}-${EnvironmentType[type]} is not supported`);
}
return 'fab fa-docker';
}
export function ownershipIcon(ownership) {

View file

@ -6,7 +6,6 @@ export function UserAccessViewModel(data) {
this.Inherited = false;
this.Override = false;
this.Role = { Id: 0, Name: '-' };
this.icon = '<i class="fa fa-user" aria-hidden="true"></i>';
}
// create TeamAccessViewModel from TeamViewModel
@ -17,5 +16,4 @@ export function TeamAccessViewModel(data) {
this.Inherited = false;
this.Override = false;
this.Role = { Id: 0, Name: '-' };
this.icon = '<i class="fa fa-users" aria-hidden="true"></i>';
}

View file

@ -16,24 +16,3 @@ export class PortainerEndpointInitFormValues {
this.AzureAuthenticationKey = '';
}
}
class PortainerEndpointInitFormValueEndpointSection {
constructor(value, title, classes, description) {
this.Id = value;
this.Value = value;
this.Title = title;
this.Classes = classes;
this.Description = description;
}
}
export const PortainerEndpointInitFormValueEndpointSections = Object.freeze([
new PortainerEndpointInitFormValueEndpointSection(PortainerEndpointConnectionTypes.DOCKER_LOCAL, 'Docker', 'fab fa-docker', 'Manage the local Docker environment'),
new PortainerEndpointInitFormValueEndpointSection(
PortainerEndpointConnectionTypes.KUBERNETES_LOCAL,
'Kubernetes',
'fas fa-dharmachakra',
'Manage the local Kubernetes environment'
),
new PortainerEndpointInitFormValueEndpointSection(PortainerEndpointConnectionTypes.AGENT, 'Agent', 'fa fa-bolt', 'Connect to a Portainer agent'),
]);

View file

@ -1,4 +1,4 @@
import { Edit } from 'react-feather';
import { Edit } from 'lucide-react';
import { FeatureId } from '@/react/portainer/feature-flags/enums';
import Microsoft from '@/assets/ico/vendor/microsoft.svg?c';
@ -11,7 +11,6 @@ export const options = [
{
id: 'microsoft',
icon: Microsoft,
featherIcon: true,
label: 'Microsoft',
description: 'Microsoft OAuth provider',
value: 'microsoft',

View file

@ -55,7 +55,7 @@
<div class="col-sm-9" ng-if="$ctrl.teams.length > 0">
<div class="col-sm-12 small text-muted">
<p class="vertical-center">
<pr-icon icon="'info'" feather="true" mode="'primary'"></pr-icon>
<pr-icon icon="'info'" mode="'primary'"></pr-icon>
The default team option will be disabled when automatic team membership is enabled
</p>
</div>
@ -75,7 +75,7 @@
ng-disabled="!$ctrl.settings.DefaultTeamID || $ctrl.settings.OAuthAutoMapTeamMemberships"
ng-if="$ctrl.teams.length > 0"
>
<pr-icon icon="'x'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'x'" size="'md'"></pr-icon>
</button>
</div>
</div>
@ -115,7 +115,7 @@
<label class="col-sm-3 col-lg-2 control-label text-left"> Statically assigned teams </label>
<div class="col-sm-9 col-lg-10">
<span class="label label-default interactive vertical-center ml-4" ng-click="$ctrl.addTeamMembershipMapping()">
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
add team mapping
</span>
@ -137,12 +137,12 @@
</select>
</div>
<button type="button" class="btn btn-md btn-danger" ng-click="$ctrl.removeTeamMembership($index)">
<pr-icon icon="'trash-2'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'trash-2'" size="'md'"></pr-icon>
</button>
<div>
<div class="small text-warning vertical-center mt-1" ng-show="!mapping.ClaimValRegex">
<pr-icon icon="'alert-triangle'" feather="true" mode="'warning'"></pr-icon>
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
Claim value regex is required.
</div>
</div>
@ -368,11 +368,11 @@
<div class="form-group" ng-if="$ctrl.state.provider != 'custom'">
<div class="col-sm-12">
<a class="small interactive vertical-center" ng-if="!$ctrl.state.overrideConfiguration" ng-click="$ctrl.state.overrideConfiguration = true;">
<pr-icon icon="'tool'" feather="true"></pr-icon>
<pr-icon icon="'wrench'"></pr-icon>
Override default configuration
</a>
<a class="small interactive vertical-center" ng-if="$ctrl.state.overrideConfiguration" ng-click="$ctrl.useDefaultProviderConfiguration($ctrl.state.provider)">
<pr-icon icon="'settings'" feather="true"></pr-icon>
<pr-icon icon="'settings'"></pr-icon>
Use default configuration
</a>
</div>

View file

@ -4,13 +4,13 @@
<div>
<div class="form-section-title mb-1">Access</div>
<div class="vertical-center">
<pr-icon icon="'info'" mode="'primary'" feather="true" size="'sm'" class="vertical-center"></pr-icon>
<pr-icon icon="'info'" mode="'primary'" size="'sm'" class="vertical-center"></pr-icon>
<span class="small text-muted"> Effective role for each environment will be displayed for the selected user </span>
</div>
</div>
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" class="vertical-center" feather="true"></pr-icon>
<pr-icon icon="'search'" class="vertical-center"></pr-icon>
<input
type="text"
class="searchInput ml-1"
@ -55,12 +55,8 @@
<td
>{{ item.TeamName ? 'Team' : 'User' }} <code ng-if="item.TeamName">{{ item.TeamName }}</code> access defined on {{ item.AccessLocation }}
<code ng-if="item.GroupName">{{ item.GroupName }}</code>
<a ng-if="!item.GroupName && $ctrl.isAdmin" ui-sref="portainer.endpoints.endpoint.access({id: item.EndpointId})"
><pr-icon icon="'users'" feather="true"></pr-icon> Manage access
</a>
<a ng-if="item.GroupName && $ctrl.isAdmin" ui-sref="portainer.groups.group.access({id: item.GroupId})"
><pr-icon icon="'users'" feather="true"></pr-icon> Manage access
</a>
<a ng-if="!item.GroupName && $ctrl.isAdmin" ui-sref="portainer.endpoints.endpoint.access({id: item.EndpointId})"><pr-icon icon="'users'"></pr-icon> Manage access </a>
<a ng-if="item.GroupName && $ctrl.isAdmin" ui-sref="portainer.groups.group.access({id: item.GroupId})"><pr-icon icon="'users'"></pr-icon> Manage access </a>
</td>
</tr>
<tr ng-if="!$ctrl.dataset">

View file

@ -1,6 +1,6 @@
<div class="col-sm-12" style="margin-bottom: 0px">
<rd-widget>
<rd-widget-header icon="svg-userlock" feather-icon="true">
<rd-widget-header icon="user-x">
<header-title>
Effective access viewer
<be-feature-indicator feature="$ctrl.limitedFeature" class="space-left"></be-feature-indicator>

View file

@ -6,7 +6,6 @@ export const rolesDatatable = {
controller,
bindings: {
titleText: '@',
titleIcon: '@',
dataset: '<',
tableKey: '@',
orderBy: '@',

View file

@ -3,10 +3,13 @@
<rd-widget-body classes="no-padding">
<div class="toolBar vertical-center">
<div class="toolBarTitle vertical-center">
<pr-icon icon="$ctrl.titleIcon" feather="true" class="vertical-center" class-name="'icon-white icon-primary icon-nested-blue'"></pr-icon>{{ $ctrl.titleText }}
<div class="widget-icon space-right">
<pr-icon icon="'file-code'"></pr-icon>
</div>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" class="vertical-center" feather="true"></pr-icon>
<pr-icon icon="'search'" class="vertical-center"></pr-icon>
<input
type="text"
class="searchInput ml-1"

View file

@ -2,7 +2,7 @@
<div class="row">
<div class="col-sm-12">
<roles-datatable title-text="Roles" title-icon="svg-filecode" dataset="$ctrl.roles" table-key="roles"></roles-datatable>
<roles-datatable title-text="Roles" dataset="$ctrl.roles" table-key="roles"></roles-datatable>
</div>
</div>

View file

@ -83,29 +83,19 @@ export const componentsModule = angular
)
.component(
'fallbackImage',
r2a(FallbackImage, [
'src',
'fallbackIcon',
'alt',
'size',
'className',
'feather',
])
)
.component(
'prIcon',
r2a(Icon, ['className', 'feather', 'icon', 'mode', 'size'])
r2a(FallbackImage, ['src', 'fallbackIcon', 'alt', 'size', 'className'])
)
.component('prIcon', r2a(Icon, ['className', 'icon', 'mode', 'size']))
.component('reactQueryDevTools', r2a(ReactQueryDevtoolsWrapper, []))
.component(
'dashboardItem',
r2a(DashboardItem, ['featherIcon', 'icon', 'type', 'value', 'children'])
r2a(DashboardItem, ['icon', 'type', 'value', 'children'])
)
.component(
'datatableSearchbar',
r2a(SearchBar, ['data-cy', 'onChange', 'value', 'placeholder'])
)
.component('badgeIcon', r2a(BadgeIcon, ['featherIcon', 'icon', 'size']))
.component('badgeIcon', r2a(BadgeIcon, ['icon', 'size']))
.component(
'accessControlPanel',
r2a(withUIRouter(withReactQuery(withCurrentUser(AccessControlPanel))), [

View file

@ -154,7 +154,7 @@ export function confirmContainerRecreation(
checkbox.prop('disabled', true);
const formCheck = box.find('.form-check');
formCheck.prop('style', 'height: 45px;');
const cannotPullImageMessage = `<div class="fa fa-exclamation-triangle text-warning"/>
const cannotPullImageMessage = `<pr-icon icon="'alert-triangle'" mode="'warning'"/>
<div class="inline-text text-warning">
<span>Cannot pull latest as the image is inaccessible - either it no longer exists or the tag or name is no longer correct.
</span>

View file

@ -15,7 +15,7 @@ toastr.options = {
closeButton: true,
progressBar: true,
tapToDismiss: false,
// custom button, using the feather icon x.svg inside
// custom button, using the lucide icon x.svg inside
closeHtml: `<button type="button"><svg
xmlns="http://www.w3.org/2000/svg"
width="18"

View file

@ -25,7 +25,7 @@
<div class="form-group">
<div class="col-sm-12 small text-muted">
<p class="vertical-center">
<pr-icon icon="'info'" feather="true" mode="'primary'"></pr-icon>
<pr-icon icon="'info'" mode="'primary'"></pr-icon>
You can configure multiple AD Controllers for authentication fallback. Make sure all servers are using the same configuration (i.e. if TLS is enabled, they should all
use the same certificates).
</p>
@ -43,7 +43,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
Add additional server
</button>
</label>
@ -66,7 +66,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'trash-2'" feather="true"></pr-icon>
<pr-icon icon="'trash-2'"></pr-icon>
</button>
</div>
</div>

View file

@ -1,8 +1,8 @@
<div class="form-group">
<label for="ldap_password" class="col-sm-3 col-lg-2 control-label text-left vertical-center">
Connectivity check
<pr-icon icon="'check'" feather="true" mode="'success'" ng-if="$ctrl.state.successfulConnectivityCheck"></pr-icon>
<pr-icon icon="'x'" feather="true" mode="'danger'" ng-if="$ctrl.state.failedConnectivityCheck"></pr-icon>
<pr-icon icon="'check'" mode="'success'" ng-if="$ctrl.state.successfulConnectivityCheck"></pr-icon>
<pr-icon icon="'x'" mode="'danger'" ng-if="$ctrl.state.failedConnectivityCheck"></pr-icon>
</label>
<div class="col-sm-9 col-lg-10">
<button

View file

@ -63,7 +63,7 @@
limited-feature-tabindex="-1"
/>
<button class="btn btn-md btn-danger" type="button" ng-click="$ctrl.onRemoveClick($index)" ng-if="$index > 0">
<pr-icon icon="'trash-2'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'trash-2'" size="'md'"></pr-icon>
</button>
</div>
</div>
@ -79,7 +79,7 @@
limited-feature-class=" {{ $ctrl.isLimitedFeatureSelfContained && 'limited-be' }}"
limited-feature-disabled
>
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
add group search configuration
</button>
</div>
@ -96,7 +96,7 @@
Fetch Admin Group(s)
</button>
<span ng-if="$ctrl.groups && $ctrl.groups.length === 0" class="ml-6 vertical-center">
<pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
No groups found
</span>
</div>

View file

@ -31,13 +31,13 @@
<div class="col-sm-8 col-md-10 vertical-center">
<input type="text" class="form-control" id="ldap_group_filter_{{ $index }}" ng-model="config.GroupFilter" placeholder="(objectClass=account)" />
<button class="btn btn-md btn-danger" type="button" ng-click="$ctrl.onRemoveClick($index)" ng-if="$index > 0">
<pr-icon icon="'trash-2'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'trash-2'" size="'md'"></pr-icon>
</button>
</div>
</div>
<div class="form-group">
<span class="col-sm-12 small" style="color: #ffa719">
<pr-icon icon="'briefcase'" feather="true" class-name="'icon icon-xs vertical-center'"></pr-icon>
<pr-icon icon="'briefcase'" class-name="'icon icon-xs vertical-center'"></pr-icon>
Users removal synchronize between groups and teams only available in
<a href="https://www.portainer.io/features?from=custom-login-banner" target="_blank">business edition.</a>
<portainer-tooltip
@ -52,7 +52,7 @@
<div class="form-group" style="margin-top: 10px">
<div class="col-sm-12">
<button class="label label-default interactive vertical-center" style="border: 0" ng-click="$ctrl.onAddClick()">
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
add group search configuration
</button>
</div>

View file

@ -31,7 +31,7 @@
<div class="col-sm-8 col-md-10 vertical-center">
<input type="text" class="form-control" id="ldap_filter_{{ $index }}" ng-model="config.Filter" placeholder="(objectClass=account)" />
<button class="btn btn-md btn-danger" type="button" ng-click="$ctrl.onRemoveClick($index)" ng-if="$index > 0">
<pr-icon icon="'trash-2'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'trash-2'" size="'md'"></pr-icon>
</button>
</div>
</div>
@ -41,7 +41,7 @@
<div class="form-group" style="margin-top: 10px">
<div class="col-sm-12">
<button class="label label-default interactive vertical-center" style="border: 0" ng-click="$ctrl.onAddClick()">
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
add user search configuration
</button>
</div>

View file

@ -9,7 +9,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'trash-2'" feather="true"></pr-icon>
<pr-icon icon="'trash-2'"></pr-icon>
</button>
</div>
@ -32,7 +32,7 @@
<div class="col-sm-12 vertical-center" style="margin-bottom: 5px">
<label class="control-label text-left !pt-0">Groups</label>
<span class="label label-default interactive vertical-center" style="margin-left: 10px" ng-click="$ctrl.addGroup()">
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
add another group
</span>
</div>
@ -69,7 +69,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'trash-2'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'trash-2'" size="'md'"></pr-icon>
</button>
</div>
</div>

View file

@ -20,7 +20,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
add group search configuration
</button>
</div>

View file

@ -3,11 +3,11 @@
<rd-widget-body classes="no-padding">
<div class="toolBar">
<div class="toolBarTitle vertical-center">
<pr-icon icon="$ctrl.titleIcon" feather="true"></pr-icon>
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true"></pr-icon>
<pr-icon icon="'search'"></pr-icon>
<input
type="text"
class="searchInput"

View file

@ -10,7 +10,7 @@
<div class="form-group">
<div class="col-sm-12 small text-muted">
<p class="vertical-center">
<pr-icon icon="'info'" feather="true" mode="'primary'"></pr-icon>
<pr-icon icon="'info'" mode="'primary'"></pr-icon>
You can configure multiple LDAP Servers for authentication fallback. Make sure all servers are using the same configuration (i.e. if TLS is enabled, they should all use the
same certificates).
</p>
@ -28,7 +28,7 @@
limited-feature-disabled
limited-feature-class="limited-be"
>
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
Add additional server
</button>
</label>
@ -36,7 +36,7 @@
<div class="mb-3 flex" ng-repeat="url in $ctrl.settings.URLs track by $index">
<input type="text" class="form-control" id="ldap_url" ng-model="$ctrl.settings.URLs[$index]" placeholder="e.g. 10.0.0.10:389 or myldap.domain.tld:389" required />
<button ng-if="$index > 0" class="btn btn-sm btn-danger" type="button" ng-click="$ctrl.removeLDAPUrl($index)">
<pr-icon icon="'trash-2'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'trash-2'" size="'md'"></pr-icon>
</button>
</div>
</div>

View file

@ -9,7 +9,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
add another entry
</button>
</div>
@ -41,7 +41,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'arrow-up'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'arrow-up'" size="'md'"></pr-icon>
</button>
<button
class="btn btn-md btn-primary"
@ -51,7 +51,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'arrow-down'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'arrow-down'" size="'md'"></pr-icon>
</button>
<button
class="btn btn-md btn-danger"
@ -60,7 +60,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'trash-2'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'trash-2'" size="'md'"></pr-icon>
</button>
</div>
</div>

View file

@ -20,7 +20,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'trash-2'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'trash-2'" size="'md'"></pr-icon>
</button>
</div>
</div>

View file

@ -17,7 +17,7 @@
<div class="form-group">
<div class="col-sm-12 small text-muted">
<p class="vertical-center">
<pr-icon icon="'info'" feather="true" mode="'primary'"></pr-icon>
<pr-icon icon="'info'" mode="'primary'"></pr-icon>
You can configure multiple LDAP Servers for authentication fallback. Make sure all servers are using the same configuration (i.e. if TLS is enabled, they should all use
the same certificates).
</p>
@ -35,7 +35,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
Add additional server
</button>
</label>
@ -58,7 +58,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'trash-2'" feather="true" size="'md'"></pr-icon>
<pr-icon icon="'trash-2'" size="'md'"></pr-icon>
</button>
</div>
</div>

View file

@ -63,9 +63,9 @@
</button>
<span class="vertical-center">
{{ $ctrl.tlscaCert.name }}
<pr-icon icon="'check'" feather="true" class="icon-success" ng-if="$ctrl.tlscaCert && $ctrl.tlscaCert === $ctrl.settings.TLSConfig.TLSCACert"></pr-icon>
<pr-icon icon="'x'" feather="true" class="icon-danger" ng-if="!$ctrl.tlscaCert"></pr-icon>
<pr-icon icon="'fa fa-circle-notch fa-spin'" ng-if="$ctrl.uploadInProgress"></pr-icon>
<pr-icon icon="'check'" class="icon-success" ng-if="$ctrl.tlscaCert && $ctrl.tlscaCert === $ctrl.settings.TLSConfig.TLSCACert"></pr-icon>
<pr-icon icon="'x'" class="icon-danger" ng-if="!$ctrl.tlscaCert"></pr-icon>
<pr-icon icon="'loader-2'" class-name="'animate-spin-slow ml-0.5'" ng-if="$ctrl.uploadInProgress"></pr-icon>
</span>
</div>
</div>

View file

@ -51,8 +51,8 @@
<span ng-if="$ctrl.state.testStatus !== $ctrl.TEST_STATUS.LOADING">Test</span>
<span ng-if="$ctrl.state.testStatus === $ctrl.TEST_STATUS.LOADING">Testing...</span>
</button>
<pr-icon icon="'check'" feather="true" class="icon-success" ng-if="$ctrl.state.testStatus === $ctrl.TEST_STATUS.SUCCESS"></pr-icon>
<pr-icon icon="'x'" feather="true" class="icon-danger" ng-if="$ctrl.state.testStatus === $ctrl.TEST_STATUS.FAILURE"></pr-icon>
<pr-icon icon="'check'" class="icon-success" ng-if="$ctrl.state.testStatus === $ctrl.TEST_STATUS.SUCCESS"></pr-icon>
<pr-icon icon="'x'" class="icon-danger" ng-if="$ctrl.state.testStatus === $ctrl.TEST_STATUS.FAILURE"></pr-icon>
</div>
</div>
</div>

View file

@ -1,4 +1,4 @@
import { Edit } from 'react-feather';
import { Edit } from 'lucide-react';
import { FeatureId } from '@/react/portainer/feature-flags/enums';
import Openldap from '@/assets/ico/vendor/openldap.svg?c';

View file

@ -10,7 +10,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'trash-2'" feather="true"></pr-icon>
<pr-icon icon="'trash-2'"></pr-icon>
</button>
</div>
@ -69,7 +69,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
add another group
</button>
</div>

View file

@ -21,7 +21,7 @@
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'plus-circle'" feather="true"></pr-icon>
<pr-icon icon="'plus-circle'"></pr-icon>
add user search configuration
</button>
</div>

View file

@ -3,11 +3,11 @@
<rd-widget-body classes="no-padding">
<div class="toolBar">
<div class="toolBarTitle vertical-center">
<pr-icon icon="$ctrl.titleIcon" feather="true"></pr-icon>
<pr-icon icon="$ctrl.titleIcon"></pr-icon>
{{ $ctrl.titleText }}
</div>
<div class="searchBar vertical-center">
<pr-icon icon="'search'" feather="true"></pr-icon>
<pr-icon icon="'search'"></pr-icon>
<input
type="text"
class="searchInput"

View file

@ -1,12 +1,12 @@
<div class="row">
<div class="col-sm-12">
<rd-widget>
<rd-widget-header icon="key" feather-icon="true" title-text="SSL certificate"></rd-widget-header>
<rd-widget-header icon="key" title-text="SSL certificate"></rd-widget-header>
<rd-widget-body>
<form class="form-horizontal" name="$ctrl.sslForm">
<span class="small">
<p class="text-muted vertical-center">
<pr-icon icon="'alert-circle'" feather="true" class-name="'icon-warning =vertical-center'"></pr-icon>
<pr-icon icon="'alert-circle'" class-name="'icon-warning =vertical-center'"></pr-icon>
Forcing HTTPs only will cause Portainer to stop listening on the HTTP port. Any edge agent environment that is using HTTP will no longer be available.
</p>
</span>
@ -33,14 +33,17 @@
<button class="btn btn-sm btn-primary" ngf-select ng-model="$ctrl.formValues.certFile" ngf-pattern="$ctrl.certFilePattern" name="certFile"> Select file </button>
<span style="margin-left: 5px">
{{ $ctrl.formValues.certFile.name }}
<pr-icon icon="'x-circle'" feather="true" class-name="'icon-danger'" ng-if="!$ctrl.formValues.certFile"></pr-icon>
<pr-icon icon="'x-circle'" class-name="'icon-danger'" ng-if="!$ctrl.formValues.certFile"></pr-icon>
</span>
</div>
</div>
<div class="form-group col-md-12" ng-show="$ctrl.sslForm.certFile.$invalid">
<div class="small text-warning">
<div ng-messages="$ctrl.sslForm.certFile.$error">
<p ng-message="pattern"> <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> File type is invalid.</p>
<p ng-message="pattern">
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
File type is invalid.</p
>
</div>
</div>
</div>
@ -54,14 +57,17 @@
<button class="btn btn-sm btn-primary" ngf-select ng-model="$ctrl.formValues.keyFile" ngf-pattern="$ctrl.keyFilePattern" name="keyFile"> Select file </button>
<span style="margin-left: 5px">
{{ $ctrl.formValues.keyFile.name }}
<pr-icon icon="'x-circle'" feather="true" class-name="'icon-danger'" ng-if="!$ctrl.formValues.keyFile"></pr-icon>
<pr-icon icon="'x-circle'" class-name="'icon-danger'" ng-if="!$ctrl.formValues.keyFile"></pr-icon>
</span>
</div>
</div>
<div class="form-group col-md-12" ng-show="$ctrl.sslForm.keyFile.$invalid">
<div class="small text-warning">
<div ng-messages="$ctrl.sslForm.keyFile.$error">
<p ng-message="pattern"> <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> File type is invalid.</p>
<p ng-message="pattern">
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
File type is invalid.</p
>
</div>
</div>
</div>

View file

@ -4,7 +4,7 @@
<div class="toolBar vertical-center !gap-x-5 !gap-y-1 flex-wrap">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="'svg-clockrewind'"></pr-icon>
<pr-icon icon="'history'"></pr-icon>
</div>
Activity Logs

View file

@ -18,12 +18,12 @@
</div>
</div>
<p class="text-muted small vertical-center">
<pr-icon icon="'info'" feather="true" class-name="'icon icon-sm icon-primary'"></pr-icon>
<pr-icon icon="'info'" class-name="'icon icon-sm icon-primary'"></pr-icon>
Portainer user activity logs have a maximum retention of 7 days.
</p>
<div>
<button type="button" class="btn btn-sm btn-primary" limited-feature-dir="{{::$ctrl.limitedFeature}}" limited-feature-class="limited-be" limited-feature-disabled>
<pr-icon icon="'download'" feather="true" icon-class="'icon icon-sm'"></pr-icon>
<pr-icon icon="'download'" class-name="'icon icon-sm'"></pr-icon>
Export as CSV
</button>
</div>

View file

@ -4,7 +4,7 @@
<div class="toolBar vertical-center !gap-x-5 !gap-y-1 flex-wrap">
<div class="toolBarTitle vertical-center">
<div class="widget-icon space-right">
<pr-icon icon="'svg-clockrewind'"></pr-icon>
<pr-icon icon="'history'"></pr-icon>
</div>
Authentication Events

View file

@ -18,12 +18,12 @@
</div>
</div>
<p class="text-muted small vertical-center">
<pr-icon icon="'info'" feather="true" class-name="'icon icon-sm icon-primary'"></pr-icon>
<pr-icon icon="'info'" class-name="'icon icon-sm icon-primary'"></pr-icon>
Portainer user authentication activity logs have a maximum retention of 7 days.
</p>
<div>
<button type="button" class="btn btn-sm btn-primary" limited-feature-dir="{{::$ctrl.limitedFeature}}" limited-feature-class="limited-be" limited-feature-disabled
><pr-icon icon="'download'" feather="true" icon-class="'icon icon-sm'"></pr-icon>Export as CSV
><pr-icon icon="'download'" class-name="'icon icon-sm'"></pr-icon>Export as CSV
</button>
</div>
</rd-widget-body>

View file

@ -5,7 +5,7 @@
<div class="row">
<div class="col-lg-12 col-md-12 col-xs-12">
<rd-widget>
<rd-widget-header icon="lock" feather-icon="true" title-text="Change user password"></rd-widget-header>
<rd-widget-header icon="lock" title-text="Change user password"></rd-widget-header>
<rd-widget-body>
<form name="form" class="form-horizontal" style="margin-top: 15px">
<!-- current-password-input -->
@ -32,8 +32,8 @@
<div class="input-group">
<input type="password" class="form-control" ng-model="formValues.confirmPassword" id="confirm_password" />
<span class="input-group-addon">
<pr-icon icon="'check'" feather="true" class="icon-success" ng-if="formValues.newPassword === formValues.confirmPassword"></pr-icon>
<pr-icon icon="'x'" feather="true" class="icon-danger" ng-if="!(formValues.newPassword === formValues.confirmPassword)"></pr-icon>
<pr-icon icon="'check'" class="icon-success" ng-if="formValues.newPassword === formValues.confirmPassword"></pr-icon>
<pr-icon icon="'x'" class="icon-danger" ng-if="!(formValues.newPassword === formValues.confirmPassword)"></pr-icon>
</span>
</div>
</div>
@ -59,18 +59,18 @@
Remind me later
</button>
<span class="text-muted small vertical-center" style="margin-left: 5px" ng-if="AuthenticationMethod === 2 && !isInitialAdmin">
<pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
You cannot change your password when using LDAP authentication.
</span>
<span class="text-muted small vertical-center" style="margin-left: 5px" ng-if="AuthenticationMethod === 3 && !isInitialAdmin">
<pr-icon icon="'alert-triangle'" mode="'warning'" feather="true"></pr-icon>
<pr-icon icon="'alert-triangle'" mode="'warning'"></pr-icon>
You cannot change your password when using OAuth authentication.
</span>
</div>
</div>
<div ng-if="userRole === 1">
<p class="text-muted vertical-center">
<pr-icon icon="'alert-circle'" class-name="'icon-primary'" feather="true"></pr-icon>
<pr-icon icon="'alert-circle'" class-name="'icon-primary'"></pr-icon>
Minimum password length is set <a ui-sref="portainer.settings.authentication">here.</a>
</p>
</div>

Some files were not shown because too many files have changed in this diff Show more