Skip to content

Commit 2dd5aff

Browse files
committed
Make passphrase JS more dialog-specific; expose i18n in passprase HTML
1 parent 4430899 commit 2dd5aff

File tree

6 files changed

+43
-164
lines changed

6 files changed

+43
-164
lines changed

electron/app/js/prompt/credential-passphrase.html

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,21 @@
33
Copyright (c) 2021, Oracle and/or its affiliates.
44
Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
55
-->
6-
<html>
6+
<html lang="en-us">
77
<head>
8+
<title>...</title>
89
<link href="prompt.css" rel="stylesheet" />
910
</head>
1011
<body>
1112
<div id="container">
1213
<form id="form">
1314
<div id="label">...</div>
14-
<div id="data-container"></div>
15+
<div id="data-container">
16+
<input id="data" required type="password">
17+
</div>
1518
<div id="buttons">
16-
<button id="cancel">Cancel</button>
17-
<button type="submit" id="ok">OK</button>
19+
<button id="cancel">...</button>
20+
<button type="submit" id="ok">...</button>
1821
</div>
1922
</form>
2023
</div>

electron/app/js/prompt/credential-passphrase.js

Lines changed: 21 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -19,51 +19,25 @@ function promptCancel() {
1919
}
2020

2121
function promptSubmit() {
22-
let data = null;
23-
24-
if(promptOptions.fields) {
25-
data = {};
26-
promptOptions.fields.forEach(field => {
27-
const inputElement = document.getElementById(field.id);
28-
data[field.id] = inputElement.value;
29-
});
30-
31-
} else {
32-
const dataElement = document.querySelector('#data');
33-
34-
if (promptOptions.type === 'input') {
35-
data = dataElement.value;
36-
} else if (promptOptions.type === 'select') {
37-
if (promptOptions.selectMultiple) {
38-
data = dataElement.querySelectorAll('option[selected]').map(o => o.getAttribute('value'));
39-
} else {
40-
data = dataElement.value;
41-
}
42-
}
43-
}
44-
22+
const dataElement = document.querySelector('#data');
23+
const data = dataElement.value;
4524
window.api.ipc.sendSync('prompt-post-data:' + promptId, data);
4625
}
4726

