diff --git a/README.md b/README.md index e9702db..0e9874f 100644 --- a/README.md +++ b/README.md @@ -12,13 +12,16 @@ $ npm start ### Time Travel Time travel displays past versions of the repo based on merged pull requests. -The build script in `time-travel` folder fetchs each merged pull request's `docs` folder content (except for `docs/time-travel/`) and store them in `docs/time-travel/history`, then writes data to `docs/time-travel/index.json` for later use. Currently this process has to be done manually. +The build script in `time-travel` folder fetchs each merged pull request's `docs` folder content (except for `docs/time-travel/`) and store them in `docs/time-travel/history`, then writes data to `docs/time-travel/index.json` for later use. Currently this process has to be done manually. The script will only build missing PR history. To do a full rebuild of the all PRs pass the environment variable `FULL_REBUILD=true`. **Note**: Create a `.env` with your github's access token in order to fetch data from Github API. ```shell # update build $ npm run build-timetravel + +# full history rebuild +$ FULL_REBUILD=true npm run build-timetravel ``` The page for time-travel is intentionally kept separated from `docs/` (not reusing `docs/css/style.css`) so it's easier to maintain. diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/css/style.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/css/style.css new file mode 100644 index 0000000..c36f875 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/css/style.css @@ -0,0 +1,410 @@ +@charset "UTF-8"; +:root { + /* color defaults */ + --brand-blue: #05a6f0; + --brand-yellow: #ffba08; + --brand-red: #f35325; + --brand-green: #81bc06; + --white: #ffffff; + --off-white: #bbb; + --dark-grey: #121212; + /* typeface defaults */ + --primary-typeface: Segoe UI, SegoeUI, Segoe WP, Helvetica Neue, Helvetica, + Tahoma, Arial, sans-serif; + --title-font-size: 1.3rem; + --base-font-size: 20px; + --base-font-line-height: 28px; + --small-font-size: 12px; + --small-font-line-height: 14px; + /* animations */ + --root-gradient-animation: 4s both root-gradient linear infinite; + --move-in-offset: 20px; + --move-in-animation: 1s both move-in; + --move-in-base-delay: 100ms; + --logo-tiles-in-animation: 1s both logo-tiles-in; + --logo-tiles-in-delay: 100ms; + /* spacing */ + --small-space: 1em; + --large-space: 2em; + --text-block-spacing: 0.5em; +} + +@keyframes move-in { + from { + transform: translateY(var(--move-in-offset)); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +@keyframes logo-tiles-in { + 0% { + opacity: 0; + filter: grayscale(1) hue-rotate(100deg); + } + 25% { + opacity: 1; + } + 50% { + opacity: 1; + } + 55% { + opacity: 0; + } + 60% { + opacity: 1; + filter: grayscale(1) hue-rotate(100deg); + } + 100% { + opacity: 1; + filter: grayscale(0) hue-rotate(0deg); + } +} + +@keyframes logo-tiles-hover { + from { + filter: hue-rotate(0deg); + } + to { + filter: hue-rotate(360deg); + } +} + +@keyframes root-gradient { + 0% { + opacity: 0; + } + 40% { + opacity: 1; + } + 60% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +@keyframes text-gradient-ltr { + to { + background-position: -600% center; + } +} + +@keyframes text-gradient-rtl { + to { + background-position: 600% center; + } +} + +/* Common */ + +html { + position: relative; + font-size: var(--base-font-size); + font-family: var(--primary-typeface); + line-height: var(--base-font-line-height); + background-color: var(--dark-grey); +} + +html[data-loaded] { + background: linear-gradient( + to bottom, + var(--brand-blue) 33%, + var(--brand-yellow) 67% + ); +} + +html:before { + content: ""; + position: absolute; + display: block; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: -1; + background: unquote( + "-moz-linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)" + ); + background: unquote( + "linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)" + ); + background: linear-gradient( + to bottom, + var(--brand-yellow) 33%, + var(--brand-blue) 67% + ); + animation: var(--root-gradient-animation); +} + +body { + display: flex; + flex-direction: column; + align-items: center; + min-height: calc(100vh - 10px); + margin: 5px; + padding: 0 var(--small-space); + color: var(--off-white); + background-color: var(--dark-grey); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +::-moz-selection { + color: var(--white); + background-color: var(--brand-blue); +} + +::selection { + color: var(--white); + background: #05a6f0; + /* Edge could not work with custom property here */ + background-color: var(--brand-blue); +} + +a { + color: var(--brand-yellow); + text-decoration: none; +} + +a:hover, +a:focus { + background-image: linear-gradient( + to right, + var(--brand-yellow) 25%, + var(--brand-green) 50%, + var(--brand-blue) 75%, + var(--brand-yellow) 100% + ); + background-size: 600% auto; + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + background-clip: text; +} + +html[dir="ltr"] a:not(.logo-link):hover, +html[dir="ltr"] a:not(.logo-link):focus { + animation: text-gradient-ltr 6.5s linear infinite; +} + +html[dir="rtl"] a:not(.logo-link):hover, +html[dir="rtl"] a:not(.logo-link):focus { + animation: text-gradient-rtl 6.5s linear infinite; +} + +p, +h1 { + margin: 0; + padding: var(--text-block-spacing) 0; +} + +/* Container */ + +.container { + max-width: 31rem; + margin: 0 auto auto; +} + +@media only screen and (max-width: 40em) { + .container { + max-width: 80vw; + } + .container p { + font-size: 1.125rem; + } +} + +main p:nth-child(2) { + animation-delay: calc(var(--move-in-base-delay) * 6); +} + +main p:nth-child(3) { + animation-delay: calc(var(--move-in-base-delay) * 7); +} + +main p:nth-child(4) { + animation-delay: calc(var(--move-in-base-delay) * 8); +} + +/* Logo */ + +.logo-link { + display: block; + width: 4rem; + height: 4rem; + margin: var(--large-space) auto; +} + +.logo-image { + display: block; + width: 100%; + height: auto; +} + +.logo { + display: flex; + flex-wrap: wrap; + height: 100%; + width: 100%; + margin: 0; +} + +.logo-tile { + display: block; + width: 45%; + height: 45%; + margin: 2.5%; + outline: 1px solid transparent; + animation: var(--logo-tiles-in-animation); +} + +.winner { + display: block; + margin: auto; + text-align: center; +} + +.logo-tile--red { + background-color: var(--brand-red); + transition: 150ms; +} + +.logo-tile--largered { + background-color: var(--brand-red); + transform: scale(1.2) translateY(-3px); + transition: 150ms; +} + +.logo-tile--red:active { + transform: scale(0.8); +} + +.logo-tile--green { + background-color: var(--brand-green); + animation-delay: var(--logo-tiles-in-delay); + transition: 150ms; +} + +.logo-tile--largegreen { + background-color: var(--brand-green); + transform: scale(1.2) translateY(-3px); + animation-delay: var(--logo-tiles-in-delay); + transition: 150ms; +} + +.logo-tile--green:active { + transform: scale(0.8); +} + +.logo-tile--blue { + background-color: var(--brand-blue); + animation-delay: calc(var(--logo-tiles-in-delay) * 2); + transition: 150ms; +} + +.logo-tile--largeblue { + background-color: var(--brand-blue); + transform: scale(1.2) translateY(-3px); + animation-delay: calc(var(--logo-tiles-in-delay) * 2); + transition: 150ms; +} + +.logo-tile--blue:active { + transform: scale(0.8); +} + +.logo-tile--yellow { + background-color: var(--brand-yellow); + animation-delay: calc(var(--logo-tiles-in-delay) * 3); + transition: 150ms; +} + +.logo-tile--largeyellow { + background-color: var(--brand-yellow); + transform: scale(1.2) translateY(-3px); + animation-delay: calc(var(--logo-tiles-in-delay) * 3); + transition: 150ms; +} + +.logo-tile--yellow:active { + transform: scale(0.8); +} + +/* Main */ + +main h1 { + animation: var(--move-in-animation); + animation-delay: calc(var(--move-in-base-delay) * 4); + font-size: var(--title-font-size); + font-weight: bold; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + margin-bottom: var(--small-space); + padding-bottom: var(--small-space); +} + +main p { + animation: var(--move-in-animation); +} +main p:nth-of-type(1) { + animation-delay: calc(var(--move-in-base-delay) * 5); +} +main p:nth-of-type(2) { + animation-delay: calc(var(--move-in-base-delay) * 6); +} +main p:nth-of-type(3) { + animation-delay: calc(var(--move-in-base-delay) * 7); +} +main p:nth-of-type(4) { + animation-delay: calc(var(--move-in-base-delay) * 8); +} + +/* Footer */ + +.footer { + font-size: var(--small-font-size); + line-height: var(--small-font-line-height); + text-align: center; + margin: var(--small-space) 0 0; + padding: var(--small-space) 0; + overflow: hidden; +} + +@media only screen and (max-width: 40em) { + footer { + font-size: 1rem; + margin: 0 auto; + max-width: 80vw; + } +} + +footer p { + animation: var(--move-in-animation); + animation-delay: calc(var(--move-in-base-delay) * 11); +} + +footer [href*="github"]:hover, +footer [href*="github"]:focus { + color: var(--brand-green); +} + +.footer-piece--separate { + display: block; +} + +@media only screen and (max-width: 40em) { + .footer-piece { + display: block; + } +} + +.time-travel { + text-align: center; +} + +.time-travel a { + cursor: pointer; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/images/microsoft-og-image.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/images/microsoft-og-image.png new file mode 100644 index 0000000..2f0eee7 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/images/microsoft-og-image.png differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/index.html b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/index.html new file mode 100644 index 0000000..77d4956 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/index.html @@ -0,0 +1,128 @@ + + + + + + + + Join Microsoft Developer Design + + + + + + + + + + + + + + +
+
+ + šŸŽŠ Simon says...A winner is you! šŸŽŠ +
+
+

+ Microsoft is looking for designers who code to help create the most compelling developer tools & services on + the planet. +

+

+ We have open positions for technical product designers & design leaders in San Francisco, Seattle, and elsewhere. +

+

+ We use PCs, Macs, Figma, Sketch, GitHub, JavaScript, ZEIT, and other modern tools to design, prototype, and build the future + of software development. +

+

+ We believe in diversity, openness, and building delightful tools that empower every person and organization to achieve more. +

+

+ Interested? Send a PR with any improvement to + microsoft/join-dev-design or + email us. +

