From 2da378166e76b7a53effb20d099051b055a3bdef Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Tue, 19 Mar 2024 03:06:34 -0700 Subject: [PATCH 1/2] Add ability for dashboard script to work with current and proposed schemas --- assets/javascripts/swift-evolution.js | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/assets/javascripts/swift-evolution.js b/assets/javascripts/swift-evolution.js index c648896e3..1ad6296e4 100644 --- a/assets/javascripts/swift-evolution.js +++ b/assets/javascripts/swift-evolution.js @@ -158,12 +158,15 @@ function init() { var req = new window.XMLHttpRequest() req.addEventListener('load', function() { - proposals = JSON.parse(req.responseText) - - // Don't display malformed proposals - proposals = proposals.filter(function (proposal) { - return !proposal.errors - }) + let evolutionMetadata = JSON.parse(req.responseText, flattenStatus) + + // Temporary conditional to allow script to work with old and new schemas + if (Array.isArray(evolutionMetadata)) { // current schema + proposals = evolutionMetadata + } else { // new schema + proposals = evolutionMetadata.proposals + languageVersions = evolutionMetadata.implementationVersions + } // Add upcomingFeatureFlag to proposal if present in mapping. // Temporary until upcomingFeatureFlag property is returned in proposals.json. @@ -201,6 +204,18 @@ function init() { req.send() } +/** + * Reviver function passed to JSON.parse() to convert new status field structure to old structure. + */ +function flattenStatus(key, value) { + if (key == "status" && value !== "" && !value.state) { + let [subkey, subvalue] = Object.entries(value)[0] + subvalue.state = "." + subkey + return subvalue + } + return value +} + /** * Creates an Element. Convenience wrapper for `document.createElement`. * From 5f2b2dcea7048c4005889c9b4b7186ae8dea8ed5 Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Tue, 19 Mar 2024 06:12:48 -0700 Subject: [PATCH 2/2] Restore accidentally removed error check --- assets/javascripts/swift-evolution.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/javascripts/swift-evolution.js b/assets/javascripts/swift-evolution.js index 1ad6296e4..9a39afa02 100644 --- a/assets/javascripts/swift-evolution.js +++ b/assets/javascripts/swift-evolution.js @@ -168,6 +168,11 @@ function init() { languageVersions = evolutionMetadata.implementationVersions } + // Don't display malformed proposals + proposals = proposals.filter(function (proposal) { + return !proposal.errors + }) + // Add upcomingFeatureFlag to proposal if present in mapping. // Temporary until upcomingFeatureFlag property is returned in proposals.json. for (var proposal of proposals) {