Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4fa5b924c9 | ||
|
|
e86a4fc27d | ||
|
|
d72b02ad29 | ||
|
|
545e7d5a7f | ||
|
|
4055f3a06e | ||
|
|
4fed7f3d94 | ||
|
|
ee29f3c599 | ||
|
|
a1b0481db9 | ||
|
|
685ddeac7e | ||
|
|
f2f5a46cdf | ||
|
|
1a0650ff7c | ||
|
|
82a0c7c17c | ||
|
|
1397df807f | ||
|
|
cc01bddea3 | ||
|
|
9f32b8cdc3 | ||
|
|
ae8e20b8e1 | ||
|
|
aab980a7dc | ||
|
|
13146975e2 | ||
|
|
542b469ad8 | ||
|
|
c2c63294f4 | ||
|
|
56936f78b8 | ||
|
|
dcc77153bf | ||
|
|
4b587d35fa | ||
|
|
ce7cdba0bc | ||
|
|
4e13ea56c3 | ||
|
|
3ef7436f3f | ||
|
|
ee748de5c9 | ||
|
|
74501a440f | ||
|
|
828faf2be4 | ||
|
|
dfb9d6e686 | ||
|
|
2be18bcf6f | ||
|
|
3bef3e4bc5 | ||
|
|
81447e65c8 | ||
|
|
2e71beee81 | ||
|
|
dfbb54a1ee | ||
|
|
0d67b512a2 | ||
|
|
e551ec4008 | ||
|
|
49a85f1a7f | ||
|
|
15d3520408 | ||
|
|
5d7c0180d5 | ||
|
|
053e16dca8 | ||
|
|
3e2ed2dc27 | ||
|
|
faaf7352c1 | ||
|
|
58252ee6f5 | ||
|
|
85ddd7fc4b | ||
|
|
863e81bc01 | ||
|
|
4b212e1ae0 | ||
|
|
343f73bc21 | ||
|
|
cf5f41acbd | ||
|
|
2f12cc91f2 | ||
|
|
99125dbb77 | ||
|
|
3bfae4b33d | ||
|
|
da6b34b337 | ||
|
|
9a909c0ec1 | ||
|
|
42c01100ad | ||
|
|
fe56acd57f | ||
|
|
e4fb2e7c4d | ||
|
|
b1361bcb83 | ||
|
|
30090d82e3 | ||
|
|
fbe8aefcb4 | ||
|
|
fa02fd3f89 | ||
|
|
f021719d8b | ||
|
|
be9ee8f672 | ||
|
|
48ca4c5ac0 | ||
|
|
ac7db55be2 | ||
|
|
dea79d785b | ||
|
|
f597901140 | ||
|
|
0c1b5bf879 | ||
|
|
bab68f4507 | ||
|
|
c6e4a24dab | ||
|
|
0bcb91ede0 | ||
|
|
fbeb764c76 | ||
|
|
67959d7a58 | ||
|
|
c4bb5173d2 | ||
|
|
ea011592a7 | ||
|
|
e761e0e4af | ||
|
|
fa36f9008b | ||
|
|
15d360abc5 | ||
|
|
9914954d08 | ||
|
|
ec184ff4f1 | ||
|
|
bb2d0420d9 | ||
|
|
e3cabe3102 | ||
|
|
7065f462cd |
No files matched your search
@@ -24,6 +24,9 @@ subproject, e.g. running or testing.
|
||||
- [Building Admin UI for Production](#building-admin-ui-for-production)
|
||||
- [Building with a Container](#building-with-a-container)
|
||||
- [Building Desktop UI for Production](#building-desktop-ui-for-production)
|
||||
- [Connect Boundary UI to Boundary local instance](#connect-boundary-ui-to-boundary-local-instance)
|
||||
- [For admin](#for-admin)
|
||||
- [For desktop](#for-desktop)
|
||||
- [Committing](#committing)
|
||||
- [License Checking](#license-checking)
|
||||
|
||||
@@ -35,6 +38,9 @@ You will need the following things properly installed on your computer.
|
||||
|
||||
* [Git][git]
|
||||
* [Node.js][node]
|
||||
* v10–v15
|
||||
* **Apple Silicon Users**: if you experience problems building or running
|
||||
Boundary UIs, try Node v15.
|
||||
* [Yarn][yarn] installed globally
|
||||
* [Google Chrome][chrome]
|
||||
* [Firefox][firefox]
|
||||
@@ -122,6 +128,31 @@ environment variable to set signing certificate name (e.g Developer ID Applicati
|
||||
Assets are saved to `ui/desktop/electron-app/out/make/`.
|
||||
DMG packaged desktop UI is available at asset location as `boundary.dmg`.
|
||||
|
||||
### Connect Boundary UI to Boundary local instance
|
||||
|
||||
This describes how to connect local Boundary UI to your local instance of Boundary.
|
||||
|
||||
This assumes you already have up and running a Boundary dev instance in your local environment with a listener `127.0.0.1:9200` (default behaviour). [Learn how to start a local Boundary dev instance](https://learn.hashicorp.com/tutorials/boundary/getting-started-dev?in=boundary/getting-started#start-a-dev-environment).
|
||||
#### For admin
|
||||
|
||||
This assumes you are within `boundary-ui/ui/admin`.
|
||||
|
||||
You will need to turn `off` mirage, tell the UI where to find Boundary and run it: `$ ENABLE_MIRAGE=false API_HOST=http://localhost:9200 yarn start`.
|
||||
|
||||
Following terminal instructions, open in your browser: `http://localhost:4200/`.
|
||||
|
||||
Once you open the UI you will see the login screen, authenticate using generated admin login name and password.
|
||||
|
||||
#### For desktop
|
||||
|
||||
This assumes you are within `boundary-ui/ui/desktop`.
|
||||
|
||||
You will need to turn `off` mirage and run it: `$ ENABLE_MIRAGE=false yarn start:desktop`.
|
||||
|
||||
In login screen, authenticate using generated admin login name and password.
|
||||
|
||||
Enter the origin of your Boundary dev instance, by default is: `http://localhost:9200`.
|
||||
|
||||
### Committing
|
||||
|
||||
Instead of the default `git commit`, we prescribe a custom command that ensures
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
"qunit-dom": "^1.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "10.* || >= 12"
|
||||
"node": ">=10 <=15"
|
||||
},
|
||||
"ember": {
|
||||
"edition": "octane"
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
"qunit-dom": "^1.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "10.* || >= 12"
|
||||
"node": ">=10 <=15"
|
||||
},
|
||||
"ember": {
|
||||
"edition": "octane"
|
||||
|
||||
@@ -30,14 +30,15 @@
|
||||
"dependencies": {
|
||||
"api": "*",
|
||||
"auth": "*",
|
||||
"ember-browser-services": "^1.1.6",
|
||||
"ember-cli-babel": "^7.23.0",
|
||||
"ember-cli-htmlbars": "^5.3.1",
|
||||
"ember-feature-flags": "^6.0.0",
|
||||
"ember-get-config": "^0.3.0",
|
||||
"ember-intl": "^5.5.0",
|
||||
"ember-loading": "^0.4.0",
|
||||
"ember-page-title": "^6.0.3",
|
||||
"ember-route-action-helper": "^2.0.8",
|
||||
"ember-feature-flags": "^6.0.0",
|
||||
"rose": "*"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -80,7 +81,7 @@
|
||||
"qunit-dom": "^1.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "10.* || >= 12"
|
||||
"node": ">=10 <=15"
|
||||
},
|
||||
"ember": {
|
||||
"edition": "octane"
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<fieldset ...attributes class='rose-form-fieldset' aria-describedby={{if (has-block "description") (concat 'description-' this.id)}}>
|
||||
<legend
|
||||
id={{concat 'title-' this.id}}
|
||||
class='rose-form-fieldset-title'
|
||||
>
|
||||
{{yield to='title'}}
|
||||
</legend>
|
||||
|
||||
{{#if (has-block "description")}}
|
||||
<div
|
||||
id={{concat 'description-' this.id}}
|
||||
class='rose-form-fieldset-description'
|
||||
>
|
||||
{{yield to='description'}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class='rose-form-fieldset-body'>
|
||||
{{yield to='body'}}
|
||||
</div>
|
||||
</fieldset>
|
||||
@@ -0,0 +1,11 @@
|
||||
import Component from '@glimmer/component';
|
||||
import { generateComponentID } from '../../../../utilities/component-auto-id';
|
||||
|
||||
export default class RoseFormFieldsetComponent extends Component {
|
||||
// =attributes
|
||||
|
||||
/**
|
||||
* @type {string}
|
||||
*/
|
||||
id = generateComponentID();
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import { Meta, Story, Preview } from '@storybook/addon-docs/blocks';
|
||||
import { hbs } from 'ember-cli-htmlbars';
|
||||
import { action } from '@storybook/addon-actions';
|
||||
import { text, boolean, select } from '@storybook/addon-knobs';
|
||||
|
||||
<Meta title="Rose|Form/Fieldset" component="Form/Fieldset" />
|
||||
|
||||
# Form Fieldset
|
||||
|
||||
Renders a simple fieldset with title, description and body.
|
||||
|
||||
```html
|
||||
<Rose::Form::Fieldset>
|
||||
<:title>Title</:title>
|
||||
<:description>Description</:description>
|
||||
<:body>Rest of the form</:body>
|
||||
</Rose::Form::Fieldset>
|
||||
```
|
||||
|
||||
<Preview>
|
||||
<Story name="Basic Fieldset">{{
|
||||
template: hbs`
|
||||
<Rose::Form::Fieldset>
|
||||
<:title>Title</:title>
|
||||
<:description>Description</:description>
|
||||
<:body>Rest of the form</:body>
|
||||
</Rose::Form::Fieldset>`
|
||||
}}</Story>
|
||||
</Preview>
|
||||
@@ -0,0 +1,14 @@
|
||||
@use '../../variables/sizing';
|
||||
@use '../../utilities/type';
|
||||
|
||||
.rose-form-fieldset {
|
||||
.rose-form-fieldset-title {
|
||||
@include type.type(l, bold);
|
||||
}
|
||||
|
||||
.rose-form-fieldset-description {
|
||||
margin: sizing.rems(xxs) 0;
|
||||
@include type.type(xs);
|
||||
color: var(--ui-gray);
|
||||
}
|
||||
}
|
||||
@@ -5,3 +5,4 @@
|
||||
@import 'checkbox';
|
||||
@import 'select';
|
||||
@import 'radio';
|
||||
@import 'fieldset';
|
||||
@@ -0,0 +1 @@
|
||||
export { default } from 'rose/components/rose/form/fieldset';
|
||||
@@ -36,8 +36,7 @@
|
||||
"ember-named-blocks-polyfill": "^0.2.4",
|
||||
"ember-radio-button": "^2.0.1",
|
||||
"ember-uuid": "^2.1.0",
|
||||
"emberx-select": "github:adopted-ember-addons/emberx-select#bc5f774",
|
||||
"ember-named-blocks-polyfill": "^0.2.4"
|
||||
"emberx-select": "github:adopted-ember-addons/emberx-select#bc5f774"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ember/optional-features": "^2.0.0",
|
||||
@@ -88,7 +87,7 @@
|
||||
"sass-lint": "^1.13.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "10.* || >= 12"
|
||||
"node": ">=10 <=15"
|
||||
},
|
||||
"ember": {
|
||||
"edition": "octane"
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
import { module, test } from 'qunit';
|
||||
import { setupRenderingTest } from 'ember-qunit';
|
||||
import { render, find } from '@ember/test-helpers';
|
||||
import { hbs } from 'ember-cli-htmlbars';
|
||||
|
||||
module('Integration | Component | rose/form/fieldset', function (hooks) {
|
||||
setupRenderingTest(hooks);
|
||||
|
||||
// Global values for mocking
|
||||
this.mockTitle = 'Title';
|
||||
this.mockDescription = 'Description';
|
||||
this.mockBody = 'Rest of the form';
|
||||
|
||||
// Wrap the rendering in a function to avoid repeat code
|
||||
async function renderComponent(noDescription) {
|
||||
if (noDescription === true) {
|
||||
return render(hbs`
|
||||
<Rose::Form::Fieldset>
|
||||
<:title>{{this.mockTitle}}</:title>
|
||||
<:body>{{this.mockBody}}</:body>
|
||||
</Rose::Form::Fieldset>
|
||||
`);
|
||||
}
|
||||
|
||||
return render(hbs`
|
||||
<Rose::Form::Fieldset>
|
||||
<:title>{{this.mockTitle}}</:title>
|
||||
<:description>{{this.mockDescription}}</:description>
|
||||
<:body>{{this.mockBody}}</:body>
|
||||
</Rose::Form::Fieldset>
|
||||
`);
|
||||
}
|
||||
|
||||
test('it renders the full component', async function (assert) {
|
||||
assert.expect(4);
|
||||
await renderComponent(false);
|
||||
assert.ok(find('.rose-form-fieldset'));
|
||||
assert.equal(
|
||||
find('.rose-form-fieldset-title').textContent.trim(),
|
||||
this.mockTitle
|
||||
);
|
||||
assert.equal(
|
||||
find('.rose-form-fieldset-description').textContent.trim(),
|
||||
this.mockDescription
|
||||
);
|
||||
assert.equal(
|
||||
find('.rose-form-fieldset-body').textContent.trim(),
|
||||
this.mockBody
|
||||
);
|
||||
});
|
||||
|
||||
test('it renders with no description', async function (assert) {
|
||||
assert.expect(4);
|
||||
await renderComponent(true);
|
||||
assert.ok(find('.rose-form-fieldset'));
|
||||
assert.equal(
|
||||
find('.rose-form-fieldset-title').textContent.trim(),
|
||||
this.mockTitle
|
||||
);
|
||||
assert.notOk(find('.rose-form-fieldset-description'));
|
||||
assert.equal(
|
||||
find('.rose-form-fieldset-body').textContent.trim(),
|
||||
this.mockBody
|
||||
);
|
||||
});
|
||||
|
||||
test('it supports aria description for fieldset with description provided', async function (assert) {
|
||||
assert.expect(1);
|
||||
await renderComponent(false);
|
||||
const descriptionElement = find('.rose-form-fieldset-description');
|
||||
const fieldsetElement = find('.rose-form-fieldset');
|
||||
|
||||
assert.equal(
|
||||
fieldsetElement.getAttribute('aria-describedby'),
|
||||
descriptionElement.id,
|
||||
'Fieldset is described by description'
|
||||
);
|
||||
});
|
||||
|
||||
test('it does not support aria description for fieldset with no description provided', async function (assert) {
|
||||
assert.expect(3);
|
||||
await renderComponent(true);
|
||||
const fieldsetElement = find('.rose-form-fieldset');
|
||||
|
||||
assert.ok(find('.rose-form-fieldset'));
|
||||
assert.notOk(find('.rose-form-fieldset-description'));
|
||||
assert.notOk(fieldsetElement.getAttribute('aria-describedby'));
|
||||
});
|
||||
});
|
||||
+9
-1
@@ -59,11 +59,19 @@
|
||||
"hoek": "~4.2.0",
|
||||
"elliptic": "~6.5.4",
|
||||
"react-dev-utils": "~11.0.4",
|
||||
"yargs-parser": "~20.2.7"
|
||||
"yargs-parser": "~20.2.7",
|
||||
"merge": "^2.1.1",
|
||||
"xmlhttprequest-ssl": "^1.6.2",
|
||||
"underscore": "^1.12.1",
|
||||
"hosted-git-info": "3.0.8",
|
||||
"trim": "~1.0.1"
|
||||
},
|
||||
"config": {
|
||||
"commitizen": {
|
||||
"path": "./node_modules/cz-conventional-changelog"
|
||||
}
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10 <=15"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = {
|
||||
extends: 'octane',
|
||||
plugins: ['ember-template-lint-plugin-prettier'],
|
||||
extends: ['octane', 'ember-template-lint-plugin-prettier:recommended'],
|
||||
rules: {
|
||||
'no-bare-strings': true,
|
||||
'no-curly-component-invocation': {
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
{{#if this.scope.org}}
|
||||
{{#unless this.scope.org.isGlobal}}
|
||||
{{#if this.session.data.authenticated.isGlobal}}
|
||||
<crumbs.link @route="scopes.scope.scopes" @model="global">
|
||||
{{t "resources.org.title_plural"}}
|
||||
<crumbs.link @route='scopes.scope.scopes' @model='global'>
|
||||
{{t 'resources.org.title_plural'}}
|
||||
</crumbs.link>
|
||||
<crumbs.link @route="scopes.scope.edit" @model={{this.scope.org.id}}>
|
||||
<crumbs.link @route='scopes.scope.edit' @model={{this.scope.org.id}}>
|
||||
{{this.scope.org.displayName}}
|
||||
</crumbs.link>
|
||||
{{/if}}
|
||||
@@ -14,10 +14,10 @@
|
||||
{{/if}}
|
||||
|
||||
{{#if this.scope.project}}
|
||||
<crumbs.link @route="scopes.scope.scopes" @model={{this.scope.org.id}}>
|
||||
{{t "resources.project.title_plural"}}
|
||||
<crumbs.link @route='scopes.scope.scopes' @model={{this.scope.org.id}}>
|
||||
{{t 'resources.project.title_plural'}}
|
||||
</crumbs.link>
|
||||
<crumbs.link @route="scopes.scope.edit" @model={{this.scope.project.id}}>
|
||||
<crumbs.link @route='scopes.scope.edit' @model={{this.scope.project.id}}>
|
||||
{{this.scope.project.displayName}}
|
||||
</crumbs.link>
|
||||
{{/if}}
|
||||
@@ -34,4 +34,4 @@
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
|
||||
</Rose::Nav::Breadcrumbs>
|
||||
</Rose::Nav::Breadcrumbs>
|
||||
@@ -1,16 +1,16 @@
|
||||
<span
|
||||
id={{this.id}}
|
||||
class="copyable"
|
||||
class='copyable'
|
||||
{{did-insert this.register}}
|
||||
{{will-destroy this.tearDown}}
|
||||
>
|
||||
|
||||
{{#if this.copied}}
|
||||
<mark class="copyable-content">
|
||||
<mark class='copyable-content'>
|
||||
{{yield}}
|
||||
</mark>
|
||||
{{else}}
|
||||
<span class="copyable-content">
|
||||
<span class='copyable-content'>
|
||||
{{yield}}
|
||||
</span>
|
||||
{{/if}}
|
||||
@@ -19,12 +19,12 @@
|
||||
<Rose::Button
|
||||
id={{this.copyableButtonId}}
|
||||
aria-describedby={{this.id}}
|
||||
class="copyable-button"
|
||||
@style="ghost"
|
||||
class='copyable-button'
|
||||
@style='ghost'
|
||||
@iconOnly={{if this.copied this.successIcon this.actionIcon}}
|
||||
title={{if this.copied this.successText this.actionText}}
|
||||
>
|
||||
{{this.actionText}}
|
||||
</Rose::Button>
|
||||
{{/if}}
|
||||
</span>
|
||||
</span>
|
||||
@@ -1,5 +1,5 @@
|
||||
<Rose::Form
|
||||
class="full-width"
|
||||
class='full-width'
|
||||
@onSubmit={{fn this.submit @submit this.currentPassword this.newPassword}}
|
||||
@cancel={{fn this.cancel @cancel}}
|
||||
@disabled={{@model.isSaving}}
|
||||
@@ -8,14 +8,15 @@
|
||||
>
|
||||
|
||||
<form.input
|
||||
@name="currentPassword"
|
||||
@type="password"
|
||||
@name='currentPassword'
|
||||
@type='password'
|
||||
@value={{this.currentPassword}}
|
||||
@label={{t "form.current_password.label"}}
|
||||
@label={{t 'form.current_password.label'}}
|
||||
@error={{@model.errors.name}}
|
||||
readonly={{false}}
|
||||
autocomplete="current-password"
|
||||
as |field|>
|
||||
autocomplete='current-password'
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -26,14 +27,15 @@
|
||||
</form.input>
|
||||
|
||||
<form.input
|
||||
@name="newPassword"
|
||||
@type="password"
|
||||
@name='newPassword'
|
||||
@type='password'
|
||||
@value={{this.newPassword}}
|
||||
@label={{t "form.new_password.label"}}
|
||||
@label={{t 'form.new_password.label'}}
|
||||
@error={{@model.errors.name}}
|
||||
readonly={{false}}
|
||||
autocomplete="new-password"
|
||||
as |field|>
|
||||
autocomplete='new-password'
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -45,7 +47,8 @@
|
||||
|
||||
<form.actions
|
||||
@submitDisabled={{this.cannotSave}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -7,20 +7,22 @@
|
||||
as |form|
|
||||
>
|
||||
<form.input
|
||||
@value={{@model.type}}
|
||||
@label={{t "form.type.label"}}
|
||||
readonly={{true}}
|
||||
@disabled={{true}} />
|
||||
@value={{@model.type}}
|
||||
@label={{t 'form.type.label'}}
|
||||
readonly={{true}}
|
||||
@disabled={{true}}
|
||||
/>
|
||||
|
||||
<form.input
|
||||
@name="name"
|
||||
@type="name"
|
||||
@name='name'
|
||||
@type='name'
|
||||
@value={{@model.name}}
|
||||
@label={{t "form.name.label"}}
|
||||
@helperText={{t "form.name.help"}}
|
||||
@label={{t 'form.name.label'}}
|
||||
@helperText={{t 'form.name.help'}}
|
||||
@error={{@model.errors.name}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -31,15 +33,16 @@
|
||||
</form.input>
|
||||
|
||||
<form.textarea
|
||||
@name="description"
|
||||
@type="description"
|
||||
@name='description'
|
||||
@type='description'
|
||||
@value={{@model.description}}
|
||||
@label={{t "form.description.label"}}
|
||||
@helperText={{t "form.description.help"}}
|
||||
@label={{t 'form.description.label'}}
|
||||
@helperText={{t 'form.description.help'}}
|
||||
@error={{@model.errors.description}}
|
||||
disabled={{@model.isSaving}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.description}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.description as |error|}}
|
||||
@@ -50,13 +53,14 @@
|
||||
</form.textarea>
|
||||
|
||||
<form.input
|
||||
@name="login_name"
|
||||
@type="text"
|
||||
@name='login_name'
|
||||
@type='text'
|
||||
@value={{@model.attributes.login_name}}
|
||||
@label={{t "form.login_name.label"}}
|
||||
@label={{t 'form.login_name.label'}}
|
||||
@error={{@model.errors.login_name}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.login_name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.login_name as |error|}}
|
||||
@@ -68,14 +72,15 @@
|
||||
|
||||
{{#if @model.isNew}}
|
||||
<form.input
|
||||
@name="password"
|
||||
@type="password"
|
||||
@name='password'
|
||||
@type='password'
|
||||
@value={{this.password}}
|
||||
@label={{t "form.password.label"}}
|
||||
@label={{t 'form.password.label'}}
|
||||
@error={{@model.errors.password}}
|
||||
readonly={{false}}
|
||||
autocomplete="new-password"
|
||||
as |field|>
|
||||
autocomplete='new-password'
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.password}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.password as |error|}}
|
||||
@@ -88,8 +93,9 @@
|
||||
|
||||
<form.actions
|
||||
@disabled={{if @model.cannotSave @model.cannotSave}}
|
||||
@enableEditText={{t "actions.edit-form"}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@enableEditText={{t 'actions.edit-form'}}
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -6,15 +6,16 @@
|
||||
>
|
||||
|
||||
<form.input
|
||||
@name="password"
|
||||
@type="password"
|
||||
@name='password'
|
||||
@type='password'
|
||||
@value={{this.password}}
|
||||
@label={{t "form.set_password.label"}}
|
||||
@label={{t 'form.set_password.label'}}
|
||||
@error={{@model.errors.password}}
|
||||
@helperText={{t "form.set_password.help"}}
|
||||
@helperText={{t 'form.set_password.help'}}
|
||||
readonly={{false}}
|
||||
autocomplete="new-password"
|
||||
as |field|>
|
||||
autocomplete='new-password'
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.password}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.password as |error|}}
|
||||
@@ -27,7 +28,8 @@
|
||||
<form.actions
|
||||
@submitDisabled={{this.cannotSave}}
|
||||
@showCancel={{false}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -1,7 +1,8 @@
|
||||
{{#if @model.type}}
|
||||
{{component (concat "form/auth-method/" @model.type)
|
||||
{{component
|
||||
(concat 'form/auth-method/' @model.type)
|
||||
model=@model
|
||||
submit=@submit
|
||||
cancel=@cancel
|
||||
}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -7,20 +7,22 @@
|
||||
as |form|
|
||||
>
|
||||
<form.input
|
||||
@value={{@model.type}}
|
||||
@label={{t "form.type.label"}}
|
||||
readonly={{true}}
|
||||
@disabled={{true}} />
|
||||
@value={{@model.type}}
|
||||
@label={{t 'form.type.label'}}
|
||||
readonly={{true}}
|
||||
@disabled={{true}}
|
||||
/>
|
||||
|
||||
<form.input
|
||||
@name="name"
|
||||
@type="name"
|
||||
@name='name'
|
||||
@type='name'
|
||||
@value={{@model.name}}
|
||||
@label={{t "form.name.label"}}
|
||||
@helperText={{t "form.name.help"}}
|
||||
@label={{t 'form.name.label'}}
|
||||
@helperText={{t 'form.name.help'}}
|
||||
@error={{@model.errors.name}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -31,15 +33,16 @@
|
||||
</form.input>
|
||||
|
||||
<form.textarea
|
||||
@name="description"
|
||||
@type="description"
|
||||
@name='description'
|
||||
@type='description'
|
||||
@value={{@model.description}}
|
||||
@label={{t "form.description.label"}}
|
||||
@helperText={{t "form.description.help"}}
|
||||
@label={{t 'form.description.label'}}
|
||||
@helperText={{t 'form.description.help'}}
|
||||
@error={{@model.errors.description}}
|
||||
disabled={{@model.isSaving}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.description}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.description as |error|}}
|
||||
@@ -51,7 +54,8 @@
|
||||
|
||||
<form.actions
|
||||
@disabled={{if @model.cannotSave @model.cannotSave}}
|
||||
@enableEditText={{t "actions.edit-form"}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
</Rose::Form>
|
||||
@enableEditText={{t 'actions.edit-form'}}
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
</Rose::Form>
|
||||
@@ -1,6 +1,6 @@
|
||||
{{#if this.availableUsers}}
|
||||
<Rose::Form
|
||||
class="full-width"
|
||||
class='full-width'
|
||||
@onSubmit={{fn this.submit @submit}}
|
||||
@cancel={{@cancel}}
|
||||
@disabled={{@model.isSaving}}
|
||||
@@ -9,8 +9,9 @@
|
||||
>
|
||||
|
||||
<form.actions
|
||||
@submitText={{t "resources.group.actions.add-members"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@submitText={{t 'resources.group.actions.add-members'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
<Rose::Table as |table|>
|
||||
<table.header as |header|>
|
||||
@@ -26,7 +27,8 @@
|
||||
<form.checkbox
|
||||
@label={{user.id}}
|
||||
@description={{user.description}}
|
||||
onChange={{fn this.toggleMember user}} />
|
||||
onChange={{fn this.toggleMember user}}
|
||||
/>
|
||||
</row.cell>
|
||||
<row.cell>{{user.name}}</row.cell>
|
||||
</body.row>
|
||||
@@ -39,14 +41,17 @@
|
||||
|
||||
{{#unless this.availableUsers}}
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message @title={{t "resources.group.messages.no-members.title"}} as |message|>
|
||||
<Rose::Message
|
||||
@title={{t 'resources.group.messages.no-members.title'}}
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t "resources.group.messages.no-members.description"}}
|
||||
{{t 'resources.group.messages.no-members.description'}}
|
||||
</message.description>
|
||||
<message.link @route="scopes.scope.groups.group.members">
|
||||
<Rose::Icon @name="chevron-left" />
|
||||
{{t "actions.back"}}
|
||||
<message.link @route='scopes.scope.groups.group.members'>
|
||||
<Rose::Icon @name='chevron-left' />
|
||||
{{t 'actions.back'}}
|
||||
</message.link>
|
||||
</Rose::Message>
|
||||
</Rose::Layout::Centered>
|
||||
{{/unless}}
|
||||
</Rose::Layout::Centered>
|
||||
{{/unless}}
|
||||
@@ -8,14 +8,15 @@
|
||||
>
|
||||
|
||||
<form.input
|
||||
@name="name"
|
||||
@type="name"
|
||||
@name='name'
|
||||
@type='name'
|
||||
@value={{@model.name}}
|
||||
@label={{t "form.name.label"}}
|
||||
@helperText={{t "form.name.help"}}
|
||||
@label={{t 'form.name.label'}}
|
||||
@helperText={{t 'form.name.help'}}
|
||||
@error={{@model.errors.name}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -26,15 +27,16 @@
|
||||
</form.input>
|
||||
|
||||
<form.textarea
|
||||
@name="description"
|
||||
@type="description"
|
||||
@name='description'
|
||||
@type='description'
|
||||
@value={{@model.description}}
|
||||
@label={{t "form.description.label"}}
|
||||
@helperText={{t "form.description.help"}}
|
||||
@label={{t 'form.description.label'}}
|
||||
@helperText={{t 'form.description.help'}}
|
||||
@error={{@model.errors.description}}
|
||||
disabled={{@model.isSaving}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.description}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.description as |error|}}
|
||||
@@ -46,8 +48,9 @@
|
||||
|
||||
<form.actions
|
||||
@disabled={{if @model.cannotSave @model.cannotSave}}
|
||||
@enableEditText={{t "actions.edit-form"}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@enableEditText={{t 'actions.edit-form'}}
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -8,14 +8,15 @@
|
||||
>
|
||||
|
||||
<form.input
|
||||
@name="name"
|
||||
@type="name"
|
||||
@name='name'
|
||||
@type='name'
|
||||
@value={{@model.name}}
|
||||
@label={{t "form.name.label"}}
|
||||
@helperText={{t "form.name.help"}}
|
||||
@label={{t 'form.name.label'}}
|
||||
@helperText={{t 'form.name.help'}}
|
||||
@error={{@model.errors.name}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -26,15 +27,16 @@
|
||||
</form.input>
|
||||
|
||||
<form.textarea
|
||||
@name="description"
|
||||
@type="description"
|
||||
@name='description'
|
||||
@type='description'
|
||||
@value={{@model.description}}
|
||||
@label={{t "form.description.label"}}
|
||||
@helperText={{t "form.description.help"}}
|
||||
@label={{t 'form.description.label'}}
|
||||
@helperText={{t 'form.description.help'}}
|
||||
@error={{@model.errors.description}}
|
||||
disabled={{@model.isSaving}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.description}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.description as |error|}}
|
||||
@@ -46,8 +48,9 @@
|
||||
|
||||
<form.actions
|
||||
@disabled={{if @model.cannotSave @model.cannotSave}}
|
||||
@enableEditText={{t "actions.edit-form"}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@enableEditText={{t 'actions.edit-form'}}
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -1,6 +1,6 @@
|
||||
{{#if this.hasAvailableHosts}}
|
||||
<Rose::Form
|
||||
class="full-width"
|
||||
class='full-width'
|
||||
@onSubmit={{fn this.submit @submit}}
|
||||
@cancel={{@cancel}}
|
||||
@disabled={{@model.isSaving}}
|
||||
@@ -9,15 +9,16 @@
|
||||
>
|
||||
|
||||
<form.actions
|
||||
@submitText={{t "actions.add-hosts"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@submitText={{t 'actions.add-hosts'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
<Rose::Table as |table|>
|
||||
<table.header as |header|>
|
||||
<header.row as |row|>
|
||||
<row.headerCell>{{t "form.name.label"}}</row.headerCell>
|
||||
<row.headerCell>{{t "form.type.label"}}</row.headerCell>
|
||||
<row.headerCell>{{t "form.id.label"}}</row.headerCell>
|
||||
<row.headerCell>{{t 'form.name.label'}}</row.headerCell>
|
||||
<row.headerCell>{{t 'form.type.label'}}</row.headerCell>
|
||||
<row.headerCell>{{t 'form.id.label'}}</row.headerCell>
|
||||
</header.row>
|
||||
</table.header>
|
||||
<table.body as |body|>
|
||||
@@ -27,7 +28,8 @@
|
||||
<form.checkbox
|
||||
@label={{host.id}}
|
||||
@description={{host.description}}
|
||||
onChange={{fn this.toggleHost host}} />
|
||||
onChange={{fn this.toggleHost host}}
|
||||
/>
|
||||
</row.cell>
|
||||
<row.cell>{{host.name}}</row.cell>
|
||||
<row.cell>
|
||||
@@ -43,14 +45,19 @@
|
||||
|
||||
{{#unless this.hasAvailableHosts}}
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message @title={{t "resources.host-set.host.messages.add-none.title"}} as |message|>
|
||||
<Rose::Message
|
||||
@title={{t 'resources.host-set.host.messages.add-none.title'}}
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t "resources.host-set.host.messages.add-none.description"}}
|
||||
{{t 'resources.host-set.host.messages.add-none.description'}}
|
||||
</message.description>
|
||||
<message.link @route="scopes.scope.host-catalogs.host-catalog.host-sets.host-set.hosts">
|
||||
<Rose::Icon @name="chevron-left" />
|
||||
{{t "actions.back"}}
|
||||
<message.link
|
||||
@route='scopes.scope.host-catalogs.host-catalog.host-sets.host-set.hosts'
|
||||
>
|
||||
<Rose::Icon @name='chevron-left' />
|
||||
{{t 'actions.back'}}
|
||||
</message.link>
|
||||
</Rose::Message>
|
||||
</Rose::Layout::Centered>
|
||||
{{/unless}}
|
||||
{{/unless}}
|
||||
@@ -8,20 +8,22 @@
|
||||
>
|
||||
|
||||
<form.input
|
||||
@value={{@model.type}}
|
||||
@label={{t "form.type.label"}}
|
||||
readonly={{true}}
|
||||
@disabled={{true}} />
|
||||
@value={{@model.type}}
|
||||
@label={{t 'form.type.label'}}
|
||||
readonly={{true}}
|
||||
@disabled={{true}}
|
||||
/>
|
||||
|
||||
<form.input
|
||||
@name="name"
|
||||
@type="name"
|
||||
@name='name'
|
||||
@type='name'
|
||||
@value={{@model.name}}
|
||||
@label={{t "form.name.label"}}
|
||||
@helperText={{t "form.name.help"}}
|
||||
@label={{t 'form.name.label'}}
|
||||
@helperText={{t 'form.name.help'}}
|
||||
@error={{@model.errors.name}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -32,15 +34,16 @@
|
||||
</form.input>
|
||||
|
||||
<form.textarea
|
||||
@name="description"
|
||||
@type="description"
|
||||
@name='description'
|
||||
@type='description'
|
||||
@value={{@model.description}}
|
||||
@label={{t "form.description.label"}}
|
||||
@helperText={{t "form.description.help"}}
|
||||
@label={{t 'form.description.label'}}
|
||||
@helperText={{t 'form.description.help'}}
|
||||
@error={{@model.errors.description}}
|
||||
disabled={{@model.isSaving}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.description}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.description as |error|}}
|
||||
@@ -52,8 +55,9 @@
|
||||
|
||||
<form.actions
|
||||
@disabled={{if @model.cannotSave @model.cannotSave}}
|
||||
@enableEditText={{t "actions.edit-form"}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@enableEditText={{t 'actions.edit-form'}}
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -8,20 +8,22 @@
|
||||
>
|
||||
|
||||
<form.input
|
||||
@value={{@model.type}}
|
||||
@label={{t "form.type.label"}}
|
||||
readonly={{true}}
|
||||
@disabled={{true}} />
|
||||
@value={{@model.type}}
|
||||
@label={{t 'form.type.label'}}
|
||||
readonly={{true}}
|
||||
@disabled={{true}}
|
||||
/>
|
||||
|
||||
<form.input
|
||||
@name="name"
|
||||
@type="name"
|
||||
@name='name'
|
||||
@type='name'
|
||||
@value={{@model.name}}
|
||||
@label={{t "form.name.label"}}
|
||||
@label={{t 'form.name.label'}}
|
||||
@error={{@model.errors.name}}
|
||||
@helperText={{t "form.name.help"}}
|
||||
@helperText={{t 'form.name.help'}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -32,15 +34,16 @@
|
||||
</form.input>
|
||||
|
||||
<form.textarea
|
||||
@name="description"
|
||||
@type="description"
|
||||
@name='description'
|
||||
@type='description'
|
||||
@value={{@model.description}}
|
||||
@label={{t "form.description.label"}}
|
||||
@label={{t 'form.description.label'}}
|
||||
@error={{@model.errors.description}}
|
||||
@helperText={{t "form.description.help"}}
|
||||
@helperText={{t 'form.description.help'}}
|
||||
disabled={{@model.isSaving}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.description}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.description as |error|}}
|
||||
@@ -51,14 +54,15 @@
|
||||
</form.textarea>
|
||||
|
||||
<form.input
|
||||
@name="address"
|
||||
@type="text"
|
||||
@name='address'
|
||||
@type='text'
|
||||
@value={{@model.attributes.address}}
|
||||
@label={{t "form.address.label"}}
|
||||
@label={{t 'form.address.label'}}
|
||||
@error={{@model.errors.name}}
|
||||
@helperText={{t "form.address.help"}}
|
||||
@helperText={{t 'form.address.help'}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -70,8 +74,9 @@
|
||||
|
||||
<form.actions
|
||||
@disabled={{if @model.cannotSave @model.cannotSave}}
|
||||
@enableEditText={{t "actions.edit-form"}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@enableEditText={{t 'actions.edit-form'}}
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -1,6 +1,6 @@
|
||||
{{#if this.hasAvailablePrincipals}}
|
||||
<Rose::Form
|
||||
class="full-width"
|
||||
class='full-width'
|
||||
@onSubmit={{fn this.submit @submit}}
|
||||
@cancel={{@cancel}}
|
||||
@disabled={{@model.isSaving}}
|
||||
@@ -9,8 +9,9 @@
|
||||
>
|
||||
|
||||
<form.actions
|
||||
@submitText={{t "actions.add-principals"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@submitText={{t 'actions.add-principals'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
<Rose::Table as |table|>
|
||||
<table.header as |header|>
|
||||
@@ -27,11 +28,17 @@
|
||||
<form.checkbox
|
||||
@label={{principal.id}}
|
||||
@description={{principal.description}}
|
||||
onChange={{fn this.togglePrincipal principal}} />
|
||||
onChange={{fn this.togglePrincipal principal}}
|
||||
/>
|
||||
</row.cell>
|
||||
<row.cell>{{principal.name}}</row.cell>
|
||||
<row.cell>
|
||||
<Rose::Badge>{{t (concat 'resources.role.principal.types.' principal.constructor.modelName)}}</Rose::Badge>
|
||||
<Rose::Badge>{{t
|
||||
(concat
|
||||
'resources.role.principal.types.'
|
||||
principal.constructor.modelName
|
||||
)
|
||||
}}</Rose::Badge>
|
||||
</row.cell>
|
||||
</body.row>
|
||||
{{/each}}
|
||||
@@ -43,14 +50,17 @@
|
||||
|
||||
{{#unless this.hasAvailablePrincipals}}
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message @title={{t "resources.role.principal.messages.none.title"}} as |message|>
|
||||
<Rose::Message
|
||||
@title={{t 'resources.role.principal.messages.none.title'}}
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t "resources.role.principal.messages.none.description"}}
|
||||
{{t 'resources.role.principal.messages.none.description'}}
|
||||
</message.description>
|
||||
<message.link @route="scopes.scope.roles.role.principals">
|
||||
<Rose::Icon @name="chevron-left" />
|
||||
{{t "actions.back"}}
|
||||
<message.link @route='scopes.scope.roles.role.principals'>
|
||||
<Rose::Icon @name='chevron-left' />
|
||||
{{t 'actions.back'}}
|
||||
</message.link>
|
||||
</Rose::Message>
|
||||
</Rose::Layout::Centered>
|
||||
{{/unless}}
|
||||
{{/unless}}
|
||||
@@ -5,28 +5,29 @@
|
||||
as |form|
|
||||
>
|
||||
<Rose::List::KeyValue as |list|>
|
||||
{{!-- Add grant field (only one per form) --}}
|
||||
{{! Add grant field (only one per form) }}
|
||||
<list.item as |item|>
|
||||
<form.input
|
||||
@contextual={{true}}
|
||||
@name="grant"
|
||||
@type="text"
|
||||
@name='grant'
|
||||
@type='text'
|
||||
@value={{this.newGrantString}}
|
||||
as |input|>
|
||||
as |input|
|
||||
>
|
||||
<item.key>
|
||||
<input.label>{{t "resources.role.grant.actions.create"}}</input.label>
|
||||
<input.label>{{t 'resources.role.grant.actions.create'}}</input.label>
|
||||
</item.key>
|
||||
<item.cell>
|
||||
<input.field title={{t "form.grant.help"}} />
|
||||
<input.field title={{t 'form.grant.help'}} />
|
||||
</item.cell>
|
||||
<item.cell>
|
||||
<Rose::Button
|
||||
@submit={{true}}
|
||||
@disabled={{this.cannotSave}}
|
||||
@style="secondary"
|
||||
title={{t "actions.add"}}
|
||||
@style='secondary'
|
||||
title={{t 'actions.add'}}
|
||||
>
|
||||
{{t "actions.add"}}
|
||||
{{t 'actions.add'}}
|
||||
</Rose::Button>
|
||||
</item.cell>
|
||||
</form.input>
|
||||
@@ -57,26 +58,27 @@
|
||||
<list.item as |item|>
|
||||
<form.input
|
||||
@contextual={{true}}
|
||||
@name="grant"
|
||||
@type="text"
|
||||
@name='grant'
|
||||
@type='text'
|
||||
@value={{grant.value}}
|
||||
@error={{@model.errors.grant_strings}}
|
||||
as |input|>
|
||||
as |input|
|
||||
>
|
||||
<item.key>
|
||||
<input.label>{{t "form.grant.label"}}</input.label>
|
||||
<input.label>{{t 'form.grant.label'}}</input.label>
|
||||
</item.key>
|
||||
<item.cell>
|
||||
<input.field title={{t "form.grant.help"}} />
|
||||
<input.field title={{t 'form.grant.help'}} />
|
||||
</item.cell>
|
||||
</form.input>
|
||||
<item.cell>
|
||||
<Rose::Button
|
||||
@style="secondary"
|
||||
@iconOnly="trash"
|
||||
title={{t "actions.remove"}}
|
||||
{{on "click" (fn @removeGrant grant.value)}}
|
||||
@style='secondary'
|
||||
@iconOnly='trash'
|
||||
title={{t 'actions.remove'}}
|
||||
{{on 'click' (fn @removeGrant grant.value)}}
|
||||
>
|
||||
{{t "actions.remove"}}
|
||||
{{t 'actions.remove'}}
|
||||
</Rose::Button>
|
||||
</item.cell>
|
||||
</list.item>
|
||||
@@ -85,7 +87,8 @@
|
||||
|
||||
<form.actions
|
||||
@disabled={{if @model.cannotSave @model.cannotSave}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -8,14 +8,15 @@
|
||||
>
|
||||
|
||||
<form.input
|
||||
@name="name"
|
||||
@type="name"
|
||||
@name='name'
|
||||
@type='name'
|
||||
@value={{@model.name}}
|
||||
@label={{t "form.name.label"}}
|
||||
@helperText={{t "form.name.help"}}
|
||||
@label={{t 'form.name.label'}}
|
||||
@helperText={{t 'form.name.help'}}
|
||||
@error={{@model.errors.name}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -26,15 +27,16 @@
|
||||
</form.input>
|
||||
|
||||
<form.textarea
|
||||
@name="description"
|
||||
@type="description"
|
||||
@name='description'
|
||||
@type='description'
|
||||
@value={{@model.description}}
|
||||
@label={{t "form.description.label"}}
|
||||
@helperText={{t "form.description.help"}}
|
||||
@label={{t 'form.description.label'}}
|
||||
@helperText={{t 'form.description.help'}}
|
||||
@error={{@model.errors.description}}
|
||||
disabled={{@model.isSaving}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.description}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.description as |error|}}
|
||||
@@ -46,46 +48,62 @@
|
||||
|
||||
{{#unless @model.isNew}}
|
||||
<fieldset
|
||||
aria-labelledby="legend-text-grant-scope"
|
||||
aria-describedby="helper-text-grant-scope"
|
||||
aria-labelledby='legend-text-grant-scope'
|
||||
aria-describedby='helper-text-grant-scope'
|
||||
>
|
||||
<legend id="legend-text-grant-scope">{{t "form.grant_scope.label"}}</legend>
|
||||
<Rose::Form::HelperText @id="helper-text-grant-scope" @error={{@model.errors.grant_scope_id}}>
|
||||
{{t "form.grant_scope.help"}}
|
||||
<legend id='legend-text-grant-scope'>{{t
|
||||
'form.grant_scope.label'
|
||||
}}</legend>
|
||||
<Rose::Form::HelperText
|
||||
@id='helper-text-grant-scope'
|
||||
@error={{@model.errors.grant_scope_id}}
|
||||
>
|
||||
{{t 'form.grant_scope.help'}}
|
||||
</Rose::Form::HelperText>
|
||||
<form.radioGroup @name="grant_scope_id" @selectedValue={{@model.grant_scope_id}} as |radioGroup|>
|
||||
<form.radioGroup
|
||||
@name='grant_scope_id'
|
||||
@selectedValue={{@model.grant_scope_id}}
|
||||
as |radioGroup|
|
||||
>
|
||||
<Rose::Dropdown
|
||||
@text={{this.selectedGrantScope.displayName}}
|
||||
@icon={{if this.selectedGrantScope.isProject "app-icons/project" (if this.selectedGrantScope.isOrg "app-icons/org" "app-icons/global")}}
|
||||
as |dropdown|>
|
||||
@icon={{if
|
||||
this.selectedGrantScope.isProject
|
||||
'app-icons/project'
|
||||
(if
|
||||
this.selectedGrantScope.isOrg 'app-icons/org' 'app-icons/global'
|
||||
)
|
||||
}}
|
||||
as |dropdown|
|
||||
>
|
||||
<ul>
|
||||
{{#each @grantScopes as |grantScope|}}
|
||||
<li class={{if grantScope.model.isProject "is-project"}}>
|
||||
<li class={{if grantScope.model.isProject 'is-project'}}>
|
||||
<dropdown.item>
|
||||
<radioGroup.radio
|
||||
@label={{grantScope.model.displayName}}
|
||||
@value={{grantScope.model.id}}
|
||||
@icon={{concat "app-icons/" grantScope.model.type}}
|
||||
@icon={{concat 'app-icons/' grantScope.model.type}}
|
||||
/>
|
||||
</dropdown.item>
|
||||
<ul class="indent-label-1">
|
||||
<ul class='indent-label-1'>
|
||||
{{#each grantScope.subScopes as |subScope|}}
|
||||
<li class={{if subScope.model.isProject "is-project"}}>
|
||||
<li class={{if subScope.model.isProject 'is-project'}}>
|
||||
<dropdown.item>
|
||||
<radioGroup.radio
|
||||
@label={{subScope.model.displayName}}
|
||||
@value={{subScope.model.id}}
|
||||
@icon={{concat "app-icons/" subScope.model.type}}
|
||||
@icon={{concat 'app-icons/' subScope.model.type}}
|
||||
/>
|
||||
</dropdown.item>
|
||||
<ul class="indent-label-2">
|
||||
<ul class='indent-label-2'>
|
||||
{{#each subScope.subScopes as |subSubScope|}}
|
||||
<li class={{if subSubScope.isProject "is-project"}}>
|
||||
<li class={{if subSubScope.isProject 'is-project'}}>
|
||||
<dropdown.item>
|
||||
<radioGroup.radio
|
||||
@label={{subSubScope.displayName}}
|
||||
@value={{subSubScope.id}}
|
||||
@icon={{concat "app-icons/" subSubScope.type}}
|
||||
@icon={{concat 'app-icons/' subSubScope.type}}
|
||||
/>
|
||||
</dropdown.item>
|
||||
</li>
|
||||
@@ -104,8 +122,9 @@
|
||||
|
||||
<form.actions
|
||||
@disabled={{if @model.cannotSave @model.cannotSave}}
|
||||
@enableEditText={{t "actions.edit-form"}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@enableEditText={{t 'actions.edit-form'}}
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -8,14 +8,15 @@
|
||||
>
|
||||
|
||||
<form.input
|
||||
@name="name"
|
||||
@type="name"
|
||||
@name='name'
|
||||
@type='name'
|
||||
@value={{@model.name}}
|
||||
@label={{t "form.name.label"}}
|
||||
@helperText={{t "form.name.help"}}
|
||||
@label={{t 'form.name.label'}}
|
||||
@helperText={{t 'form.name.help'}}
|
||||
@error={{@model.errors.name}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -26,15 +27,16 @@
|
||||
</form.input>
|
||||
|
||||
<form.textarea
|
||||
@name="description"
|
||||
@type="description"
|
||||
@name='description'
|
||||
@type='description'
|
||||
@value={{@model.description}}
|
||||
@label={{t "form.description.label"}}
|
||||
@helperText={{t "form.description.help"}}
|
||||
@label={{t 'form.description.label'}}
|
||||
@helperText={{t 'form.description.help'}}
|
||||
@error={{@model.errors.description}}
|
||||
disabled={{@model.isSaving}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.description}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.description as |error|}}
|
||||
@@ -46,8 +48,9 @@
|
||||
|
||||
<form.actions
|
||||
@disabled={{if @model.cannotSave @model.cannotSave}}
|
||||
@enableEditText={{t "actions.edit-form"}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@enableEditText={{t 'actions.edit-form'}}
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -1,6 +1,6 @@
|
||||
{{#if this.hasAvailableHostSets}}
|
||||
<Rose::Form
|
||||
class="full-width"
|
||||
class='full-width'
|
||||
@onSubmit={{fn this.submit @submit}}
|
||||
@cancel={{@cancel}}
|
||||
@disabled={{@model.isSaving}}
|
||||
@@ -9,8 +9,9 @@
|
||||
>
|
||||
|
||||
<form.actions
|
||||
@submitText={{t "actions.add-host-sets"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@submitText={{t 'actions.add-host-sets'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
<Rose::Table as |table|>
|
||||
<table.header as |header|>
|
||||
@@ -28,11 +29,14 @@
|
||||
<form.checkbox
|
||||
@label={{hostSet.id}}
|
||||
@description={{hostSet.description}}
|
||||
onChange={{fn this.toggleHostSet hostSet}} />
|
||||
onChange={{fn this.toggleHostSet hostSet}}
|
||||
/>
|
||||
</row.cell>
|
||||
<row.cell>{{hostSet.name}}</row.cell>
|
||||
<row.cell>
|
||||
<Rose::Badge>{{t (concat 'resources.host-set.types.' hostSet.type)}}</Rose::Badge>
|
||||
<Rose::Badge>{{t
|
||||
(concat 'resources.host-set.types.' hostSet.type)
|
||||
}}</Rose::Badge>
|
||||
</row.cell>
|
||||
<row.cell>
|
||||
<code>{{hostSet.host_catalog_id}}</code>
|
||||
@@ -47,14 +51,17 @@
|
||||
|
||||
{{#unless this.hasAvailableHostSets}}
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message @title={{t "resources.target.host-set.messages.none.title"}} as |message|>
|
||||
<Rose::Message
|
||||
@title={{t 'resources.target.host-set.messages.none.title'}}
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t "resources.target.host-set.messages.none.description"}}
|
||||
{{t 'resources.target.host-set.messages.none.description'}}
|
||||
</message.description>
|
||||
<message.link @route="scopes.scope.targets.target.host-sets">
|
||||
<Rose::Icon @name="chevron-left" />
|
||||
{{t "actions.back"}}
|
||||
<message.link @route='scopes.scope.targets.target.host-sets'>
|
||||
<Rose::Icon @name='chevron-left' />
|
||||
{{t 'actions.back'}}
|
||||
</message.link>
|
||||
</Rose::Message>
|
||||
</Rose::Layout::Centered>
|
||||
{{/unless}}
|
||||
{{/unless}}
|
||||
@@ -8,19 +8,21 @@
|
||||
>
|
||||
|
||||
<form.input
|
||||
@value={{@model.type}}
|
||||
@label={{t "form.type.label"}}
|
||||
readonly={{true}}
|
||||
@disabled={{true}} />
|
||||
@value={{@model.type}}
|
||||
@label={{t 'form.type.label'}}
|
||||
readonly={{true}}
|
||||
@disabled={{true}}
|
||||
/>
|
||||
|
||||
<form.input
|
||||
@name="name"
|
||||
@type="text"
|
||||
@name='name'
|
||||
@type='text'
|
||||
@value={{@model.name}}
|
||||
@label={{t "form.name.label"}}
|
||||
@helperText={{t "form.name.help"}}
|
||||
@label={{t 'form.name.label'}}
|
||||
@helperText={{t 'form.name.help'}}
|
||||
@error={{@model.errors.name}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -31,13 +33,14 @@
|
||||
</form.input>
|
||||
|
||||
<form.textarea
|
||||
@name="description"
|
||||
@type="text"
|
||||
@name='description'
|
||||
@type='text'
|
||||
@value={{@model.description}}
|
||||
@label={{t "form.description.label"}}
|
||||
@helperText={{t "form.description.help"}}
|
||||
@label={{t 'form.description.label'}}
|
||||
@helperText={{t 'form.description.help'}}
|
||||
@error={{@model.errors.description}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.description}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.description as |error|}}
|
||||
@@ -48,15 +51,16 @@
|
||||
</form.textarea>
|
||||
|
||||
<form.input
|
||||
@name="session_max_seconds"
|
||||
@type="number"
|
||||
@name='session_max_seconds'
|
||||
@type='number'
|
||||
@value={{@model.session_max_seconds}}
|
||||
@label={{t "form.session_max_seconds.label"}}
|
||||
@label={{t 'form.session_max_seconds.label'}}
|
||||
@error={{@model.errors.session_max_seconds}}
|
||||
@helperText={{t "form.session_max_seconds.help"}}
|
||||
min="0"
|
||||
step="1"
|
||||
as |field|>
|
||||
@helperText={{t 'form.session_max_seconds.help'}}
|
||||
min='0'
|
||||
step='1'
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.session_max_seconds}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.session_max_seconds as |error|}}
|
||||
@@ -67,15 +71,16 @@
|
||||
</form.input>
|
||||
|
||||
<form.input
|
||||
@name="session_connection_limit"
|
||||
@type="number"
|
||||
@name='session_connection_limit'
|
||||
@type='number'
|
||||
@value={{@model.session_connection_limit}}
|
||||
@label={{t "form.session_connection_limit.label"}}
|
||||
@label={{t 'form.session_connection_limit.label'}}
|
||||
@error={{@model.errors.session_connection_limit}}
|
||||
@helperText={{t "form.session_connection_limit.help"}}
|
||||
min="-1"
|
||||
step="1"
|
||||
as |field|>
|
||||
@helperText={{t 'form.session_connection_limit.help'}}
|
||||
min='-1'
|
||||
step='1'
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.session_connection_limit}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.session_connection_limit as |error|}}
|
||||
@@ -85,18 +90,19 @@
|
||||
{{/if}}
|
||||
</form.input>
|
||||
|
||||
{{!-- TODO this is a type-specific field --}}
|
||||
{{! TODO this is a type-specific field }}
|
||||
<form.input
|
||||
@name="default_port"
|
||||
@type="number"
|
||||
@name='default_port'
|
||||
@type='number'
|
||||
@value={{@model.attributes.default_port}}
|
||||
@label={{t "form.default_port.label"}}
|
||||
@label={{t 'form.default_port.label'}}
|
||||
@error={{@model.errors.default_port}}
|
||||
@helperText={{t "form.default_port.help"}}
|
||||
min="0"
|
||||
step="1"
|
||||
as |field|>
|
||||
{{!-- TODO need to figure out how to reference `attributes.errors` here --}}
|
||||
@helperText={{t 'form.default_port.help'}}
|
||||
min='0'
|
||||
step='1'
|
||||
as |field|
|
||||
>
|
||||
{{! TODO need to figure out how to reference `attributes.errors` here }}
|
||||
{{#if @model.errors.default_port}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.default_port as |error|}}
|
||||
@@ -108,8 +114,9 @@
|
||||
|
||||
<form.actions
|
||||
@disabled={{if @model.cannotSave @model.cannotSave}}
|
||||
@enableEditText={{t "actions.edit-form"}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@enableEditText={{t 'actions.edit-form'}}
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -1,6 +1,6 @@
|
||||
{{#if this.hasAvailableAccounts}}
|
||||
<Rose::Form
|
||||
class="full-width"
|
||||
class='full-width'
|
||||
@onSubmit={{fn this.submit @submit}}
|
||||
@cancel={{@cancel}}
|
||||
@disabled={{@model.isSaving}}
|
||||
@@ -9,8 +9,9 @@
|
||||
>
|
||||
|
||||
<form.actions
|
||||
@submitText={{t "resources.user.actions.add-accounts"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@submitText={{t 'resources.user.actions.add-accounts'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
<Rose::Table as |table|>
|
||||
<table.header as |header|>
|
||||
@@ -27,7 +28,8 @@
|
||||
<form.checkbox
|
||||
@label={{account.id}}
|
||||
@description={{account.description}}
|
||||
onChange={{fn this.toggleAccount account}} />
|
||||
onChange={{fn this.toggleAccount account}}
|
||||
/>
|
||||
</row.cell>
|
||||
<row.cell>{{account.username}}</row.cell>
|
||||
<row.cell>
|
||||
@@ -43,14 +45,17 @@
|
||||
|
||||
{{#unless this.hasAvailableAccounts}}
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message @title={{t "resources.user.messages.no-accounts.title"}} as |message|>
|
||||
<Rose::Message
|
||||
@title={{t 'resources.user.messages.no-accounts.title'}}
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t "resources.user.messages.no-accounts.description"}}
|
||||
{{t 'resources.user.messages.no-accounts.description'}}
|
||||
</message.description>
|
||||
<message.link @route="scopes.scope.users.user.accounts">
|
||||
<Rose::Icon @name="chevron-left" />
|
||||
{{t "actions.back"}}
|
||||
<message.link @route='scopes.scope.users.user.accounts'>
|
||||
<Rose::Icon @name='chevron-left' />
|
||||
{{t 'actions.back'}}
|
||||
</message.link>
|
||||
</Rose::Message>
|
||||
</Rose::Layout::Centered>
|
||||
{{/unless}}
|
||||
{{/unless}}
|
||||
@@ -8,14 +8,15 @@
|
||||
>
|
||||
|
||||
<form.input
|
||||
@name="name"
|
||||
@type="name"
|
||||
@name='name'
|
||||
@type='name'
|
||||
@value={{@model.name}}
|
||||
@label={{t "form.name.label"}}
|
||||
@helperText={{t "form.name.help"}}
|
||||
@label={{t 'form.name.label'}}
|
||||
@helperText={{t 'form.name.help'}}
|
||||
@error={{@model.errors.name}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.name}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.name as |error|}}
|
||||
@@ -26,15 +27,16 @@
|
||||
</form.input>
|
||||
|
||||
<form.textarea
|
||||
@name="description"
|
||||
@type="description"
|
||||
@name='description'
|
||||
@type='description'
|
||||
@value={{@model.description}}
|
||||
@label={{t "form.description.label"}}
|
||||
@helperText={{t "form.description.help"}}
|
||||
@label={{t 'form.description.label'}}
|
||||
@helperText={{t 'form.description.help'}}
|
||||
@error={{@model.errors.description}}
|
||||
disabled={{@model.isSaving}}
|
||||
readonly={{false}}
|
||||
as |field|>
|
||||
as |field|
|
||||
>
|
||||
{{#if @model.errors.description}}
|
||||
<field.errors as |errors|>
|
||||
{{#each @model.errors.description as |error|}}
|
||||
@@ -46,8 +48,9 @@
|
||||
|
||||
<form.actions
|
||||
@disabled={{if @model.cannotSave @model.cannotSave}}
|
||||
@enableEditText={{t "actions.edit-form"}}
|
||||
@submitText={{t "actions.save"}}
|
||||
@cancelText={{t "actions.cancel"}} />
|
||||
@enableEditText={{t 'actions.edit-form'}}
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
|
||||
</Rose::Form>
|
||||
</Rose::Form>
|
||||
@@ -1,12 +1,17 @@
|
||||
import Route from '@ember/routing/route';
|
||||
import { inject as service } from '@ember/service';
|
||||
|
||||
export default class AuthenticationErrorRoute extends Route {
|
||||
// =services
|
||||
|
||||
@service('browser/window') window;
|
||||
|
||||
// =methods
|
||||
|
||||
/**
|
||||
* @return {string}
|
||||
*/
|
||||
model() {
|
||||
return window.location.toString();
|
||||
return this.window.location.toString();
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ export default class ScopesScopeAuthenticateMethodRoute extends Route {
|
||||
@service session;
|
||||
@service notify;
|
||||
@service intl;
|
||||
@service windowManager;
|
||||
|
||||
// =methods
|
||||
|
||||
@@ -25,24 +26,16 @@ export default class ScopesScopeAuthenticateMethodRoute extends Route {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Kicks off the OIDC auth flow by opening a new window to the provider.
|
||||
* @param {string} authenticatorName
|
||||
* @param {object} options
|
||||
*/
|
||||
async startOIDCAuthentication(authenticatorName, options) {
|
||||
const oidc = getOwner(this).lookup(authenticatorName);
|
||||
// TODO: delegate this call from the session service so that we don't have
|
||||
// to look up the authenticator directly
|
||||
const json = await oidc.startAuthentication(options);
|
||||
await this.openExternalOIDCFlow(json.attributes.auth_url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens the specified URL in a new tab or window. By default this uses
|
||||
* `window.open`, but may be overriden.
|
||||
* @param {string} url
|
||||
*/
|
||||
async openExternalOIDCFlow(url) {
|
||||
// TODO don't use window directly
|
||||
await window.open(url);
|
||||
await this.windowManager.open(json.attributes.auth_url);
|
||||
}
|
||||
|
||||
// =actions
|
||||
|
||||
@@ -13,6 +13,7 @@ export default class ScopesScopeAuthenticateMethodOidcRoute extends Route {
|
||||
// =services
|
||||
|
||||
@service session;
|
||||
@service windowManager;
|
||||
|
||||
// =attributes
|
||||
|
||||
@@ -61,10 +62,12 @@ export default class ScopesScopeAuthenticateMethodOidcRoute extends Route {
|
||||
}
|
||||
|
||||
/**
|
||||
* When this route is deactivated (exited), stop polling for changes.
|
||||
* When this route is deactivated (exited), stop polling for changes and close
|
||||
* any windows opened via the window manager service.
|
||||
*/
|
||||
deactivate() {
|
||||
this.poller.cancelAll();
|
||||
this.windowManager.closeAll();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
import Service from '@ember/service';
|
||||
import { inject as service } from '@ember/service';
|
||||
|
||||
/**
|
||||
* The window manager service enables browser windows to open and close
|
||||
* without the need to retain window references at the callsite.
|
||||
*/
|
||||
export default class WindowManagerService extends Service {
|
||||
// =services
|
||||
|
||||
@service('browser/window') window;
|
||||
|
||||
// =attributes
|
||||
|
||||
/**
|
||||
* An array of windows under management.
|
||||
* @private
|
||||
* @type {[Window]}
|
||||
*/
|
||||
#managedWindows = [];
|
||||
|
||||
// =methods
|
||||
|
||||
/**
|
||||
* Opens a new window of the specified URL via browser services.
|
||||
* @param {string} url
|
||||
* @see `window.open`
|
||||
*/
|
||||
open(url) {
|
||||
const newWindow = this.window.open(url);
|
||||
if (newWindow) this.add(newWindow);
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes all windows under management and purges their references.
|
||||
* @see `window.close`
|
||||
*/
|
||||
closeAll() {
|
||||
this.#managedWindows.forEach((window) => window.close());
|
||||
this.purgeAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a window to management.
|
||||
* @param {Window} window
|
||||
*/
|
||||
add(window) {
|
||||
this.#managedWindows.push(window);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the managed windows array. As long as no array references are
|
||||
* retained, this should result in the original array being GC'd.
|
||||
*/
|
||||
purgeAll() {
|
||||
this.#managedWindows = [];
|
||||
}
|
||||
}
|
||||
@@ -152,6 +152,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
.rose-dialog-cover {
|
||||
svg {
|
||||
max-width: 20rem;
|
||||
}
|
||||
}
|
||||
|
||||
.copyable {
|
||||
white-space: nowrap;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{{page-title (t "actions.change-password")}}
|
||||
{{page-title (t 'actions.change-password')}}
|
||||
|
||||
<Rose::Layout::Sidebar as |sidebarLayout|>
|
||||
<sidebarLayout.body>
|
||||
@@ -7,14 +7,14 @@
|
||||
<Rose::Layout::Page as |page|>
|
||||
|
||||
<page.header>
|
||||
<h2>{{t "actions.change-password"}}</h2>
|
||||
<h2>{{t 'actions.change-password'}}</h2>
|
||||
</page.header>
|
||||
|
||||
<page.body>
|
||||
<Form::Account::Password::ChangePassword
|
||||
@model={{@model}}
|
||||
@submit={{route-action "changePassword" @model}}
|
||||
@cancel={{route-action "cancel" @model}}
|
||||
@submit={{route-action 'changePassword' @model}}
|
||||
@cancel={{route-action 'cancel' @model}}
|
||||
/>
|
||||
</page.body>
|
||||
|
||||
@@ -22,4 +22,4 @@
|
||||
</Rose::Layout::Centered>
|
||||
</main>
|
||||
</sidebarLayout.body>
|
||||
</Rose::Layout::Sidebar>
|
||||
</Rose::Layout::Sidebar>
|
||||
@@ -3,49 +3,55 @@
|
||||
<Rose::Layout::Global as |layout|>
|
||||
|
||||
<layout.header>
|
||||
<Rose::Header class="{{if (is-loading) " loading"}}" as |header|>
|
||||
<header.brand @logo="logo-app" @text={{app-name}} />
|
||||
<Rose::Header class='{{if (is-loading) ' loading'}}' as |header|>
|
||||
<header.brand @logo='logo-app' @text={{app-name}} />
|
||||
|
||||
{{#if this.session.isAuthenticated}}
|
||||
<header.nav>
|
||||
|
||||
{{outlet "header-nav"}}
|
||||
{{outlet 'header-nav'}}
|
||||
|
||||
</header.nav>
|
||||
|
||||
<header.utilities as |utilities|>
|
||||
<utilities.dropdown
|
||||
@text={{this.session.data.authenticated.username}}
|
||||
@icon="app-icons/user-profile" as |dropdown|
|
||||
@icon='app-icons/user-profile'
|
||||
as |dropdown|
|
||||
>
|
||||
<dropdown.link @route="account.change-password">
|
||||
<dropdown.link @route='account.change-password'>
|
||||
{{t 'actions.change-password'}}
|
||||
</dropdown.link>
|
||||
<dropdown.separator />
|
||||
|
||||
<dropdown.button
|
||||
{{on "click" (route-action "invalidateSession")}}
|
||||
>
|
||||
<dropdown.button {{on 'click' (route-action 'invalidateSession')}}>
|
||||
{{t 'actions.deauthenticate'}}
|
||||
</dropdown.button>
|
||||
|
||||
<dropdown.separator />
|
||||
|
||||
<dropdown.section @title={{t "titles.toggle-color-theme"}}>
|
||||
<dropdown.section @title={{t 'titles.toggle-color-theme'}}>
|
||||
<Rose::Form as |form|>
|
||||
<form.radioGroup
|
||||
@name="theme"
|
||||
@name='theme'
|
||||
@selectedValue={{this.session.data.theme}}
|
||||
@changed={{route-action "toggleTheme"}}
|
||||
as |radioGroup|>
|
||||
@changed={{route-action 'toggleTheme'}}
|
||||
as |radioGroup|
|
||||
>
|
||||
<dropdown.item>
|
||||
<radioGroup.radio @label={{t "themes.system"}} />
|
||||
<radioGroup.radio @label={{t 'themes.system'}} />
|
||||
</dropdown.item>
|
||||
<dropdown.item>
|
||||
<radioGroup.radio @label={{t "themes.light"}} @value="light" />
|
||||
<radioGroup.radio
|
||||
@label={{t 'themes.light'}}
|
||||
@value='light'
|
||||
/>
|
||||
</dropdown.item>
|
||||
<dropdown.item>
|
||||
<radioGroup.radio @label={{t "themes.dark"}} @value="dark" />
|
||||
<radioGroup.radio
|
||||
@label={{t 'themes.dark'}}
|
||||
@value='dark'
|
||||
/>
|
||||
</dropdown.item>
|
||||
</form.radioGroup>
|
||||
</Rose::Form>
|
||||
@@ -65,12 +71,12 @@
|
||||
|
||||
<layout.footer>
|
||||
<Rose::Footer as |footer|>
|
||||
<footer.brand @logo="logo-company" @text={{company-name}} />
|
||||
<footer.brand @logo='logo-company' @text={{company-name}} />
|
||||
<footer.text>{{company-copyright}}</footer.text>
|
||||
<footer.text>{{app-name}}</footer.text>
|
||||
<footer.nav as |nav|>
|
||||
<nav.link @href={{doc-url}}>
|
||||
{{t "titles.documentation"}}
|
||||
{{t 'titles.documentation'}}
|
||||
</nav.link>
|
||||
</footer.nav>
|
||||
</Rose::Footer>
|
||||
@@ -92,45 +98,51 @@
|
||||
<PendingConfirmations as |confirmation accept deny|>
|
||||
{{#if confirmation.options.isAbandonConfirm}}
|
||||
<Rose::Dialog
|
||||
@heading={{t "titles.abandon-confirm"}}
|
||||
@dismissButtonText={{t "actions.cancel"}}
|
||||
@icon="alert-triangle"
|
||||
@style="warning"
|
||||
@heading={{t 'titles.abandon-confirm'}}
|
||||
@dismissButtonText={{t 'actions.cancel'}}
|
||||
@icon='alert-triangle'
|
||||
@style='warning'
|
||||
@modal={{true}}
|
||||
@dismiss={{deny}}
|
||||
as |dialog|>
|
||||
as |dialog|
|
||||
>
|
||||
<dialog.body>
|
||||
<p>{{t "questions.abandon-confirm"}}</p>
|
||||
<p>{{t 'questions.abandon-confirm'}}</p>
|
||||
</dialog.body>
|
||||
<dialog.footer>
|
||||
<Rose::Button @style="primary" {{on "click" accept}}>
|
||||
{{t "actions.discard"}}
|
||||
<Rose::Button @style='primary' {{on 'click' accept}}>
|
||||
{{t 'actions.discard'}}
|
||||
</Rose::Button>
|
||||
<Rose::Button @style="secondary" {{on "click" deny}}>
|
||||
{{t "actions.cancel"}}
|
||||
<Rose::Button @style='secondary' {{on 'click' deny}}>
|
||||
{{t 'actions.cancel'}}
|
||||
</Rose::Button>
|
||||
</dialog.footer>
|
||||
</Rose::Dialog>
|
||||
{{else}}
|
||||
<Rose::Dialog
|
||||
@heading={{if confirmation.options.title (t confirmation.options.title) (t "actions.confirm")}}
|
||||
@dismissButtonText={{t "actions.cancel"}}
|
||||
@icon="alert-triangle"
|
||||
@style="warning"
|
||||
@heading={{if
|
||||
confirmation.options.title
|
||||
(t confirmation.options.title)
|
||||
(t 'actions.confirm')
|
||||
}}
|
||||
@dismissButtonText={{t 'actions.cancel'}}
|
||||
@icon='alert-triangle'
|
||||
@style='warning'
|
||||
@modal={{true}}
|
||||
@dismiss={{deny}}
|
||||
as |dialog|>
|
||||
as |dialog|
|
||||
>
|
||||
<dialog.body>
|
||||
<p>{{confirmation.text}}</p>
|
||||
</dialog.body>
|
||||
<dialog.footer>
|
||||
<Rose::Button @style="primary" {{on "click" accept}}>
|
||||
{{t "actions.ok"}}
|
||||
<Rose::Button @style='primary' {{on 'click' accept}}>
|
||||
{{t 'actions.ok'}}
|
||||
</Rose::Button>
|
||||
<Rose::Button @style="secondary" {{on "click" deny}}>
|
||||
{{t "actions.cancel"}}
|
||||
<Rose::Button @style='secondary' {{on 'click' deny}}>
|
||||
{{t 'actions.cancel'}}
|
||||
</Rose::Button>
|
||||
</dialog.footer>
|
||||
</Rose::Dialog>
|
||||
{{/if}}
|
||||
</PendingConfirmations>
|
||||
</PendingConfirmations>
|
||||
@@ -3,10 +3,10 @@
|
||||
<main>
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Notification
|
||||
@style="success"
|
||||
@heading={{t "auth.titles.flow-success"}}
|
||||
@style='success'
|
||||
@heading={{t 'auth.titles.flow-success'}}
|
||||
>
|
||||
{{t "auth.descriptions.flow-success"}}
|
||||
{{t 'auth.descriptions.flow-success'}}
|
||||
</Rose::Notification>
|
||||
</Rose::Layout::Centered>
|
||||
</main>
|
||||
</main>
|
||||
@@ -1,20 +1,17 @@
|
||||
{{page-title (t "auth.titles.flow-error")}}
|
||||
{{page-title (t 'auth.titles.flow-error')}}
|
||||
|
||||
<main>
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Notification
|
||||
@style="error"
|
||||
@heading={{t "auth.titles.flow-error"}}
|
||||
>
|
||||
{{t "auth.descriptions.flow-error"}}
|
||||
<br>
|
||||
<Rose::Notification @style='error' @heading={{t 'auth.titles.flow-error'}}>
|
||||
{{t 'auth.descriptions.flow-error'}}
|
||||
<br />
|
||||
<Copyable
|
||||
@text={{@model}}
|
||||
@buttonText={{t "actions.copy-error-detail-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-error-detail-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
{{t "actions.copy-error-detail-to-clipboard"}}
|
||||
{{t 'actions.copy-error-detail-to-clipboard'}}
|
||||
</Copyable>
|
||||
</Rose::Notification>
|
||||
</Rose::Layout::Centered>
|
||||
</main>
|
||||
</main>
|
||||
@@ -1,6 +1,6 @@
|
||||
{{!--
|
||||
{{!
|
||||
Add content you wish automatically added to the documents head
|
||||
here. The 'model' available in this template can be populated by
|
||||
setting values on the 'head-data' service.
|
||||
--}}
|
||||
<title>{{this.model.title}}</title>
|
||||
}}
|
||||
<title>{{this.model.title}}</title>
|
||||
@@ -1 +1 @@
|
||||
<h1>{{app-name}}</h1>
|
||||
<h1>{{app-name}}</h1>
|
||||
@@ -7,11 +7,12 @@
|
||||
<main>
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message
|
||||
@title={{t "auth.titles.no-scopes"}}
|
||||
@icon="alert-circle-outline"
|
||||
as |message|>
|
||||
@title={{t 'auth.titles.no-scopes'}}
|
||||
@icon='alert-circle-outline'
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t "auth.descriptions.no-scopes"}}
|
||||
{{t 'auth.descriptions.no-scopes'}}
|
||||
</message.description>
|
||||
</Rose::Message>
|
||||
</Rose::Layout::Centered>
|
||||
@@ -19,4 +20,4 @@
|
||||
</sidebarLayout.body>
|
||||
|
||||
</Rose::Layout::Sidebar>
|
||||
{{/unless}}
|
||||
{{/unless}}
|
||||
@@ -1,12 +1,12 @@
|
||||
{{#if @model.isOrg}}
|
||||
{{page-title (t "resources.org.title_plural") }}
|
||||
{{page-title (t 'resources.org.title_plural')}}
|
||||
{{page-title @model.displayName}}
|
||||
{{/if}}
|
||||
|
||||
{{#if @model.isProject}}
|
||||
{{page-title (t "resources.org.title_plural") }}
|
||||
{{page-title (t 'resources.org.title_plural')}}
|
||||
{{page-title this.scopes.selectedOrg.displayName}}
|
||||
{{page-title (t "resources.project.title_plural") }}
|
||||
{{page-title (t 'resources.project.title_plural')}}
|
||||
{{page-title @model.displayName}}
|
||||
{{/if}}
|
||||
|
||||
@@ -16,54 +16,44 @@
|
||||
<sidebarLayout.sidebar>
|
||||
|
||||
{{#if @model.isGlobal}}
|
||||
<Rose::Nav::Sidebar @title={{t "titles.general"}} as |nav|>
|
||||
<nav.link @route="scopes.scope.scopes">
|
||||
<Rose::Icon
|
||||
@name="app-icons/org"
|
||||
@size="medium" />
|
||||
{{t "resources.org.title_plural"}}
|
||||
<Rose::Nav::Sidebar @title={{t 'titles.general'}} as |nav|>
|
||||
<nav.link @route='scopes.scope.scopes'>
|
||||
<Rose::Icon @name='app-icons/org' @size='medium' />
|
||||
{{t 'resources.org.title_plural'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Sidebar>
|
||||
{{/if}}
|
||||
|
||||
{{#if @model.isOrg}}
|
||||
<Rose::Nav::Sidebar @title={{t "titles.general"}} as |nav|>
|
||||
<Rose::Nav::Sidebar @title={{t 'titles.general'}} as |nav|>
|
||||
{{#if this.session.data.authenticated.isGlobal}}
|
||||
<nav.link @route="scopes.scope.scopes" @model="global">
|
||||
<Rose::Icon
|
||||
@name="app-icons/org"
|
||||
@size="medium" />
|
||||
{{t "resources.org.title_plural"}}
|
||||
<nav.link @route='scopes.scope.scopes' @model='global'>
|
||||
<Rose::Icon @name='app-icons/org' @size='medium' />
|
||||
{{t 'resources.org.title_plural'}}
|
||||
</nav.link>
|
||||
{{/if}}
|
||||
<nav.link @route="scopes.scope.scopes">
|
||||
<Rose::Icon
|
||||
@name="app-icons/project"
|
||||
@size="medium" />
|
||||
{{t "resources.project.title_plural"}}
|
||||
<nav.link @route='scopes.scope.scopes'>
|
||||
<Rose::Icon @name='app-icons/project' @size='medium' />
|
||||
{{t 'resources.project.title_plural'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Sidebar>
|
||||
{{/if}}
|
||||
|
||||
{{#if @model.isProject}}
|
||||
<Rose::Nav::Sidebar @title={{t "titles.general"}} as |nav|>
|
||||
<Rose::Nav::Sidebar @title={{t 'titles.general'}} as |nav|>
|
||||
{{#if this.session.data.authenticated.isGlobal}}
|
||||
<nav.link @route="scopes.scope.scopes" @model="global">
|
||||
<Rose::Icon
|
||||
@name="app-icons/org"
|
||||
@size="medium" />
|
||||
{{t "resources.org.title_plural"}}
|
||||
<nav.link @route='scopes.scope.scopes' @model='global'>
|
||||
<Rose::Icon @name='app-icons/org' @size='medium' />
|
||||
{{t 'resources.org.title_plural'}}
|
||||
</nav.link>
|
||||
{{/if}}
|
||||
<nav.link @route="scopes.scope.scopes" @model={{@model.scopeID}}>
|
||||
<Rose::Icon
|
||||
@name="app-icons/project"
|
||||
@size="medium" />
|
||||
{{t "resources.project.title_plural"}}
|
||||
<nav.link @route='scopes.scope.scopes' @model={{@model.scopeID}}>
|
||||
<Rose::Icon @name='app-icons/project' @size='medium' />
|
||||
{{t 'resources.project.title_plural'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Sidebar>
|
||||
{{!-- TODO: after scope awareness refactor, update groups and roles
|
||||
to support project scopes --}}
|
||||
{{! TODO: after scope awareness refactor, update groups and roles
|
||||
to support project scopes }}
|
||||
{{!--
|
||||
<Rose::Nav::Sidebar @title={{t "titles.iam"}} as |nav|>
|
||||
<nav.link @route="scopes.scope.groups">
|
||||
@@ -80,71 +70,57 @@
|
||||
</nav.link>
|
||||
</Rose::Nav::Sidebar>
|
||||
--}}
|
||||
<Rose::Nav::Sidebar @title={{t "titles.resources"}} as |nav|>
|
||||
<nav.link @route="scopes.scope.sessions">
|
||||
<Rose::Icon
|
||||
@name="app-icons/action-session"
|
||||
@size="medium" />
|
||||
{{t "resources.session.title_plural"}}
|
||||
<Rose::Nav::Sidebar @title={{t 'titles.resources'}} as |nav|>
|
||||
<nav.link @route='scopes.scope.sessions'>
|
||||
<Rose::Icon @name='app-icons/action-session' @size='medium' />
|
||||
{{t 'resources.session.title_plural'}}
|
||||
</nav.link>
|
||||
<nav.link @route="scopes.scope.targets">
|
||||
<Rose::Icon
|
||||
@name="app-icons/target"
|
||||
@size="medium" />
|
||||
{{t "resources.target.title_plural"}}
|
||||
<nav.link @route='scopes.scope.targets'>
|
||||
<Rose::Icon @name='app-icons/target' @size='medium' />
|
||||
{{t 'resources.target.title_plural'}}
|
||||
</nav.link>
|
||||
<nav.link @route="scopes.scope.host-catalogs">
|
||||
<Rose::Icon
|
||||
@name="app-icons/host-catalogs"
|
||||
@size="medium" />
|
||||
{{t "resources.host-catalog.title_plural"}}
|
||||
<nav.link @route='scopes.scope.host-catalogs'>
|
||||
<Rose::Icon @name='app-icons/host-catalogs' @size='medium' />
|
||||
{{t 'resources.host-catalog.title_plural'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Sidebar>
|
||||
{{/if}}
|
||||
|
||||
{{#unless @model.isProject}}
|
||||
<Rose::Nav::Sidebar @title={{t "titles.iam"}} as |nav|>
|
||||
<nav.link @route="scopes.scope.users">
|
||||
<Rose::Icon
|
||||
@name="app-icons/users"
|
||||
@size="medium" />
|
||||
{{t "resources.user.title_plural"}}
|
||||
<Rose::Nav::Sidebar @title={{t 'titles.iam'}} as |nav|>
|
||||
<nav.link @route='scopes.scope.users'>
|
||||
<Rose::Icon @name='app-icons/users' @size='medium' />
|
||||
{{t 'resources.user.title_plural'}}
|
||||
</nav.link>
|
||||
<nav.link @route="scopes.scope.groups">
|
||||
<Rose::Icon
|
||||
@name="app-icons/group"
|
||||
@size="medium" />
|
||||
{{t "resources.group.title_plural"}}
|
||||
<nav.link @route='scopes.scope.groups'>
|
||||
<Rose::Icon @name='app-icons/group' @size='medium' />
|
||||
{{t 'resources.group.title_plural'}}
|
||||
</nav.link>
|
||||
<nav.link @route="scopes.scope.roles">
|
||||
<Rose::Icon
|
||||
@name="app-icons/roles"
|
||||
@size="medium" />
|
||||
{{t "resources.role.title_plural"}}
|
||||
<nav.link @route='scopes.scope.roles'>
|
||||
<Rose::Icon @name='app-icons/roles' @size='medium' />
|
||||
{{t 'resources.role.title_plural'}}
|
||||
</nav.link>
|
||||
<nav.link @route="scopes.scope.auth-methods">
|
||||
<Rose::Icon
|
||||
@name="app-icons/auth-method"
|
||||
@size="medium" />
|
||||
{{t "resources.auth-method.title_plural"}}
|
||||
<nav.link @route='scopes.scope.auth-methods'>
|
||||
<Rose::Icon @name='app-icons/auth-method' @size='medium' />
|
||||
{{t 'resources.auth-method.title_plural'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Sidebar>
|
||||
{{/unless}}
|
||||
|
||||
{{#if @model.isOrg}}
|
||||
{{#if this.session.data.authenticated.isGlobal}}
|
||||
<Rose::Nav::Sidebar @title={{t "titles.settings"}} as |nav|>
|
||||
<nav.link @route="scopes.scope.edit">
|
||||
{{t "resources.org.messages.settings.title"}}
|
||||
<Rose::Nav::Sidebar @title={{t 'titles.settings'}} as |nav|>
|
||||
<nav.link @route='scopes.scope.edit'>
|
||||
{{t 'resources.org.messages.settings.title'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Sidebar>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if @model.isProject}}
|
||||
<Rose::Nav::Sidebar @title={{t "titles.settings"}} as |nav|>
|
||||
<nav.link @route="scopes.scope.edit">
|
||||
{{t "resources.project.messages.settings.title"}}
|
||||
<Rose::Nav::Sidebar @title={{t 'titles.settings'}} as |nav|>
|
||||
<nav.link @route='scopes.scope.edit'>
|
||||
{{t 'resources.project.messages.settings.title'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Sidebar>
|
||||
{{/if}}
|
||||
@@ -158,4 +134,4 @@
|
||||
</main>
|
||||
</sidebarLayout.body>
|
||||
|
||||
</Rose::Layout::Sidebar>
|
||||
</Rose::Layout::Sidebar>
|
||||
@@ -1,15 +1,20 @@
|
||||
<Rose::Dropdown
|
||||
@text={{this.scopes.selectedOrg.displayName}}
|
||||
@icon={{if this.scopes.selectedOrg.isGlobal "app-icons/global" "app-icons/org"}} as |dropdown|
|
||||
@icon={{if
|
||||
this.scopes.selectedOrg.isGlobal
|
||||
'app-icons/global'
|
||||
'app-icons/org'
|
||||
}}
|
||||
as |dropdown|
|
||||
>
|
||||
{{#if this.session.data.authenticated.isGlobal}}
|
||||
<dropdown.link @route="scopes.scope" @model="global">
|
||||
{{t "titles.global"}}
|
||||
<dropdown.link @route='scopes.scope' @model='global'>
|
||||
{{t 'titles.global'}}
|
||||
</dropdown.link>
|
||||
<dropdown.separator />
|
||||
{{/if}}
|
||||
{{#each this.scopes.orgs as |scope|}}
|
||||
<dropdown.link @route="scopes.scope" @model={{scope.id}}>
|
||||
<dropdown.link @route='scopes.scope' @model={{scope.id}}>
|
||||
{{scope.displayName}}
|
||||
</dropdown.link>
|
||||
{{/each}}
|
||||
@@ -18,12 +23,13 @@
|
||||
{{#if this.scopes.selectedProject}}
|
||||
<Rose::Dropdown
|
||||
@text={{this.scopes.selectedProject.displayName}}
|
||||
@icon="app-icons/project" as |dropdown|
|
||||
@icon='app-icons/project'
|
||||
as |dropdown|
|
||||
>
|
||||
{{#each this.scopes.projects as |scope|}}
|
||||
<dropdown.link @route="scopes.scope" @model={{scope.id}}>
|
||||
<dropdown.link @route='scopes.scope' @model={{scope.id}}>
|
||||
{{scope.displayName}}
|
||||
</dropdown.link>
|
||||
{{/each}}
|
||||
</Rose::Dropdown>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -1,26 +1,18 @@
|
||||
<Rose::Nav::Sidebar @title={{t "titles.iam"}} as |nav|>
|
||||
<nav.link @route="scopes.scope.users">
|
||||
<Rose::Icon
|
||||
@name="app-icons/users"
|
||||
@size="medium" />
|
||||
{{t "resources.user.title_plural"}}
|
||||
<Rose::Nav::Sidebar @title={{t 'titles.iam'}} as |nav|>
|
||||
<nav.link @route='scopes.scope.users'>
|
||||
<Rose::Icon @name='app-icons/users' @size='medium' />
|
||||
{{t 'resources.user.title_plural'}}
|
||||
</nav.link>
|
||||
<nav.link @route="scopes.scope.groups">
|
||||
<Rose::Icon
|
||||
@name="app-icons/group"
|
||||
@size="medium" />
|
||||
{{t "resources.group.title_plural"}}
|
||||
<nav.link @route='scopes.scope.groups'>
|
||||
<Rose::Icon @name='app-icons/group' @size='medium' />
|
||||
{{t 'resources.group.title_plural'}}
|
||||
</nav.link>
|
||||
<nav.link @route="scopes.scope.roles">
|
||||
<Rose::Icon
|
||||
@name="app-icons/roles"
|
||||
@size="medium" />
|
||||
{{t "resources.role.title_plural"}}
|
||||
<nav.link @route='scopes.scope.roles'>
|
||||
<Rose::Icon @name='app-icons/roles' @size='medium' />
|
||||
{{t 'resources.role.title_plural'}}
|
||||
</nav.link>
|
||||
<nav.link @route="scopes.scope.auth-methods">
|
||||
<Rose::Icon
|
||||
@name="app-icons/auth-method"
|
||||
@size="medium" />
|
||||
{{t "resources.auth-method.title_plural"}}
|
||||
<nav.link @route='scopes.scope.auth-methods'>
|
||||
<Rose::Icon @name='app-icons/auth-method' @size='medium' />
|
||||
{{t 'resources.auth-method.title_plural'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Sidebar>
|
||||
</Rose::Nav::Sidebar>
|
||||
@@ -1,3 +1,3 @@
|
||||
{{page-title (t "resources.auth-method.title_plural")}}
|
||||
{{page-title (t 'resources.auth-method.title_plural')}}
|
||||
|
||||
{{outlet}}
|
||||
{{outlet}}
|
||||
@@ -7,19 +7,19 @@
|
||||
</page.breadcrumbs>
|
||||
|
||||
<page.header>
|
||||
{{outlet "header"}}
|
||||
{{outlet 'header'}}
|
||||
</page.header>
|
||||
|
||||
<page.navigation>
|
||||
{{outlet "navigation"}}
|
||||
{{outlet 'navigation'}}
|
||||
</page.navigation>
|
||||
|
||||
<page.actions>
|
||||
{{outlet "actions"}}
|
||||
{{outlet 'actions'}}
|
||||
</page.actions>
|
||||
|
||||
<page.body>
|
||||
{{outlet}}
|
||||
</page.body>
|
||||
|
||||
</Rose::Layout::Page>
|
||||
</Rose::Layout::Page>
|
||||
@@ -1,9 +1,13 @@
|
||||
<Rose::Dropdown @text="{{t 'actions.manage'}}" @dropdownRight={{true}} as |dropdown|>
|
||||
<Rose::Dropdown
|
||||
@text='{{t 'actions.manage'}}'
|
||||
@dropdownRight={{true}}
|
||||
as |dropdown|
|
||||
>
|
||||
{{#if (feature-flag 'primary-auth-method')}}
|
||||
{{#unless @model.isPrimary}}
|
||||
<dropdown.button
|
||||
@disabled={{@model.canSave}}
|
||||
{{on "click" (route-action "makePrimary" @model)}}
|
||||
{{on 'click' (route-action 'makePrimary' @model)}}
|
||||
>
|
||||
{{t 'resources.auth-method.actions.make-primary'}}
|
||||
</dropdown.button>
|
||||
@@ -11,24 +15,24 @@
|
||||
{{#if @model.isPrimary}}
|
||||
<dropdown.button
|
||||
@disabled={{@model.canSave}}
|
||||
{{on "click" (route-action "removeAsPrimary" @model)}}
|
||||
{{on 'click' (route-action 'removeAsPrimary' @model)}}
|
||||
>
|
||||
{{t 'resources.auth-method.actions.remove-as-primary'}}
|
||||
</dropdown.button>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<dropdown.link
|
||||
@route="scopes.scope.auth-methods.auth-method.accounts.new"
|
||||
@route='scopes.scope.auth-methods.auth-method.accounts.new'
|
||||
@model={{@model}}
|
||||
>
|
||||
{{t "resources.account.actions.create"}}
|
||||
{{t 'resources.account.actions.create'}}
|
||||
</dropdown.link>
|
||||
<dropdown.separator />
|
||||
<dropdown.button
|
||||
@style="danger"
|
||||
@style='danger'
|
||||
@disabled={{@model.canSave}}
|
||||
{{on "click" (route-action "delete" @model)}}
|
||||
{{on 'click' (route-action 'delete' @model)}}
|
||||
>
|
||||
{{t 'resources.auth-method.actions.delete'}}
|
||||
</dropdown.button>
|
||||
</Rose::Dropdown>
|
||||
</Rose::Dropdown>
|
||||
@@ -1,21 +1,21 @@
|
||||
<h2>
|
||||
{{t "resources.auth-method.title"}}
|
||||
{{t 'resources.auth-method.title'}}
|
||||
{{#if (feature-flag 'primary-auth-method')}}
|
||||
{{#if @model.isPrimary}}
|
||||
|
||||
<Rose::Badge @style="success-outline">
|
||||
<Rose::Badge @style='success-outline'>
|
||||
{{t 'states.primary'}}
|
||||
</Rose::Badge>
|
||||
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<DocLink @doc="auth-method" @iconSize="large" />
|
||||
<DocLink @doc='auth-method' @iconSize='large' />
|
||||
</h2>
|
||||
<p>{{t "resources.auth-method.description"}}</p>
|
||||
<p>{{t 'resources.auth-method.description'}}</p>
|
||||
<Copyable
|
||||
@text={{@model.id}}
|
||||
@buttonText={{t "actions.copy-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
<code>{{@model.id}}</code>
|
||||
</Copyable>
|
||||
</Copyable>
|
||||
@@ -5,4 +5,4 @@
|
||||
<nav.link @route='scopes.scope.auth-methods.auth-method.accounts'>
|
||||
{{t 'resources.account.title_plural'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Tabs>
|
||||
</Rose::Nav::Tabs>
|
||||
@@ -1,3 +1,3 @@
|
||||
{{page-title (t 'resources.account.title_plural')}}
|
||||
|
||||
{{outlet}}
|
||||
{{outlet}}
|
||||
@@ -1,3 +1,3 @@
|
||||
{{page-title @model.displayName}}
|
||||
|
||||
{{outlet}}
|
||||
{{outlet}}
|
||||
+8
-4
@@ -1,9 +1,13 @@
|
||||
<Rose::Dropdown @text="{{t 'actions.manage'}}" @dropdownRight={{true}} as |dropdown|>
|
||||
<Rose::Dropdown
|
||||
@text='{{t 'actions.manage'}}'
|
||||
@dropdownRight={{true}}
|
||||
as |dropdown|
|
||||
>
|
||||
<dropdown.button
|
||||
@style="danger"
|
||||
@style='danger'
|
||||
@disabled={{@model.canSave}}
|
||||
{{on "click" (route-action "deleteAccount" @model)}}
|
||||
{{on 'click' (route-action 'deleteAccount' @model)}}
|
||||
>
|
||||
{{t 'resources.account.actions.delete'}}
|
||||
</dropdown.button>
|
||||
</Rose::Dropdown>
|
||||
</Rose::Dropdown>
|
||||
+6
-6
@@ -1,12 +1,12 @@
|
||||
<h2>
|
||||
{{t "resources.account.title"}}
|
||||
<DocLink @doc="account" @iconSize="large" />
|
||||
{{t 'resources.account.title'}}
|
||||
<DocLink @doc='account' @iconSize='large' />
|
||||
</h2>
|
||||
<p>{{t "resources.account.description"}}</p>
|
||||
<p>{{t 'resources.account.description'}}</p>
|
||||
<Copyable
|
||||
@text={{@model.id}}
|
||||
@buttonText={{t "actions.copy-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
<code>{{@model.id}}</code>
|
||||
</Copyable>
|
||||
</Copyable>
|
||||
+7
-3
@@ -1,8 +1,12 @@
|
||||
<Rose::Nav::Tabs as |nav|>
|
||||
<nav.link @route='scopes.scope.auth-methods.auth-method.accounts.account.index'>
|
||||
<nav.link
|
||||
@route='scopes.scope.auth-methods.auth-method.accounts.account.index'
|
||||
>
|
||||
{{t 'titles.details'}}
|
||||
</nav.link>
|
||||
<nav.link @route='scopes.scope.auth-methods.auth-method.accounts.account.set-password'>
|
||||
<nav.link
|
||||
@route='scopes.scope.auth-methods.auth-method.accounts.account.set-password'
|
||||
>
|
||||
{{t 'actions.set-password'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Tabs>
|
||||
</Rose::Nav::Tabs>
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
<Form::Account::Password
|
||||
@model={{@model}}
|
||||
@submit={{route-action "save" @model}}
|
||||
@cancel={{route-action "cancel" @model}}
|
||||
/>
|
||||
@submit={{route-action 'save' @model}}
|
||||
@cancel={{route-action 'cancel' @model}}
|
||||
/>
|
||||
+3
-3
@@ -2,6 +2,6 @@
|
||||
|
||||
<Form::Account::Password::SetPassword
|
||||
@model={{@model}}
|
||||
@submit={{route-action "setPassword" @model}}
|
||||
@cancel={{route-action "cancel" @model}}
|
||||
/>
|
||||
@submit={{route-action 'setPassword' @model}}
|
||||
@cancel={{route-action 'cancel' @model}}
|
||||
/>
|
||||
+4
-4
@@ -1,9 +1,9 @@
|
||||
<h2>{{t "resources.account.title"}}</h2>
|
||||
<h2>{{t 'resources.account.title'}}</h2>
|
||||
<p>{{t 'resources.account.messages.set-password.description'}}</p>
|
||||
<Copyable
|
||||
@text={{@model.id}}
|
||||
@buttonText={{t "actions.copy-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
<code>{{@model.id}}</code>
|
||||
</Copyable>
|
||||
</Copyable>
|
||||
@@ -17,7 +17,7 @@
|
||||
<body.row as |row|>
|
||||
<row.headerCell>
|
||||
<LinkTo
|
||||
@route="scopes.scope.auth-methods.auth-method.accounts.account"
|
||||
@route='scopes.scope.auth-methods.auth-method.accounts.account'
|
||||
@model={{account.id}}
|
||||
>
|
||||
{{account.displayName}}
|
||||
@@ -30,8 +30,8 @@
|
||||
<row.cell>
|
||||
<Copyable
|
||||
@text={{account.id}}
|
||||
@buttonText={{t "actions.copy-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
<code>{{account.id}}</code>
|
||||
</Copyable>
|
||||
@@ -44,15 +44,18 @@
|
||||
{{else}}
|
||||
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message @title={{t "resources.account.messages.welcome.title"}} as |message|>
|
||||
<Rose::Message
|
||||
@title={{t 'resources.account.messages.welcome.title'}}
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t "resources.account.messages.welcome.description"}}
|
||||
{{t 'resources.account.messages.welcome.description'}}
|
||||
</message.description>
|
||||
<message.link @route="scopes.scope.auth-methods.auth-method.accounts.new">
|
||||
<Rose::Icon @name="plus-circle-outline" />
|
||||
<message.link @route='scopes.scope.auth-methods.auth-method.accounts.new'>
|
||||
<Rose::Icon @name='plus-circle-outline' />
|
||||
{{t 'resources.account.actions.create'}}
|
||||
</message.link>
|
||||
</Rose::Message>
|
||||
</Rose::Layout::Centered>
|
||||
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -1,5 +1,5 @@
|
||||
<Form::Account::Password
|
||||
@model={{@model}}
|
||||
@submit={{route-action "save" @model}}
|
||||
@cancel={{route-action "cancel" @model}}
|
||||
/>
|
||||
@submit={{route-action 'save' @model}}
|
||||
@cancel={{route-action 'cancel' @model}}
|
||||
/>
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
<h2>
|
||||
{{t "titles.new"}}
|
||||
<DocLink @doc="account.new" @iconSize="large" />
|
||||
</h2>
|
||||
{{t 'titles.new'}}
|
||||
<DocLink @doc='account.new' @iconSize='large' />
|
||||
</h2>
|
||||
@@ -1,5 +1,5 @@
|
||||
<Form::AuthMethod
|
||||
@model={{@model}}
|
||||
@submit={{route-action "save" @model}}
|
||||
@cancel={{route-action "cancel" @model}}
|
||||
/>
|
||||
@submit={{route-action 'save' @model}}
|
||||
@cancel={{route-action 'cancel' @model}}
|
||||
/>
|
||||
@@ -1,10 +1,10 @@
|
||||
<Rose::Layout::Page as |page|>
|
||||
<page.header>
|
||||
<h2>
|
||||
{{t "resources.auth-method.title_plural"}}
|
||||
<DocLink @doc="auth-method" @iconSize="large" />
|
||||
{{t 'resources.auth-method.title_plural'}}
|
||||
<DocLink @doc='auth-method' @iconSize='large' />
|
||||
</h2>
|
||||
<p>{{t "resources.auth-method.description"}}</p>
|
||||
<p>{{t 'resources.auth-method.description'}}</p>
|
||||
</page.header>
|
||||
|
||||
<page.breadcrumbs>
|
||||
@@ -14,12 +14,13 @@
|
||||
<page.actions>
|
||||
{{#if @model}}
|
||||
<Rose::Dropdown
|
||||
@text={{t "titles.new"}}
|
||||
@text={{t 'titles.new'}}
|
||||
@dropdownRight={{true}}
|
||||
as |dropdown|>
|
||||
as |dropdown|
|
||||
>
|
||||
<dropdown.link
|
||||
@route="scopes.scope.auth-methods.new"
|
||||
@query={{hash type="password"}}
|
||||
@route='scopes.scope.auth-methods.new'
|
||||
@query={{hash type='password'}}
|
||||
>
|
||||
{{t 'resources.auth-method.types.password'}}
|
||||
</dropdown.link>
|
||||
@@ -33,10 +34,14 @@
|
||||
{{#if (feature-flag 'primary-auth-method')}}
|
||||
{{#unless this.hasPrimaryAuthMethod}}
|
||||
<Rose::Notification
|
||||
@style="warning"
|
||||
@heading={{t "resources.auth-method.messages.no-primary-auth-method.title"}}
|
||||
@style='warning'
|
||||
@heading={{t
|
||||
'resources.auth-method.messages.no-primary-auth-method.title'
|
||||
}}
|
||||
>
|
||||
{{t "resources.auth-method.messages.no-primary-auth-method.description"}}
|
||||
{{t
|
||||
'resources.auth-method.messages.no-primary-auth-method.description'
|
||||
}}
|
||||
</Rose::Notification>
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
@@ -48,7 +53,7 @@
|
||||
<row.headerCell>{{t 'form.type.label'}}</row.headerCell>
|
||||
<row.headerCell>{{t 'form.id.label'}}</row.headerCell>
|
||||
{{#if (feature-flag 'primary-auth-method')}}
|
||||
<row.cell></row.cell>
|
||||
<row.cell />
|
||||
<row.headerCell>{{t 'titles.actions'}}</row.headerCell>
|
||||
{{/if}}
|
||||
</header.row>
|
||||
@@ -66,7 +71,7 @@
|
||||
{{#if authMethod.isOIDC}}
|
||||
{{#if (feature-flag 'oidc-crud')}}
|
||||
<LinkTo
|
||||
@route="scopes.scope.auth-methods.auth-method"
|
||||
@route='scopes.scope.auth-methods.auth-method'
|
||||
@model={{authMethod.id}}
|
||||
>
|
||||
{{authMethod.displayName}}
|
||||
@@ -76,7 +81,7 @@
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<LinkTo
|
||||
@route="scopes.scope.auth-methods.auth-method"
|
||||
@route='scopes.scope.auth-methods.auth-method'
|
||||
@model={{authMethod.id}}
|
||||
>
|
||||
{{authMethod.displayName}}
|
||||
@@ -92,8 +97,8 @@
|
||||
<row.cell>
|
||||
<Copyable
|
||||
@text={{authMethod.id}}
|
||||
@buttonText={{t "actions.copy-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
<code>{{authMethod.id}}</code>
|
||||
</Copyable>
|
||||
@@ -101,29 +106,33 @@
|
||||
{{#if (feature-flag 'primary-auth-method')}}
|
||||
<row.cell>
|
||||
{{#if authMethod.isPrimary}}
|
||||
<Rose::Badge @style="success-outline">
|
||||
<Rose::Badge @style='success-outline'>
|
||||
{{t 'states.primary'}}
|
||||
</Rose::Badge>
|
||||
{{/if}}
|
||||
</row.cell>
|
||||
<row.cell>
|
||||
<Rose::Dropdown
|
||||
@text={{t "actions.manage"}}
|
||||
@text={{t 'actions.manage'}}
|
||||
@dropdownRight={{true}}
|
||||
@iconOnly={{true}}
|
||||
@showCaret={{false}}
|
||||
@icon="more-horizontal"
|
||||
as |dropdown|>
|
||||
@icon='more-horizontal'
|
||||
as |dropdown|
|
||||
>
|
||||
{{#unless authMethod.isPrimary}}
|
||||
<dropdown.button
|
||||
{{on "click" (route-action "makePrimary" authMethod)}}
|
||||
{{on 'click' (route-action 'makePrimary' authMethod)}}
|
||||
>
|
||||
{{t 'resources.auth-method.actions.make-primary'}}
|
||||
</dropdown.button>
|
||||
{{/unless}}
|
||||
{{#if authMethod.isPrimary}}
|
||||
<dropdown.button
|
||||
{{on "click" (route-action "removeAsPrimary" authMethod)}}
|
||||
{{on
|
||||
'click'
|
||||
(route-action 'removeAsPrimary' authMethod)
|
||||
}}
|
||||
>
|
||||
{{t 'resources.auth-method.actions.remove-as-primary'}}
|
||||
</dropdown.button>
|
||||
@@ -139,14 +148,18 @@
|
||||
{{else}}
|
||||
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message @title={{t 'resources.auth-method.messages.welcome.title'}} as |message|>
|
||||
<Rose::Message
|
||||
@title={{t 'resources.auth-method.messages.welcome.title'}}
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t 'resources.auth-method.messages.welcome.description'}}
|
||||
</message.description>
|
||||
<message.link
|
||||
@route="scopes.scope.auth-methods.new"
|
||||
@query={{hash type="password"}}>
|
||||
<Rose::Icon @name="plus-circle-outline" />
|
||||
@route='scopes.scope.auth-methods.new'
|
||||
@query={{hash type='password'}}
|
||||
>
|
||||
<Rose::Icon @name='plus-circle-outline' />
|
||||
{{t 'titles.new'}}
|
||||
</message.link>
|
||||
</Rose::Message>
|
||||
@@ -154,4 +167,4 @@
|
||||
|
||||
{{/if}}
|
||||
</page.body>
|
||||
</Rose::Layout::Page>
|
||||
</Rose::Layout::Page>
|
||||
@@ -1,8 +1,8 @@
|
||||
{{page-title (t "titles.new")}}
|
||||
{{page-title (t 'titles.new')}}
|
||||
|
||||
<Rose::Layout::Page as |page|>
|
||||
<page.header>
|
||||
<h2>{{t "titles.new"}}</h2>
|
||||
<h2>{{t 'titles.new'}}</h2>
|
||||
</page.header>
|
||||
|
||||
<page.breadcrumbs>
|
||||
@@ -12,8 +12,8 @@
|
||||
<page.body>
|
||||
<Form::AuthMethod
|
||||
@model={{@model}}
|
||||
@submit={{route-action "save" @model}}
|
||||
@cancel={{route-action "cancel" @model}}
|
||||
@submit={{route-action 'save' @model}}
|
||||
@cancel={{route-action 'cancel' @model}}
|
||||
/>
|
||||
</page.body>
|
||||
</Rose::Layout::Page>
|
||||
</Rose::Layout::Page>
|
||||
@@ -1,4 +1,4 @@
|
||||
{{page-title (t "actions.authenticate")}}
|
||||
{{page-title (t 'actions.authenticate')}}
|
||||
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Layout::Page as |page|>
|
||||
@@ -7,19 +7,26 @@
|
||||
|
||||
<Rose::Frame>
|
||||
<:header>
|
||||
<h2>{{t "actions.authenticate"}}</h2>
|
||||
<h2>{{t 'actions.authenticate'}}</h2>
|
||||
</:header>
|
||||
<:body>
|
||||
<p>{{t "auth.descriptions.authenticating-with-org" name=@model.scope.displayName}}</p>
|
||||
<p>{{t
|
||||
'auth.descriptions.authenticating-with-org'
|
||||
name=@model.scope.displayName
|
||||
}}</p>
|
||||
<Rose::Dropdown
|
||||
@text={{t "actions.choose-different-org"}}
|
||||
@icon="user-organization"
|
||||
as |dropdown|>
|
||||
<dropdown.link @route="scopes.scope.authenticate" @model="global">
|
||||
{{t "titles.global"}}
|
||||
@text={{t 'actions.choose-different-org'}}
|
||||
@icon='user-organization'
|
||||
as |dropdown|
|
||||
>
|
||||
<dropdown.link @route='scopes.scope.authenticate' @model='global'>
|
||||
{{t 'titles.global'}}
|
||||
</dropdown.link>
|
||||
{{#each this.sortedScopes as |scope|}}
|
||||
<dropdown.link @route="scopes.scope.authenticate" @model={{scope.id}}>
|
||||
<dropdown.link
|
||||
@route='scopes.scope.authenticate'
|
||||
@model={{scope.id}}
|
||||
>
|
||||
{{scope.displayName}}
|
||||
</dropdown.link>
|
||||
{{/each}}
|
||||
@@ -31,11 +38,16 @@
|
||||
{{#if (feature-flag 'oidc')}}
|
||||
{{! OIDC enable: list all auth methods }}
|
||||
{{#each @model.authMethods as |authMethod|}}
|
||||
<nav.link @route="scopes.scope.authenticate.method" @model={{authMethod.id}}>
|
||||
<nav.link
|
||||
@route='scopes.scope.authenticate.method'
|
||||
@model={{authMethod.id}}
|
||||
>
|
||||
{{#if authMethod.name}}
|
||||
{{authMethod.name}}
|
||||
{{else}}
|
||||
{{t (concat "resources.auth-method.types." authMethod.type)}}
|
||||
{{t
|
||||
(concat 'resources.auth-method.types.' authMethod.type)
|
||||
}}
|
||||
{{/if}}
|
||||
</nav.link>
|
||||
{{/each}}
|
||||
@@ -43,11 +55,16 @@
|
||||
{{! OIDC disabled: filter out OIDC auth methods}}
|
||||
{{#each @model.authMethods as |authMethod|}}
|
||||
{{#unless authMethod.isOIDC}}
|
||||
<nav.link @route="scopes.scope.authenticate.method" @model={{authMethod.id}}>
|
||||
<nav.link
|
||||
@route='scopes.scope.authenticate.method'
|
||||
@model={{authMethod.id}}
|
||||
>
|
||||
{{#if authMethod.name}}
|
||||
{{authMethod.name}}
|
||||
{{else}}
|
||||
{{t (concat "resources.auth-method.types." authMethod.type)}}
|
||||
{{t
|
||||
(concat 'resources.auth-method.types.' authMethod.type)
|
||||
}}
|
||||
{{/if}}
|
||||
</nav.link>
|
||||
{{/unless}}
|
||||
@@ -61,11 +78,12 @@
|
||||
{{#unless @model.authMethods}}
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message
|
||||
@title={{t "resources.auth-method.messages.none.title"}}
|
||||
@icon="alert-circle-outline"
|
||||
as |message|>
|
||||
@title={{t 'resources.auth-method.messages.none.title'}}
|
||||
@icon='alert-circle-outline'
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t "resources.auth-method.messages.none.description"}}
|
||||
{{t 'resources.auth-method.messages.none.description'}}
|
||||
</message.description>
|
||||
</Rose::Message>
|
||||
</Rose::Layout::Centered>
|
||||
@@ -75,4 +93,4 @@
|
||||
</page.body>
|
||||
|
||||
</Rose::Layout::Page>
|
||||
</Rose::Layout::Centered>
|
||||
</Rose::Layout::Centered>
|
||||
@@ -1,12 +1,13 @@
|
||||
{{#unless @model}}
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message
|
||||
@title={{t "resources.auth-method.messages.none.title"}}
|
||||
@icon="alert-circle-outline"
|
||||
as |message|>
|
||||
@title={{t 'resources.auth-method.messages.none.title'}}
|
||||
@icon='alert-circle-outline'
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t "resources.auth-method.messages.none.description"}}
|
||||
{{t 'resources.auth-method.messages.none.description'}}
|
||||
</message.description>
|
||||
</Rose::Message>
|
||||
</Rose::Layout::Centered>
|
||||
{{/unless}}
|
||||
{{/unless}}
|
||||
@@ -1 +1 @@
|
||||
{{outlet}}
|
||||
{{outlet}}
|
||||
@@ -2,7 +2,7 @@
|
||||
{{! OIDC enabled: show form for any auth method}}
|
||||
<Form::Authenticate
|
||||
@model={{@model}}
|
||||
@submit={{route-action "authenticate"}}
|
||||
@submit={{route-action 'authenticate'}}
|
||||
@disabled={{is-loading}}
|
||||
/>
|
||||
{{else}}
|
||||
@@ -10,8 +10,8 @@
|
||||
{{#unless @model.isOIDC}}
|
||||
<Form::Authenticate
|
||||
@model={{@model}}
|
||||
@submit={{route-action "authenticate"}}
|
||||
@submit={{route-action 'authenticate'}}
|
||||
@disabled={{is-loading}}
|
||||
/>
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -1,24 +1,20 @@
|
||||
<Rose::Dialog::Cover>
|
||||
<:header>
|
||||
{{inline-svg "logo-app-full"}}
|
||||
{{inline-svg 'logo-app-full'}}
|
||||
<h1>{{t 'resources.auth-method.messages.pending.title'}}</h1>
|
||||
</:header>
|
||||
<:body>
|
||||
<p>{{t 'resources.auth-method.messages.pending.description'}}</p>
|
||||
<p>
|
||||
{{t 'resources.auth-method.questions.no-see-window'}}
|
||||
<a
|
||||
href="{{this.authURL}}"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
>
|
||||
<a href='#' role='button' {{on 'click' (route-action 'authenticate')}}>
|
||||
{{t 'actions.retry'}}
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<LinkTo @route="scopes.scope.authenticate.method">
|
||||
<LinkTo @route='scopes.scope.authenticate.method'>
|
||||
{{t 'actions.cancel'}}
|
||||
</LinkTo>
|
||||
</p>
|
||||
</:body>
|
||||
</Rose::Dialog::Cover>
|
||||
</Rose::Dialog::Cover>
|
||||
@@ -7,22 +7,22 @@
|
||||
<page.header>
|
||||
{{#if @model.isOrg}}
|
||||
<h2>
|
||||
{{t "resources.org.title"}}
|
||||
<DocLink @doc="org" @iconSize="large" />
|
||||
{{t 'resources.org.title'}}
|
||||
<DocLink @doc='org' @iconSize='large' />
|
||||
</h2>
|
||||
<p>{{t "resources.org.description"}}</p>
|
||||
<p>{{t 'resources.org.description'}}</p>
|
||||
{{/if}}
|
||||
{{#if @model.isProject}}
|
||||
<h2>
|
||||
{{t "resources.project.title"}}
|
||||
<DocLink @doc="project" @iconSize="large" />
|
||||
{{t 'resources.project.title'}}
|
||||
<DocLink @doc='project' @iconSize='large' />
|
||||
</h2>
|
||||
<p>{{t "resources.project.description"}}</p>
|
||||
<p>{{t 'resources.project.description'}}</p>
|
||||
{{/if}}
|
||||
<Copyable
|
||||
@text={{@model.id}}
|
||||
@buttonText={{t "actions.copy-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
<code>{{@model.id}}</code>
|
||||
</Copyable>
|
||||
@@ -37,11 +37,15 @@
|
||||
</page.navigation>
|
||||
|
||||
<page.actions>
|
||||
<Rose::Dropdown @text="{{t 'actions.manage'}}" @dropdownRight={{true}} as |dropdown|>
|
||||
<Rose::Dropdown
|
||||
@text='{{t 'actions.manage'}}'
|
||||
@dropdownRight={{true}}
|
||||
as |dropdown|
|
||||
>
|
||||
<dropdown.button
|
||||
@style="danger"
|
||||
@style='danger'
|
||||
@disabled={{@model.canSave}}
|
||||
{{on "click" (route-action "delete" @model)}}
|
||||
{{on 'click' (route-action 'delete' @model)}}
|
||||
>
|
||||
{{#if @model.isOrg}}
|
||||
{{t 'resources.org.actions.delete'}}
|
||||
@@ -55,9 +59,9 @@
|
||||
<page.body>
|
||||
<Form::Scope
|
||||
@model={{@model}}
|
||||
@submit={{route-action "save" @model}}
|
||||
@cancel={{route-action "cancel" @model}}
|
||||
@submit={{route-action 'save' @model}}
|
||||
@cancel={{route-action 'cancel' @model}}
|
||||
/>
|
||||
</page.body>
|
||||
|
||||
</Rose::Layout::Page>
|
||||
</Rose::Layout::Page>
|
||||
@@ -1,7 +1,7 @@
|
||||
{{page-title (t "errors.generic.title") }}
|
||||
{{page-title (t 'errors.generic.title')}}
|
||||
|
||||
<Rose::Layout::Centered>
|
||||
{{#each @model.errors as |error|}}
|
||||
<Error::Message @status={{error.status}}/>
|
||||
<Error::Message @status={{error.status}} />
|
||||
{{/each}}
|
||||
</Rose::Layout::Centered>
|
||||
</Rose::Layout::Centered>
|
||||
@@ -1,3 +1,3 @@
|
||||
{{page-title (t "resources.group.title_plural")}}
|
||||
{{page-title (t 'resources.group.title_plural')}}
|
||||
|
||||
{{outlet}}
|
||||
{{outlet}}
|
||||
@@ -7,19 +7,19 @@
|
||||
</page.breadcrumbs>
|
||||
|
||||
<page.header>
|
||||
{{outlet "header"}}
|
||||
{{outlet 'header'}}
|
||||
</page.header>
|
||||
|
||||
<page.navigation>
|
||||
{{outlet "navigation"}}
|
||||
{{outlet 'navigation'}}
|
||||
</page.navigation>
|
||||
|
||||
<page.actions>
|
||||
{{outlet "actions"}}
|
||||
{{outlet 'actions'}}
|
||||
</page.actions>
|
||||
|
||||
<page.body>
|
||||
{{outlet}}
|
||||
</page.body>
|
||||
|
||||
</Rose::Layout::Page>
|
||||
</Rose::Layout::Page>
|
||||
@@ -1,13 +1,17 @@
|
||||
<Rose::Dropdown @text="{{t 'actions.manage'}}" @dropdownRight={{true}} as |dropdown|>
|
||||
<dropdown.link @route="scopes.scope.groups.group.add-members">
|
||||
{{t "resources.group.actions.add-members"}}
|
||||
<Rose::Dropdown
|
||||
@text='{{t 'actions.manage'}}'
|
||||
@dropdownRight={{true}}
|
||||
as |dropdown|
|
||||
>
|
||||
<dropdown.link @route='scopes.scope.groups.group.add-members'>
|
||||
{{t 'resources.group.actions.add-members'}}
|
||||
</dropdown.link>
|
||||
<dropdown.separator />
|
||||
<dropdown.button
|
||||
@style="danger"
|
||||
@style='danger'
|
||||
@disabled={{@model.canSave}}
|
||||
{{on "click" (route-action "delete" @model)}}
|
||||
{{on 'click' (route-action 'delete' @model)}}
|
||||
>
|
||||
{{t 'resources.group.actions.delete'}}
|
||||
</dropdown.button>
|
||||
</Rose::Dropdown>
|
||||
</Rose::Dropdown>
|
||||
@@ -1,12 +1,12 @@
|
||||
<h2>
|
||||
{{t "resources.group.title"}}
|
||||
<DocLink @doc="group" @iconSize="large" />
|
||||
{{t 'resources.group.title'}}
|
||||
<DocLink @doc='group' @iconSize='large' />
|
||||
</h2>
|
||||
<p>{{t "resources.group.description"}}</p>
|
||||
<p>{{t 'resources.group.description'}}</p>
|
||||
<Copyable
|
||||
@text={{@model.id}}
|
||||
@buttonText={{t "actions.copy-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
<code>{{@model.id}}</code>
|
||||
</Copyable>
|
||||
</Copyable>
|
||||
@@ -5,4 +5,4 @@
|
||||
<nav.link @route='scopes.scope.groups.group.members'>
|
||||
{{t 'resources.group.messages.members.title'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Tabs>
|
||||
</Rose::Nav::Tabs>
|
||||
@@ -1,8 +1,8 @@
|
||||
{{page-title (t "resources.group.messages.add-members.title")}}
|
||||
{{page-title (t 'resources.group.messages.add-members.title')}}
|
||||
|
||||
<Form::Group::AddMembers
|
||||
@model={{@model.group}}
|
||||
@users={{@model.users}}
|
||||
@submit={{route-action "addMembers" @model.group}}
|
||||
@cancel={{route-action "cancel"}}
|
||||
/>
|
||||
@submit={{route-action 'addMembers' @model.group}}
|
||||
@cancel={{route-action 'cancel'}}
|
||||
/>
|
||||
@@ -1,5 +1,5 @@
|
||||
<h2>
|
||||
{{t "resources.group.messages.add-members.title"}}
|
||||
<DocLink @doc="group.add-members" @iconSize="large" />
|
||||
{{t 'resources.group.messages.add-members.title'}}
|
||||
<DocLink @doc='group.add-members' @iconSize='large' />
|
||||
</h2>
|
||||
<p>{{t "resources.group.messages.add-members.description"}}</p>
|
||||
<p>{{t 'resources.group.messages.add-members.description'}}</p>
|
||||
@@ -1,5 +1,5 @@
|
||||
<Form::Group
|
||||
@model={{@model}}
|
||||
@submit={{route-action "save" @model}}
|
||||
@cancel={{route-action "cancel" @model}}
|
||||
/>
|
||||
@submit={{route-action 'save' @model}}
|
||||
@cancel={{route-action 'cancel' @model}}
|
||||
/>
|
||||
@@ -7,7 +7,7 @@
|
||||
<header.row as |row|>
|
||||
<row.headerCell>{{t 'form.name.label'}}</row.headerCell>
|
||||
<row.headerCell>{{t 'form.id.label'}}</row.headerCell>
|
||||
<row.headerCell>{{t "titles.actions"}}</row.headerCell>
|
||||
<row.headerCell>{{t 'titles.actions'}}</row.headerCell>
|
||||
</header.row>
|
||||
</table.header>
|
||||
<table.body as |body|>
|
||||
@@ -19,25 +19,26 @@
|
||||
<row.cell>
|
||||
<Copyable
|
||||
@text={{member.id}}
|
||||
@buttonText={{t "actions.copy-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
<code>{{member.id}}</code>
|
||||
</Copyable>
|
||||
</row.cell>
|
||||
<row.cell>
|
||||
<row.cell>
|
||||
<Rose::Dropdown
|
||||
@icon="more-horizontal"
|
||||
@icon='more-horizontal'
|
||||
@iconOnly={{true}}
|
||||
@showCaret={{false}}
|
||||
@dropdownRight={{true}}
|
||||
@text="{{t "actions.manage"}}" as |dropdown|
|
||||
@text='{{t 'actions.manage'}}'
|
||||
as |dropdown|
|
||||
>
|
||||
<dropdown.button
|
||||
@style="danger"
|
||||
{{on "click" (route-action "removeMember" @model.group member)}}
|
||||
@style='danger'
|
||||
{{on 'click' (route-action 'removeMember' @model.group member)}}
|
||||
>
|
||||
{{t "actions.remove"}}
|
||||
{{t 'actions.remove'}}
|
||||
</dropdown.button>
|
||||
</Rose::Dropdown>
|
||||
</row.cell>
|
||||
@@ -49,15 +50,18 @@
|
||||
{{else}}
|
||||
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message @title={{t "resources.group.messages.members.title"}} as |message|>
|
||||
<Rose::Message
|
||||
@title={{t 'resources.group.messages.members.title'}}
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t "resources.group.messages.members.description"}}
|
||||
{{t 'resources.group.messages.members.description'}}
|
||||
</message.description>
|
||||
<message.link @route="scopes.scope.groups.group.add-members">
|
||||
<Rose::Icon @name="plus-circle-outline" />
|
||||
<message.link @route='scopes.scope.groups.group.add-members'>
|
||||
<Rose::Icon @name='plus-circle-outline' />
|
||||
{{t 'resources.group.actions.add-members'}}
|
||||
</message.link>
|
||||
</Rose::Message>
|
||||
</Rose::Layout::Centered>
|
||||
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -6,15 +6,17 @@
|
||||
|
||||
<page.header>
|
||||
<h2>
|
||||
{{t "resources.group.title_plural"}}
|
||||
<DocLink @doc="group" @iconSize="large" />
|
||||
{{t 'resources.group.title_plural'}}
|
||||
<DocLink @doc='group' @iconSize='large' />
|
||||
</h2>
|
||||
<p>{{t "resources.group.description"}}</p>
|
||||
<p>{{t 'resources.group.description'}}</p>
|
||||
</page.header>
|
||||
|
||||
<page.actions>
|
||||
{{#if @model}}
|
||||
<Rose::LinkButton @route="scopes.scope.groups.new" @style="primary">{{t 'titles.new'}}</Rose::LinkButton>
|
||||
<Rose::LinkButton @route='scopes.scope.groups.new' @style='primary'>{{t
|
||||
'titles.new'
|
||||
}}</Rose::LinkButton>
|
||||
{{/if}}
|
||||
</page.actions>
|
||||
|
||||
@@ -25,18 +27,15 @@
|
||||
<Rose::Table as |table|>
|
||||
<table.header as |header|>
|
||||
<header.row as |row|>
|
||||
<row.headerCell>{{t "form.name.label"}}</row.headerCell>
|
||||
<row.headerCell>{{t "form.id.label"}}</row.headerCell>
|
||||
<row.headerCell>{{t 'form.name.label'}}</row.headerCell>
|
||||
<row.headerCell>{{t 'form.id.label'}}</row.headerCell>
|
||||
</header.row>
|
||||
</table.header>
|
||||
<table.body as |body|>
|
||||
{{#each @model as |group|}}
|
||||
<body.row as |row|>
|
||||
<row.headerCell>
|
||||
<LinkTo
|
||||
@route="scopes.scope.groups.group"
|
||||
@model={{group.id}}
|
||||
>
|
||||
<LinkTo @route='scopes.scope.groups.group' @model={{group.id}}>
|
||||
{{group.displayName}}
|
||||
</LinkTo>
|
||||
<p>{{group.description}}</p>
|
||||
@@ -44,8 +43,8 @@
|
||||
<row.cell>
|
||||
<Copyable
|
||||
@text={{group.id}}
|
||||
@buttonText={{t "actions.copy-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
<code>{{group.id}}</code>
|
||||
</Copyable>
|
||||
@@ -58,12 +57,15 @@
|
||||
{{else}}
|
||||
|
||||
<Rose::Layout::Centered>
|
||||
<Rose::Message @title={{t 'resources.group.messages.welcome.title'}} as |message|>
|
||||
<Rose::Message
|
||||
@title={{t 'resources.group.messages.welcome.title'}}
|
||||
as |message|
|
||||
>
|
||||
<message.description>
|
||||
{{t 'resources.group.description'}}
|
||||
</message.description>
|
||||
<message.link @route="scopes.scope.groups.new">
|
||||
<Rose::Icon @name="plus-circle-outline" />
|
||||
<message.link @route='scopes.scope.groups.new'>
|
||||
<Rose::Icon @name='plus-circle-outline' />
|
||||
{{t 'titles.new'}}
|
||||
</message.link>
|
||||
</Rose::Message>
|
||||
@@ -73,4 +75,4 @@
|
||||
|
||||
</page.body>
|
||||
|
||||
</Rose::Layout::Page>
|
||||
</Rose::Layout::Page>
|
||||
@@ -7,15 +7,15 @@
|
||||
</page.breadcrumbs>
|
||||
|
||||
<page.header>
|
||||
<h2>{{t "titles.new"}}</h2>
|
||||
<h2>{{t 'titles.new'}}</h2>
|
||||
</page.header>
|
||||
|
||||
<page.body>
|
||||
<Form::Group
|
||||
@model={{@model}}
|
||||
@submit={{route-action "save" @model}}
|
||||
@cancel={{route-action "cancel" @model}}
|
||||
@submit={{route-action 'save' @model}}
|
||||
@cancel={{route-action 'cancel' @model}}
|
||||
/>
|
||||
</page.body>
|
||||
|
||||
</Rose::Layout::Page>
|
||||
</Rose::Layout::Page>
|
||||
@@ -1,3 +1,3 @@
|
||||
{{page-title (t "resources.host-catalog.title_plural")}}
|
||||
{{page-title (t 'resources.host-catalog.title_plural')}}
|
||||
|
||||
{{outlet}}
|
||||
{{outlet}}
|
||||
@@ -7,19 +7,19 @@
|
||||
</page.breadcrumbs>
|
||||
|
||||
<page.header>
|
||||
{{outlet "header"}}
|
||||
{{outlet 'header'}}
|
||||
</page.header>
|
||||
|
||||
<page.actions>
|
||||
{{outlet "actions"}}
|
||||
{{outlet 'actions'}}
|
||||
</page.actions>
|
||||
|
||||
<page.navigation>
|
||||
{{outlet "navigation"}}
|
||||
{{outlet 'navigation'}}
|
||||
</page.navigation>
|
||||
|
||||
<page.body>
|
||||
{{outlet}}
|
||||
</page.body>
|
||||
|
||||
</Rose::Layout::Page>
|
||||
</Rose::Layout::Page>
|
||||
@@ -1,22 +1,26 @@
|
||||
<Rose::Dropdown @text="{{t 'actions.manage'}}" @dropdownRight={{true}} as |dropdown|>
|
||||
<Rose::Dropdown
|
||||
@text='{{t 'actions.manage'}}'
|
||||
@dropdownRight={{true}}
|
||||
as |dropdown|
|
||||
>
|
||||
<dropdown.link
|
||||
@route="scopes.scope.host-catalogs.host-catalog.hosts.new"
|
||||
@route='scopes.scope.host-catalogs.host-catalog.hosts.new'
|
||||
@model={{@model}}
|
||||
>
|
||||
{{t "resources.host.actions.create"}}
|
||||
{{t 'resources.host.actions.create'}}
|
||||
</dropdown.link>
|
||||
<dropdown.link
|
||||
@route="scopes.scope.host-catalogs.host-catalog.host-sets.new"
|
||||
@route='scopes.scope.host-catalogs.host-catalog.host-sets.new'
|
||||
@model={{@model}}
|
||||
>
|
||||
{{t "resources.host-set.actions.create"}}
|
||||
{{t 'resources.host-set.actions.create'}}
|
||||
</dropdown.link>
|
||||
<dropdown.separator />
|
||||
<dropdown.button
|
||||
@style="danger"
|
||||
@style='danger'
|
||||
@disabled={{@model.canSave}}
|
||||
{{on "click" (route-action "delete" @model)}}
|
||||
{{on 'click' (route-action 'delete' @model)}}
|
||||
>
|
||||
{{t "resources.host-catalog.actions.delete"}}
|
||||
{{t 'resources.host-catalog.actions.delete'}}
|
||||
</dropdown.button>
|
||||
</Rose::Dropdown>
|
||||
</Rose::Dropdown>
|
||||
@@ -1,12 +1,12 @@
|
||||
<h2>
|
||||
{{t "resources.host-catalog.title"}}
|
||||
<DocLink @doc="host-catalog" @iconSize="large" />
|
||||
{{t 'resources.host-catalog.title'}}
|
||||
<DocLink @doc='host-catalog' @iconSize='large' />
|
||||
</h2>
|
||||
<p>{{t "resources.host-catalog.description"}}</p>
|
||||
<p>{{t 'resources.host-catalog.description'}}</p>
|
||||
<Copyable
|
||||
@text={{@model.id}}
|
||||
@buttonText={{t "actions.copy-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
<code>{{@model.id}}</code>
|
||||
</Copyable>
|
||||
</Copyable>
|
||||
@@ -8,4 +8,4 @@
|
||||
<nav.link @route='scopes.scope.host-catalogs.host-catalog.host-sets'>
|
||||
{{t 'resources.host-set.title_plural'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Tabs>
|
||||
</Rose::Nav::Tabs>
|
||||
@@ -1,3 +1,3 @@
|
||||
{{page-title (t "resources.host-set.title_plural")}}
|
||||
{{page-title (t 'resources.host-set.title_plural')}}
|
||||
|
||||
{{outlet}}
|
||||
{{outlet}}
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
{{page-title @model.displayName}}
|
||||
|
||||
{{outlet}}
|
||||
{{outlet}}
|
||||
+14
-6
@@ -1,16 +1,24 @@
|
||||
<Rose::Dropdown @text="{{t 'actions.manage'}}" @dropdownRight={{true}} as |dropdown|>
|
||||
<dropdown.link @route="scopes.scope.host-catalogs.host-catalog.host-sets.host-set.create-and-add-host">
|
||||
<Rose::Dropdown
|
||||
@text='{{t 'actions.manage'}}'
|
||||
@dropdownRight={{true}}
|
||||
as |dropdown|
|
||||
>
|
||||
<dropdown.link
|
||||
@route='scopes.scope.host-catalogs.host-catalog.host-sets.host-set.create-and-add-host'
|
||||
>
|
||||
{{t 'resources.host-set.actions.create-and-add-host'}}
|
||||
</dropdown.link>
|
||||
<dropdown.link @route="scopes.scope.host-catalogs.host-catalog.host-sets.host-set.add-hosts">
|
||||
<dropdown.link
|
||||
@route='scopes.scope.host-catalogs.host-catalog.host-sets.host-set.add-hosts'
|
||||
>
|
||||
{{t 'resources.host-set.actions.add-hosts'}}
|
||||
</dropdown.link>
|
||||
<dropdown.separator />
|
||||
<dropdown.button
|
||||
@style="danger"
|
||||
@style='danger'
|
||||
@disabled={{@model.canSave}}
|
||||
{{on "click" (route-action "deleteHostSet" @model)}}
|
||||
{{on 'click' (route-action 'deleteHostSet' @model)}}
|
||||
>
|
||||
{{t 'resources.host-set.actions.delete'}}
|
||||
</dropdown.button>
|
||||
</Rose::Dropdown>
|
||||
</Rose::Dropdown>
|
||||
+6
-6
@@ -1,12 +1,12 @@
|
||||
<h2>
|
||||
{{t "resources.host-set.title"}}
|
||||
<DocLink @doc="host-set" @iconSize="large" />
|
||||
{{t 'resources.host-set.title'}}
|
||||
<DocLink @doc='host-set' @iconSize='large' />
|
||||
</h2>
|
||||
<p>{{t "resources.host-set.description"}}</p>
|
||||
<p>{{t 'resources.host-set.description'}}</p>
|
||||
<Copyable
|
||||
@text={{@model.id}}
|
||||
@buttonText={{t "actions.copy-to-clipboard"}}
|
||||
@acknowledgeText={{t "states.copied"}}
|
||||
@buttonText={{t 'actions.copy-to-clipboard'}}
|
||||
@acknowledgeText={{t 'states.copied'}}
|
||||
>
|
||||
<code>{{@model.id}}</code>
|
||||
</Copyable>
|
||||
</Copyable>
|
||||
+7
-3
@@ -1,8 +1,12 @@
|
||||
<Rose::Nav::Tabs as |nav|>
|
||||
<nav.link @route='scopes.scope.host-catalogs.host-catalog.host-sets.host-set.index'>
|
||||
<nav.link
|
||||
@route='scopes.scope.host-catalogs.host-catalog.host-sets.host-set.index'
|
||||
>
|
||||
{{t 'titles.details'}}
|
||||
</nav.link>
|
||||
<nav.link @route='scopes.scope.host-catalogs.host-catalog.host-sets.host-set.hosts'>
|
||||
<nav.link
|
||||
@route='scopes.scope.host-catalogs.host-catalog.host-sets.host-set.hosts'
|
||||
>
|
||||
{{t 'resources.host.title_plural'}}
|
||||
</nav.link>
|
||||
</Rose::Nav::Tabs>
|
||||
</Rose::Nav::Tabs>
|
||||
+4
-4
@@ -1,8 +1,8 @@
|
||||
{{page-title (t "resources.host-set.actions.add-hosts")}}
|
||||
{{page-title (t 'resources.host-set.actions.add-hosts')}}
|
||||
|
||||
<Form::HostSet::AddHosts
|
||||
@model={{@model.hostSet}}
|
||||
@hosts={{@model.hosts}}
|
||||
@submit={{route-action "addHosts" @model.hostSet}}
|
||||
@cancel={{route-action "cancel"}}
|
||||
/>
|
||||
@submit={{route-action 'addHosts' @model.hostSet}}
|
||||
@cancel={{route-action 'cancel'}}
|
||||
/>
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
<h2>
|
||||
{{t "resources.host-set.host.messages.add.title"}}
|
||||
<DocLink @doc="host-set.add-hosts" @iconSize="large" />
|
||||
{{t 'resources.host-set.host.messages.add.title'}}
|
||||
<DocLink @doc='host-set.add-hosts' @iconSize='large' />
|
||||
</h2>
|
||||
<p>{{t "resources.host-set.host.messages.add.description"}}</p>
|
||||
<p>{{t 'resources.host-set.host.messages.add.description'}}</p>
|
||||
+3
-3
@@ -2,6 +2,6 @@
|
||||
|
||||
<Form::Host
|
||||
@model={{@model}}
|
||||
@submit={{route-action "save" @model}}
|
||||
@cancel={{route-action "cancel" @model}}
|
||||
/>
|
||||
@submit={{route-action 'save' @model}}
|
||||
@cancel={{route-action 'cancel' @model}}
|
||||
/>
|
||||
Loaded 100 of 225 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user