diff --git a/lib/shared/addon/mixins/hover-dropdowns.js b/lib/shared/addon/mixins/hover-dropdowns.js
index cdbb2924b..23f51b64b 100644
--- a/lib/shared/addon/mixins/hover-dropdowns.js
+++ b/lib/shared/addon/mixins/hover-dropdowns.js
@@ -1,27 +1,44 @@
import Mixin from '@ember/object/mixin';
import { cancel, later } from '@ember/runloop';
+import { get, set } from '@ember/object';
export default Mixin.create({
+ closeTimer: null,
+
actions: {
prevent() {
return false;
},
open(dropdown) {
- if (this.closeTimer) {
- cancel(this.closeTimer);
- this.closeTimer = null;
+ const ct = get(this, 'closeTimer');
+
+ console.log('open closeTimer: ', this.closeTimer, get(dropdown, 'uniqueId'));
+ if (ct) {
+
+ cancel(ct);
+ set(this, 'closeTimer', null);
+
+
} else {
+
dropdown.actions.open();
+
}
},
closeLater(dropdown) {
- this.closeTimer = later(() => {
- this.closeTimer = null;
+
+ set(this, 'closeTimer', later(() => {
+
dropdown.actions.close();
- }, 200);
+ set(this, 'closeTimer', null);
+
+ }, 200));
+ console.log('close closeTimer: ', this.closeTimer, get(dropdown, 'uniqueId'));
+
}
+
},
});
diff --git a/lib/shared/addon/tooltip/service.js b/lib/shared/addon/tooltip/service.js
index 048595528..f175c480b 100644
--- a/lib/shared/addon/tooltip/service.js
+++ b/lib/shared/addon/tooltip/service.js
@@ -1,19 +1,24 @@
import { later, cancel } from '@ember/runloop';
import Service, { inject as service } from '@ember/service';
+import { get } from '@ember/object';
const DELAY = 250;
export default Service.extend({
- mouseLeaveTimer: null,
- requireClick: false,
- tooltipOpts: null,
+ app: service(),
+
+ mouseLeaveTimer: null,
+ requireClick: false,
+ tooltipOpts: null,
openedViaContextClick: false,
- app: service(),
+ childOpened: false,
startTimer() {
+
this.set('mouseLeaveTimer', later(() => {
this.hide();
}, DELAY));
+
},
cancelTimer() {
@@ -21,13 +26,19 @@ export default Service.extend({
},
hide() {
- this.set('tooltipOpts', null);
+
+ if (!get(this, 'childOpened')) {
+ this.set('tooltipOpts', null);
+ }
+
},
leave() {
- if ( !this.get('requireClick') )
- {
+
+ if ( !this.get('requireClick') ) {
this.startTimer();
}
+
},
+
});
diff --git a/translations/en-us.yaml b/translations/en-us.yaml
index 77bf5edd5..2c4f36dfe 100644
--- a/translations/en-us.yaml
+++ b/translations/en-us.yaml
@@ -449,36 +449,62 @@ authPage:
post: Waiting to hear back from GitHub
azuread:
header:
- enabled: 'Azure AD Authentication is enabled'
- disabled: 'Azure AD Authentication is not configured'
- subtext:
- enabled: '{appName} is configured to allow access to accounts in Azure AD'
- disabled: '{appName} can be configured to restrict access to a set of accounts defined in the {appName} database. This is not currently set up, so anybody that reach this page (or the API) has full control over the system.'
+ enabled:
+ label: "Azure AD is enabled"
+ required: |
+ {appName} is configured to allow access to {groups, plural,
+ =0 {no groups}
+ =1 {# group}
+ other {# groups}
+ } and {users, plural,
+ =0 {no users}
+ =1 {# user}
+ other {# users}
+ }.
+ restricted: |
+ {appName} is configured to allow access to environment members, {groups, plural,
+ =0 {no groups}
+ =1 {# group}
+ other {# groups}
+ } and {users, plural,
+ =0 {no users}
+ =1 {# user}
+ other {# users}
+ }.
+ unrestricted: "{appName} is configured to allow access to any Azure AD user."
+ disabled:
+ label: "Azure AD is not configured"
+ warning: "{appName} can be configured to restrict access to a set of Azure AD users and groups"
enabled:
header: 'Danger Zone™'
- warning: 'Caution: Disabling access control will give complete control over {appName} to anyone that can reach this page or the API.'
reallyDisable: 'Are you sure? Click again to really disable access control'
- promptDisable: Disable access control
+ promptDisable: Disable Azure AD
+ general:
+ header: General
configure:
- header: '1. Configure Azure AD Account'
- tenantId:
- label: Tenant ID
- placeholder: A long UUID string
- help: From the Azure AD portal
- clientId:
- label: Client ID
- placeholder: A long UUID string
- domain:
- label: Domain
- placeholder: e.g. youcompany.onmicrosoft.com
+ header: 'Configure Azure AD Account'
+ help: Enter the Tenant ID, Client ID, and Admin user details to connect to your Azure AD auth account.
adminAccountUsername:
label: Admin Account Username
placeholder: e.g. rancher-admin
help: A user that can read information about other users
adminAccountPassword:
label: Admin Account Password
+ clientId:
+ label: Client ID
+ placeholder: A long UUID string
+ clientSecret:
+ label: Client Secret
+ placeholder: Your Client Secret
+ domain:
+ label: Domain
+ placeholder: e.g. youcompany.onmicrosoft.com
+ tenantId:
+ label: Tenant ID
+ placeholder: A long UUID string
+ help: From the Azure AD portal
test:
- header: '2. Test and enable authentication'
+ header: 'Test and enable authentication'
help: 'Check that everything is configured correctly by testing authentication with your account:'
username:
label: Login Username
@@ -1076,6 +1102,10 @@ loginPage:
error:
authFailedCreds: "Logging in failed: Check credentials, or your account may not be authorized to log in."
authFailed: "Logging in failed: Your account may not be authorized to log in."
+ readableProviders:
+ ad: Active Directory
+ azureAd: Azure AD
+ local: a Local User
machinePage:
header: Node Drivers
@@ -1757,6 +1787,9 @@ clusterNew:
prompt: Choose a size...
diskSizeGb:
label: OS Disk Size
+ dns:
+ label: DNS Prfix
+ placeholder: "e.g. example"
ssh:
label: SSH Public Key
security:
@@ -4763,7 +4796,7 @@ nodeDriver:
region:
label: Region
aliyunecs:
- accountSection:
+ accountSection:
label: 1. Account Access
detail: API Keys will be used to launch Aliyun ECS Instances.
next: "Next: Authenticate & Config network options"
@@ -4796,7 +4829,7 @@ nodeDriver:
aliyunSLB:
label: Aliyun SLB ID
placeholder: Aliyun SLB ID
- storageSection:
+ storageSection:
label: Storage
detail: Configure the storage for the instances that will be created by this template.
next: "Next: Config Aliyun ECS Instance options"
@@ -4837,7 +4870,7 @@ nodeDriver:
placeholder: Private IP in Private Network
privateAddressOnly:
label: Private Address Only
- securitySection:
+ securitySection:
label: Security
detail: Choose the security groups that will be applied to Instances
securityGroup:
diff --git a/yarn.lock b/yarn.lock
index 17dfab02a..8411bf66a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2604,9 +2604,9 @@ elliptic@^6.0.0:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.0"
-ember-api-store@^2.6.6:
- version "2.6.6"
- resolved "https://registry.yarnpkg.com/ember-api-store/-/ember-api-store-2.6.6.tgz#c405ce94f21ca7c5d80568cbf33f99b42403dce0"
+ember-api-store@2.6.8:
+ version "2.6.8"
+ resolved "https://registry.yarnpkg.com/ember-api-store/-/ember-api-store-2.6.8.tgz#fdcc950ea1c8cab7633e0480eb5061534c650d0c"
dependencies:
broccoli-file-creator "^1.1.1"
ember-cli-babel "^6.8.2"