From d0dcaaba750391f9ce06380a8e930954da6fe682 Mon Sep 17 00:00:00 2001 From: Arkerthan <arkerthan@mailbox.org> Date: Wed, 2 Oct 2024 23:43:26 +0200 Subject: [PATCH] Patch displayVariables.js for SC 2.37 --- src/js/displayVariables.js | 58 +++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/js/displayVariables.js b/src/js/displayVariables.js index d169a25ea8c..c80544ca7f8 100644 --- a/src/js/displayVariables.js +++ b/src/js/displayVariables.js @@ -1,3 +1,59 @@ /*! <<checkvars>> macro for SugarCube 2.x */ /* converted from macro to normal function for easy usage in pure JS, no logic changes */ -App.checkVars = function(){function toString(value,indent){var baseType=typeof value;switch(baseType){case"number":return isNaN(value)?"NaN":isFinite(value)?String(value):"Infinity";case"string":return JSON.stringify(value);case"function":return"(function)";default:if("object"!==baseType||null==value)return String(value);var objType=Object.prototype.toString.call(value);if("[object Date]"===objType)return'(object: Date, value: "'+value.toISOString()+'")';if("[object RegExp]"===objType)return"(object: RegExp, value: "+value.toString()+")";var opener,closer,result=[],indentText=" ";return indent||(indent=""),("[object Set]"===objType||value instanceof Set)&&(value=Array.from(value)),Array.isArray(value)?(opener="[\n",closer="\n"+indent+"]",value.forEach(function(p,i){result.push(indent+indentText+i+" ⇒ "+toString(value[i],indent+indentText))}),Object.keys(value).forEach(function(p){/^\d+$/.test(p)||result.push(indent+indentText+toString(p)+" ⇒ "+toString(value[p],indent+indentText))})):"[object Map]"===objType||value instanceof Map?(opener="{\n",closer="\n"+indent+"}",Array.from(value).map(function(kv){result.push(indent+indentText+toString(kv[0],indent+indentText)+" ⇒ "+toString(kv[1],indent+indentText))})):(opener="{\n",closer="\n"+indent+"}",Object.keys(value).forEach(function(p){result.push(indent+indentText+toString(p)+" ⇒ "+toString(value[p],indent+indentText))})),opener+result.join(",\n")+closer}}var dialog,sv=State.variables,names=Object.keys(sv);if(dialog=UI.setup("Story $variables","checkvars"),0===names.length)return dialog.innerHTML="<h1>Story $variables (<code>State.variables</code>):</h1><p><em>No $variables currently set…</em></p>",void UI.open();dialog.innerHTML="<h1>Story $variables (<code>State.variables</code>):</h1><table><thead><tr><th>Name</th><th>Value</th></tr></thead><tbody></tbody></table>"+(/applewebkit|chrome/.test(Browser.userAgent)?"":'<div class="scroll-pad"> </div>');var tbody=dialog.querySelector("tbody");names.sort(function(a,b){return Util.isNumeric(a)&&Util.isNumeric(b)?Number(a)-Number(b):a.localeCompare(b)});for(var i=0;i<names.length;i++){var tr=document.createElement("tr"),tdName=document.createElement("td"),tdValue=document.createElement("td");tdName.textContent="$"+names[i],tdValue.textContent = toString(sv[names[i]]),tr.appendChild(tdName),tr.appendChild(tdValue),tbody.appendChild(tr)}UI.open()}; \ No newline at end of file +/* modified for SC 2.37 */ +App.checkVars = function() { + function toString(value, indent) { + var baseType = typeof value; + switch (baseType) { + case"number": + return isNaN(value) ? "NaN" : isFinite(value) ? String(value) : "Infinity"; + case"string": + return JSON.stringify(value); + case"function": + return "(function)"; + default: + if ("object" !== baseType || null == value) { + return String(value); + } + var objType = Object.prototype.toString.call(value); + if ("[object Date]" === objType) { + return '(object: Date, value: "' + value.toISOString() + '")'; + } + if ("[object RegExp]" === objType) { + return "(object: RegExp, value: " + value.toString() + ")"; + } + var opener, closer, result = [], indentText = " "; + return indent || (indent = ""), ("[object Set]" === objType || value instanceof Set) && (value = Array.from(value)), Array.isArray(value) ? (opener = "[\n", closer = "\n" + indent + "]", value.forEach(function(p, i) { + result.push(indent + indentText + i + " ⇒ " + toString(value[i], indent + indentText)); + }), Object.keys(value).forEach(function(p) { + /^\d+$/.test(p) || result.push(indent + indentText + toString(p) + " ⇒ " + toString(value[p], indent + indentText)); + })) : "[object Map]" === objType || value instanceof Map ? (opener = "{\n", closer = "\n" + indent + "}", Array.from(value).map(function(kv) { + result.push(indent + indentText + toString(kv[0], indent + indentText) + " ⇒ " + toString(kv[1], indent + indentText)); + })) : (opener = "{\n", closer = "\n" + indent + "}", Object.keys(value).forEach(function(p) { + result.push(indent + indentText + toString(p) + " ⇒ " + toString(value[p], indent + indentText)); + })), opener + result.join(",\n") + closer; + } + } + + function isNumeric(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + + var dialog, sv = State.variables, names = Object.keys(sv); + if (dialog = Dialog.create("Story $variables", "checkvars"), 0 === names.length) { + dialog.append("<h1>Story $variables (<code>State.variables</code>):</h1><p><em>No $variables currently set…</em></p>"); + } else { + dialog.append("<h1>Story $variables (<code>State.variables</code>):</h1><table><thead><tr><th>Name</th><th>Value</th></tr></thead><tbody></tbody></table>" + (/applewebkit|chrome/.test(Browser.userAgent) ? "" : '<div class="scroll-pad"> </div>')); + var tbody = dialog.body().querySelector("tbody"); + names.sort(function(a, b) { + return isNumeric(a) && isNumeric(b) ? Number(a) - Number(b) : a.localeCompare(b); + }); + for (var i = 0; i < names.length; i++) { + var tr = document.createElement("tr"), tdName = document.createElement("td"), + tdValue = document.createElement("td"); + tdName.textContent = "$" + names[i], tdValue.textContent = toString(sv[names[i]]), tr.appendChild(tdName), tr.appendChild(tdValue), tbody.appendChild(tr); + } + } + Dialog.open(); +}; -- GitLab