48-
function promptCreateInput(promptOptions) {
49-
const dataElement = document.createElement('input');
50-
dataElement.setAttribute('type', 'text');
27+
function promptRegister() {
28+
promptId = document.location.hash.replace('#', '');
5129

52-
if (promptOptions.value) {
53-
dataElement.value = promptOptions.value;
54-
} else {
55-
dataElement.value = '';
30+
try {
31+
promptOptions = JSON.parse(window.api.ipc.sendSync('prompt-get-options:' + promptId));
32+
} catch (error) {
33+
return promptError(error);
5634
}
5735

58-
if (promptOptions.inputAttrs && typeof (promptOptions.inputAttrs) === 'object') {
59-
for (const k in promptOptions.inputAttrs) {
60-
if (!Object.prototype.hasOwnProperty.call(promptOptions.inputAttrs, k)) {
61-
continue;
62-
}
36+
document.querySelector('#form').addEventListener('submit', promptSubmit);
37+
document.querySelector('#cancel').addEventListener('click', promptCancel);
6338

64-
dataElement.setAttribute(k, promptOptions.inputAttrs[k]);
65-
}
66-
}
39+
const dataElement = document.querySelector('#data');
40+
dataElement.value = promptOptions.value ? promptOptions.value : '';
6741

6842
dataElement.addEventListener('keyup', event => {
6943
if (event.key === 'Escape') {
@@ -78,114 +52,17 @@ function promptCreateInput(promptOptions) {
7852
}
7953
});
8054

81-
return dataElement;
82-
}
83-
84-
function promptCreateSelect() {
85-
const dataElement = document.createElement('select');
86-
let optionElement;
87-
88-
for (const k in promptOptions.selectOptions) {
89-
if (!Object.prototype.hasOwnProperty.call(promptOptions.selectOptions, k)) {
90-
continue;
91-
}
92-
93-
optionElement = document.createElement('option');
94-
optionElement.setAttribute('value', k);
95-
optionElement.textContent = promptOptions.selectOptions[k];
96-
if (k === promptOptions.value) {
97-
optionElement.setAttribute('selected', 'selected');
98-
}
99-
100-
dataElement.append(optionElement);
101-
}
102-
103-
return dataElement;
104-
}
105-
106-
function promptRegister() {
107-
promptId = document.location.hash.replace('#', '');
108-
109-
try {
110-
promptOptions = JSON.parse(window.api.ipc.sendSync('prompt-get-options:' + promptId));
111-
} catch (error) {
112-
return promptError(error);
113-
}
55+
dataElement.focus();
56+
dataElement.select();
11457

115-
const labelContainer = document.querySelector('#label');
116-
if (labelContainer) {
117-
if (promptOptions.useHtmlLabel) {
118-
labelContainer.innerHTML = promptOptions.label;
119-
} else {
120-
labelContainer.textContent = promptOptions.label;
121-
}
122-
}
123-
124-
if (promptOptions.buttonLabels && promptOptions.buttonLabels.ok) {
125-
document.querySelector('#ok').textContent = promptOptions.buttonLabels.ok;
126-
}
127-
128-
if (promptOptions.buttonLabels && promptOptions.buttonLabels.cancel) {
129-
document.querySelector('#cancel').textContent = promptOptions.buttonLabels.cancel;
130-
}
131-
132-
document.querySelector('#form').addEventListener('submit', promptSubmit);
133-
document.querySelector('#cancel').addEventListener('click', promptCancel);
58+
window.api.i18n.ready.then(() => {
59+
document.querySelector('#ok').textContent = window.api.i18n.t('dialog-button-ok');
60+
document.querySelector('#cancel').textContent = window.api.i18n.t('dialog-button-cancel');
61+
document.querySelector('#label').textContent = window.api.i18n.t('dialog-passphrase-prompt-label');
13462

135-
if (promptOptions.fields) {
136-
const formElement = document.querySelector('#form');
137-
const buttonContainer = document.querySelector('#buttons');
138-
139-
promptOptions.fields.forEach(field => {
140-
if(field.label) {
141-
const labelContainer = document.createElement('div');
142-
labelContainer.setAttribute('class', 'label');
143-
labelContainer.innerHTML = field.label;
144-
formElement.insertBefore(labelContainer, buttonContainer);
145-
}
146-
147-
const dataElement = createDataElement(field);
148-
if(dataElement) {
149-
dataElement.setAttribute('id', field.id);
150-
dataElement.setAttribute('class', 'data');
151-
const dataContainer = document.createElement('div');
152-
dataContainer.setAttribute('class', 'data-container');
153-
dataContainer.append(dataElement);
154-
formElement.insertBefore(dataContainer, buttonContainer);
155-
}
156-
});
157-
158-
} else {
159-
const dataContainerElement = document.querySelector('#data-container');
160-
161-
const dataElement = createDataElement(promptOptions);
162-
if(!dataElement) {
163-
return promptError(`Unhandled input type '${promptOptions.type}'`);
164-
}
165-
166-
dataContainerElement.append(dataElement);
167-
dataElement.setAttribute('id', 'data');
168-
169-
dataElement.focus();
170-
if (promptOptions.type === 'input') {
171-
dataElement.select();
172-
}
173-
}
174-
175-
const height = document.querySelector('body').offsetHeight;
176-
window.api.ipc.sendSync('prompt-size:' + promptId, height);
177-
}
178-
179-
function createDataElement(promptOptions) {
180-
let dataElement;
181-
if (promptOptions.type === 'input') {
182-
dataElement = promptCreateInput(promptOptions);
183-
} else if (promptOptions.type === 'select') {
184-
dataElement = promptCreateSelect();
185-
} else {
186-
dataElement = null;
187-
}
188-
return dataElement;
63+
const height = document.querySelector('body').offsetHeight;
64+
window.api.ipc.sendSync('prompt-size:' + promptId, height);
65+
});
18966
}
19067

19168
window.addEventListener('error', error => {

electron/app/js/prompt/preload.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
* Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
55
*/
66
const { contextBridge, ipcRenderer } = require('electron');
7+
const i18n = require('../i18next.webui.config');
8+
const osUtils = require('../osUtils');
9+
10+
const language = osUtils.getArgv('--lang');
11+
const i18nReady = i18n.changeLanguage(language);
712

813
contextBridge.exposeInMainWorld(
914
'api',
@@ -12,6 +17,12 @@ contextBridge.exposeInMainWorld(
1217
sendSync: (channel, ...args) => {
1318
return ipcRenderer.sendSync(channel, ...args);
1419
}
20+
},
21+
i18n: {
22+
ready: i18nReady,
23+
t: (keys, options) => {
24+
return i18n.t(keys, options);
25+
}
1526
}
1627
}
1728
);

electron/app/js/promptUtils.js

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,6 @@ async function getCredentialPassphrase(parentWindow) {
1818
const MIN_HEIGHT = 120; // needs to be smaller than content height
1919

2020
return new Promise((resolve, reject) => {
21-
const options = {
22-
inputAttrs: { type: 'password', required: true },
23-
label: i18n.t('dialog-passphrase-prompt-label'),
24-
type: 'input',
25-
value: null,
26-
useHtmlLabel: false,
27-
customStylesheet: null,
28-
buttonLabels: {
29-
ok: i18n.t('button-ok'),
30-
cancel: i18n.t('button-cancel')
31-
}
32-
};
3321

3422
let promptWindow = new BrowserWindow({
3523
width: WIDTH,
@@ -60,7 +48,7 @@ async function getCredentialPassphrase(parentWindow) {
6048
promptWindow.setMenuBarVisibility(false);
6149

6250
const getOptionsListener = event => {
63-
event.returnValue = JSON.stringify(options);
51+
event.returnValue = JSON.stringify({});
6452
};
6553

6654
const sizeListener = (event, value) => {
@@ -112,8 +100,7 @@ async function getCredentialPassphrase(parentWindow) {
112100
resolve(null);
113101
});
114102

115-
promptWindow.loadFile(pageFile,{hash: id})
116-
.then(() => promptWindow.webContents.toggleDevTools());
103+
promptWindow.loadFile(pageFile,{hash: id});
117104
});
118105
}
119106

electron/app/locales/en/electron.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@
126126
"dialog-invalid-oracle-home-not-specified": "Oracle Home is not specified.",
127127
"dialog-invalid-oracle-home-not-valid": "Specified Oracle Home {{oracleHome}} is not valid.",
128128
"dialog-passphrase-prompt-title": "Credential Encryption Passphrase",
129-
"dialog-passphrase-prompt-label": "Please enter the passphrase to use to encrypt the project credential.",
130129
"dialog-https-proxy-url-label": "HTTPS Proxy URL",
131130
"dialog-bypass-proxy-hosts-label": "Bypass Proxy Hosts",
132131

electron/app/locales/en/webui.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@
144144
"user-settings-dialog-quickstart-skip-label": "Skip Showing Introduction at Startup",
145145
"user-settings-dialog-quickstart-skip-help": "Whether or not to skip showing the WebLogic Kubernetes Toolkit UI Introduction at application startup.",
146146

147+
"dialog-passphrase-prompt-label": "Please enter the passphrase to use to encrypt the project credential.",
148+
147149
"model-design-coming-soon": "Coming Soon...",
148150

149151
"image-page-hints-createImage": "Create Image",

0 commit comments

Comments
 (0)