* @brief Returns the JS bootstrap that exposes bridge globals + redirects console. */ code-verify off
| 42 | */ |
| 43 | // code-verify off |
| 44 | [[nodiscard]] static QString jsBootstrap() |
| 45 | { |
| 46 | return QStringLiteral( |
| 47 | "function __ssDataset(i) {" |
| 48 | " return Object.freeze({" |
| 49 | " get index() { return __pp.dsIndex(i); }," |
| 50 | " get uniqueId() { return __pp.dsUniqueId(i); }," |
| 51 | " get title() { return __pp.dsTitle(i); }," |
| 52 | " get units() { return __pp.dsUnits(i); }," |
| 53 | " get widget() { return __pp.dsWidget(i); }," |
| 54 | " get value() { return __pp.dsValue(i); }," |
| 55 | " get rawValue() { return __pp.dsRawValue(i); }," |
| 56 | " get text() { return __pp.dsValueStr(i); }," |
| 57 | " get rawText() { return __pp.dsRawValueStr(i); }," |
| 58 | " get min() { return __pp.dsMin(i); }," |
| 59 | " get max() { return __pp.dsMax(i); }," |
| 60 | " get widgetMin() { return __pp.dsWidgetMin(i); }," |
| 61 | " get widgetMax() { return __pp.dsWidgetMax(i); }," |
| 62 | " get plotMin() { return __pp.dsPlotMin(i); }," |
| 63 | " get plotMax() { return __pp.dsPlotMax(i); }," |
| 64 | " get fftMin() { return __pp.dsFftMin(i); }," |
| 65 | " get fftMax() { return __pp.dsFftMax(i); }," |
| 66 | " get alarmLow() { return __pp.dsAlarmLow(i); }," |
| 67 | " get alarmHigh() { return __pp.dsAlarmHigh(i); }," |
| 68 | " get alarmBands() { return __pp.dsAlarmBands(i); }," |
| 69 | " get ledHigh() { return __pp.dsLedHigh(i); }," |
| 70 | " get hasPlot() { return __pp.dsHasPlot(i); }," |
| 71 | " get hasFft() { return __pp.dsHasFft(i); }," |
| 72 | " get hasLed() { return __pp.dsHasLed(i); }" |
| 73 | " });" |
| 74 | "}" |
| 75 | "var group = Object.freeze({" |
| 76 | " get id() { return __pp.gId(); }," |
| 77 | " get title() { return __pp.gTitle(); }," |
| 78 | " get columns() { return __pp.gColumns(); }," |
| 79 | " get sourceId() { return __pp.gSourceId(); }" |
| 80 | "});" |
| 81 | "var datasets = Object.freeze(new Proxy({}, {" |
| 82 | " get: function(_, k) {" |
| 83 | " if (k === 'length') return __pp.dsCount();" |
| 84 | " var i = Number(k);" |
| 85 | " if (Number.isInteger(i) && i >= 0 && i < __pp.dsCount()) return __ssDataset(i);" |
| 86 | " return undefined;" |
| 87 | " }," |
| 88 | " has: function(_, k) {" |
| 89 | " if (k === 'length') return true;" |
| 90 | " var i = Number(k);" |
| 91 | " return Number.isInteger(i) && i >= 0 && i < __pp.dsCount();" |
| 92 | " }," |
| 93 | " set: function() { return false; }" |
| 94 | "}));" |
| 95 | "var frame = Object.freeze({" |
| 96 | " get number() { return __pp.frameNumber(); }," |
| 97 | " get timestampMs() { return __pp.frameTimestampMs(); }" |
| 98 | "});" |
| 99 | "function __ssFmt(args) {" |
| 100 | " return Array.prototype.slice.call(args).map(function(a) {" |
| 101 | " if (a === undefined) return 'undefined';" |