File indexing completed on 2024-05-12 05:17:32

0001 /*
0002     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 function dumpValue(value, depth)
0008 {
0009     if (value === undefined || value === null
0010         || typeof value == "boolean"
0011         || typeof value == "number")
0012     {
0013         return value;
0014     } else if (typeof value == "string") {
0015         return value.replace('\r\n', '\n');
0016     } else if (typeof value == "object") {
0017         if (depth == 0) {
0018             return "[...]";
0019         }
0020         if (value instanceof ArrayBuffer) {
0021             const view = new DataView(value);
0022             for (let i = 0; i < view.byteLength; ++i) {
0023                 const c = view.getUInt8(i);
0024                 if (c < 0x20 && c != 0x0A && c != 0x0D) {
0025                     return "<binary: " + view.byteLength + " bytes>";
0026                 }
0027             }
0028             return value;
0029         }
0030         if (value.length != undefined) {
0031             var arr = new Array();
0032             for (var i = 0; i < value.length; ++i) {
0033                 arr.push(dumpValue(value[i], depth - 1));
0034             }
0035             return arr;
0036         }
0037         var obj = new Object();
0038         var empty = true;
0039         for (var prop in value) {
0040             if (prop == "parent" || prop == "firstChild" || prop == "nextSibling" || value[prop] === undefined || value[prop] === null || typeof value[prop] == "function") {
0041                 continue;
0042             }
0043             const v = dumpValue(value[prop], depth - 1);
0044             if (v != undefined) { // ### Qt5 behavior compat, remove with Qt6
0045                 obj[prop] = v;
0046             }
0047             if (v) { // ### Qt5 behavior compat, remove with Qt6
0048                 empty = false;
0049             }
0050         }
0051 
0052         if (empty && Object.keys(obj).length >= 1) {
0053             return undefined; // ### Qt5 behavior compat, remove with Qt6
0054         }
0055         // implicitly convertible (color, date, opaque types, etc)
0056         if (empty) {
0057             let s = value.toString();
0058             if (s.match(/QVariant.*KCalendarCore::Calendar/)) { // normalize opaque shared pointer handle
0059                 return 'KCalendarCore::Calendar';
0060             }
0061             return value.toString();
0062         } else {
0063             return obj;
0064         }
0065     } else {
0066         console.log("unhandled value type", typeof value);
0067     }
0068     return value;
0069 }
0070 
0071 function dumpArgs(content, node, triggerNode)
0072 {
0073     var res = new Array();
0074     var wrapper = new Object();
0075     wrapper.content = dumpValue(content, 6);
0076     res.push(wrapper);
0077     res.push(dumpValue(node, 6));
0078     res.push({ triggerNodeEqualsNode: triggerNode == node });
0079     return res;
0080 }