+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/scripts/ls.helper.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/scripts/ls.helper.js new file mode 100644 index 0000000..983b950 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/scripts/ls.helper.js @@ -0,0 +1,52 @@ +let debug = false; + +const setDebug = function(val) { + debug = val; + console.log("LS DEBUG: ", val); +}; + +const setItem = function(key, item) { + if (window.localStorage) { + localStorage.setItem(key, item); + if (debug) { + console.log("ls.setItem", item); + } + } +}; + +const getItem = function(key) { + if (window.localStorage) { + const item = localStorage.getItem(key); + if (debug) { + console.log("ls.getItem", item); + } + return item; + } + return undefined; +}; + +const clear = function(key) { + if (window.localStorage) { + localStorage.clear(key); + if (debug) { + console.log("ls.getItem", item); + } + } +}; + +const removeItem = function(key) { + if (window.localStorage) { + localStorage.removeItem(key); + if (debug) { + console.log("ls.removeItem", key); + } + } +}; + +window.ls = { + setItem, + getItem, + clear, + removeItem, + setDebug +}; diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/simon.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/simon.js new file mode 100644 index 0000000..dd38e82 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/simon.js @@ -0,0 +1,147 @@ +new Vue({ + el: "#app", + data: { + colors: ["red", "green", "yellow", "blue"], + currentSequence: [], + colorStatus: { + red: false, + green: false, + yellow: false, + blue: false + }, + colorSymbols: { + red: "ā¤ļø", + green: "šŸ’š", + yellow: "šŸ’›", + blue: "šŸ’™" + }, + userClicks: [], + currentScore: 0, + difficulty: 1000 + }, + created() { + this.generateSequence(); + }, + watch: { + winner: function(isWinner) { + if (isWinner) { + this.changeTheme(); + } + } + }, + computed: { + logoTitleRed: function() { + return this.colorStatus.red ? "logo-tile--largered" : "logo-tile--red"; + }, + logoTitleGreen: function() { + return this.colorStatus.green + ? "logo-tile--largegreen" + : "logo-tile--green"; + }, + logoTitleYellow: function() { + return this.colorStatus.yellow + ? "logo-tile--largeyellow" + : "logo-tile--yellow"; + }, + logoTitleBlue: function() { + return this.colorStatus.blue ? "logo-tile--largeblue" : "logo-tile--blue"; + }, + winner: function() { + return this.currentScore >= 10 ? true : false; + } + }, + methods: { + generateSequence: function() { + this.currentSequence.push( + this.colors[this.getRandomInt(this.colors.length)] + ); + if (this.currentScore > 0) { + this.play(); + } else { + console.log( + `šŸ•µļøā€ā™‚ļøšŸ•µļøā€ā™€ļø PSSST! There is a game inside this webpage...\nClick the ${ + this.colorSymbols[this.currentSequence[0]] + } tile on the Microsoft logo to play!` + ); + } + }, + clickColor: function(color) { + this.userClicks.push(color); + if (this.checkCorrect()) { + this.userClicks = []; + if (this.difficulty > 100) { + this.difficulty -= 100; + } + this.currentScore++; + console.log( + `Simon says..."correct!" šŸŽ‰ Your score is`, + this.currentScore + ); + this.lightUp(); + this.generateSequence(); + } + }, + getRandomInt: function(max) { + return Math.floor(Math.random() * Math.floor(max)); + }, + timer: function(ms) { + return new Promise(res => setTimeout(res, ms)); + }, + checkCorrect: function() { + let matching = true; + let sequence = + this.userClicks[this.userClicks.length - 1] === + this.currentSequence[this.userClicks.length - 1]; + if (!sequence) { + this.reset(); + } + for (let i = 0; i < this.currentSequence.length; i++) { + if (this.userClicks[i] !== this.currentSequence[i]) { + matching = false; + break; + } + } + return matching; + }, + reset: function() { + console.log(`😢 Game Over! Refresh to play again.`); + this.currentSequence = []; + this.userClicks = []; + this.currentScore = 0; + this.difficulty = 1000; + this.generateSequence(); + }, + play: async function() { + await this.timer(2000); + for (var i = 0; i < this.currentSequence.length; i++) { + this.colorStatus[this.currentSequence[i]] = true; + await this.timer(this.difficulty); + this.colorStatus[this.currentSequence[i]] = false; + await this.timer(this.difficulty / 2); + } + }, + lightUp: async function() { + let t = 150; + this.colorStatus.red = true; + await this.timer(t); + this.colorStatus.red = false; + this.colorStatus.green = true; + await this.timer(t); + this.colorStatus.green = false; + this.colorStatus.yellow = true; + await this.timer(t); + this.colorStatus.yellow = false; + this.colorStatus.blue = true; + await this.timer(t); + this.colorStatus.blue = false; + this.colorStatus.red = true; + await this.timer(t); + this.colorStatus.red = false; + }, + changeTheme: function() { + if (theme && theme.changeTo) { + theme.changeTo("msdos"); + } + } + } +}); diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosblibbet.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosblibbet.png new file mode 100644 index 0000000..1184e99 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosblibbet.png differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff new file mode 100644 index 0000000..de7b9b2 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff2 b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff2 new file mode 100644 index 0000000..a8161d7 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff2 differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdostheme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdostheme.css new file mode 100644 index 0000000..8100c3a --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdostheme.css @@ -0,0 +1,122 @@ +@font-face { + font-family: "vga"; + src: url("moreperfectdosvga.woff2") format("woff2"), + url("moreperfectdosvga.woff") format("woff"); + font-weight: normal; + font-style: normal; +} + +/* MSDOS Font: 'More Perfect DOS VGA' by Adam Moore http://laemeur.sdf.org/fonts/ */ + +body.js-theme-msdos { + color: #4bffff; + background: #0000ab; + font-family: "vga", "Courier New", Courier, monospace; + margin: 0; +} + +.js-theme-msdos:before { + content: ""; + position: absolute; + top: 10px; + left: 10px; + right: 10px; + bottom: 10px; + border: 6px double #4bffff; +} + +.js-theme-msdos:after { + content: "C:\\"; + position: absolute; + top: 4px; + padding: 0 6px; + color: #0000ab; + background: #4bffff; + line-height: 0.9; + font-size: 1.2rem; +} + +.js-theme-msdos .logo-link { + animation: none; +} + +.js-theme-msdos .logo { + position: relative; +} + +.js-theme-msdos .logo > span { + display: none; +} + +.js-theme-msdos .logo:before { + content: ""; + position: absolute; + top: 66%; + left: 50%; + transform: translate(-50%, -50%); + width: 226px; + height: 32px; + z-index: 100; + background: url("blibbet.png") center/cover no-repeat; +} + +.js-theme-msdos main h1 { + border-bottom: 2px solid #4bffff; +} + +.js-theme-msdos a:not(.logo-link) { + color: #ffff44; + animation: none; +} + +.js-theme-msdos a:not(.logo-link):hover, +.js-theme-msdos a:not(.logo-link):focus { + color: #0e0e0e; + -webkit-text-fill-color: #000 !important; + padding: 0.2rem; + background: #ffff44; + position: relative; +} + +.js-theme-msdos a:not(.logo-link):hover:after, +.js-theme-msdos a:not(.logo-link):focus:after { + content: ""; + position: absolute; + top: 6px; + left: 6px; + width: 100%; + height: 100%; + background: #000; + z-index: -1; +} + +.js-theme-msdos .theme { + opacity: 1; +} + +.js-theme-msdos .theme__item + .theme__item { + margin-left: 0.5rem; +} + +.js-theme-msdos .theme__button:before { + content: "Theme"; + padding-right: 5px; +} + +.js-theme-msdos .theme__button { + text-indent: 0; + width: auto; + height: 1rem; + font-size: 0.8rem; + padding-right: 10px; + font-family: "vga", "Courier New", Courier, monospace; + background: #00a8a8; + border-radius: 0; + color: #0e0e0e; +} + +.js-theme-msdos .theme__button:hover, +.js-theme-msdos .theme__button:focus { + background: #ffff44; + color: #0e0e0e; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.css new file mode 100644 index 0000000..e1192f2 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.css @@ -0,0 +1,129 @@ +@keyframes fade-in { + from { + opacity: 0; + } + to { + transform: none; + opacity: 1; + } +} + +/* UI Styling */ + +.theme { + cursor: pointer; + display: inline-block; + position: relative; + margin: auto auto; + padding: 0.5rem 0.5rem; + font-size: 0; + text-align: center; + z-index: 1; + transition: opacity 0.3s ease; + pointer-events: all; +} + +.theme__list, +.theme__button { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.theme__list { + list-style: none; + animation: 1s both fade-in; + animation-delay: calc(var(--move-in-base-delay) * 9); +} + +.theme__item { + position: relative; + display: inline-block; + vertical-align: top; +} + +.theme__item + .theme__item { + margin-left: 0.5rem; + transition: margin-left 0.3s ease; +} + +.theme__button { + display: block; + position: relative; + text-indent: -9999px; + width: 1.2rem; + height: 1.2rem; + background: blue; + border: 0px solid #444; + border-radius: 0.6rem; + cursor: pointer; + z-index: 100; +} + +button.theme__button:focus { + text-decoration: none; + outline: none; + box-shadow: none; +} + +.theme__button[value="dark"] { + background: black; +} + +.theme__button[value="light"] { + background: white; +} + +@media only screen and (min-width: 640px) { + .theme { + opacity: 0.5; + } + .theme:hover { + opacity: 1; + } + .theme__item + .theme__item { + margin-left: -0.8rem; + } + .theme:hover .theme__item + .theme__item { + margin-left: 0.5rem; + } +} + +/* Theme Setting */ + +body { + transition: background-color 0.3s ease; +} + +body.js-theme-light { + color: #222; + background-color: #fdfdfd; +} + +.js-theme-light main h1 { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); +} + +.js-theme-light a { + color: var(--brand-blue); +} + +.js-theme-light a:hover { + background-image: linear-gradient( + to right, + var(--brand-blue) 25%, + var(--brand-green) 50%, + var(--brand-yellow) 75%, + var(--brand-blue) 100% + ); +} + +.js-theme-dark .theme__button[value="dark"] { + z-index: 95; + border: 3px solid #828282; +} + +.js-theme-light .theme__button[value="light"] { + z-index: 95; + border: 3px solid #dedede; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.js new file mode 100644 index 0000000..14fcba8 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.js @@ -0,0 +1,44 @@ +const USER_THEME = "ms-tt-user-theme"; +const storedTheme = window.ls.getItem(USER_THEME); + +var theme = { + activeTheme: "dark", + load: function(theme, cb) { + var id = "theme-" + theme; + if (!document.getElementById(id)) { + var $head = document.getElementsByTagName("head")[0]; + var $link = document.createElement("link"); + $link.id = id; + $link.rel = "stylesheet"; + $link.type = "text/css"; + $link.href = "./theme/" + theme + "/theme.css"; + $head.appendChild($link); + + $link.onload = function() { + if (!!cb) cb(); + }; + $link.onerror = function() { + console.warn("loading " + theme + " theme failed."); + }; + } + }, + changeTo: function(theme) { + if (["light", "dark"].indexOf(theme) === -1) { + this.load(theme); + } else { + window.ls.setItem(USER_THEME, theme); + } + document.body.classList.remove("js-theme-" + this.activeTheme); + this.activeTheme = theme; + document.body.classList.add("js-theme-" + this.activeTheme); + } +}; + +document.querySelector(".theme").onclick = function(e) { + var nextTheme = theme.activeTheme === "dark" ? "light" : "dark"; + theme.changeTo(nextTheme); +}; + +if (storedTheme) { + theme.changeTo(storedTheme); +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/css/style.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/css/style.css new file mode 100644 index 0000000..c36f875 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/css/style.css @@ -0,0 +1,410 @@ +@charset "UTF-8"; +:root { + /* color defaults */ + --brand-blue: #05a6f0; + --brand-yellow: #ffba08; + --brand-red: #f35325; + --brand-green: #81bc06; + --white: #ffffff; + --off-white: #bbb; + --dark-grey: #121212; + /* typeface defaults */ + --primary-typeface: Segoe UI, SegoeUI, Segoe WP, Helvetica Neue, Helvetica, + Tahoma, Arial, sans-serif; + --title-font-size: 1.3rem; + --base-font-size: 20px; + --base-font-line-height: 28px; + --small-font-size: 12px; + --small-font-line-height: 14px; + /* animations */ + --root-gradient-animation: 4s both root-gradient linear infinite; + --move-in-offset: 20px; + --move-in-animation: 1s both move-in; + --move-in-base-delay: 100ms; + --logo-tiles-in-animation: 1s both logo-tiles-in; + --logo-tiles-in-delay: 100ms; + /* spacing */ + --small-space: 1em; + --large-space: 2em; + --text-block-spacing: 0.5em; +} + +@keyframes move-in { + from { + transform: translateY(var(--move-in-offset)); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +@keyframes logo-tiles-in { + 0% { + opacity: 0; + filter: grayscale(1) hue-rotate(100deg); + } + 25% { + opacity: 1; + } + 50% { + opacity: 1; + } + 55% { + opacity: 0; + } + 60% { + opacity: 1; + filter: grayscale(1) hue-rotate(100deg); + } + 100% { + opacity: 1; + filter: grayscale(0) hue-rotate(0deg); + } +} + +@keyframes logo-tiles-hover { + from { + filter: hue-rotate(0deg); + } + to { + filter: hue-rotate(360deg); + } +} + +@keyframes root-gradient { + 0% { + opacity: 0; + } + 40% { + opacity: 1; + } + 60% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +@keyframes text-gradient-ltr { + to { + background-position: -600% center; + } +} + +@keyframes text-gradient-rtl { + to { + background-position: 600% center; + } +} + +/* Common */ + +html { + position: relative; + font-size: var(--base-font-size); + font-family: var(--primary-typeface); + line-height: var(--base-font-line-height); + background-color: var(--dark-grey); +} + +html[data-loaded] { + background: linear-gradient( + to bottom, + var(--brand-blue) 33%, + var(--brand-yellow) 67% + ); +} + +html:before { + content: ""; + position: absolute; + display: block; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: -1; + background: unquote( + "-moz-linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)" + ); + background: unquote( + "linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)" + ); + background: linear-gradient( + to bottom, + var(--brand-yellow) 33%, + var(--brand-blue) 67% + ); + animation: var(--root-gradient-animation); +} + +body { + display: flex; + flex-direction: column; + align-items: center; + min-height: calc(100vh - 10px); + margin: 5px; + padding: 0 var(--small-space); + color: var(--off-white); + background-color: var(--dark-grey); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +::-moz-selection { + color: var(--white); + background-color: var(--brand-blue); +} + +::selection { + color: var(--white); + background: #05a6f0; + /* Edge could not work with custom property here */ + background-color: var(--brand-blue); +} + +a { + color: var(--brand-yellow); + text-decoration: none; +} + +a:hover, +a:focus { + background-image: linear-gradient( + to right, + var(--brand-yellow) 25%, + var(--brand-green) 50%, + var(--brand-blue) 75%, + var(--brand-yellow) 100% + ); + background-size: 600% auto; + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + background-clip: text; +} + +html[dir="ltr"] a:not(.logo-link):hover, +html[dir="ltr"] a:not(.logo-link):focus { + animation: text-gradient-ltr 6.5s linear infinite; +} + +html[dir="rtl"] a:not(.logo-link):hover, +html[dir="rtl"] a:not(.logo-link):focus { + animation: text-gradient-rtl 6.5s linear infinite; +} + +p, +h1 { + margin: 0; + padding: var(--text-block-spacing) 0; +} + +/* Container */ + +.container { + max-width: 31rem; + margin: 0 auto auto; +} + +@media only screen and (max-width: 40em) { + .container { + max-width: 80vw; + } + .container p { + font-size: 1.125rem; + } +} + +main p:nth-child(2) { + animation-delay: calc(var(--move-in-base-delay) * 6); +} + +main p:nth-child(3) { + animation-delay: calc(var(--move-in-base-delay) * 7); +} + +main p:nth-child(4) { + animation-delay: calc(var(--move-in-base-delay) * 8); +} + +/* Logo */ + +.logo-link { + display: block; + width: 4rem; + height: 4rem; + margin: var(--large-space) auto; +} + +.logo-image { + display: block; + width: 100%; + height: auto; +} + +.logo { + display: flex; + flex-wrap: wrap; + height: 100%; + width: 100%; + margin: 0; +} + +.logo-tile { + display: block; + width: 45%; + height: 45%; + margin: 2.5%; + outline: 1px solid transparent; + animation: var(--logo-tiles-in-animation); +} + +.winner { + display: block; + margin: auto; + text-align: center; +} + +.logo-tile--red { + background-color: var(--brand-red); + transition: 150ms; +} + +.logo-tile--largered { + background-color: var(--brand-red); + transform: scale(1.2) translateY(-3px); + transition: 150ms; +} + +.logo-tile--red:active { + transform: scale(0.8); +} + +.logo-tile--green { + background-color: var(--brand-green); + animation-delay: var(--logo-tiles-in-delay); + transition: 150ms; +} + +.logo-tile--largegreen { + background-color: var(--brand-green); + transform: scale(1.2) translateY(-3px); + animation-delay: var(--logo-tiles-in-delay); + transition: 150ms; +} + +.logo-tile--green:active { + transform: scale(0.8); +} + +.logo-tile--blue { + background-color: var(--brand-blue); + animation-delay: calc(var(--logo-tiles-in-delay) * 2); + transition: 150ms; +} + +.logo-tile--largeblue { + background-color: var(--brand-blue); + transform: scale(1.2) translateY(-3px); + animation-delay: calc(var(--logo-tiles-in-delay) * 2); + transition: 150ms; +} + +.logo-tile--blue:active { + transform: scale(0.8); +} + +.logo-tile--yellow { + background-color: var(--brand-yellow); + animation-delay: calc(var(--logo-tiles-in-delay) * 3); + transition: 150ms; +} + +.logo-tile--largeyellow { + background-color: var(--brand-yellow); + transform: scale(1.2) translateY(-3px); + animation-delay: calc(var(--logo-tiles-in-delay) * 3); + transition: 150ms; +} + +.logo-tile--yellow:active { + transform: scale(0.8); +} + +/* Main */ + +main h1 { + animation: var(--move-in-animation); + animation-delay: calc(var(--move-in-base-delay) * 4); + font-size: var(--title-font-size); + font-weight: bold; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + margin-bottom: var(--small-space); + padding-bottom: var(--small-space); +} + +main p { + animation: var(--move-in-animation); +} +main p:nth-of-type(1) { + animation-delay: calc(var(--move-in-base-delay) * 5); +} +main p:nth-of-type(2) { + animation-delay: calc(var(--move-in-base-delay) * 6); +} +main p:nth-of-type(3) { + animation-delay: calc(var(--move-in-base-delay) * 7); +} +main p:nth-of-type(4) { + animation-delay: calc(var(--move-in-base-delay) * 8); +} + +/* Footer */ + +.footer { + font-size: var(--small-font-size); + line-height: var(--small-font-line-height); + text-align: center; + margin: var(--small-space) 0 0; + padding: var(--small-space) 0; + overflow: hidden; +} + +@media only screen and (max-width: 40em) { + footer { + font-size: 1rem; + margin: 0 auto; + max-width: 80vw; + } +} + +footer p { + animation: var(--move-in-animation); + animation-delay: calc(var(--move-in-base-delay) * 11); +} + +footer [href*="github"]:hover, +footer [href*="github"]:focus { + color: var(--brand-green); +} + +.footer-piece--separate { + display: block; +} + +@media only screen and (max-width: 40em) { + .footer-piece { + display: block; + } +} + +.time-travel { + text-align: center; +} + +.time-travel a { + cursor: pointer; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/images/microsoft-og-image.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/images/microsoft-og-image.png new file mode 100644 index 0000000..2f0eee7 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/images/microsoft-og-image.png differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/index.html b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/index.html new file mode 100644 index 0000000..166c4aa --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/index.html @@ -0,0 +1,127 @@ + + + + + + + + Join Microsoft Developer Design + + + + + + + + + + + + + + +
+
+ + šŸŽŠ Simon says...A winner is you! šŸŽŠ +
+
+

+ Microsoft is looking for designers who code to help create the most compelling developer tools & services on + the planet. +

+

+ We have open positions for technical product designers & design leaders in San Francisco, Seattle, and elsewhere. +

+

+ We use PCs, Macs, Figma, Sketch, GitHub, JavaScript, ZEIT, and other modern tools to design, prototype, and build the future + of software development. +

+

+ We believe in diversity, openness, and building delightful tools that empower every person and organization to achieve more. +

+

+ Interested? Send a PR with any improvement to + microsoft/join-dev-design or + email us. +

+
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/simon.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/simon.js new file mode 100644 index 0000000..dd38e82 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/simon.js @@ -0,0 +1,147 @@ +new Vue({ + el: "#app", + data: { + colors: ["red", "green", "yellow", "blue"], + currentSequence: [], + colorStatus: { + red: false, + green: false, + yellow: false, + blue: false + }, + colorSymbols: { + red: "ā¤ļø", + green: "šŸ’š", + yellow: "šŸ’›", + blue: "šŸ’™" + }, + userClicks: [], + currentScore: 0, + difficulty: 1000 + }, + created() { + this.generateSequence(); + }, + watch: { + winner: function(isWinner) { + if (isWinner) { + this.changeTheme(); + } + } + }, + computed: { + logoTitleRed: function() { + return this.colorStatus.red ? "logo-tile--largered" : "logo-tile--red"; + }, + logoTitleGreen: function() { + return this.colorStatus.green + ? "logo-tile--largegreen" + : "logo-tile--green"; + }, + logoTitleYellow: function() { + return this.colorStatus.yellow + ? "logo-tile--largeyellow" + : "logo-tile--yellow"; + }, + logoTitleBlue: function() { + return this.colorStatus.blue ? "logo-tile--largeblue" : "logo-tile--blue"; + }, + winner: function() { + return this.currentScore >= 10 ? true : false; + } + }, + methods: { + generateSequence: function() { + this.currentSequence.push( + this.colors[this.getRandomInt(this.colors.length)] + ); + if (this.currentScore > 0) { + this.play(); + } else { + console.log( + `šŸ•µļøā€ā™‚ļøšŸ•µļøā€ā™€ļø PSSST! There is a game inside this webpage...\nClick the ${ + this.colorSymbols[this.currentSequence[0]] + } tile on the Microsoft logo to play!` + ); + } + }, + clickColor: function(color) { + this.userClicks.push(color); + if (this.checkCorrect()) { + this.userClicks = []; + if (this.difficulty > 100) { + this.difficulty -= 100; + } + this.currentScore++; + console.log( + `Simon says..."correct!" šŸŽ‰ Your score is`, + this.currentScore + ); + this.lightUp(); + this.generateSequence(); + } + }, + getRandomInt: function(max) { + return Math.floor(Math.random() * Math.floor(max)); + }, + timer: function(ms) { + return new Promise(res => setTimeout(res, ms)); + }, + checkCorrect: function() { + let matching = true; + let sequence = + this.userClicks[this.userClicks.length - 1] === + this.currentSequence[this.userClicks.length - 1]; + if (!sequence) { + this.reset(); + } + for (let i = 0; i < this.currentSequence.length; i++) { + if (this.userClicks[i] !== this.currentSequence[i]) { + matching = false; + break; + } + } + return matching; + }, + reset: function() { + console.log(`😢 Game Over! Refresh to play again.`); + this.currentSequence = []; + this.userClicks = []; + this.currentScore = 0; + this.difficulty = 1000; + this.generateSequence(); + }, + play: async function() { + await this.timer(2000); + for (var i = 0; i < this.currentSequence.length; i++) { + this.colorStatus[this.currentSequence[i]] = true; + await this.timer(this.difficulty); + this.colorStatus[this.currentSequence[i]] = false; + await this.timer(this.difficulty / 2); + } + }, + lightUp: async function() { + let t = 150; + this.colorStatus.red = true; + await this.timer(t); + this.colorStatus.red = false; + this.colorStatus.green = true; + await this.timer(t); + this.colorStatus.green = false; + this.colorStatus.yellow = true; + await this.timer(t); + this.colorStatus.yellow = false; + this.colorStatus.blue = true; + await this.timer(t); + this.colorStatus.blue = false; + this.colorStatus.red = true; + await this.timer(t); + this.colorStatus.red = false; + }, + changeTheme: function() { + if (theme && theme.changeTo) { + theme.changeTo("msdos"); + } + } + } +}); diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosblibbet.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosblibbet.png new file mode 100644 index 0000000..1184e99 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosblibbet.png differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff new file mode 100644 index 0000000..de7b9b2 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff2 b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff2 new file mode 100644 index 0000000..a8161d7 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff2 differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdostheme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdostheme.css new file mode 100644 index 0000000..8100c3a --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdostheme.css @@ -0,0 +1,122 @@ +@font-face { + font-family: "vga"; + src: url("moreperfectdosvga.woff2") format("woff2"), + url("moreperfectdosvga.woff") format("woff"); + font-weight: normal; + font-style: normal; +} + +/* MSDOS Font: 'More Perfect DOS VGA' by Adam Moore http://laemeur.sdf.org/fonts/ */ + +body.js-theme-msdos { + color: #4bffff; + background: #0000ab; + font-family: "vga", "Courier New", Courier, monospace; + margin: 0; +} + +.js-theme-msdos:before { + content: ""; + position: absolute; + top: 10px; + left: 10px; + right: 10px; + bottom: 10px; + border: 6px double #4bffff; +} + +.js-theme-msdos:after { + content: "C:\\"; + position: absolute; + top: 4px; + padding: 0 6px; + color: #0000ab; + background: #4bffff; + line-height: 0.9; + font-size: 1.2rem; +} + +.js-theme-msdos .logo-link { + animation: none; +} + +.js-theme-msdos .logo { + position: relative; +} + +.js-theme-msdos .logo > span { + display: none; +} + +.js-theme-msdos .logo:before { + content: ""; + position: absolute; + top: 66%; + left: 50%; + transform: translate(-50%, -50%); + width: 226px; + height: 32px; + z-index: 100; + background: url("blibbet.png") center/cover no-repeat; +} + +.js-theme-msdos main h1 { + border-bottom: 2px solid #4bffff; +} + +.js-theme-msdos a:not(.logo-link) { + color: #ffff44; + animation: none; +} + +.js-theme-msdos a:not(.logo-link):hover, +.js-theme-msdos a:not(.logo-link):focus { + color: #0e0e0e; + -webkit-text-fill-color: #000 !important; + padding: 0.2rem; + background: #ffff44; + position: relative; +} + +.js-theme-msdos a:not(.logo-link):hover:after, +.js-theme-msdos a:not(.logo-link):focus:after { + content: ""; + position: absolute; + top: 6px; + left: 6px; + width: 100%; + height: 100%; + background: #000; + z-index: -1; +} + +.js-theme-msdos .theme { + opacity: 1; +} + +.js-theme-msdos .theme__item + .theme__item { + margin-left: 0.5rem; +} + +.js-theme-msdos .theme__button:before { + content: "Theme"; + padding-right: 5px; +} + +.js-theme-msdos .theme__button { + text-indent: 0; + width: auto; + height: 1rem; + font-size: 0.8rem; + padding-right: 10px; + font-family: "vga", "Courier New", Courier, monospace; + background: #00a8a8; + border-radius: 0; + color: #0e0e0e; +} + +.js-theme-msdos .theme__button:hover, +.js-theme-msdos .theme__button:focus { + background: #ffff44; + color: #0e0e0e; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.css new file mode 100644 index 0000000..e1192f2 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.css @@ -0,0 +1,129 @@ +@keyframes fade-in { + from { + opacity: 0; + } + to { + transform: none; + opacity: 1; + } +} + +/* UI Styling */ + +.theme { + cursor: pointer; + display: inline-block; + position: relative; + margin: auto auto; + padding: 0.5rem 0.5rem; + font-size: 0; + text-align: center; + z-index: 1; + transition: opacity 0.3s ease; + pointer-events: all; +} + +.theme__list, +.theme__button { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.theme__list { + list-style: none; + animation: 1s both fade-in; + animation-delay: calc(var(--move-in-base-delay) * 9); +} + +.theme__item { + position: relative; + display: inline-block; + vertical-align: top; +} + +.theme__item + .theme__item { + margin-left: 0.5rem; + transition: margin-left 0.3s ease; +} + +.theme__button { + display: block; + position: relative; + text-indent: -9999px; + width: 1.2rem; + height: 1.2rem; + background: blue; + border: 0px solid #444; + border-radius: 0.6rem; + cursor: pointer; + z-index: 100; +} + +button.theme__button:focus { + text-decoration: none; + outline: none; + box-shadow: none; +} + +.theme__button[value="dark"] { + background: black; +} + +.theme__button[value="light"] { + background: white; +} + +@media only screen and (min-width: 640px) { + .theme { + opacity: 0.5; + } + .theme:hover { + opacity: 1; + } + .theme__item + .theme__item { + margin-left: -0.8rem; + } + .theme:hover .theme__item + .theme__item { + margin-left: 0.5rem; + } +} + +/* Theme Setting */ + +body { + transition: background-color 0.3s ease; +} + +body.js-theme-light { + color: #222; + background-color: #fdfdfd; +} + +.js-theme-light main h1 { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); +} + +.js-theme-light a { + color: var(--brand-blue); +} + +.js-theme-light a:hover { + background-image: linear-gradient( + to right, + var(--brand-blue) 25%, + var(--brand-green) 50%, + var(--brand-yellow) 75%, + var(--brand-blue) 100% + ); +} + +.js-theme-dark .theme__button[value="dark"] { + z-index: 95; + border: 3px solid #828282; +} + +.js-theme-light .theme__button[value="light"] { + z-index: 95; + border: 3px solid #dedede; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.js new file mode 100644 index 0000000..ef31863 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.js @@ -0,0 +1,34 @@ +var theme = { + activeTheme: "dark", + load: function(theme, cb) { + var id = "theme-" + theme; + if (!document.getElementById(id)) { + var $head = document.getElementsByTagName("head")[0]; + var $link = document.createElement("link"); + $link.id = id; + $link.rel = "stylesheet"; + $link.type = "text/css"; + $link.href = "./theme/" + theme + "/theme.css"; + $head.appendChild($link); + + $link.onload = function() { + if (!!cb) cb(); + }; + $link.onerror = function() { + console.warn("loading " + theme + " theme failed."); + }; + } + }, + changeTo: function(theme) { + if (["light", "dark"].indexOf(theme) === -1) this.load(theme); + + document.body.classList.remove("js-theme-" + this.activeTheme); + this.activeTheme = theme; + document.body.classList.add("js-theme-" + this.activeTheme); + } +}; + +document.querySelector(".theme").onclick = function(e) { + var nextTheme = theme.activeTheme === "dark" ? "light" : "dark"; + theme.changeTo(nextTheme); +}; diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/css/style.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/css/style.css new file mode 100644 index 0000000..c36f875 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/css/style.css @@ -0,0 +1,410 @@ +@charset "UTF-8"; +:root { + /* color defaults */ + --brand-blue: #05a6f0; + --brand-yellow: #ffba08; + --brand-red: #f35325; + --brand-green: #81bc06; + --white: #ffffff; + --off-white: #bbb; + --dark-grey: #121212; + /* typeface defaults */ + --primary-typeface: Segoe UI, SegoeUI, Segoe WP, Helvetica Neue, Helvetica, + Tahoma, Arial, sans-serif; + --title-font-size: 1.3rem; + --base-font-size: 20px; + --base-font-line-height: 28px; + --small-font-size: 12px; + --small-font-line-height: 14px; + /* animations */ + --root-gradient-animation: 4s both root-gradient linear infinite; + --move-in-offset: 20px; + --move-in-animation: 1s both move-in; + --move-in-base-delay: 100ms; + --logo-tiles-in-animation: 1s both logo-tiles-in; + --logo-tiles-in-delay: 100ms; + /* spacing */ + --small-space: 1em; + --large-space: 2em; + --text-block-spacing: 0.5em; +} + +@keyframes move-in { + from { + transform: translateY(var(--move-in-offset)); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +@keyframes logo-tiles-in { + 0% { + opacity: 0; + filter: grayscale(1) hue-rotate(100deg); + } + 25% { + opacity: 1; + } + 50% { + opacity: 1; + } + 55% { + opacity: 0; + } + 60% { + opacity: 1; + filter: grayscale(1) hue-rotate(100deg); + } + 100% { + opacity: 1; + filter: grayscale(0) hue-rotate(0deg); + } +} + +@keyframes logo-tiles-hover { + from { + filter: hue-rotate(0deg); + } + to { + filter: hue-rotate(360deg); + } +} + +@keyframes root-gradient { + 0% { + opacity: 0; + } + 40% { + opacity: 1; + } + 60% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +@keyframes text-gradient-ltr { + to { + background-position: -600% center; + } +} + +@keyframes text-gradient-rtl { + to { + background-position: 600% center; + } +} + +/* Common */ + +html { + position: relative; + font-size: var(--base-font-size); + font-family: var(--primary-typeface); + line-height: var(--base-font-line-height); + background-color: var(--dark-grey); +} + +html[data-loaded] { + background: linear-gradient( + to bottom, + var(--brand-blue) 33%, + var(--brand-yellow) 67% + ); +} + +html:before { + content: ""; + position: absolute; + display: block; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: -1; + background: unquote( + "-moz-linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)" + ); + background: unquote( + "linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)" + ); + background: linear-gradient( + to bottom, + var(--brand-yellow) 33%, + var(--brand-blue) 67% + ); + animation: var(--root-gradient-animation); +} + +body { + display: flex; + flex-direction: column; + align-items: center; + min-height: calc(100vh - 10px); + margin: 5px; + padding: 0 var(--small-space); + color: var(--off-white); + background-color: var(--dark-grey); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +::-moz-selection { + color: var(--white); + background-color: var(--brand-blue); +} + +::selection { + color: var(--white); + background: #05a6f0; + /* Edge could not work with custom property here */ + background-color: var(--brand-blue); +} + +a { + color: var(--brand-yellow); + text-decoration: none; +} + +a:hover, +a:focus { + background-image: linear-gradient( + to right, + var(--brand-yellow) 25%, + var(--brand-green) 50%, + var(--brand-blue) 75%, + var(--brand-yellow) 100% + ); + background-size: 600% auto; + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + background-clip: text; +} + +html[dir="ltr"] a:not(.logo-link):hover, +html[dir="ltr"] a:not(.logo-link):focus { + animation: text-gradient-ltr 6.5s linear infinite; +} + +html[dir="rtl"] a:not(.logo-link):hover, +html[dir="rtl"] a:not(.logo-link):focus { + animation: text-gradient-rtl 6.5s linear infinite; +} + +p, +h1 { + margin: 0; + padding: var(--text-block-spacing) 0; +} + +/* Container */ + +.container { + max-width: 31rem; + margin: 0 auto auto; +} + +@media only screen and (max-width: 40em) { + .container { + max-width: 80vw; + } + .container p { + font-size: 1.125rem; + } +} + +main p:nth-child(2) { + animation-delay: calc(var(--move-in-base-delay) * 6); +} + +main p:nth-child(3) { + animation-delay: calc(var(--move-in-base-delay) * 7); +} + +main p:nth-child(4) { + animation-delay: calc(var(--move-in-base-delay) * 8); +} + +/* Logo */ + +.logo-link { + display: block; + width: 4rem; + height: 4rem; + margin: var(--large-space) auto; +} + +.logo-image { + display: block; + width: 100%; + height: auto; +} + +.logo { + display: flex; + flex-wrap: wrap; + height: 100%; + width: 100%; + margin: 0; +} + +.logo-tile { + display: block; + width: 45%; + height: 45%; + margin: 2.5%; + outline: 1px solid transparent; + animation: var(--logo-tiles-in-animation); +} + +.winner { + display: block; + margin: auto; + text-align: center; +} + +.logo-tile--red { + background-color: var(--brand-red); + transition: 150ms; +} + +.logo-tile--largered { + background-color: var(--brand-red); + transform: scale(1.2) translateY(-3px); + transition: 150ms; +} + +.logo-tile--red:active { + transform: scale(0.8); +} + +.logo-tile--green { + background-color: var(--brand-green); + animation-delay: var(--logo-tiles-in-delay); + transition: 150ms; +} + +.logo-tile--largegreen { + background-color: var(--brand-green); + transform: scale(1.2) translateY(-3px); + animation-delay: var(--logo-tiles-in-delay); + transition: 150ms; +} + +.logo-tile--green:active { + transform: scale(0.8); +} + +.logo-tile--blue { + background-color: var(--brand-blue); + animation-delay: calc(var(--logo-tiles-in-delay) * 2); + transition: 150ms; +} + +.logo-tile--largeblue { + background-color: var(--brand-blue); + transform: scale(1.2) translateY(-3px); + animation-delay: calc(var(--logo-tiles-in-delay) * 2); + transition: 150ms; +} + +.logo-tile--blue:active { + transform: scale(0.8); +} + +.logo-tile--yellow { + background-color: var(--brand-yellow); + animation-delay: calc(var(--logo-tiles-in-delay) * 3); + transition: 150ms; +} + +.logo-tile--largeyellow { + background-color: var(--brand-yellow); + transform: scale(1.2) translateY(-3px); + animation-delay: calc(var(--logo-tiles-in-delay) * 3); + transition: 150ms; +} + +.logo-tile--yellow:active { + transform: scale(0.8); +} + +/* Main */ + +main h1 { + animation: var(--move-in-animation); + animation-delay: calc(var(--move-in-base-delay) * 4); + font-size: var(--title-font-size); + font-weight: bold; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + margin-bottom: var(--small-space); + padding-bottom: var(--small-space); +} + +main p { + animation: var(--move-in-animation); +} +main p:nth-of-type(1) { + animation-delay: calc(var(--move-in-base-delay) * 5); +} +main p:nth-of-type(2) { + animation-delay: calc(var(--move-in-base-delay) * 6); +} +main p:nth-of-type(3) { + animation-delay: calc(var(--move-in-base-delay) * 7); +} +main p:nth-of-type(4) { + animation-delay: calc(var(--move-in-base-delay) * 8); +} + +/* Footer */ + +.footer { + font-size: var(--small-font-size); + line-height: var(--small-font-line-height); + text-align: center; + margin: var(--small-space) 0 0; + padding: var(--small-space) 0; + overflow: hidden; +} + +@media only screen and (max-width: 40em) { + footer { + font-size: 1rem; + margin: 0 auto; + max-width: 80vw; + } +} + +footer p { + animation: var(--move-in-animation); + animation-delay: calc(var(--move-in-base-delay) * 11); +} + +footer [href*="github"]:hover, +footer [href*="github"]:focus { + color: var(--brand-green); +} + +.footer-piece--separate { + display: block; +} + +@media only screen and (max-width: 40em) { + .footer-piece { + display: block; + } +} + +.time-travel { + text-align: center; +} + +.time-travel a { + cursor: pointer; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/images/microsoft-og-image.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/images/microsoft-og-image.png new file mode 100644 index 0000000..2f0eee7 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/images/microsoft-og-image.png differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/index.html b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/index.html new file mode 100644 index 0000000..9ca80de --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/index.html @@ -0,0 +1,128 @@ + + + + + + + + Join Microsoft Developer Design + + + + + + + + + + + + + + +
+
+ + šŸŽŠ Simon says...A winner is you! šŸŽŠ +
+
+

+ Microsoft is looking for designers who code to help create the most compelling developer tools & services on + the planet. +

+

+ We have open positions for technical product designers & design leaders in San Francisco, Seattle, and elsewhere. +

+

+ We use PCs, Macs, Figma, Sketch, GitHub, JavaScript, ZEIT, and other modern tools to design, prototype, and build the future + of software development. +

+

+ We believe in diversity, openness, and building delightful tools that empower every person and organization to achieve more. +

+

+ Interested? Send a PR with any improvement to + microsoft/join-dev-design or + email us. +

+
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/simon.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/simon.js new file mode 100644 index 0000000..76cf75d --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/simon.js @@ -0,0 +1,156 @@ +new Vue({ + el: "#app", + data: { + colors: ["red", "green", "yellow", "blue"], + currentSequence: [], + colorStatus: { + red: false, + green: false, + yellow: false, + blue: false + }, + colorSymbols: { + red: "ā¤ļø", + green: "šŸ’š", + yellow: "šŸ’›", + blue: "šŸ’™" + }, + userClicks: [], + currentScore: 0, + difficulty: 1000 + }, + created() { + this.generateSequence(); + }, + watch: { + winner: function(isWinner) { + if (isWinner) { + this.changeTheme(); + } + } + }, + computed: { + logoTitleRed: function() { + return this.colorStatus.red ? "logo-tile--largered" : "logo-tile--red"; + }, + logoTitleGreen: function() { + return this.colorStatus.green + ? "logo-tile--largegreen" + : "logo-tile--green"; + }, + logoTitleYellow: function() { + return this.colorStatus.yellow + ? "logo-tile--largeyellow" + : "logo-tile--yellow"; + }, + logoTitleBlue: function() { + return this.colorStatus.blue ? "logo-tile--largeblue" : "logo-tile--blue"; + }, + winner: function() { + return this.currentScore >= 10 ? true : false; + } + }, + methods: { + generateSequence: function() { + this.currentSequence.push( + this.colors[this.getRandomInt(this.colors.length)] + ); + if (this.currentScore > 0) { + this.play(); + } else { + console.log( + `šŸ•µļøā€ā™‚ļø šŸ•µļøā€ā™€ļø HEY! \n\n\n *whispers* \n\n\nThere is a game inside this webpage... \ntry clicking on the ${ + this.colorSymbols[this.currentSequence[0]] + } tile on the Microsoft logo to get started!` + ); + console.log("\n\n\n🚨 Reload the page to reset the game šŸ‘Œ\n\n\n"); + } + }, + clickColor: function(color) { + this.userClicks.push(color); + if (this.checkCorrect()) { + this.userClicks = []; + if (this.difficulty > 100) { + this.difficulty -= 100; + } + this.currentScore++; + console.log( + `Simon says..."correct!" šŸŽ‰ Your score is`, + this.currentScore + ); + this.lightUp(); + this.generateSequence(); + } + }, + getRandomInt: function(max) { + return Math.floor(Math.random() * Math.floor(max)); + }, + timer: function(ms) { + return new Promise(res => setTimeout(res, ms)); + }, + checkCorrect: function() { + let matching = true; + let sequence = + this.userClicks[this.userClicks.length - 1] === + this.currentSequence[this.userClicks.length - 1]; + console.log( + `${this.userClicks[this.userClicks.length - 1]} ${ + sequence === true ? "šŸ‘" : "šŸ‘Ž" + }` + ); + if (!sequence) { + this.reset(); + } + for (let i = 0; i < this.currentSequence.length; i++) { + if (this.userClicks[i] !== this.currentSequence[i]) { + matching = false; + break; + } + } + return matching; + }, + reset: function() { + console.log(` + 😢 + Oh no! Game Over! Your score was ${this.currentScore} + `); + this.currentSequence = []; + this.userClicks = []; + this.currentScore = 0; + this.difficulty = 1000; + this.generateSequence(); + }, + play: async function() { + await this.timer(2000); + for (var i = 0; i < this.currentSequence.length; i++) { + this.colorStatus[this.currentSequence[i]] = true; + await this.timer(this.difficulty); + this.colorStatus[this.currentSequence[i]] = false; + await this.timer(this.difficulty / 2); + } + }, + lightUp: async function() { + let t = 150; + this.colorStatus.red = true; + await this.timer(t); + this.colorStatus.red = false; + this.colorStatus.green = true; + await this.timer(t); + this.colorStatus.green = false; + this.colorStatus.yellow = true; + await this.timer(t); + this.colorStatus.yellow = false; + this.colorStatus.blue = true; + await this.timer(t); + this.colorStatus.blue = false; + this.colorStatus.red = true; + await this.timer(t); + this.colorStatus.red = false; + }, + changeTheme: function() { + if (theme && theme.changeTo) { + theme.changeTo("msdos"); + } + } + } +}); diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosblibbet.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosblibbet.png new file mode 100644 index 0000000..1184e99 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosblibbet.png differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff new file mode 100644 index 0000000..de7b9b2 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff2 b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff2 new file mode 100644 index 0000000..a8161d7 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff2 differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdostheme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdostheme.css new file mode 100644 index 0000000..8100c3a --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdostheme.css @@ -0,0 +1,122 @@ +@font-face { + font-family: "vga"; + src: url("moreperfectdosvga.woff2") format("woff2"), + url("moreperfectdosvga.woff") format("woff"); + font-weight: normal; + font-style: normal; +} + +/* MSDOS Font: 'More Perfect DOS VGA' by Adam Moore http://laemeur.sdf.org/fonts/ */ + +body.js-theme-msdos { + color: #4bffff; + background: #0000ab; + font-family: "vga", "Courier New", Courier, monospace; + margin: 0; +} + +.js-theme-msdos:before { + content: ""; + position: absolute; + top: 10px; + left: 10px; + right: 10px; + bottom: 10px; + border: 6px double #4bffff; +} + +.js-theme-msdos:after { + content: "C:\\"; + position: absolute; + top: 4px; + padding: 0 6px; + color: #0000ab; + background: #4bffff; + line-height: 0.9; + font-size: 1.2rem; +} + +.js-theme-msdos .logo-link { + animation: none; +} + +.js-theme-msdos .logo { + position: relative; +} + +.js-theme-msdos .logo > span { + display: none; +} + +.js-theme-msdos .logo:before { + content: ""; + position: absolute; + top: 66%; + left: 50%; + transform: translate(-50%, -50%); + width: 226px; + height: 32px; + z-index: 100; + background: url("blibbet.png") center/cover no-repeat; +} + +.js-theme-msdos main h1 { + border-bottom: 2px solid #4bffff; +} + +.js-theme-msdos a:not(.logo-link) { + color: #ffff44; + animation: none; +} + +.js-theme-msdos a:not(.logo-link):hover, +.js-theme-msdos a:not(.logo-link):focus { + color: #0e0e0e; + -webkit-text-fill-color: #000 !important; + padding: 0.2rem; + background: #ffff44; + position: relative; +} + +.js-theme-msdos a:not(.logo-link):hover:after, +.js-theme-msdos a:not(.logo-link):focus:after { + content: ""; + position: absolute; + top: 6px; + left: 6px; + width: 100%; + height: 100%; + background: #000; + z-index: -1; +} + +.js-theme-msdos .theme { + opacity: 1; +} + +.js-theme-msdos .theme__item + .theme__item { + margin-left: 0.5rem; +} + +.js-theme-msdos .theme__button:before { + content: "Theme"; + padding-right: 5px; +} + +.js-theme-msdos .theme__button { + text-indent: 0; + width: auto; + height: 1rem; + font-size: 0.8rem; + padding-right: 10px; + font-family: "vga", "Courier New", Courier, monospace; + background: #00a8a8; + border-radius: 0; + color: #0e0e0e; +} + +.js-theme-msdos .theme__button:hover, +.js-theme-msdos .theme__button:focus { + background: #ffff44; + color: #0e0e0e; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.css new file mode 100644 index 0000000..e1192f2 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.css @@ -0,0 +1,129 @@ +@keyframes fade-in { + from { + opacity: 0; + } + to { + transform: none; + opacity: 1; + } +} + +/* UI Styling */ + +.theme { + cursor: pointer; + display: inline-block; + position: relative; + margin: auto auto; + padding: 0.5rem 0.5rem; + font-size: 0; + text-align: center; + z-index: 1; + transition: opacity 0.3s ease; + pointer-events: all; +} + +.theme__list, +.theme__button { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.theme__list { + list-style: none; + animation: 1s both fade-in; + animation-delay: calc(var(--move-in-base-delay) * 9); +} + +.theme__item { + position: relative; + display: inline-block; + vertical-align: top; +} + +.theme__item + .theme__item { + margin-left: 0.5rem; + transition: margin-left 0.3s ease; +} + +.theme__button { + display: block; + position: relative; + text-indent: -9999px; + width: 1.2rem; + height: 1.2rem; + background: blue; + border: 0px solid #444; + border-radius: 0.6rem; + cursor: pointer; + z-index: 100; +} + +button.theme__button:focus { + text-decoration: none; + outline: none; + box-shadow: none; +} + +.theme__button[value="dark"] { + background: black; +} + +.theme__button[value="light"] { + background: white; +} + +@media only screen and (min-width: 640px) { + .theme { + opacity: 0.5; + } + .theme:hover { + opacity: 1; + } + .theme__item + .theme__item { + margin-left: -0.8rem; + } + .theme:hover .theme__item + .theme__item { + margin-left: 0.5rem; + } +} + +/* Theme Setting */ + +body { + transition: background-color 0.3s ease; +} + +body.js-theme-light { + color: #222; + background-color: #fdfdfd; +} + +.js-theme-light main h1 { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); +} + +.js-theme-light a { + color: var(--brand-blue); +} + +.js-theme-light a:hover { + background-image: linear-gradient( + to right, + var(--brand-blue) 25%, + var(--brand-green) 50%, + var(--brand-yellow) 75%, + var(--brand-blue) 100% + ); +} + +.js-theme-dark .theme__button[value="dark"] { + z-index: 95; + border: 3px solid #828282; +} + +.js-theme-light .theme__button[value="light"] { + z-index: 95; + border: 3px solid #dedede; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.js new file mode 100644 index 0000000..f5f9899 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.js @@ -0,0 +1,34 @@ +var theme = { + activeTheme: "dark", + load: function(theme, cb) { + var id = "theme-" + theme; + if (!document.getElementById(id)) { + var $head = document.getElementsByTagName("head")[0]; + var $link = document.createElement("link"); + $link.id = id; + $link.rel = "stylesheet"; + $link.type = "text/css"; + $link.href = "/theme/" + theme + "/theme.css"; + $head.appendChild($link); + + $link.onload = function() { + if (!!cb) cb(); + }; + $link.onerror = function() { + console.warn("loading " + theme + " theme failed."); + }; + } + }, + changeTo: function(theme) { + if (["light", "dark"].indexOf(theme) === -1) this.load(theme); + + document.body.classList.remove("js-theme-" + this.activeTheme); + this.activeTheme = theme; + document.body.classList.add("js-theme-" + this.activeTheme); + } +}; + +document.querySelector(".theme").onclick = function(e) { + var nextTheme = theme.activeTheme === "dark" ? "light" : "dark"; + theme.changeTo(nextTheme); +}; diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/css/style.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/css/style.css new file mode 100644 index 0000000..c36f875 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/css/style.css @@ -0,0 +1,410 @@ +@charset "UTF-8"; +:root { + /* color defaults */ + --brand-blue: #05a6f0; + --brand-yellow: #ffba08; + --brand-red: #f35325; + --brand-green: #81bc06; + --white: #ffffff; + --off-white: #bbb; + --dark-grey: #121212; + /* typeface defaults */ + --primary-typeface: Segoe UI, SegoeUI, Segoe WP, Helvetica Neue, Helvetica, + Tahoma, Arial, sans-serif; + --title-font-size: 1.3rem; + --base-font-size: 20px; + --base-font-line-height: 28px; + --small-font-size: 12px; + --small-font-line-height: 14px; + /* animations */ + --root-gradient-animation: 4s both root-gradient linear infinite; + --move-in-offset: 20px; + --move-in-animation: 1s both move-in; + --move-in-base-delay: 100ms; + --logo-tiles-in-animation: 1s both logo-tiles-in; + --logo-tiles-in-delay: 100ms; + /* spacing */ + --small-space: 1em; + --large-space: 2em; + --text-block-spacing: 0.5em; +} + +@keyframes move-in { + from { + transform: translateY(var(--move-in-offset)); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +@keyframes logo-tiles-in { + 0% { + opacity: 0; + filter: grayscale(1) hue-rotate(100deg); + } + 25% { + opacity: 1; + } + 50% { + opacity: 1; + } + 55% { + opacity: 0; + } + 60% { + opacity: 1; + filter: grayscale(1) hue-rotate(100deg); + } + 100% { + opacity: 1; + filter: grayscale(0) hue-rotate(0deg); + } +} + +@keyframes logo-tiles-hover { + from { + filter: hue-rotate(0deg); + } + to { + filter: hue-rotate(360deg); + } +} + +@keyframes root-gradient { + 0% { + opacity: 0; + } + 40% { + opacity: 1; + } + 60% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +@keyframes text-gradient-ltr { + to { + background-position: -600% center; + } +} + +@keyframes text-gradient-rtl { + to { + background-position: 600% center; + } +} + +/* Common */ + +html { + position: relative; + font-size: var(--base-font-size); + font-family: var(--primary-typeface); + line-height: var(--base-font-line-height); + background-color: var(--dark-grey); +} + +html[data-loaded] { + background: linear-gradient( + to bottom, + var(--brand-blue) 33%, + var(--brand-yellow) 67% + ); +} + +html:before { + content: ""; + position: absolute; + display: block; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: -1; + background: unquote( + "-moz-linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)" + ); + background: unquote( + "linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)" + ); + background: linear-gradient( + to bottom, + var(--brand-yellow) 33%, + var(--brand-blue) 67% + ); + animation: var(--root-gradient-animation); +} + +body { + display: flex; + flex-direction: column; + align-items: center; + min-height: calc(100vh - 10px); + margin: 5px; + padding: 0 var(--small-space); + color: var(--off-white); + background-color: var(--dark-grey); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +::-moz-selection { + color: var(--white); + background-color: var(--brand-blue); +} + +::selection { + color: var(--white); + background: #05a6f0; + /* Edge could not work with custom property here */ + background-color: var(--brand-blue); +} + +a { + color: var(--brand-yellow); + text-decoration: none; +} + +a:hover, +a:focus { + background-image: linear-gradient( + to right, + var(--brand-yellow) 25%, + var(--brand-green) 50%, + var(--brand-blue) 75%, + var(--brand-yellow) 100% + ); + background-size: 600% auto; + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + background-clip: text; +} + +html[dir="ltr"] a:not(.logo-link):hover, +html[dir="ltr"] a:not(.logo-link):focus { + animation: text-gradient-ltr 6.5s linear infinite; +} + +html[dir="rtl"] a:not(.logo-link):hover, +html[dir="rtl"] a:not(.logo-link):focus { + animation: text-gradient-rtl 6.5s linear infinite; +} + +p, +h1 { + margin: 0; + padding: var(--text-block-spacing) 0; +} + +/* Container */ + +.container { + max-width: 31rem; + margin: 0 auto auto; +} + +@media only screen and (max-width: 40em) { + .container { + max-width: 80vw; + } + .container p { + font-size: 1.125rem; + } +} + +main p:nth-child(2) { + animation-delay: calc(var(--move-in-base-delay) * 6); +} + +main p:nth-child(3) { + animation-delay: calc(var(--move-in-base-delay) * 7); +} + +main p:nth-child(4) { + animation-delay: calc(var(--move-in-base-delay) * 8); +} + +/* Logo */ + +.logo-link { + display: block; + width: 4rem; + height: 4rem; + margin: var(--large-space) auto; +} + +.logo-image { + display: block; + width: 100%; + height: auto; +} + +.logo { + display: flex; + flex-wrap: wrap; + height: 100%; + width: 100%; + margin: 0; +} + +.logo-tile { + display: block; + width: 45%; + height: 45%; + margin: 2.5%; + outline: 1px solid transparent; + animation: var(--logo-tiles-in-animation); +} + +.winner { + display: block; + margin: auto; + text-align: center; +} + +.logo-tile--red { + background-color: var(--brand-red); + transition: 150ms; +} + +.logo-tile--largered { + background-color: var(--brand-red); + transform: scale(1.2) translateY(-3px); + transition: 150ms; +} + +.logo-tile--red:active { + transform: scale(0.8); +} + +.logo-tile--green { + background-color: var(--brand-green); + animation-delay: var(--logo-tiles-in-delay); + transition: 150ms; +} + +.logo-tile--largegreen { + background-color: var(--brand-green); + transform: scale(1.2) translateY(-3px); + animation-delay: var(--logo-tiles-in-delay); + transition: 150ms; +} + +.logo-tile--green:active { + transform: scale(0.8); +} + +.logo-tile--blue { + background-color: var(--brand-blue); + animation-delay: calc(var(--logo-tiles-in-delay) * 2); + transition: 150ms; +} + +.logo-tile--largeblue { + background-color: var(--brand-blue); + transform: scale(1.2) translateY(-3px); + animation-delay: calc(var(--logo-tiles-in-delay) * 2); + transition: 150ms; +} + +.logo-tile--blue:active { + transform: scale(0.8); +} + +.logo-tile--yellow { + background-color: var(--brand-yellow); + animation-delay: calc(var(--logo-tiles-in-delay) * 3); + transition: 150ms; +} + +.logo-tile--largeyellow { + background-color: var(--brand-yellow); + transform: scale(1.2) translateY(-3px); + animation-delay: calc(var(--logo-tiles-in-delay) * 3); + transition: 150ms; +} + +.logo-tile--yellow:active { + transform: scale(0.8); +} + +/* Main */ + +main h1 { + animation: var(--move-in-animation); + animation-delay: calc(var(--move-in-base-delay) * 4); + font-size: var(--title-font-size); + font-weight: bold; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + margin-bottom: var(--small-space); + padding-bottom: var(--small-space); +} + +main p { + animation: var(--move-in-animation); +} +main p:nth-of-type(1) { + animation-delay: calc(var(--move-in-base-delay) * 5); +} +main p:nth-of-type(2) { + animation-delay: calc(var(--move-in-base-delay) * 6); +} +main p:nth-of-type(3) { + animation-delay: calc(var(--move-in-base-delay) * 7); +} +main p:nth-of-type(4) { + animation-delay: calc(var(--move-in-base-delay) * 8); +} + +/* Footer */ + +.footer { + font-size: var(--small-font-size); + line-height: var(--small-font-line-height); + text-align: center; + margin: var(--small-space) 0 0; + padding: var(--small-space) 0; + overflow: hidden; +} + +@media only screen and (max-width: 40em) { + footer { + font-size: 1rem; + margin: 0 auto; + max-width: 80vw; + } +} + +footer p { + animation: var(--move-in-animation); + animation-delay: calc(var(--move-in-base-delay) * 11); +} + +footer [href*="github"]:hover, +footer [href*="github"]:focus { + color: var(--brand-green); +} + +.footer-piece--separate { + display: block; +} + +@media only screen and (max-width: 40em) { + .footer-piece { + display: block; + } +} + +.time-travel { + text-align: center; +} + +.time-travel a { + cursor: pointer; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/images/microsoft-og-image.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/images/microsoft-og-image.png new file mode 100644 index 0000000..2f0eee7 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/images/microsoft-og-image.png differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/index.html b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/index.html new file mode 100644 index 0000000..e8f4b84 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/index.html @@ -0,0 +1,127 @@ + + + + + + + + Join Microsoft Developer Design + + + + + + + + + + + + + + +
+
+ + šŸŽŠ Simon says...A winner is you! šŸŽŠ +
+
+

+ Microsoft is looking for designers who code to help create the most compelling developer tools & services on + the planet. +

+

+ We have open positions for technical product designers & design leaders in San Francisco, Seattle, and elsewhere. +

+

+ We use PCs, Macs, Figma, Sketch, GitHub, JavaScript, ZEIT, and other modern tools to design, prototype, and build the future + of software development. +

+

+ We believe in diversity, openness, and building delightful tools that empower every person and organization to achieve more. +

+

+ Interested? Send a PR with any improvement to + microsoft/join-dev-design or + email us. +

+
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/simon.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/simon.js new file mode 100644 index 0000000..dd38e82 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/simon.js @@ -0,0 +1,147 @@ +new Vue({ + el: "#app", + data: { + colors: ["red", "green", "yellow", "blue"], + currentSequence: [], + colorStatus: { + red: false, + green: false, + yellow: false, + blue: false + }, + colorSymbols: { + red: "ā¤ļø", + green: "šŸ’š", + yellow: "šŸ’›", + blue: "šŸ’™" + }, + userClicks: [], + currentScore: 0, + difficulty: 1000 + }, + created() { + this.generateSequence(); + }, + watch: { + winner: function(isWinner) { + if (isWinner) { + this.changeTheme(); + } + } + }, + computed: { + logoTitleRed: function() { + return this.colorStatus.red ? "logo-tile--largered" : "logo-tile--red"; + }, + logoTitleGreen: function() { + return this.colorStatus.green + ? "logo-tile--largegreen" + : "logo-tile--green"; + }, + logoTitleYellow: function() { + return this.colorStatus.yellow + ? "logo-tile--largeyellow" + : "logo-tile--yellow"; + }, + logoTitleBlue: function() { + return this.colorStatus.blue ? "logo-tile--largeblue" : "logo-tile--blue"; + }, + winner: function() { + return this.currentScore >= 10 ? true : false; + } + }, + methods: { + generateSequence: function() { + this.currentSequence.push( + this.colors[this.getRandomInt(this.colors.length)] + ); + if (this.currentScore > 0) { + this.play(); + } else { + console.log( + `šŸ•µļøā€ā™‚ļøšŸ•µļøā€ā™€ļø PSSST! There is a game inside this webpage...\nClick the ${ + this.colorSymbols[this.currentSequence[0]] + } tile on the Microsoft logo to play!` + ); + } + }, + clickColor: function(color) { + this.userClicks.push(color); + if (this.checkCorrect()) { + this.userClicks = []; + if (this.difficulty > 100) { + this.difficulty -= 100; + } + this.currentScore++; + console.log( + `Simon says..."correct!" šŸŽ‰ Your score is`, + this.currentScore + ); + this.lightUp(); + this.generateSequence(); + } + }, + getRandomInt: function(max) { + return Math.floor(Math.random() * Math.floor(max)); + }, + timer: function(ms) { + return new Promise(res => setTimeout(res, ms)); + }, + checkCorrect: function() { + let matching = true; + let sequence = + this.userClicks[this.userClicks.length - 1] === + this.currentSequence[this.userClicks.length - 1]; + if (!sequence) { + this.reset(); + } + for (let i = 0; i < this.currentSequence.length; i++) { + if (this.userClicks[i] !== this.currentSequence[i]) { + matching = false; + break; + } + } + return matching; + }, + reset: function() { + console.log(`😢 Game Over! Refresh to play again.`); + this.currentSequence = []; + this.userClicks = []; + this.currentScore = 0; + this.difficulty = 1000; + this.generateSequence(); + }, + play: async function() { + await this.timer(2000); + for (var i = 0; i < this.currentSequence.length; i++) { + this.colorStatus[this.currentSequence[i]] = true; + await this.timer(this.difficulty); + this.colorStatus[this.currentSequence[i]] = false; + await this.timer(this.difficulty / 2); + } + }, + lightUp: async function() { + let t = 150; + this.colorStatus.red = true; + await this.timer(t); + this.colorStatus.red = false; + this.colorStatus.green = true; + await this.timer(t); + this.colorStatus.green = false; + this.colorStatus.yellow = true; + await this.timer(t); + this.colorStatus.yellow = false; + this.colorStatus.blue = true; + await this.timer(t); + this.colorStatus.blue = false; + this.colorStatus.red = true; + await this.timer(t); + this.colorStatus.red = false; + }, + changeTheme: function() { + if (theme && theme.changeTo) { + theme.changeTo("msdos"); + } + } + } +}); diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosblibbet.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosblibbet.png new file mode 100644 index 0000000..1184e99 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosblibbet.png differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff new file mode 100644 index 0000000..de7b9b2 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff2 b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff2 new file mode 100644 index 0000000..a8161d7 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff2 differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdostheme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdostheme.css new file mode 100644 index 0000000..8100c3a --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdostheme.css @@ -0,0 +1,122 @@ +@font-face { + font-family: "vga"; + src: url("moreperfectdosvga.woff2") format("woff2"), + url("moreperfectdosvga.woff") format("woff"); + font-weight: normal; + font-style: normal; +} + +/* MSDOS Font: 'More Perfect DOS VGA' by Adam Moore http://laemeur.sdf.org/fonts/ */ + +body.js-theme-msdos { + color: #4bffff; + background: #0000ab; + font-family: "vga", "Courier New", Courier, monospace; + margin: 0; +} + +.js-theme-msdos:before { + content: ""; + position: absolute; + top: 10px; + left: 10px; + right: 10px; + bottom: 10px; + border: 6px double #4bffff; +} + +.js-theme-msdos:after { + content: "C:\\"; + position: absolute; + top: 4px; + padding: 0 6px; + color: #0000ab; + background: #4bffff; + line-height: 0.9; + font-size: 1.2rem; +} + +.js-theme-msdos .logo-link { + animation: none; +} + +.js-theme-msdos .logo { + position: relative; +} + +.js-theme-msdos .logo > span { + display: none; +} + +.js-theme-msdos .logo:before { + content: ""; + position: absolute; + top: 66%; + left: 50%; + transform: translate(-50%, -50%); + width: 226px; + height: 32px; + z-index: 100; + background: url("blibbet.png") center/cover no-repeat; +} + +.js-theme-msdos main h1 { + border-bottom: 2px solid #4bffff; +} + +.js-theme-msdos a:not(.logo-link) { + color: #ffff44; + animation: none; +} + +.js-theme-msdos a:not(.logo-link):hover, +.js-theme-msdos a:not(.logo-link):focus { + color: #0e0e0e; + -webkit-text-fill-color: #000 !important; + padding: 0.2rem; + background: #ffff44; + position: relative; +} + +.js-theme-msdos a:not(.logo-link):hover:after, +.js-theme-msdos a:not(.logo-link):focus:after { + content: ""; + position: absolute; + top: 6px; + left: 6px; + width: 100%; + height: 100%; + background: #000; + z-index: -1; +} + +.js-theme-msdos .theme { + opacity: 1; +} + +.js-theme-msdos .theme__item + .theme__item { + margin-left: 0.5rem; +} + +.js-theme-msdos .theme__button:before { + content: "Theme"; + padding-right: 5px; +} + +.js-theme-msdos .theme__button { + text-indent: 0; + width: auto; + height: 1rem; + font-size: 0.8rem; + padding-right: 10px; + font-family: "vga", "Courier New", Courier, monospace; + background: #00a8a8; + border-radius: 0; + color: #0e0e0e; +} + +.js-theme-msdos .theme__button:hover, +.js-theme-msdos .theme__button:focus { + background: #ffff44; + color: #0e0e0e; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.css new file mode 100644 index 0000000..e1192f2 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.css @@ -0,0 +1,129 @@ +@keyframes fade-in { + from { + opacity: 0; + } + to { + transform: none; + opacity: 1; + } +} + +/* UI Styling */ + +.theme { + cursor: pointer; + display: inline-block; + position: relative; + margin: auto auto; + padding: 0.5rem 0.5rem; + font-size: 0; + text-align: center; + z-index: 1; + transition: opacity 0.3s ease; + pointer-events: all; +} + +.theme__list, +.theme__button { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.theme__list { + list-style: none; + animation: 1s both fade-in; + animation-delay: calc(var(--move-in-base-delay) * 9); +} + +.theme__item { + position: relative; + display: inline-block; + vertical-align: top; +} + +.theme__item + .theme__item { + margin-left: 0.5rem; + transition: margin-left 0.3s ease; +} + +.theme__button { + display: block; + position: relative; + text-indent: -9999px; + width: 1.2rem; + height: 1.2rem; + background: blue; + border: 0px solid #444; + border-radius: 0.6rem; + cursor: pointer; + z-index: 100; +} + +button.theme__button:focus { + text-decoration: none; + outline: none; + box-shadow: none; +} + +.theme__button[value="dark"] { + background: black; +} + +.theme__button[value="light"] { + background: white; +} + +@media only screen and (min-width: 640px) { + .theme { + opacity: 0.5; + } + .theme:hover { + opacity: 1; + } + .theme__item + .theme__item { + margin-left: -0.8rem; + } + .theme:hover .theme__item + .theme__item { + margin-left: 0.5rem; + } +} + +/* Theme Setting */ + +body { + transition: background-color 0.3s ease; +} + +body.js-theme-light { + color: #222; + background-color: #fdfdfd; +} + +.js-theme-light main h1 { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); +} + +.js-theme-light a { + color: var(--brand-blue); +} + +.js-theme-light a:hover { + background-image: linear-gradient( + to right, + var(--brand-blue) 25%, + var(--brand-green) 50%, + var(--brand-yellow) 75%, + var(--brand-blue) 100% + ); +} + +.js-theme-dark .theme__button[value="dark"] { + z-index: 95; + border: 3px solid #828282; +} + +.js-theme-light .theme__button[value="light"] { + z-index: 95; + border: 3px solid #dedede; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.js new file mode 100644 index 0000000..ef31863 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.js @@ -0,0 +1,34 @@ +var theme = { + activeTheme: "dark", + load: function(theme, cb) { + var id = "theme-" + theme; + if (!document.getElementById(id)) { + var $head = document.getElementsByTagName("head")[0]; + var $link = document.createElement("link"); + $link.id = id; + $link.rel = "stylesheet"; + $link.type = "text/css"; + $link.href = "./theme/" + theme + "/theme.css"; + $head.appendChild($link); + + $link.onload = function() { + if (!!cb) cb(); + }; + $link.onerror = function() { + console.warn("loading " + theme + " theme failed."); + }; + } + }, + changeTo: function(theme) { + if (["light", "dark"].indexOf(theme) === -1) this.load(theme); + + document.body.classList.remove("js-theme-" + this.activeTheme); + this.activeTheme = theme; + document.body.classList.add("js-theme-" + this.activeTheme); + } +}; + +document.querySelector(".theme").onclick = function(e) { + var nextTheme = theme.activeTheme === "dark" ? "light" : "dark"; + theme.changeTo(nextTheme); +}; diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/css/style.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/css/style.css new file mode 100644 index 0000000..c36f875 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/css/style.css @@ -0,0 +1,410 @@ +@charset "UTF-8"; +:root { + /* color defaults */ + --brand-blue: #05a6f0; + --brand-yellow: #ffba08; + --brand-red: #f35325; + --brand-green: #81bc06; + --white: #ffffff; + --off-white: #bbb; + --dark-grey: #121212; + /* typeface defaults */ + --primary-typeface: Segoe UI, SegoeUI, Segoe WP, Helvetica Neue, Helvetica, + Tahoma, Arial, sans-serif; + --title-font-size: 1.3rem; + --base-font-size: 20px; + --base-font-line-height: 28px; + --small-font-size: 12px; + --small-font-line-height: 14px; + /* animations */ + --root-gradient-animation: 4s both root-gradient linear infinite; + --move-in-offset: 20px; + --move-in-animation: 1s both move-in; + --move-in-base-delay: 100ms; + --logo-tiles-in-animation: 1s both logo-tiles-in; + --logo-tiles-in-delay: 100ms; + /* spacing */ + --small-space: 1em; + --large-space: 2em; + --text-block-spacing: 0.5em; +} + +@keyframes move-in { + from { + transform: translateY(var(--move-in-offset)); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +@keyframes logo-tiles-in { + 0% { + opacity: 0; + filter: grayscale(1) hue-rotate(100deg); + } + 25% { + opacity: 1; + } + 50% { + opacity: 1; + } + 55% { + opacity: 0; + } + 60% { + opacity: 1; + filter: grayscale(1) hue-rotate(100deg); + } + 100% { + opacity: 1; + filter: grayscale(0) hue-rotate(0deg); + } +} + +@keyframes logo-tiles-hover { + from { + filter: hue-rotate(0deg); + } + to { + filter: hue-rotate(360deg); + } +} + +@keyframes root-gradient { + 0% { + opacity: 0; + } + 40% { + opacity: 1; + } + 60% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +@keyframes text-gradient-ltr { + to { + background-position: -600% center; + } +} + +@keyframes text-gradient-rtl { + to { + background-position: 600% center; + } +} + +/* Common */ + +html { + position: relative; + font-size: var(--base-font-size); + font-family: var(--primary-typeface); + line-height: var(--base-font-line-height); + background-color: var(--dark-grey); +} + +html[data-loaded] { + background: linear-gradient( + to bottom, + var(--brand-blue) 33%, + var(--brand-yellow) 67% + ); +} + +html:before { + content: ""; + position: absolute; + display: block; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: -1; + background: unquote( + "-moz-linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)" + ); + background: unquote( + "linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)" + ); + background: linear-gradient( + to bottom, + var(--brand-yellow) 33%, + var(--brand-blue) 67% + ); + animation: var(--root-gradient-animation); +} + +body { + display: flex; + flex-direction: column; + align-items: center; + min-height: calc(100vh - 10px); + margin: 5px; + padding: 0 var(--small-space); + color: var(--off-white); + background-color: var(--dark-grey); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +::-moz-selection { + color: var(--white); + background-color: var(--brand-blue); +} + +::selection { + color: var(--white); + background: #05a6f0; + /* Edge could not work with custom property here */ + background-color: var(--brand-blue); +} + +a { + color: var(--brand-yellow); + text-decoration: none; +} + +a:hover, +a:focus { + background-image: linear-gradient( + to right, + var(--brand-yellow) 25%, + var(--brand-green) 50%, + var(--brand-blue) 75%, + var(--brand-yellow) 100% + ); + background-size: 600% auto; + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + background-clip: text; +} + +html[dir="ltr"] a:not(.logo-link):hover, +html[dir="ltr"] a:not(.logo-link):focus { + animation: text-gradient-ltr 6.5s linear infinite; +} + +html[dir="rtl"] a:not(.logo-link):hover, +html[dir="rtl"] a:not(.logo-link):focus { + animation: text-gradient-rtl 6.5s linear infinite; +} + +p, +h1 { + margin: 0; + padding: var(--text-block-spacing) 0; +} + +/* Container */ + +.container { + max-width: 31rem; + margin: 0 auto auto; +} + +@media only screen and (max-width: 40em) { + .container { + max-width: 80vw; + } + .container p { + font-size: 1.125rem; + } +} + +main p:nth-child(2) { + animation-delay: calc(var(--move-in-base-delay) * 6); +} + +main p:nth-child(3) { + animation-delay: calc(var(--move-in-base-delay) * 7); +} + +main p:nth-child(4) { + animation-delay: calc(var(--move-in-base-delay) * 8); +} + +/* Logo */ + +.logo-link { + display: block; + width: 4rem; + height: 4rem; + margin: var(--large-space) auto; +} + +.logo-image { + display: block; + width: 100%; + height: auto; +} + +.logo { + display: flex; + flex-wrap: wrap; + height: 100%; + width: 100%; + margin: 0; +} + +.logo-tile { + display: block; + width: 45%; + height: 45%; + margin: 2.5%; + outline: 1px solid transparent; + animation: var(--logo-tiles-in-animation); +} + +.winner { + display: block; + margin: auto; + text-align: center; +} + +.logo-tile--red { + background-color: var(--brand-red); + transition: 150ms; +} + +.logo-tile--largered { + background-color: var(--brand-red); + transform: scale(1.2) translateY(-3px); + transition: 150ms; +} + +.logo-tile--red:active { + transform: scale(0.8); +} + +.logo-tile--green { + background-color: var(--brand-green); + animation-delay: var(--logo-tiles-in-delay); + transition: 150ms; +} + +.logo-tile--largegreen { + background-color: var(--brand-green); + transform: scale(1.2) translateY(-3px); + animation-delay: var(--logo-tiles-in-delay); + transition: 150ms; +} + +.logo-tile--green:active { + transform: scale(0.8); +} + +.logo-tile--blue { + background-color: var(--brand-blue); + animation-delay: calc(var(--logo-tiles-in-delay) * 2); + transition: 150ms; +} + +.logo-tile--largeblue { + background-color: var(--brand-blue); + transform: scale(1.2) translateY(-3px); + animation-delay: calc(var(--logo-tiles-in-delay) * 2); + transition: 150ms; +} + +.logo-tile--blue:active { + transform: scale(0.8); +} + +.logo-tile--yellow { + background-color: var(--brand-yellow); + animation-delay: calc(var(--logo-tiles-in-delay) * 3); + transition: 150ms; +} + +.logo-tile--largeyellow { + background-color: var(--brand-yellow); + transform: scale(1.2) translateY(-3px); + animation-delay: calc(var(--logo-tiles-in-delay) * 3); + transition: 150ms; +} + +.logo-tile--yellow:active { + transform: scale(0.8); +} + +/* Main */ + +main h1 { + animation: var(--move-in-animation); + animation-delay: calc(var(--move-in-base-delay) * 4); + font-size: var(--title-font-size); + font-weight: bold; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + margin-bottom: var(--small-space); + padding-bottom: var(--small-space); +} + +main p { + animation: var(--move-in-animation); +} +main p:nth-of-type(1) { + animation-delay: calc(var(--move-in-base-delay) * 5); +} +main p:nth-of-type(2) { + animation-delay: calc(var(--move-in-base-delay) * 6); +} +main p:nth-of-type(3) { + animation-delay: calc(var(--move-in-base-delay) * 7); +} +main p:nth-of-type(4) { + animation-delay: calc(var(--move-in-base-delay) * 8); +} + +/* Footer */ + +.footer { + font-size: var(--small-font-size); + line-height: var(--small-font-line-height); + text-align: center; + margin: var(--small-space) 0 0; + padding: var(--small-space) 0; + overflow: hidden; +} + +@media only screen and (max-width: 40em) { + footer { + font-size: 1rem; + margin: 0 auto; + max-width: 80vw; + } +} + +footer p { + animation: var(--move-in-animation); + animation-delay: calc(var(--move-in-base-delay) * 11); +} + +footer [href*="github"]:hover, +footer [href*="github"]:focus { + color: var(--brand-green); +} + +.footer-piece--separate { + display: block; +} + +@media only screen and (max-width: 40em) { + .footer-piece { + display: block; + } +} + +.time-travel { + text-align: center; +} + +.time-travel a { + cursor: pointer; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/images/microsoft-og-image.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/images/microsoft-og-image.png new file mode 100644 index 0000000..2f0eee7 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/images/microsoft-og-image.png differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/index.html b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/index.html new file mode 100644 index 0000000..77d4956 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/index.html @@ -0,0 +1,128 @@ + + + + + + + + Join Microsoft Developer Design + + + + + + + + + + + + + + +
+
+ + šŸŽŠ Simon says...A winner is you! šŸŽŠ +
+
+

+ Microsoft is looking for designers who code to help create the most compelling developer tools & services on + the planet. +

+

+ We have open positions for technical product designers & design leaders in San Francisco, Seattle, and elsewhere. +

+

+ We use PCs, Macs, Figma, Sketch, GitHub, JavaScript, ZEIT, and other modern tools to design, prototype, and build the future + of software development. +

+

+ We believe in diversity, openness, and building delightful tools that empower every person and organization to achieve more. +

+

+ Interested? Send a PR with any improvement to + microsoft/join-dev-design or + email us. +

+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/scripts/ls.helper.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/scripts/ls.helper.js new file mode 100644 index 0000000..983b950 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/scripts/ls.helper.js @@ -0,0 +1,52 @@ +let debug = false; + +const setDebug = function(val) { + debug = val; + console.log("LS DEBUG: ", val); +}; + +const setItem = function(key, item) { + if (window.localStorage) { + localStorage.setItem(key, item); + if (debug) { + console.log("ls.setItem", item); + } + } +}; + +const getItem = function(key) { + if (window.localStorage) { + const item = localStorage.getItem(key); + if (debug) { + console.log("ls.getItem", item); + } + return item; + } + return undefined; +}; + +const clear = function(key) { + if (window.localStorage) { + localStorage.clear(key); + if (debug) { + console.log("ls.getItem", item); + } + } +}; + +const removeItem = function(key) { + if (window.localStorage) { + localStorage.removeItem(key); + if (debug) { + console.log("ls.removeItem", key); + } + } +}; + +window.ls = { + setItem, + getItem, + clear, + removeItem, + setDebug +}; diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/simon.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/simon.js new file mode 100644 index 0000000..dd38e82 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/simon.js @@ -0,0 +1,147 @@ +new Vue({ + el: "#app", + data: { + colors: ["red", "green", "yellow", "blue"], + currentSequence: [], + colorStatus: { + red: false, + green: false, + yellow: false, + blue: false + }, + colorSymbols: { + red: "ā¤ļø", + green: "šŸ’š", + yellow: "šŸ’›", + blue: "šŸ’™" + }, + userClicks: [], + currentScore: 0, + difficulty: 1000 + }, + created() { + this.generateSequence(); + }, + watch: { + winner: function(isWinner) { + if (isWinner) { + this.changeTheme(); + } + } + }, + computed: { + logoTitleRed: function() { + return this.colorStatus.red ? "logo-tile--largered" : "logo-tile--red"; + }, + logoTitleGreen: function() { + return this.colorStatus.green + ? "logo-tile--largegreen" + : "logo-tile--green"; + }, + logoTitleYellow: function() { + return this.colorStatus.yellow + ? "logo-tile--largeyellow" + : "logo-tile--yellow"; + }, + logoTitleBlue: function() { + return this.colorStatus.blue ? "logo-tile--largeblue" : "logo-tile--blue"; + }, + winner: function() { + return this.currentScore >= 10 ? true : false; + } + }, + methods: { + generateSequence: function() { + this.currentSequence.push( + this.colors[this.getRandomInt(this.colors.length)] + ); + if (this.currentScore > 0) { + this.play(); + } else { + console.log( + `šŸ•µļøā€ā™‚ļøšŸ•µļøā€ā™€ļø PSSST! There is a game inside this webpage...\nClick the ${ + this.colorSymbols[this.currentSequence[0]] + } tile on the Microsoft logo to play!` + ); + } + }, + clickColor: function(color) { + this.userClicks.push(color); + if (this.checkCorrect()) { + this.userClicks = []; + if (this.difficulty > 100) { + this.difficulty -= 100; + } + this.currentScore++; + console.log( + `Simon says..."correct!" šŸŽ‰ Your score is`, + this.currentScore + ); + this.lightUp(); + this.generateSequence(); + } + }, + getRandomInt: function(max) { + return Math.floor(Math.random() * Math.floor(max)); + }, + timer: function(ms) { + return new Promise(res => setTimeout(res, ms)); + }, + checkCorrect: function() { + let matching = true; + let sequence = + this.userClicks[this.userClicks.length - 1] === + this.currentSequence[this.userClicks.length - 1]; + if (!sequence) { + this.reset(); + } + for (let i = 0; i < this.currentSequence.length; i++) { + if (this.userClicks[i] !== this.currentSequence[i]) { + matching = false; + break; + } + } + return matching; + }, + reset: function() { + console.log(`😢 Game Over! Refresh to play again.`); + this.currentSequence = []; + this.userClicks = []; + this.currentScore = 0; + this.difficulty = 1000; + this.generateSequence(); + }, + play: async function() { + await this.timer(2000); + for (var i = 0; i < this.currentSequence.length; i++) { + this.colorStatus[this.currentSequence[i]] = true; + await this.timer(this.difficulty); + this.colorStatus[this.currentSequence[i]] = false; + await this.timer(this.difficulty / 2); + } + }, + lightUp: async function() { + let t = 150; + this.colorStatus.red = true; + await this.timer(t); + this.colorStatus.red = false; + this.colorStatus.green = true; + await this.timer(t); + this.colorStatus.green = false; + this.colorStatus.yellow = true; + await this.timer(t); + this.colorStatus.yellow = false; + this.colorStatus.blue = true; + await this.timer(t); + this.colorStatus.blue = false; + this.colorStatus.red = true; + await this.timer(t); + this.colorStatus.red = false; + }, + changeTheme: function() { + if (theme && theme.changeTo) { + theme.changeTo("msdos"); + } + } + } +}); diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosblibbet.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosblibbet.png new file mode 100644 index 0000000..1184e99 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosblibbet.png differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff new file mode 100644 index 0000000..de7b9b2 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff2 b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff2 new file mode 100644 index 0000000..a8161d7 Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff2 differ diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdostheme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdostheme.css new file mode 100644 index 0000000..8100c3a --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdostheme.css @@ -0,0 +1,122 @@ +@font-face { + font-family: "vga"; + src: url("moreperfectdosvga.woff2") format("woff2"), + url("moreperfectdosvga.woff") format("woff"); + font-weight: normal; + font-style: normal; +} + +/* MSDOS Font: 'More Perfect DOS VGA' by Adam Moore http://laemeur.sdf.org/fonts/ */ + +body.js-theme-msdos { + color: #4bffff; + background: #0000ab; + font-family: "vga", "Courier New", Courier, monospace; + margin: 0; +} + +.js-theme-msdos:before { + content: ""; + position: absolute; + top: 10px; + left: 10px; + right: 10px; + bottom: 10px; + border: 6px double #4bffff; +} + +.js-theme-msdos:after { + content: "C:\\"; + position: absolute; + top: 4px; + padding: 0 6px; + color: #0000ab; + background: #4bffff; + line-height: 0.9; + font-size: 1.2rem; +} + +.js-theme-msdos .logo-link { + animation: none; +} + +.js-theme-msdos .logo { + position: relative; +} + +.js-theme-msdos .logo > span { + display: none; +} + +.js-theme-msdos .logo:before { + content: ""; + position: absolute; + top: 66%; + left: 50%; + transform: translate(-50%, -50%); + width: 226px; + height: 32px; + z-index: 100; + background: url("blibbet.png") center/cover no-repeat; +} + +.js-theme-msdos main h1 { + border-bottom: 2px solid #4bffff; +} + +.js-theme-msdos a:not(.logo-link) { + color: #ffff44; + animation: none; +} + +.js-theme-msdos a:not(.logo-link):hover, +.js-theme-msdos a:not(.logo-link):focus { + color: #0e0e0e; + -webkit-text-fill-color: #000 !important; + padding: 0.2rem; + background: #ffff44; + position: relative; +} + +.js-theme-msdos a:not(.logo-link):hover:after, +.js-theme-msdos a:not(.logo-link):focus:after { + content: ""; + position: absolute; + top: 6px; + left: 6px; + width: 100%; + height: 100%; + background: #000; + z-index: -1; +} + +.js-theme-msdos .theme { + opacity: 1; +} + +.js-theme-msdos .theme__item + .theme__item { + margin-left: 0.5rem; +} + +.js-theme-msdos .theme__button:before { + content: "Theme"; + padding-right: 5px; +} + +.js-theme-msdos .theme__button { + text-indent: 0; + width: auto; + height: 1rem; + font-size: 0.8rem; + padding-right: 10px; + font-family: "vga", "Courier New", Courier, monospace; + background: #00a8a8; + border-radius: 0; + color: #0e0e0e; +} + +.js-theme-msdos .theme__button:hover, +.js-theme-msdos .theme__button:focus { + background: #ffff44; + color: #0e0e0e; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.css new file mode 100644 index 0000000..e1192f2 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.css @@ -0,0 +1,129 @@ +@keyframes fade-in { + from { + opacity: 0; + } + to { + transform: none; + opacity: 1; + } +} + +/* UI Styling */ + +.theme { + cursor: pointer; + display: inline-block; + position: relative; + margin: auto auto; + padding: 0.5rem 0.5rem; + font-size: 0; + text-align: center; + z-index: 1; + transition: opacity 0.3s ease; + pointer-events: all; +} + +.theme__list, +.theme__button { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.theme__list { + list-style: none; + animation: 1s both fade-in; + animation-delay: calc(var(--move-in-base-delay) * 9); +} + +.theme__item { + position: relative; + display: inline-block; + vertical-align: top; +} + +.theme__item + .theme__item { + margin-left: 0.5rem; + transition: margin-left 0.3s ease; +} + +.theme__button { + display: block; + position: relative; + text-indent: -9999px; + width: 1.2rem; + height: 1.2rem; + background: blue; + border: 0px solid #444; + border-radius: 0.6rem; + cursor: pointer; + z-index: 100; +} + +button.theme__button:focus { + text-decoration: none; + outline: none; + box-shadow: none; +} + +.theme__button[value="dark"] { + background: black; +} + +.theme__button[value="light"] { + background: white; +} + +@media only screen and (min-width: 640px) { + .theme { + opacity: 0.5; + } + .theme:hover { + opacity: 1; + } + .theme__item + .theme__item { + margin-left: -0.8rem; + } + .theme:hover .theme__item + .theme__item { + margin-left: 0.5rem; + } +} + +/* Theme Setting */ + +body { + transition: background-color 0.3s ease; +} + +body.js-theme-light { + color: #222; + background-color: #fdfdfd; +} + +.js-theme-light main h1 { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); +} + +.js-theme-light a { + color: var(--brand-blue); +} + +.js-theme-light a:hover { + background-image: linear-gradient( + to right, + var(--brand-blue) 25%, + var(--brand-green) 50%, + var(--brand-yellow) 75%, + var(--brand-blue) 100% + ); +} + +.js-theme-dark .theme__button[value="dark"] { + z-index: 95; + border: 3px solid #828282; +} + +.js-theme-light .theme__button[value="light"] { + z-index: 95; + border: 3px solid #dedede; +} diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.js new file mode 100644 index 0000000..14fcba8 --- /dev/null +++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.js @@ -0,0 +1,44 @@ +const USER_THEME = "ms-tt-user-theme"; +const storedTheme = window.ls.getItem(USER_THEME); + +var theme = { + activeTheme: "dark", + load: function(theme, cb) { + var id = "theme-" + theme; + if (!document.getElementById(id)) { + var $head = document.getElementsByTagName("head")[0]; + var $link = document.createElement("link"); + $link.id = id; + $link.rel = "stylesheet"; + $link.type = "text/css"; + $link.href = "./theme/" + theme + "/theme.css"; + $head.appendChild($link); + + $link.onload = function() { + if (!!cb) cb(); + }; + $link.onerror = function() { + console.warn("loading " + theme + " theme failed."); + }; + } + }, + changeTo: function(theme) { + if (["light", "dark"].indexOf(theme) === -1) { + this.load(theme); + } else { + window.ls.setItem(USER_THEME, theme); + } + document.body.classList.remove("js-theme-" + this.activeTheme); + this.activeTheme = theme; + document.body.classList.add("js-theme-" + this.activeTheme); + } +}; + +document.querySelector(".theme").onclick = function(e) { + var nextTheme = theme.activeTheme === "dark" ? "light" : "dark"; + theme.changeTo(nextTheme); +}; + +if (storedTheme) { + theme.changeTo(storedTheme); +} diff --git a/docs/time-travel/index.json b/docs/time-travel/index.json index acff622..da62759 100644 --- a/docs/time-travel/index.json +++ b/docs/time-travel/index.json @@ -499,6 +499,27 @@ } } }, + { + "node": { + "id": "MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1", + "title": "Added a simon game", + "url": "https://github.com/Microsoft/join-dev-design/pull/41", + "mergedAt": "2018-08-07T01:51:41Z", + "author": { + "login": "makeupsomething", + "avatarUrl": + "https://avatars1.githubusercontent.com/u/7676733?v=4" + }, + "editor": null, + "mergeCommit": { + "committedDate": "2018-08-07T01:51:41Z", + "id": + "MDY6Q29tbWl0MTQxNTAzNjgzOjlhYmVlN2YzOTYyZGFkMmU2ZmY3OTRiNmI2ZGE1OTI5YWVmMDhhODk=", + "tarballUrl": + "https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/9abee7f3962dad2e6ff794b6b6da5929aef08a89" + } + } + }, { "node": { "id": "MDExOlB1bGxSZXF1ZXN0MjAyNzU3MjE0", @@ -1529,6 +1550,27 @@ } } }, + { + "node": { + "id": "MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx", + "title": "Disable time travel button in time travel mode", + "url": "https://github.com/Microsoft/join-dev-design/pull/136", + "mergedAt": "2018-10-10T18:00:42Z", + "author": { + "login": "d4rekanguok", + "avatarUrl": + "https://avatars2.githubusercontent.com/u/3383539?v=4" + }, + "editor": null, + "mergeCommit": { + "committedDate": "2018-10-10T18:00:41Z", + "id": + "MDY6Q29tbWl0MTQxNTAzNjgzOmI3ZDM3MzMwYWUxZGI5NGE5N2Q4NTNlMThmMTdhY2RhZmI4NTUyMzA=", + "tarballUrl": + "https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/b7d37330ae1db94a97d853e18f17acdafb855230" + } + } + }, { "node": { "id": "MDExOlB1bGxSZXF1ZXN0MjA1OTA3ODAz", @@ -1549,6 +1591,69 @@ "https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/41382c7b876b2615b76bdc74354dd7b3194a0217" } } + }, + { + "node": { + "id": "MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4", + "title": "fix absolute link in theme.js", + "url": "https://github.com/Microsoft/join-dev-design/pull/149", + "mergedAt": "2018-08-07T14:48:33Z", + "author": { + "login": "d4rekanguok", + "avatarUrl": + "https://avatars2.githubusercontent.com/u/3383539?v=4" + }, + "editor": null, + "mergeCommit": { + "committedDate": "2018-08-07T14:48:33Z", + "id": + "MDY6Q29tbWl0MTQxNTAzNjgzOjRmZmZiZWY5NGY2NWQ3ZThlMjdiNWE5MmRiZjllNThlZTZkMDViZmE=", + "tarballUrl": + "https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/4fffbef94f65d7e8e27b5a92dbf9e58ee6d05bfa" + } + } + }, + { + "node": { + "id": "MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0", + "title": "Updated contact info", + "url": "https://github.com/Microsoft/join-dev-design/pull/157", + "mergedAt": "2018-09-21T02:00:54Z", + "author": { + "login": "adrianmg", + "avatarUrl": + "https://avatars0.githubusercontent.com/u/589285?v=4" + }, + "editor": null, + "mergeCommit": { + "committedDate": "2018-09-21T02:00:54Z", + "id": + "MDY6Q29tbWl0MTQxNTAzNjgzOjI4ZWEwMGFjYzVmNmJlYTExM2RkNmQyODhiZGZhNGM0YzgyNzI1NjQ=", + "tarballUrl": + "https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/28ea00acc5f6bea113dd6d288bdfa4c4c8272564" + } + } + }, + { + "node": { + "id": "MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5", + "title": "Remember last theme selection.", + "url": "https://github.com/Microsoft/join-dev-design/pull/163", + "mergedAt": "2018-10-09T22:36:02Z", + "author": { + "login": "aamay001", + "avatarUrl": + "https://avatars0.githubusercontent.com/u/28788253?v=4" + }, + "editor": null, + "mergeCommit": { + "committedDate": "2018-10-09T22:36:01Z", + "id": + "MDY6Q29tbWl0MTQxNTAzNjgzOmFkN2ExMjIzNGQ4YTJhYzExMjQ1MzMzZWE1YTcyYTkyZTQ5YWRlOTQ=", + "tarballUrl": + "https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/ad7a12234d8a2ac11245333ea5a72a92e49ade94" + } + } } ] } diff --git a/package-lock.json b/package-lock.json index c7428b1..4950a33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,21 +4,46 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@zeit/schemas": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.1.1.tgz", + "integrity": "sha512-7uBms9Uwzq1GnLK7ar4FvhUONW5PuuASBomeMJ5rREMYxWdm2R0/5iXH2gUm8uqVT1x8U51CGuoaF40Tc0xoJA==", + "dev": true + }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, "requires": { "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, + "ajv": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", + "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" + } + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -27,7 +52,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, "requires": { "micromatch": "^2.1.5", "normalize-path": "^2.0.0" @@ -37,7 +61,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.1.tgz", "integrity": "sha1-1vxyqm0n2ZyVqU/RiNcx7v/6Zjw=", - "dev": true, "requires": { "unix-crypt-td-js": "^1.0.0" } @@ -45,14 +68,24 @@ "apache-md5": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.2.tgz", - "integrity": "sha1-7klza2ObTxCLbp5ibG2pkwa0FpI=", + "integrity": "sha1-7klza2ObTxCLbp5ibG2pkwa0FpI=" + }, + "arch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", + "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", + "dev": true + }, + "arg": { + "version": "2.0.0", + "resolved": "http://registry.npmjs.org/arg/-/arg-2.0.0.tgz", + "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==", "dev": true }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, "requires": { "arr-flatten": "^1.0.1" } @@ -60,32 +93,27 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "basic-auth": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", - "dev": true, "requires": { "safe-buffer": "5.1.1" }, @@ -93,32 +121,25 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" } } }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" }, "bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=", - "dev": true - }, - "big-integer": { - "version": "1.6.32", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.32.tgz", - "integrity": "sha512-ljKJdR3wk9thHfLj4DtrNiOSTxvGFaMjWrG4pW75juXC4j7+XuKJVFdg4kgFMYp85PVkO05dFMj2dk2xVsH4xw==" + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" }, "binary": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, "requires": { "buffers": "~0.1.1", "chainsaw": "~0.1.0" @@ -127,22 +148,7 @@ "binary-extensions": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" }, "boxen": { "version": "1.3.0", @@ -163,7 +169,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -173,54 +178,17 @@ "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, "requires": { "expand-range": "^1.8.1", "preserve": "^0.2.0", "repeat-element": "^1.1.2" } }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "requires": { - "pako": "~0.2.0" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" - }, - "buffer-indexof-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", - "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=" - }, "buffers": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true }, "bytes": { "version": "3.0.0", @@ -238,6 +206,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, "requires": { "traverse": ">=0.3.0 <0.4" } @@ -246,7 +215,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -257,7 +225,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, "requires": { "anymatch": "^1.3.0", "async-each": "^1.0.0", @@ -277,14 +244,28 @@ "ci-info": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", - "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", "dev": true }, + "clipboardy": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", + "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", + "dev": true, + "requires": { + "arch": "^2.1.0", + "execa": "^0.8.0" + } + }, "color-convert": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", - "dev": true, "requires": { "color-name": "1.1.1" } @@ -292,26 +273,22 @@ "color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", - "dev": true + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" }, "colors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz", - "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==", - "dev": true + "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==" }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "connect": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/connect/-/connect-3.5.1.tgz", "integrity": "sha1-bTDXpjx/FwhXprOqazY9lz3KWI4=", - "dev": true, "requires": { "debug": "~2.2.0", "finalhandler": "0.5.1", @@ -319,17 +296,21 @@ "utils-merge": "1.0.0" } }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cors": { "version": "2.8.4", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", - "dev": true, "requires": { "object-assign": "^4", "vary": "^1" @@ -339,7 +320,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -350,22 +330,25 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, "requires": { "ms": "0.7.1" } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "dotenv": { "version": "6.0.0", @@ -375,71 +358,37 @@ "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "^2.0.2" - } - }, - "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "event-stream": { "version": "3.3.4", "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, "requires": { "duplexer": "~0.1.1", "from": "~0", @@ -454,7 +403,6 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -469,7 +417,6 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, "requires": { "is-posix-bracket": "^0.1.0" } @@ -478,7 +425,6 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, "requires": { "fill-range": "^2.1.0" } @@ -487,16 +433,43 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, "requires": { "is-extglob": "^1.0.0" } }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "dev": true, + "requires": { + "punycode": "^1.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, "faye-websocket": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true, "requires": { "websocket-driver": ">=0.5.1" } @@ -504,14 +477,12 @@ "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" }, "fill-range": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, "requires": { "is-number": "^2.1.0", "isobject": "^2.0.0", @@ -524,7 +495,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.1.tgz", "integrity": "sha1-LEANjUUwk1vCMlScX6OF7Afeb80=", - "dev": true, "requires": { "debug": "~2.2.0", "escape-html": "~1.0.3", @@ -537,7 +507,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, "requires": { "locate-path": "^2.0.0" } @@ -545,14 +514,12 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "for-own": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, "requires": { "for-in": "^1.0.1" } @@ -560,19 +527,12 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" }, "fs-extra": { "version": "7.0.0", @@ -595,469 +555,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true - } - } + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fstream": { "version": "0.1.31", @@ -1085,13 +584,13 @@ "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1105,7 +604,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, "requires": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" @@ -1115,41 +613,41 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, "requires": { "is-glob": "^2.0.0" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "glob-slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz", + "integrity": "sha1-/lLvpDMjP3Si/mTHq7m8hIICq5U=", "dev": true }, - "gunzip-maybe": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.1.tgz", - "integrity": "sha512-qtutIKMthNJJgeHQS7kZ9FqDq59/Wn0G2HYCRNjpup7yKfVI6/eqwpmroyZGFoCYaG+sW6psNVb4zoLADHpp2g==", + "glob-slasher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glob-slasher/-/glob-slasher-1.0.1.tgz", + "integrity": "sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44=", + "dev": true, "requires": { - "browserify-zlib": "^0.1.4", - "is-deflate": "^1.0.0", - "is-gzip": "^1.0.0", - "peek-stream": "^1.1.0", - "pumpify": "^1.3.3", - "through2": "^2.0.3" + "glob-slash": "^1.0.0", + "lodash.isobject": "^2.4.1", + "toxic": "^1.0.0" } }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "http-auth": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz", "integrity": "sha1-lFz63WZSHq+PfISRPTd9exXyTjE=", - "dev": true, "requires": { "apache-crypt": "^1.1.2", "apache-md5": "^1.0.6", @@ -1161,7 +659,6 @@ "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -1172,22 +669,19 @@ "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, "http-parser-js": { "version": "0.4.13", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", - "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", - "dev": true + "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=" }, "husky": { "version": "0.14.3", "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", - "dev": true, "requires": { "is-ci": "^1.0.10", "normalize-path": "^1.0.0", @@ -1197,21 +691,20 @@ "normalize-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", - "dev": true + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=" } } }, "ignore": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -1220,14 +713,18 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, "requires": { "binary-extensions": "^1.0.0" } @@ -1235,34 +732,25 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-ci": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", - "dev": true, "requires": { "ci-info": "^1.0.0" } }, - "is-deflate": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", - "integrity": "sha1-yGKQHDwWH7CdrHzcfnhPgOmPLxQ=" - }, "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" }, "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, "requires": { "is-primitive": "^2.0.0" } @@ -1270,34 +758,25 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, "requires": { "is-extglob": "^1.0.0" } }, - "is-gzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=" - }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -1305,44 +784,37 @@ "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" }, "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, "requires": { "isarray": "1.0.0" } @@ -1365,21 +837,14 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" - }, "live-server": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.0.tgz", "integrity": "sha1-RJhkS7+Bpm8Y3Y3/3vYcTBw3TKM=", - "dev": true, "requires": { "chokidar": "^1.6.0", "colors": "^1.3.0", @@ -1400,17 +865,36 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash._objecttypes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", + "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=", + "dev": true + }, + "lodash.isobject": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", + "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", + "dev": true, + "requires": { + "lodash._objecttypes": "~2.4.1" + } + }, "lru-cache": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -1419,8 +903,7 @@ "map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" }, "match-stream": { "version": "0.0.2", @@ -1461,14 +944,12 @@ "math-random": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, "requires": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -1488,20 +969,17 @@ "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { "version": "1.35.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", - "dev": true + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" }, "mime-types": { "version": "2.1.19", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", - "dev": true, "requires": { "mime-db": "~1.35.0" } @@ -1510,7 +988,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -1564,7 +1041,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", - "dev": true, "requires": { "basic-auth": "~2.0.0", "debug": "2.6.9", @@ -1577,7 +1053,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -1585,22 +1060,19 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "mri": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.1.tgz", - "integrity": "sha1-haom09ru7t+A3FmEr5XMXKXK2fE=", - "dev": true + "integrity": "sha1-haom09ru7t+A3FmEr5XMXKXK2fE=" }, "ms": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" }, "natives": { "version": "1.1.4", @@ -1611,14 +1083,17 @@ "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "node-fetch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.0.tgz", + "integrity": "sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA==" }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -1627,7 +1102,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, "requires": { "path-key": "^2.0.0" } @@ -1635,14 +1109,12 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, "requires": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" @@ -1652,7 +1124,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, "requires": { "ee-first": "1.1.1" } @@ -1660,13 +1131,13 @@ "on-headers": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -1675,7 +1146,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "dev": true, "requires": { "is-wsl": "^1.1.0" } @@ -1689,14 +1159,12 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, "requires": { "p-try": "^1.0.0" } @@ -1705,7 +1173,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, "requires": { "p-limit": "^1.1.0" } @@ -1713,19 +1180,12 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, "requires": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", @@ -1736,63 +1196,57 @@ "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", "dev": true }, "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, "requires": { "through": "~2.3" } }, - "peek-stream": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", - "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", - "requires": { - "buffer-from": "^1.0.0", - "duplexify": "^3.5.0", - "through2": "^2.0.3" - } - }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "prettier": { "version": "1.13.7", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz", - "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==", - "dev": true + "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==" }, "pretty-quick": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-1.6.0.tgz", "integrity": "sha512-bnCmsPy98ERD7VWBO+0y1OGWLfx/DPUjNFN2ZRVyxuGBiic1BXAGgjHsTKgBIbPISdqpP6KBEmRV0Lir4xu/BA==", - "dev": true, "requires": { "chalk": "^2.3.0", "execa": "^0.8.0", @@ -1804,14 +1258,12 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "proxy-middleware": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=", - "dev": true + "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=" }, "pseudomap": { "version": "1.0.2", @@ -1856,25 +1308,6 @@ } } }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -1885,7 +1318,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "dev": true, "requires": { "is-number": "^4.0.0", "kind-of": "^6.0.0", @@ -1895,28 +1327,36 @@ "is-number": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -1931,7 +1371,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "minimatch": "^3.0.2", @@ -1943,33 +1382,49 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, "requires": { "is-equal-shallow": "^0.1.3" } }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, "requires": { "glob": "^7.0.5" } @@ -1977,14 +1432,12 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -2005,7 +1458,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -2013,14 +1465,62 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "serve": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/serve/-/serve-9.6.0.tgz", + "integrity": "sha512-E5wtMirS9ADD+bs99GofXsLUxwW8EJWc2zQA+x4FwgVGAVnJdzTWIJeFtbVFLaheBewCfN849RwZU2tyAUTIZg==", + "dev": true, + "requires": { + "@zeit/schemas": "2.1.1", + "ajv": "6.5.2", + "arg": "2.0.0", + "boxen": "1.3.0", + "chalk": "2.4.1", + "clipboardy": "1.2.3", + "serve-handler": "4.0.0", + "update-check": "1.5.2" + } + }, + "serve-handler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-4.0.0.tgz", + "integrity": "sha512-zCRfTTfE7Fit2k4JQC/EoKhDyPqMv3FTIQZ/Pvg0ec4d22LdWeqArPCpQmrnnSXlHMbcgFJ/3r7bCuhvrkwFbg==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "glob-slasher": "1.0.1", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + }, + "dependencies": { + "mime-db": { + "version": "1.33.0", + "resolved": "http://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "http://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "~1.33.0" + } } } }, @@ -2028,7 +1528,6 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, "requires": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -2043,7 +1542,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -2051,33 +1549,30 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -2085,14 +1580,12 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "slice-stream": { "version": "1.0.0", @@ -2133,7 +1626,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, "requires": { "through": "2" } @@ -2141,8 +1633,7 @@ "statuses": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" }, "stream-combiner": { "version": "0.0.4", @@ -2152,25 +1643,16 @@ "duplexer": "~0.1.1" } }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "duplexer": "~0.1.1" - } + "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -2178,13 +1660,17 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-indent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, "supports-color": { @@ -2216,48 +1702,16 @@ } } }, - "tar-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", - "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.1.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.0", - "xtend": "^4.0.0" - } - }, "term-size": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "dev": true }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "toxic": { "version": "1.0.1", @@ -2271,7 +1725,8 @@ "traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true }, "universalify": { "version": "0.1.2", @@ -2281,14 +1736,12 @@ "unix-crypt-td-js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.0.0.tgz", - "integrity": "sha1-HAgkFQSBvHoB1J6Y8exmjYJBLzs=", - "dev": true + "integrity": "sha1-HAgkFQSBvHoB1J6Y8exmjYJBLzs=" }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "unzip": { "version": "0.1.11", @@ -2330,34 +1783,6 @@ } } }, - "unzipper": { - "version": "github:ZJONSSON/node-unzipper#ac36814b711c807057d1484300f2f2ec52d058b7", - "from": "github:ZJONSSON/node-unzipper#bad-zip-working", - "requires": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "~1.0.10", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - }, - "dependencies": { - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - } - } - }, "update-check": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.2.tgz", @@ -2380,32 +1805,27 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", - "dev": true + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "websocket-driver": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, "requires": { "http-parser-js": ">=0.4.0", "websocket-extensions": ">=0.1.1" @@ -2414,33 +1834,35 @@ "websocket-extensions": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" } } } diff --git a/package.json b/package.json index 09cd933..cd40be8 100644 --- a/package.json +++ b/package.json @@ -29,14 +29,11 @@ "dependencies": { "dotenv": "^6.0.0", "fs-extra": "^7.0.0", - "gunzip-maybe": "^1.4.1", "husky": "^0.14.3", "live-server": "^1.2.0", "node-fetch": "^2.1.2", "prettier": "^1.13.7", "pretty-quick": "^1.6.0", - "tar": "^4.4.4", - "tar-stream": "^1.6.1", - "unzipper": "github:ZJONSSON/node-unzipper#bad-zip-working" + "tar": "^4.4.4" } } diff --git a/time-travel/build.js b/time-travel/build.js index 4f6e2d3..415c9f4 100644 --- a/time-travel/build.js +++ b/time-travel/build.js @@ -1,162 +1,173 @@ -require("dotenv").config(); - -const fs = require("fs-extra"); -const path = require("path"); -const fetch = require("node-fetch"); -// const unzip = require("unzipper"); -// const extract = require('tar-stream').extract(); -const tar = require("tar"); -// const gunzip = require('gunzip-maybe'); - -const accessToken = process.env.ACCESS_TOKEN; -const query = ` -{ - repository(owner:"Microsoft", name:"join-dev-design"){ - pullRequests(first: 100, states: MERGED) { - edges { - node { - id - title - url - mergedAt - author { - login - avatarUrl - } - editor { - login - avatarUrl - } - mergeCommit { - committedDate - id - tarballUrl - } - id - } - } - } - } -}`; - -const historyFolderPath = path.resolve( - __dirname, - `../docs/time-travel/history` -); - -/** - * - Flush `.docs/time-travel/history` folder. - */ -const flushFolders = async data => { - try { - await fs.remove(historyFolderPath); - await fs.ensureDir(historyFolderPath); - console.log("`docs/time-travel/history` is flushed."); - return data; - } catch (err) { - console.error(err); - } -}; - -/** - * getData from github - * @return {Promise} A Promise that resolves to response - */ -const getDataFromGithub = () => - fetch("https://api.github.com/graphql", { - method: "POST", - body: JSON.stringify({ query }), - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${accessToken}` - } - }) - .then(res => res.json()) - .catch(console.error); - -/** - * Write github response to a json so the front end can use it later. - * @param {Object} data - * @return {Object} same data object - */ -const writeJSONToDocs = data => { - return fs - .writeFile( - path.resolve(__dirname, `../docs/time-travel/index.json`), - JSON.stringify(data) - ) - .then(() => data) - .catch(console.error); -}; - -/** - * Parse tar, keep 'docs/', remove 'docs/time-travel' and everything else - * @param {String} options.url tarball url - * @param {String} oprions.id id of merged pull request - */ -const parseTarball = async options => { - const { url, id } = options; - const tarball = await fetch(url); - const tarballStream = tarball.body; - const unzipPath = path.join(historyFolderPath, id); - const parse = new tar.Parse(); - - tarballStream - .on("error", console.error) - .pipe(parse) - .on("entry", async function(entry) { - const type = entry.type; - const tpath = entry.path; - const [root, subDir1, subDir2, ...rest] = tpath.split(path.sep); - console.log(type, tpath); - - if (subDir1 === "docs" && subDir2 !== "time-travel" && type === "File") { - const docsPath = path.join(unzipPath, subDir1, subDir2, rest.join("")); - - try { - await fs.ensureFile(docsPath); - } catch (err) { - console.error(err); - } - - entry.pipe(fs.createWriteStream(docsPath)); - } else { - entry.resume(); - } - - // entry.on('end', () => { console.log(`${tpath} is written`) }); - entry.on("error", console.error); - }) - .on("error", console.error); - - return new Promise(function(resolve, reject) { - tarballStream.on("finish", () => { - resolve(unzipPath); - }); - tarballStream.on("error", reject); - }); -}; - -getDataFromGithub() - .then(flushFolders) - .then(writeJSONToDocs) - .then(res => { - const tarPromises = res.data.repository.pullRequests.edges.map(edge => { - const url = edge.node.mergeCommit.tarballUrl; - const id = edge.node.id; - - return parseTarball({ - id, - url - }); - }); - - return Promise.all(tarPromises); - }) - .then(paths => { - console.log( - `build complete. ${ - paths.length - } folders has been written to ${historyFolderPath}.` - ); - }); +require("dotenv").config(); + +const fs = require("fs-extra"); +const path = require("path"); +const fetch = require("node-fetch"); +const tar = require("tar"); + +const accessToken = process.env.ACCESS_TOKEN; +const query = ` +{ + repository(owner:"Microsoft", name:"join-dev-design"){ + pullRequests(first: 100, states: MERGED) { + edges { + node { + id + title + url + mergedAt + author { + login + avatarUrl + } + editor { + login + avatarUrl + } + mergeCommit { + committedDate + id + tarballUrl + } + id + } + } + } + } +}`; + +const historyFolderPath = path.resolve( + __dirname, + "../docs/time-travel/history" +); + +/** + * - Flush `.docs/time-travel/history` folder. + */ +const flushFolders = async data => { + try { + if (process.env.FULL_REBUILD) { + await fs.remove(historyFolderPath); + await fs.ensureDir(historyFolderPath); + console.log("`docs/time-travel/history` is flushed."); + } else { + console.log( + "Skipping flush. Set env FULL_REBUILD=true to fully rebuild history" + ); + } + + return data; + } catch (err) { + console.error(err); + } +}; + +/** + * getData from github + * @return {Promise} A Promise that resolves to response + */ +const getDataFromGithub = () => + fetch("https://api.github.com/graphql", { + method: "POST", + body: JSON.stringify({ query }), + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${accessToken}` + } + }) + .then(res => res.json()) + .catch(console.error); + +/** + * Write github response to a json so the front end can use it later. + * @param {Object} data + * @return {Object} same data object + */ +const writeJSONToDocs = data => { + return fs + .writeFile( + path.resolve(__dirname, `../docs/time-travel/index.json`), + JSON.stringify(data, null, 2) + ) + .then(() => data) + .catch(console.error); +}; + +/** + * Parse tar, keep 'docs/', remove 'docs/time-travel' and everything else + * @param {String} options.url tarball url + * @param {String} options.id id of merged pull request + */ +const parseTarball = async options => { + const { url, id } = options; + const tarball = await fetch(url); + const tarballStream = tarball.body; + const unzipPath = path.join(historyFolderPath, id); + const parse = new tar.Parse(); + + tarballStream + .on("error", console.error) + .pipe(parse) + .on("entry", async function(entry) { + const type = entry.type; + const tpath = entry.path; + const [root, subDir1, subDir2, ...rest] = tpath.split(path.sep); + console.log(type, tpath); + + if (subDir1 === "docs" && subDir2 !== "time-travel" && type === "File") { + const docsPath = path.join(unzipPath, subDir1, subDir2, rest.join("")); + + try { + await fs.ensureFile(docsPath); + } catch (err) { + console.error(err); + } + + entry.pipe(fs.createWriteStream(docsPath)); + } else { + entry.resume(); + } + + // entry.on('end', () => { console.log(`${tpath} is written`) }); + entry.on("error", console.error); + }) + .on("error", console.error); + + return new Promise(function(resolve, reject) { + tarballStream.on("finish", () => { + resolve(unzipPath); + }); + tarballStream.on("error", reject); + }); +}; + +getDataFromGithub() + .then(flushFolders) + .then(writeJSONToDocs) + .then(async res => { + const existingHistory = await fs.readdir(historyFolderPath); + const pullRequestsToProcess = res.data.repository.pullRequests.edges.filter( + edge => { + return !existingHistory.includes(edge.node.id); + } + ); + + const tarPromises = pullRequestsToProcess.map(edge => { + const url = edge.node.mergeCommit.tarballUrl; + const id = edge.node.id; + + return parseTarball({ + id, + url + }); + }); + + return Promise.all(tarPromises); + }) + .then(paths => { + console.log( + `build complete. ${ + paths.length + } folders have been written to ${historyFolderPath}.` + ); + });