Instantly share code, notes, and snippets.
Created
July 24, 2019 16:44
-
Star
0
(0)
You must be signed in to star a gist -
Fork
0
(0)
You must be signed in to fork a gist
-
Save tylerpaige/85429034190297949f174d63df42f458 to your computer and use it in GitHub Desktop.
Takes a markdown list of links (perhaps from an Economy <4 setting) and outputs JSON that can be used to seed an Economy 5 Menu
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
REQUIRES NODE INSTALLED ON YOUR MACHINE | |
USAGE: | |
------ | |
# firstly, edit the input variables | |
$ cd path/to/this/script | |
$ node markdown-list-to-economy-menu-json.js | |
CONFIG: | |
------- | |
No argument handling here. Just redefine the `menuTitle` and `input` variables, | |
where `menuTitle` becomes to JSON filename, and `input` is the markdown list | |
bounded by backtickets. | |
*/ | |
const menuTitle = 'addtl-sitemap'; | |
const input = `- [av office](/audio-video-office) | |
- [overview](/audio-video-office) | |
- [equipment request](/audio-video-office/equipment-request) | |
- [event support](/audio-video-office/event-support) | |
- [faq](/audio-video-office/faq) | |
- [output shop](/output-shop) | |
- [overview](/output-shop) | |
- [plotting](/output-shop/plotting) | |
- [fitch colloquium](/fitch) | |
- [2019](/events/1097-2019-fitch-colloquium-br-record-replay-data-technology-and-experimental-preservation) | |
- [2017](/events/735-2017-fitch-colloquium-br-ex-situ-on-moving-monuments) | |
- [2016](/events/290-fitch-colloquium-preservation-and-war) | |
- [2015](/fitch/2015) | |
- [end of year show](/eoys) | |
- [2016](/exhibitions/26-end-of-year-show-2016) | |
- [2015](/exhibitions/23-end-of-year-show-2015) | |
- [gis](/gis) | |
- [data](/gis/data) | |
- [tutorials](/gis/tutorials) | |
- [career services](/career-services) | |
- [job board](https://arch-columbia-csm.symplicity.com/students) | |
- [arch & ud](/career-services/job-board/#architecture-and-urban-design) | |
- [up](/career-services/job-board/#urban-planning) | |
- [hp](/career-services/job-board/#historic-preservation) | |
- [red](/career-services/job-board/#red) | |
- [submit a job](/career-services/job-board-submission) | |
- [studio-x](/studio-x) | |
- [amman](/environments/11-studio-x-amman) | |
- [beijing](/environments/12-studio-x-beijing) | |
- [istanbul](/environments/16-studio-x-istanbul) | |
- [johannesburg](/environments/17-studio-x-johannesburg) | |
- [mumbai](/environments/13-studio-x-mumbai) | |
- [rio de janeiro](/environments/14-studio-x-rio-de-janeiro) | |
- [summer workshops](/summer-workshops) | |
- [2017](/summer-workshops/2017) | |
- [beirut](/environments/22-the-invisible-eight-the-forgotten-or-otherwise-erased-modern-buildings-in-beirut-lebanon) | |
- [burning man](/environments/29-burning-man-in-black-rock-desert-nevada) | |
- [harare](/environments/23-afro-imaginaries-in-harare-zimbabwe) | |
- [hudson valley](/environments/28-justice-in-place-downtown-regeneration-in-the-shadow-of-urban-renewal-in-hudson-river-valley-ny) | |
- [jordan trail](/environments/27-heritage-sites-of-the-jordan-trail-documenting-and-interpreting-7-000-years-of-urban-living-in-jordan) | |
- [madrid](/environments/24-the-environmentalist-dilemma-reducing-the-economic-and-social-costs-of-a-low-carbon-city-in-madrid-spain) | |
- [shenzhen](/environments/25-data-mining-china-urban-village-in-shenzhen-china) | |
- [tokyo](/environments/26-aging-tokyo-in-japan) | |
- [2016](/summer-workshops/2016) | |
- [lalibela](/summer-workshops/2016/ethiopia) | |
- [beirut](/summer-workshops/2016/beirut) | |
- [berlin](/summer-workshops/2016/berlin) | |
- [copenhagen](/summer-workshops/2016/copenhagen) | |
- [istanbul](/summer-workshops/2016/istanbul) | |
- [new york](/summer-workshops/2016/nyc-tech) | |
- [shenzhen](/summer-workshops/2016/shenzhen) | |
- [2015](/summer-workshops/2015) | |
- [2014](/summer-workshops/2014) | |
- [2013](/summer-workshops/2013) | |
- [fabrication lab](/research/labs/4-fabrication-lab) | |
- [required training](/research/labs/4-fabrication-lab/training) | |
- [hardware](/research/labs/4-fabrication-lab/hardware) | |
- [software](/research/labs/4-fabrication-lab/software) | |
- [future anterior](/future-anterior) | |
- [call for papers](/future-anterior/cfp) | |
- [graphics project](/graphics-project) | |
- [2019](/graphics-project/2019) | |
- [2018](/graphics-project/2018) | |
- [2017](/graphics-project/2017) | |
- [2016](/graphics-project/2016) | |
- [2015](/graphics-project/2015) | |
- [2014](/graphics-project/2014) | |
- [student awards](/student-awards) | |
- [2019](/student-awards/2019) | |
- [2018](/student-awards/2018) | |
- [2017](/student-awards/2017) | |
- [2016](/student-awards/2016) | |
- [2015](/student-awards/2015) | |
- [2014](/student-awards/2014) | |
- [abstract](/abstract) | |
- [professor/ta submission](/abstract/submit) | |
- [student submission](/abstract/student-submit) | |
- [goodman fellowship](/goodman-fellowship) | |
- [about](/goodman-fellowship) | |
- [apply](/goodman-fellowship/apply) | |
- [dean's office](/deans-office) | |
- [faculty appointments](/deans-office/faculty-appointments) | |
- [student appointments](/deans-office/student-appointments) | |
- [grant proposals](/deans-office/grant-proposals) | |
- [prizes & awards](/deans-office/prizes-awards) | |
- [finance office: administration](/finance-administration) | |
- [payments & purchasing](/finance-administration/payments-purchasing) | |
- [procurement policies](/finance-administration/procurement-policies) | |
- [travel guide](/finance-administration/travel-guide) | |
- [key forms](/finance-administration/key-forms) | |
- [finance office: human resources](/finance-human-resources) | |
- [administration payroll](/finance-human-resources/administration-payroll) | |
- [student payroll](/finance-human-resources/student-payroll) | |
- [time away from work](/finance-human-resources/time-away) | |
- [key forms](/finance-human-resources/key-forms)`; | |
const fs = require("fs"); | |
const markdownToJsonStr = input => { | |
let index = 0; | |
const parsed = [...input.matchAll(/^(\s*)- \[(.+)\]\((.+)\)/gm)] | |
.map(m => { | |
const leadingWhitespace = m[1].length; | |
const key = m[2]; | |
const url = m[3]; | |
const jsonSketch = `{ "key": "${key}", "id" : "${index}", "url" : "${url}"`; | |
index++; | |
return { | |
leadingWhitespace, | |
jsonSketch | |
}; | |
}) | |
.map((m, index, list) => { | |
let suffix; | |
const nextItem = list[index + 1]; | |
if (nextItem && nextItem.leadingWhitespace > m.leadingWhitespace) { | |
suffix = ', "children" : [' | |
} else if ( nextItem && nextItem.leadingWhitespace === m.leadingWhitespace) { | |
suffix = '},' | |
} else if (!nextItem && m.leadingWhitespace > 0) { | |
suffix = '}]}' | |
} else { | |
suffix = '}' | |
} | |
let prefix; | |
const prevItem = list[index - 1]; | |
if (prevItem && prevItem.leadingWhitespace > m.leadingWhitespace) { | |
prefix = ']}, '; | |
} else { | |
prefix = ''; | |
} | |
return `${prefix}${m.jsonSketch}${suffix}`; | |
}) | |
.join(''); | |
return `[${parsed}]`; | |
}; | |
const date = new Date().toLocaleDateString().replace(/\//g, '-'); | |
const time = new Date().toLocaleTimeString().replace(/(\s)/g,''); | |
const filename = `${menuTitle}--${date}--${time}.json`; | |
fs.writeFile(filename, markdownToJsonStr(input), { encoding: 'utf-8' }, (err) => { | |
if (err) { | |
console.error(err); | |
return false; | |
} | |
console.log(`Converted markdown list to Economy Menu json at ${filename}`); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment