@yuneta/gobj-ui 7.23.33 → 7.23.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gobj-ui.cjs.js +36 -15
- package/dist/gobj-ui.es.js +36 -15
- package/package.json +1 -1
- package/src/dev_machine_trace.test.js +25 -0
- package/src/yui_dev.js +103 -15
package/dist/gobj-ui.cjs.js
CHANGED
|
@@ -64310,6 +64310,11 @@ function dev_view() {
|
|
|
64310
64310
|
return v === "compact" || v === "name" || v === "full" ? v : "detailed";
|
|
64311
64311
|
}
|
|
64312
64312
|
var HIDE_PERIODIC_DEFAULT = 1;
|
|
64313
|
+
var SIMPLE_MACH_DEFAULT = 1;
|
|
64314
|
+
var SIMPLE_MACH_KEY = "dev_mach_simple";
|
|
64315
|
+
function dev_simple_mach() {
|
|
64316
|
+
return dev_num(SIMPLE_MACH_KEY, SIMPLE_MACH_DEFAULT) ? 1 : 0;
|
|
64317
|
+
}
|
|
64313
64318
|
function dev_hide_periodic() {
|
|
64314
64319
|
return dev_num("dev_hide_periodic", HIDE_PERIODIC_DEFAULT) ? true : false;
|
|
64315
64320
|
}
|
|
@@ -64887,7 +64892,7 @@ function render_name(e) {
|
|
|
64887
64892
|
]);
|
|
64888
64893
|
}
|
|
64889
64894
|
function render_log(e) {
|
|
64890
|
-
|
|
64895
|
+
let $row = (0, _yuneta_gobj_js.createElement2)([
|
|
64891
64896
|
"div",
|
|
64892
64897
|
{
|
|
64893
64898
|
class: "YDEV_LOGROW YDEV_LOG_" + e.level,
|
|
@@ -64902,7 +64907,7 @@ function render_log(e) {
|
|
|
64902
64907
|
[
|
|
64903
64908
|
"span",
|
|
64904
64909
|
{ class: "YDEV_LOG_TXT" },
|
|
64905
|
-
|
|
64910
|
+
""
|
|
64906
64911
|
],
|
|
64907
64912
|
[
|
|
64908
64913
|
"span",
|
|
@@ -64911,6 +64916,9 @@ function render_log(e) {
|
|
|
64911
64916
|
]
|
|
64912
64917
|
]
|
|
64913
64918
|
]);
|
|
64919
|
+
let $txt = $row.querySelector(".YDEV_LOG_TXT");
|
|
64920
|
+
if ($txt) $txt.textContent = e.text;
|
|
64921
|
+
return $row;
|
|
64914
64922
|
}
|
|
64915
64923
|
function render_entry(e) {
|
|
64916
64924
|
if (e.kind === "log") return render_log(e);
|
|
@@ -64949,15 +64957,28 @@ function rerender_all() {
|
|
|
64949
64957
|
}
|
|
64950
64958
|
}
|
|
64951
64959
|
logger.replaceChildren(frag);
|
|
64952
|
-
if (shown === 0)
|
|
64953
|
-
let $empty = document.createElement("div");
|
|
64954
|
-
$empty.className = "YDEV_EMPTY";
|
|
64955
|
-
$empty.textContent = TRAFFIC_LOG.length ? "No messages match the current filters." : "Waiting for activity — console logs and errors show automatically; enable Traffic or Automata for more.";
|
|
64956
|
-
logger.appendChild($empty);
|
|
64957
|
-
}
|
|
64960
|
+
if (shown === 0) logger.appendChild(make_placeholder());
|
|
64958
64961
|
logger.scrollTop = logger.scrollHeight;
|
|
64959
64962
|
update_stats();
|
|
64960
64963
|
}
|
|
64964
|
+
function make_placeholder() {
|
|
64965
|
+
let $empty = document.createElement("div");
|
|
64966
|
+
$empty.className = "YDEV_EMPTY";
|
|
64967
|
+
$empty.textContent = placeholder_text();
|
|
64968
|
+
return $empty;
|
|
64969
|
+
}
|
|
64970
|
+
function placeholder_text() {
|
|
64971
|
+
if (TRAFFIC_LOG.length) return "No messages match the current filters.";
|
|
64972
|
+
return "Waiting for activity — console logs and errors show automatically; enable Traffic or Automata for more.";
|
|
64973
|
+
}
|
|
64974
|
+
function refresh_placeholder() {
|
|
64975
|
+
let logger = document.getElementById("developer-traffic-logger");
|
|
64976
|
+
if (!logger) return;
|
|
64977
|
+
let ph = logger.querySelector(".YDEV_EMPTY");
|
|
64978
|
+
if (!ph) return;
|
|
64979
|
+
let text = placeholder_text();
|
|
64980
|
+
if (ph.textContent !== text) ph.textContent = text;
|
|
64981
|
+
}
|
|
64961
64982
|
function update_stats() {
|
|
64962
64983
|
let $s = document.getElementById("ydev-stats");
|
|
64963
64984
|
if (!$s) return;
|
|
@@ -65061,7 +65082,7 @@ function info_traffic(title, msg, direction, size) {
|
|
|
65061
65082
|
let ph = logger.querySelector(".YDEV_EMPTY");
|
|
65062
65083
|
if (ph) ph.remove();
|
|
65063
65084
|
append_and_follow(logger, node);
|
|
65064
|
-
}
|
|
65085
|
+
} else refresh_placeholder();
|
|
65065
65086
|
update_stats();
|
|
65066
65087
|
}
|
|
65067
65088
|
var __in_info_log__ = false;
|
|
@@ -65122,7 +65143,7 @@ function info_log(level, msg, hora) {
|
|
|
65122
65143
|
let ph = logger.querySelector(".YDEV_EMPTY");
|
|
65123
65144
|
if (ph) ph.remove();
|
|
65124
65145
|
append_and_follow(logger, node);
|
|
65125
|
-
}
|
|
65146
|
+
} else refresh_placeholder();
|
|
65126
65147
|
update_stats();
|
|
65127
65148
|
} finally {
|
|
65128
65149
|
__in_info_log__ = false;
|
|
@@ -65219,7 +65240,7 @@ function refresh_dev_chrome() {
|
|
|
65219
65240
|
$b.classList.toggle("is-active", dev_hide_periodic());
|
|
65220
65241
|
});
|
|
65221
65242
|
document.querySelectorAll(".YDEV_CHIP[data-toggle=\"automata-simple\"]").forEach(($b) => {
|
|
65222
|
-
$b.classList.toggle("is-active", !!
|
|
65243
|
+
$b.classList.toggle("is-active", !!dev_simple_mach());
|
|
65223
65244
|
});
|
|
65224
65245
|
let $m = document.getElementById("ydev-muted");
|
|
65225
65246
|
if ($m) {
|
|
@@ -65311,13 +65332,13 @@ function build_control_bar() {
|
|
|
65311
65332
|
class: "YDEV_CHIP",
|
|
65312
65333
|
"data-toggle": "automata-simple",
|
|
65313
65334
|
type: "button",
|
|
65314
|
-
title: "
|
|
65335
|
+
title: "Machine trace shape. On (default): one line per transition, event first, like the C kernel. Off: the legacy three-line shape (the call, the state change and the return)"
|
|
65315
65336
|
},
|
|
65316
65337
|
"Simple mach",
|
|
65317
65338
|
{ click: (ev) => {
|
|
65318
65339
|
ev.stopPropagation();
|
|
65319
|
-
let v =
|
|
65320
|
-
(0, _yuneta_gobj_js.kw_set_local_storage_value)(
|
|
65340
|
+
let v = dev_simple_mach() ? 0 : 1;
|
|
65341
|
+
(0, _yuneta_gobj_js.kw_set_local_storage_value)(SIMPLE_MACH_KEY, v);
|
|
65321
65342
|
(0, _yuneta_gobj_js.gobj_set_trace_machine_format)(v);
|
|
65322
65343
|
refresh_dev_chrome();
|
|
65323
65344
|
} }
|
|
@@ -65606,7 +65627,7 @@ function apply_dev_traces() {
|
|
|
65606
65627
|
(0, _yuneta_gobj_js.gobj_write_attr)((0, _yuneta_gobj_js.gobj_yuno)(), "trace_subscriptions", subscriptions);
|
|
65607
65628
|
(0, _yuneta_gobj_js.gobj_write_attr)((0, _yuneta_gobj_js.gobj_yuno)(), "no_poll", no_poll);
|
|
65608
65629
|
i18next.default.options.debug = i18n ? true : false;
|
|
65609
|
-
(0, _yuneta_gobj_js.gobj_set_trace_machine_format)(
|
|
65630
|
+
(0, _yuneta_gobj_js.gobj_set_trace_machine_format)(dev_simple_mach());
|
|
65610
65631
|
(0, _yuneta_gobj_js.set_log_callback)(info_log);
|
|
65611
65632
|
apply_console_route();
|
|
65612
65633
|
}
|
package/dist/gobj-ui.es.js
CHANGED
|
@@ -64305,6 +64305,11 @@ function dev_view() {
|
|
|
64305
64305
|
return v === "compact" || v === "name" || v === "full" ? v : "detailed";
|
|
64306
64306
|
}
|
|
64307
64307
|
var HIDE_PERIODIC_DEFAULT = 1;
|
|
64308
|
+
var SIMPLE_MACH_DEFAULT = 1;
|
|
64309
|
+
var SIMPLE_MACH_KEY = "dev_mach_simple";
|
|
64310
|
+
function dev_simple_mach() {
|
|
64311
|
+
return dev_num(SIMPLE_MACH_KEY, SIMPLE_MACH_DEFAULT) ? 1 : 0;
|
|
64312
|
+
}
|
|
64308
64313
|
function dev_hide_periodic() {
|
|
64309
64314
|
return dev_num("dev_hide_periodic", HIDE_PERIODIC_DEFAULT) ? true : false;
|
|
64310
64315
|
}
|
|
@@ -64882,7 +64887,7 @@ function render_name(e) {
|
|
|
64882
64887
|
]);
|
|
64883
64888
|
}
|
|
64884
64889
|
function render_log(e) {
|
|
64885
|
-
|
|
64890
|
+
let $row = createElement2([
|
|
64886
64891
|
"div",
|
|
64887
64892
|
{
|
|
64888
64893
|
class: "YDEV_LOGROW YDEV_LOG_" + e.level,
|
|
@@ -64897,7 +64902,7 @@ function render_log(e) {
|
|
|
64897
64902
|
[
|
|
64898
64903
|
"span",
|
|
64899
64904
|
{ class: "YDEV_LOG_TXT" },
|
|
64900
|
-
|
|
64905
|
+
""
|
|
64901
64906
|
],
|
|
64902
64907
|
[
|
|
64903
64908
|
"span",
|
|
@@ -64906,6 +64911,9 @@ function render_log(e) {
|
|
|
64906
64911
|
]
|
|
64907
64912
|
]
|
|
64908
64913
|
]);
|
|
64914
|
+
let $txt = $row.querySelector(".YDEV_LOG_TXT");
|
|
64915
|
+
if ($txt) $txt.textContent = e.text;
|
|
64916
|
+
return $row;
|
|
64909
64917
|
}
|
|
64910
64918
|
function render_entry(e) {
|
|
64911
64919
|
if (e.kind === "log") return render_log(e);
|
|
@@ -64944,15 +64952,28 @@ function rerender_all() {
|
|
|
64944
64952
|
}
|
|
64945
64953
|
}
|
|
64946
64954
|
logger.replaceChildren(frag);
|
|
64947
|
-
if (shown === 0)
|
|
64948
|
-
let $empty = document.createElement("div");
|
|
64949
|
-
$empty.className = "YDEV_EMPTY";
|
|
64950
|
-
$empty.textContent = TRAFFIC_LOG.length ? "No messages match the current filters." : "Waiting for activity — console logs and errors show automatically; enable Traffic or Automata for more.";
|
|
64951
|
-
logger.appendChild($empty);
|
|
64952
|
-
}
|
|
64955
|
+
if (shown === 0) logger.appendChild(make_placeholder());
|
|
64953
64956
|
logger.scrollTop = logger.scrollHeight;
|
|
64954
64957
|
update_stats();
|
|
64955
64958
|
}
|
|
64959
|
+
function make_placeholder() {
|
|
64960
|
+
let $empty = document.createElement("div");
|
|
64961
|
+
$empty.className = "YDEV_EMPTY";
|
|
64962
|
+
$empty.textContent = placeholder_text();
|
|
64963
|
+
return $empty;
|
|
64964
|
+
}
|
|
64965
|
+
function placeholder_text() {
|
|
64966
|
+
if (TRAFFIC_LOG.length) return "No messages match the current filters.";
|
|
64967
|
+
return "Waiting for activity — console logs and errors show automatically; enable Traffic or Automata for more.";
|
|
64968
|
+
}
|
|
64969
|
+
function refresh_placeholder() {
|
|
64970
|
+
let logger = document.getElementById("developer-traffic-logger");
|
|
64971
|
+
if (!logger) return;
|
|
64972
|
+
let ph = logger.querySelector(".YDEV_EMPTY");
|
|
64973
|
+
if (!ph) return;
|
|
64974
|
+
let text = placeholder_text();
|
|
64975
|
+
if (ph.textContent !== text) ph.textContent = text;
|
|
64976
|
+
}
|
|
64956
64977
|
function update_stats() {
|
|
64957
64978
|
let $s = document.getElementById("ydev-stats");
|
|
64958
64979
|
if (!$s) return;
|
|
@@ -65056,7 +65077,7 @@ function info_traffic(title, msg, direction, size) {
|
|
|
65056
65077
|
let ph = logger.querySelector(".YDEV_EMPTY");
|
|
65057
65078
|
if (ph) ph.remove();
|
|
65058
65079
|
append_and_follow(logger, node);
|
|
65059
|
-
}
|
|
65080
|
+
} else refresh_placeholder();
|
|
65060
65081
|
update_stats();
|
|
65061
65082
|
}
|
|
65062
65083
|
var __in_info_log__ = false;
|
|
@@ -65117,7 +65138,7 @@ function info_log(level, msg, hora) {
|
|
|
65117
65138
|
let ph = logger.querySelector(".YDEV_EMPTY");
|
|
65118
65139
|
if (ph) ph.remove();
|
|
65119
65140
|
append_and_follow(logger, node);
|
|
65120
|
-
}
|
|
65141
|
+
} else refresh_placeholder();
|
|
65121
65142
|
update_stats();
|
|
65122
65143
|
} finally {
|
|
65123
65144
|
__in_info_log__ = false;
|
|
@@ -65214,7 +65235,7 @@ function refresh_dev_chrome() {
|
|
|
65214
65235
|
$b.classList.toggle("is-active", dev_hide_periodic());
|
|
65215
65236
|
});
|
|
65216
65237
|
document.querySelectorAll(".YDEV_CHIP[data-toggle=\"automata-simple\"]").forEach(($b) => {
|
|
65217
|
-
$b.classList.toggle("is-active", !!
|
|
65238
|
+
$b.classList.toggle("is-active", !!dev_simple_mach());
|
|
65218
65239
|
});
|
|
65219
65240
|
let $m = document.getElementById("ydev-muted");
|
|
65220
65241
|
if ($m) {
|
|
@@ -65306,13 +65327,13 @@ function build_control_bar() {
|
|
|
65306
65327
|
class: "YDEV_CHIP",
|
|
65307
65328
|
"data-toggle": "automata-simple",
|
|
65308
65329
|
type: "button",
|
|
65309
|
-
title: "
|
|
65330
|
+
title: "Machine trace shape. On (default): one line per transition, event first, like the C kernel. Off: the legacy three-line shape (the call, the state change and the return)"
|
|
65310
65331
|
},
|
|
65311
65332
|
"Simple mach",
|
|
65312
65333
|
{ click: (ev) => {
|
|
65313
65334
|
ev.stopPropagation();
|
|
65314
|
-
let v =
|
|
65315
|
-
kw_set_local_storage_value(
|
|
65335
|
+
let v = dev_simple_mach() ? 0 : 1;
|
|
65336
|
+
kw_set_local_storage_value(SIMPLE_MACH_KEY, v);
|
|
65316
65337
|
gobj_set_trace_machine_format(v);
|
|
65317
65338
|
refresh_dev_chrome();
|
|
65318
65339
|
} }
|
|
@@ -65601,7 +65622,7 @@ function apply_dev_traces() {
|
|
|
65601
65622
|
gobj_write_attr(gobj_yuno(), "trace_subscriptions", subscriptions);
|
|
65602
65623
|
gobj_write_attr(gobj_yuno(), "no_poll", no_poll);
|
|
65603
65624
|
i18next.options.debug = i18n ? true : false;
|
|
65604
|
-
gobj_set_trace_machine_format(
|
|
65625
|
+
gobj_set_trace_machine_format(dev_simple_mach());
|
|
65605
65626
|
set_log_callback(info_log);
|
|
65606
65627
|
apply_console_route();
|
|
65607
65628
|
}
|
package/package.json
CHANGED
|
@@ -20,6 +20,31 @@ const STATE_CHANGE =
|
|
|
20
20
|
const NOT_DEFINED =
|
|
21
21
|
"📛 mach(C_X^x), st: ST_IDLE, ev: EV_TIMEOUT, 📛📛ERROR Event NOT DEFINED in state📛📛, from(C_TIMER^t)";
|
|
22
22
|
|
|
23
|
+
/* The other four shapes the SIMPLER format emits (gobj-js 7.13.7 gave them
|
|
24
|
+
* their format-1 branch; before that they leaked `mach(…)` into it). */
|
|
25
|
+
const SIMPLE_PUBLISH = "🔝🔝 EV_STATE_CHANGED C_PROT_MQTT^input-2 ST_WAIT_FRAME_HEADER";
|
|
26
|
+
const SIMPLE_FORWARD = "🔝🔄 EV_TX_READY (EV_TX_READY) C_PROT_TCP4H^output-0";
|
|
27
|
+
const SIMPLE_INJECT = "🔜 EV_ON_MESSAGE C_GATE^gate ST_IDLE";
|
|
28
|
+
const SIMPLE_NESTED = " 🔄 EV_ON_MESSAGE C_IOGATE^output-iogate-0 ST_IDLE from C_CHANNEL^output-0";
|
|
29
|
+
|
|
30
|
+
describe("the simpler format's other shapes", () => {
|
|
31
|
+
it("reads the event out of a publish, a forward and an injection", () => {
|
|
32
|
+
expect(machine_event_of(SIMPLE_PUBLISH)).toBe("EV_STATE_CHANGED");
|
|
33
|
+
expect(machine_event_of(SIMPLE_FORWARD)).toBe("EV_TX_READY");
|
|
34
|
+
expect(machine_event_of(SIMPLE_INJECT)).toBe("EV_ON_MESSAGE");
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("the leading INDENTATION does not hide the event", () => {
|
|
38
|
+
expect(machine_event_of(SIMPLE_NESTED)).toBe("EV_ON_MESSAGE");
|
|
39
|
+
expect(log_is_periodic("debug", SIMPLE_NESTED)).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("a periodic one is still recognised in every shape", () => {
|
|
43
|
+
expect(log_is_periodic("debug", "🔝🔝 EV_TIMEOUT C_TIMER^t ST_IDLE")).toBe(true);
|
|
44
|
+
expect(log_is_periodic("debug", " 🔜 EV_TIMEOUT_PERIODIC C_YUNO^y ST_IDLE")).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
23
48
|
describe("machine_event_of", () => {
|
|
24
49
|
it("reads the event out of the verbose format, both lines of it", () => {
|
|
25
50
|
expect(machine_event_of(VERBOSE_IN)).toBe("EV_TIMEOUT");
|
package/src/yui_dev.js
CHANGED
|
@@ -185,6 +185,35 @@ function dev_view()
|
|
|
185
185
|
* chip writes the value it already had and appears to do nothing. */
|
|
186
186
|
const HIDE_PERIODIC_DEFAULT = 1;
|
|
187
187
|
|
|
188
|
+
/* Which SHAPE the machine trace is written in — the two the C kernel
|
|
189
|
+
* offers, and the chip that swaps them:
|
|
190
|
+
*
|
|
191
|
+
* 1 (default) one line per transition, event first
|
|
192
|
+
* 0 the legacy three-line shape: the call, the state
|
|
193
|
+
* change, and the `<- … ret: N` return
|
|
194
|
+
*
|
|
195
|
+
* 1 because that is what the C kernel defaults to, so a browser yuno and
|
|
196
|
+
* a node read alike. Like HIDE_PERIODIC_DEFAULT, a CONSTANT and not a
|
|
197
|
+
* literal in each of the three places that read it (the chip, the chrome
|
|
198
|
+
* and start up): they have to agree on what "unset" means, or the chip
|
|
199
|
+
* is born showing the wrong state and its first click does nothing. */
|
|
200
|
+
const SIMPLE_MACH_DEFAULT = 1;
|
|
201
|
+
|
|
202
|
+
/* A NEW key, deliberately.
|
|
203
|
+
*
|
|
204
|
+
* The default moved from 0 to 1 in 7.23.34, and a stored preference beats a
|
|
205
|
+
* default: every browser that had ever clicked the old `Simple mach` chip
|
|
206
|
+
* carried an explicit 0 and went on reading the legacy shape, so the change
|
|
207
|
+
* reached nobody who had used the window before. A default that cannot reach
|
|
208
|
+
* an existing browser is not a default. The old key is left where it is and
|
|
209
|
+
* simply stops being read. */
|
|
210
|
+
const SIMPLE_MACH_KEY = "dev_mach_simple";
|
|
211
|
+
|
|
212
|
+
function dev_simple_mach()
|
|
213
|
+
{
|
|
214
|
+
return dev_num(SIMPLE_MACH_KEY, SIMPLE_MACH_DEFAULT) ? 1 : 0;
|
|
215
|
+
}
|
|
216
|
+
|
|
188
217
|
function dev_hide_periodic()
|
|
189
218
|
{
|
|
190
219
|
return dev_num("dev_hide_periodic", HIDE_PERIODIC_DEFAULT) ? true : false;
|
|
@@ -821,13 +850,29 @@ function render_name(e)
|
|
|
821
850
|
/* A mirrored framework log line (error/warning/info/debug/msg). */
|
|
822
851
|
function render_log(e)
|
|
823
852
|
{
|
|
824
|
-
|
|
853
|
+
let $row = createElement2(
|
|
825
854
|
['div', {class: 'YDEV_LOGROW YDEV_LOG_' + e.level, title: e.level}, [
|
|
826
855
|
['span', {class: 'YDEV_LOG_LVL'}, e.level],
|
|
827
|
-
['span', {class: 'YDEV_LOG_TXT'},
|
|
856
|
+
['span', {class: 'YDEV_LOG_TXT'}, ''],
|
|
828
857
|
['span', {class: 'TRAFFIC_META'}, e.ts],
|
|
829
858
|
]]
|
|
830
859
|
);
|
|
860
|
+
|
|
861
|
+
/* The text is assigned AFTER, and that is the whole point.
|
|
862
|
+
*
|
|
863
|
+
* createElement2() TRIMS a string content -- it has to, to decide
|
|
864
|
+
* whether the string is HTML by looking at its first character -- and
|
|
865
|
+
* the machine trace's leading spaces are its NESTING: gobj-js prefixes
|
|
866
|
+
* every line with `tab()`, two spaces per level of __inside__, so an
|
|
867
|
+
* event sent from inside another one's action is indented under it.
|
|
868
|
+
* Passed through createElement2 that indentation was eaten, and the
|
|
869
|
+
* window showed a flat column where the console showed a tree. */
|
|
870
|
+
let $txt = $row.querySelector('.YDEV_LOG_TXT');
|
|
871
|
+
if($txt) {
|
|
872
|
+
$txt.textContent = e.text;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
return $row;
|
|
831
876
|
}
|
|
832
877
|
|
|
833
878
|
function render_entry(e)
|
|
@@ -889,17 +934,55 @@ function rerender_all()
|
|
|
889
934
|
}
|
|
890
935
|
logger.replaceChildren(frag);
|
|
891
936
|
if(shown === 0) {
|
|
892
|
-
|
|
893
|
-
$empty.className = 'YDEV_EMPTY';
|
|
894
|
-
$empty.textContent = TRAFFIC_LOG.length
|
|
895
|
-
? "No messages match the current filters."
|
|
896
|
-
: "Waiting for activity — console logs and errors show automatically; enable Traffic or Automata for more.";
|
|
897
|
-
logger.appendChild($empty);
|
|
937
|
+
logger.appendChild(make_placeholder());
|
|
898
938
|
}
|
|
899
939
|
logger.scrollTop = logger.scrollHeight;
|
|
900
940
|
update_stats();
|
|
901
941
|
}
|
|
902
942
|
|
|
943
|
+
/* The empty state, which has to say WHICH empty it is. */
|
|
944
|
+
function make_placeholder()
|
|
945
|
+
{
|
|
946
|
+
let $empty = document.createElement('div');
|
|
947
|
+
$empty.className = 'YDEV_EMPTY';
|
|
948
|
+
$empty.textContent = placeholder_text();
|
|
949
|
+
return $empty;
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
function placeholder_text()
|
|
953
|
+
{
|
|
954
|
+
if(TRAFFIC_LOG.length) {
|
|
955
|
+
return "No messages match the current filters.";
|
|
956
|
+
}
|
|
957
|
+
return "Waiting for activity — console logs and errors show automatically; " +
|
|
958
|
+
"enable Traffic or Automata for more.";
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
/* Keep whatever placeholder is on screen TRUTHFUL.
|
|
962
|
+
*
|
|
963
|
+
* A line that arrives and is filtered out changes the answer without
|
|
964
|
+
* changing the screen: the buffer stops being empty, so "Waiting for
|
|
965
|
+
* activity — enable Automata for more" becomes a lie, and the window reads
|
|
966
|
+
* as "nothing is happening, your traces are off" while it is in fact hiding
|
|
967
|
+
* 36 of them. Measured on a yuno with one timer and the Periodic filter on,
|
|
968
|
+
* which is now the default: the status line said `0/36 shown · 36 hidden`
|
|
969
|
+
* and the panel said there was no activity. */
|
|
970
|
+
function refresh_placeholder()
|
|
971
|
+
{
|
|
972
|
+
let logger = document.getElementById('developer-traffic-logger');
|
|
973
|
+
if(!logger) {
|
|
974
|
+
return;
|
|
975
|
+
}
|
|
976
|
+
let ph = logger.querySelector('.YDEV_EMPTY');
|
|
977
|
+
if(!ph) {
|
|
978
|
+
return;
|
|
979
|
+
}
|
|
980
|
+
let text = placeholder_text();
|
|
981
|
+
if(ph.textContent !== text) {
|
|
982
|
+
ph.textContent = text;
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
|
|
903
986
|
/* Live counters in the status strip. */
|
|
904
987
|
function update_stats()
|
|
905
988
|
{
|
|
@@ -1050,6 +1133,8 @@ function info_traffic(title, msg, direction, size)
|
|
|
1050
1133
|
ph.remove();
|
|
1051
1134
|
}
|
|
1052
1135
|
append_and_follow(logger, node);
|
|
1136
|
+
} else {
|
|
1137
|
+
refresh_placeholder(); /* hidden, but the buffer is no longer empty */
|
|
1053
1138
|
}
|
|
1054
1139
|
update_stats();
|
|
1055
1140
|
}
|
|
@@ -1140,6 +1225,8 @@ function info_log(level, msg, hora)
|
|
|
1140
1225
|
ph.remove();
|
|
1141
1226
|
}
|
|
1142
1227
|
append_and_follow(logger, node);
|
|
1228
|
+
} else {
|
|
1229
|
+
refresh_placeholder(); /* hidden, but the buffer is no longer empty */
|
|
1143
1230
|
}
|
|
1144
1231
|
update_stats();
|
|
1145
1232
|
} finally {
|
|
@@ -1276,7 +1363,7 @@ function refresh_dev_chrome()
|
|
|
1276
1363
|
});
|
|
1277
1364
|
|
|
1278
1365
|
document.querySelectorAll('.YDEV_CHIP[data-toggle="automata-simple"]').forEach(($b) => {
|
|
1279
|
-
$b.classList.toggle('is-active', !!
|
|
1366
|
+
$b.classList.toggle('is-active', !!dev_simple_mach());
|
|
1280
1367
|
});
|
|
1281
1368
|
|
|
1282
1369
|
let $m = document.getElementById('ydev-muted');
|
|
@@ -1384,12 +1471,14 @@ function build_control_bar()
|
|
|
1384
1471
|
* emitted while Automata is on. */
|
|
1385
1472
|
let simple_mach = ['button', {
|
|
1386
1473
|
class: 'YDEV_CHIP', 'data-toggle': 'automata-simple', type: 'button',
|
|
1387
|
-
title: '
|
|
1474
|
+
title: 'Machine trace shape. On (default): one line per transition, ' +
|
|
1475
|
+
'event first, like the C kernel. Off: the legacy three-line shape ' +
|
|
1476
|
+
'(the call, the state change and the return)',
|
|
1388
1477
|
}, 'Simple mach', {
|
|
1389
1478
|
click: (ev) => {
|
|
1390
1479
|
ev.stopPropagation();
|
|
1391
|
-
let v =
|
|
1392
|
-
kw_set_local_storage_value(
|
|
1480
|
+
let v = dev_simple_mach() ? 0 : 1;
|
|
1481
|
+
kw_set_local_storage_value(SIMPLE_MACH_KEY, v);
|
|
1393
1482
|
gobj_set_trace_machine_format(v);
|
|
1394
1483
|
refresh_dev_chrome();
|
|
1395
1484
|
}
|
|
@@ -1581,9 +1670,8 @@ function apply_dev_traces()
|
|
|
1581
1670
|
gobj_write_attr(gobj_yuno(), "no_poll", no_poll);
|
|
1582
1671
|
i18next.options.debug = i18n ? true : false;
|
|
1583
1672
|
|
|
1584
|
-
/*
|
|
1585
|
-
gobj_set_trace_machine_format(
|
|
1586
|
-
Number(kw_get_local_storage_value("dev_automata_simple", 0, false)) ? 1 : 0);
|
|
1673
|
+
/* Which shape the machine trace is written in (persisted). */
|
|
1674
|
+
gobj_set_trace_machine_format(dev_simple_mach());
|
|
1587
1675
|
|
|
1588
1676
|
/* Mirror the browser console (log_error/warning/info/debug/msg — the
|
|
1589
1677
|
* automata FSM trace arrives as debug) into the monitor. info_log no-ops
|