Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
df4b599
feat(candid): better UI for composite types
chenyan-dfinity Feb 12, 2020
996baa8
checkpoint
chenyan-dfinity Feb 13, 2020
b974a34
lint
chenyan-dfinity Feb 13, 2020
64a6a27
works for all types
chenyan-dfinity Feb 14, 2020
bef03d2
checkpoint
chenyan-dfinity Feb 15, 2020
6814a32
checkpoint
chenyan-dfinity Feb 17, 2020
3209a3f
lint
chenyan-dfinity Feb 17, 2020
e8ffbd7
Merge branch 'master' into idl-ui
chenyan-dfinity Feb 17, 2020
de625b6
Merge branch 'master' into idl-ui
chenyan-dfinity Feb 17, 2020
47f7771
fix
chenyan-dfinity Feb 17, 2020
500c328
fix(userlib): support nested option type
chenyan-dfinity Feb 17, 2020
f1478a9
Apply suggestions from code review
chenyan-dfinity Feb 17, 2020
8bd49c8
Merge branch 'master' into idl-opt
chenyan-dfinity Feb 17, 2020
392dc9e
Merge remote-tracking branch 'origin/idl-opt' into idl-ui
chenyan-dfinity Feb 17, 2020
877b933
checkpoint
chenyan-dfinity Feb 17, 2020
1884756
works
chenyan-dfinity Feb 18, 2020
60f82fd
Merge branch 'master' into idl-ui
chenyan-dfinity Feb 18, 2020
a897d99
Merge remote-tracking branch 'origin/master' into idl-ui
chenyan-dfinity Feb 19, 2020
1f11208
Merge branch 'master' into idl-ui
chenyan-dfinity Feb 20, 2020
6affb73
Merge remote-tracking branch 'origin/master' into idl-ui
chenyan-dfinity Feb 24, 2020
77060e1
refactor: visitor pattern
chenyan-dfinity Feb 25, 2020
b725efb
more visit func
chenyan-dfinity Feb 25, 2020
d47e5d4
refactor
chenyan-dfinity Feb 26, 2020
2b4aec7
minor fix
chenyan-dfinity Feb 26, 2020
f6c3f27
refactor
chenyan-dfinity Mar 1, 2020
adabd92
Merge branch 'master' into idl-ui
chenyan-dfinity Mar 1, 2020
cf5a3fd
fix
chenyan-dfinity Mar 1, 2020
1ba8c48
custom parser and better UI
chenyan-dfinity Mar 2, 2020
c2a2231
Merge branch 'master' into idl-ui
chenyan-dfinity Mar 2, 2020
63407b4
fix
chenyan-dfinity Mar 2, 2020
1647427
move idl-ui to bootstrap
chenyan-dfinity Mar 3, 2020
0df7924
fix
chenyan-dfinity Mar 3, 2020
0f776f6
Merge branch 'master' into idl-ui
chenyan-dfinity Mar 3, 2020
2be5392
trigger CI
chenyan-dfinity Mar 3, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 17 additions & 43 deletions src/userlib/js/bootstrap/candid/candid.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
import * as UI from './idl-ui';

export function render(id, actor, canister) {
document.getElementById('title').innerText = `Service ${id}`;
for (let [name, func] of Object.entries(actor._fields)) {
for (const [name, func] of Object.entries(actor._fields)) {
renderMethod(name, func, canister[name]);
}
const console = document.createElement("div");
console.className = 'console';
document.body.appendChild(console);
document.body.appendChild(console);
}

function renderMethod(name, idl_func, f) {
const status = document.createElement("div");
status.className = 'status';

const item = document.createElement("li");

const sig = document.createElement("div");
Expand All @@ -28,39 +26,14 @@ function renderMethod(name, idl_func, f) {
button.innerText = 'Call';
}

const arg_length = idl_func.argTypes.length;
for (var i = 0; i < arg_length; i++) {
const t = idl_func.argTypes[i];
const arg = document.createElement("input");
arg.className = 'argument';
arg.id = `${name}_arg${i}`;
item.appendChild(arg);

arg.addEventListener("focus", function () {
arg.className = 'argument';
});
arg.addEventListener("blur", function() {
try {
if (arg.value === '') {
return;
}
const value = JSON.parse(arg.value);
if (!t.covariant(value)) {
throw new Error(`${arg.value} is not of type ${t.display()}`);
}
status.style.display = 'none';
button.disabled = false;
} catch(err) {
arg.className += ' reject';
status.style.display = 'block';
button.disabled = true;
status.innerHTML = 'ParseError: ' + err.message;
};
});
}
const inputs = [];
idl_func.argTypes.forEach((arg, i) => {
const inputbox = UI.renderInput(arg);
inputs.push(inputbox);
inputbox.render(item);
});

item.appendChild(button);
item.appendChild(status);

const result = document.createElement("div");
result.className = 'result';
Expand All @@ -69,23 +42,24 @@ function renderMethod(name, idl_func, f) {
const right = document.createElement("span");
right.className = 'right';
result.appendChild(left);
result.appendChild(right);
result.appendChild(right);
item.appendChild(result);

const list = document.getElementById("methods");
list.append(item);

button.addEventListener("click", function() {
const args = inputs.map(arg => arg.parse());
const isReject = inputs.some(arg => arg.isRejected());
if (isReject) {
return;
}

left.className = 'left';
left.innerText = 'Waiting...';
right.innerText = ''
result.style.display = 'block';
(async function () {
var args = [];
for (var i = 0; i < arg_length; i++) {
const arg = document.getElementById(`${name}_arg${i}`).value;
args.push(JSON.parse(arg));
}
const t_before = Date.now();
const result = await f.apply(null, args);
const duration = (Date.now() - t_before)/1000;
Expand All @@ -103,7 +77,7 @@ function renderMethod(name, idl_func, f) {
log(show_result);
})().catch(err => {
left.className += ' error';
left.innerText = err.name + ': ' + err.message;
left.innerText = err.stack;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there is no err body here?

Copy link
Contributor Author

@chenyan-dfinity chenyan-dfinity Mar 3, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stack includes everything. The error message and the call stack.

});
});
};
Expand Down
Loading