From 4d3a6acfbf2f70943b7f4e51bf664de2413149c8 Mon Sep 17 00:00:00 2001 From: Greg Whitworth Date: Thu, 7 Dec 2017 16:07:35 -0800 Subject: [PATCH 1/2] Added global custom script --- .gitignore | 3 +- src/custom/global-keywords.js | 99 ++++++++++++++++++++++++ src/recipes/{ => archive}/zstaticflex.js | 0 tests/custom/global-keywords.html | 19 +++++ 4 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 src/custom/global-keywords.js rename src/recipes/{ => archive}/zstaticflex.js (100%) create mode 100644 tests/custom/global-keywords.html diff --git a/.gitignore b/.gitignore index df6e86e..eeeeb68 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Logs logs *.log +.vscode/* # Runtime data pids @@ -29,5 +30,5 @@ build/Release node_modules -# Visual Studio Code +# Visual Studio Code .vs/* \ No newline at end of file diff --git a/src/custom/global-keywords.js b/src/custom/global-keywords.js new file mode 100644 index 0000000..a2ed58f --- /dev/null +++ b/src/custom/global-keywords.js @@ -0,0 +1,99 @@ +window.debugCSSUsage = true + +// Set our usage trackers +var globalUsageGet = 0; +var globalUsageSet = 0; + +var globalProxy = { + get: function() { counts[0].count++; }, + set: function() { counts[1].count++; }, + configurable: true +} + +var globalObjectUsageGet = 0; +var globalObjectUsageSet = 0; + +var globalObjectProxy = { + get: function() { counts[2].count++; }, + set: function() { counts[3].count++; }, + configurable: true +} + +var globalThisUsageGet = 0; +var globalThisUsageSet = 0; + +var globalThisProxy = { + get: function() { counts[4].count++; }, + set: function() { counts[5].count++; }, + configurable: true +} + +var globalsUsageGet = 0; +var globalsUsageSet = 0; + +var globalsProxy = { + get: function() { counts[6].count++; }, + set: function() { counts[7].count++; }, + configurable: true +} + +Object.defineProperty(window, 'globals', globalsProxy); +Object.defineProperty(window, 'globalThis', globalThisProxy); +Object.defineProperty(window, 'globalObject', globalObjectProxy); +Object.defineProperty(window, 'global', globalProxy); + +var counts = [ + {name: "globalUsageGet", count: globalUsageGet}, + {name: "globalUsageSet", count: globalUsageSet}, + {name: "globalObjectUsageGet", count: globalObjectUsageGet}, + {name: "globalObjectUsageSet", count: globalObjectUsageSet}, + {name: "globalThisUsageGet", count: globalThisUsageGet}, + {name: "globalThisUsageSet", count: globalThisUsageSet}, + {name: "globalsUsageGet", count: globalsUsageGet}, + {name: "globalsUsageSet", count: globalsUsageSet} +] + +// Define them so that we can determine if they get stomped on + +void function() { + document.addEventListener('DOMContentLoaded', function () { + + var results = new Array(); + counts.forEach(function(i) { + results.push({"name":i.name, "count": i.count, "href": location.href }); + }); + + appendResults(results); + + // Add it to the document dom + function appendResults(results) { + if(window.debugCSSUsage) console.log("Trying to append"); + var output = document.createElement('script'); + output.id = "css-usage-tsv-results"; + output.textContent = convertToTSV(results); + output.type = 'text/plain'; + document.querySelector('head').appendChild(output); + var successfulAppend = checkAppend(); + } + + function checkAppend() { + if(window.debugCSSUsage) console.log("Checking append"); + var elem = document.getElementById('css-usage-tsv-results'); + if(elem === null) { + if(window.debugCSSUsage) console.log("Element not appended"); + } + else { + if(window.debugCSSUsage) console.log("Element successfully found"); + } + } + + function convertToTSV(results) { + const replacer = (key, value) => value === null ? '' : value // specify how you want to handle null values here + const header = Object.keys(results[0]) + let csv = results.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join('\t')) + csv.unshift(header.join('\t')) + csv = csv.join('\r\n') + return csv; + } + }); +}(); diff --git a/src/recipes/zstaticflex.js b/src/recipes/archive/zstaticflex.js similarity index 100% rename from src/recipes/zstaticflex.js rename to src/recipes/archive/zstaticflex.js diff --git a/tests/custom/global-keywords.html b/tests/custom/global-keywords.html new file mode 100644 index 0000000..7c3e382 --- /dev/null +++ b/tests/custom/global-keywords.html @@ -0,0 +1,19 @@ + + + + Testing globals usage + + + + + + \ No newline at end of file From 858c7079504380d27891dcd890db664009cbf7a8 Mon Sep 17 00:00:00 2001 From: Greg Whitworth Date: Fri, 8 Dec 2017 09:48:54 -0800 Subject: [PATCH 2/2] Made it so that it doesn't track data that is not used. --- src/custom/global-keywords.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/custom/global-keywords.js b/src/custom/global-keywords.js index a2ed58f..dabbac0 100644 --- a/src/custom/global-keywords.js +++ b/src/custom/global-keywords.js @@ -60,7 +60,9 @@ void function() { var results = new Array(); counts.forEach(function(i) { - results.push({"name":i.name, "count": i.count, "href": location.href }); + if(i.count != 0) { + results.push({"name":i.name, "count": i.count, "href": location.href }); + } }); appendResults(results);