1
0
mirror of https://github.com/kognise/water.css.git synced 2025-08-10 15:14:34 +02:00

refactor: add HTML processing, picker as partial

This commit is contained in:
Jonas Kuske
2019-05-31 03:31:15 +02:00
parent 75f9280dab
commit 6bf48e1615
9 changed files with 954 additions and 512 deletions

359
dist/docs/index.html vendored
View File

@@ -1,357 +1,2 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Water.css</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- Base styles of water.css, so styles don't have to wait until JS is loaded -->
<link
rel="preload"
as="style"
href="https://cdn.jsdelivr.net/gh/kognise/water.css/dist/dark-legacy.standalone.min.css"
/>
<link
rel="preload"
as="style"
href="https://cdn.jsdelivr.net/gh/kognise/water.css/dist/dark-legacy.standalone.min.css"
media="(prefers-color-scheme: dark)"
/>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/gh/kognise/water.css/dist/dark-legacy.min.css"
/>
<!-- TODO: Remove once water.css v2 is hosted so the above links work -->
<link rel="stylesheet" href="../dark.min.css" />
<!-- Dynamic version of water.css, overwrites base styles. JavaScript sets & updates href. -->
<link rel="stylesheet" id="js-stylesheet" />
<!-- Custom styles for the documentation / version picker -->
<link rel="stylesheet" href="style.css" />
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-116663597-6"></script>
<script>
window.dataLayer = window.dataLayer || []
function gtag() {
dataLayer.push(arguments)
}
gtag('js', new Date())
gtag('config', 'UA-116663597-6')
</script>
</head>
<body>
<h1>Water.css</h1>
<p>
Water.css is a just-add-css collection of styles to make simple websites like this just a
little bit nicer.
<br />
Now you can write your simple static site with nice semantic html, and Water.css will manage
the styling for you.
</p>
<div class="row">
<div>
<a href="#installation"><b>Get it already!</b></a>
<br />
<a href="https://github.com/kognise/water.css"><b>GitHub</b></a>
</div>
<a
href="https://www.producthunt.com/posts/water-css?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-water-css"
target="_blank"
>
<img
id="js-producthunt"
src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=150490&theme=dark&period=daily"
alt="Water.css - Make your tiny website just a little nicer | Product Hunt Embed"
style="width: 250px; height: 54px;"
width="250px"
height="54px"
/>
</a>
</div>
<!-- Start interactive version picker -->
<div id="installation" v-cloak>
<h2>Installation</h2>
<div style="overflow: hidden">
<header class="row">
<h3>Paste this into the <code>&lt;head&gt;</code> of your HTML:</h3>
<button type="button" @click="copyToClipboard">
<transition>
<span v-if="copyStatus === 'success'" class="emoji"></span>
<span v-else-if="copyStatus === 'failed'" class="emoji"></span>
</transition>
Copy to clipboard
</button>
</header>
<transition mode="out-in">
<pre :key="selectedVersion.fileSnippet"><code>{{selectedVersion.fileSnippet}}</code></pre>
</transition>
<h3>Version options:</h3>
<form action="./" method="post" @submit.prevent>
<label>
<input type="radio" value="dark" checked name="theme" v-model="versionOptions.theme" />
Dark theme <span class="emoji">🌙</span>
<span
v-if="!versionOptions.isStandalone"
class="emoji translucent"
title="Selected theme may be overwritten by theme settings on user's device"
>
/ ☀</span
>
</label>
<label>
<input type="radio" value="light" name="theme" v-model="versionOptions.theme" />
Light theme <span class="emoji"></span>
<span
v-if="!versionOptions.isStandalone"
class="emoji translucent"
title="Selected theme may be overwritten by theme settings on user's device"
>
/ 🌙</span
>
</label>
<br /><br />
<label>
<input type="checkbox" checked v-model="versionOptions.isStandalone" />
Enforce theme? (ignore <code>prefers-color-scheme</code>)
</label>
<br /><br />
<label>
<input type="checkbox" v-model="versionOptions.isLegacy" />
Support Internet Explorer and other legacy browsers?
</label>
</form>
<h3>Version info:</h3>
<table>
<tbody>
<tr>
<th>File</th>
<td>{{ selectedVersion.fileName }}</td>
</tr>
<tr>
<th>Size (min+gzip)</th>
<td>{{ selectedVersion.fileSize }}KB</td>
</tr>
<tr>
<th>Theme</th>
<td>
<template v-if="versionOptions.isStandalone">
<span v-if="versionOptions.theme === 'dark'" class="emoji">🌙</span>
<span v-else class="emoji"></span>
{{ versionOptions.theme | capitalize }}
</template>
<template v-else>
<span
v-if="versionOptions.theme === 'dark'"
class="emoji"
title="Selected theme may be overwritten by theme settings on user's device"
>
🌙<span class="translucent"> / ☀</span>
</span>
<span
v-else
class="emoji"
title="Selected theme may be overwritten by theme settings on user's device"
>
<span class="translucent"> / 🌙</span></span
>
Defaults to {{ versionOptions.theme }}, but respects user-defined theme settings.
(detected via <code>prefers-color-scheme</code>)
<template v-if="preferedColorScheme">
<br />Your device is currently set to {{ preferedColorScheme }} mode.
</template>
</template>
</td>
</tr>
<tr>
<th>Browser support</th>
<td>
<template v-if="versionOptions.isLegacy">
All browsers (including Internet Explorer)
</template>
<template v-else>
All current browsers (<a href="https://caniuse.com/#feat=css-variables"
>support for CSS Custom Properties</a
>)
</template>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- End interactive version picker -->
<h2 id="goals">Goals</h2>
<ul>
<li>Responsive</li>
<li>Good code quality</li>
<li>Good browser support</li>
<li>Small size (&lt; 2kb)</li>
<li>Beautiful</li>
<li>No classes</li>
</ul>
<h2 id="responsive">Is it responsive?</h2>
<p>
<strong>Heck yeah!</strong> It doesn't include any fancy styles so it's easily mobile
responsive. Just add the famous
<a href="https://www.w3schools.com/css/css_rwd_viewport.asp">responsive viewport tag</a> and
you'll be good to go!
</p>
<p>In fact, try resizing this page. Everything flows super nicely as you'll see.</p>
<h2 id="demo">Element demos</h2>
<p>This is supposed to be a demo page so we need more elements!</p>
<h3 id="form-elements">Form elements</h3>
<form>
<label for="email">Email</label>
<input type="email" name="email" id="email" placeholder="john.doe@gmail.com" />
<label for="id">User id (read only)</label>
<input readonly name="id" id="id" value="04D6H89Z" />
<label for="disabled">Random disabled input</label>
<input disabled name="disabled" id="disabled" placeholder="Because why not?" />
<label for="about">About me</label>
<textarea name="about" id="about" placeholder="I am a textarea..."></textarea>
<label>Choose a Doe:</label>
<div>
<input type="radio" id="john" name="drone" value="john" checked />
<label for="john">John Doe</label>
</div>
<div>
<input type="radio" id="jane" name="drone" value="jane" checked />
<label for="jane">Jane Doe</label>
</div>
<div>
<input type="radio" id="johnny" name="drone" value="johnny" checked />
<label for="johnny">Johnny Doe</label>
</div>
<br />
<input type="checkbox" name="remember" id="remember" checked />
<label for="remember">Remember me</label>
<input type="submit" />
</form>
<h3 id="code">Code</h3>
<p>
Below is some code, you can copy it with <kbd>Ctrl-C</kbd>. Did you know,
<code>alert(1)</code> can show an alert in JavaScript!
</p>
<pre><code>// This logs a message to the console and check out the scrollbar.<br>console.log('Hello, world!')</code></pre>
<h3 id="other">Other</h3>
<p>Here's a horizontal rule and image because I don't know where else to put them.</p>
<img src="https://placekitten.com/408/287" alt="Example kitten" />
<hr />
<p>And here's a nicely marked up table!</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Quantity</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>Godzilla</td>
<td>2</td>
<td>$299.99</td>
</tr>
<tr>
<td>Mozilla</td>
<td>10</td>
<td>$100,000.00</td>
</tr>
<tr>
<td>Quesadilla</td>
<td>1</td>
<td>$2.22</td>
</tr>
</tbody>
</table>
<h3 id="typography">Typography</h3>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque dictum hendrerit velit, quis
ullamcorper sem congue ac. Quisque id magna rhoncus, sodales massa vel, vestibulum elit. Duis
ornare accumsan egestas. Proin maximus lacus interdum leo molestie convallis. Orci varius
natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut iaculis risus eu
felis feugiat, eu mollis neque elementum. Donec interdum, nisl id dignissim iaculis, felis dui
aliquet dui, non fermentum velit lectus ac quam. Class aptent taciti sociosqu ad litora
torquent per conubia nostra, per inceptos himenaeos.
<strong>This is strong,</strong> this is normal, <b>this is just bold,</b>
<em>and this is emphasized!</em> And heck, <a href="/">here</a>'s a link.
</p>
<blockquote cite="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote">
"The HTML blockquote Element (or HTML Block Quotation Element) indicates that the enclosed
text is an extended quotation. Usually, this is rendered visually by indentation (see
<a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote#Usage_notes"
>Notes</a
>
for how to change it). A URL for the source of the quotation may be given using the
<code>cite</code> attribute, while a text representation of the source can be given using the
<code>&ltcite&gt</code> cite element."
<footer>
<cite>MDN, "The Block Quotation element"</cite>
</footer>
</blockquote>
<ul>
<li>Unordered list item 1</li>
<li>Unordered list item 2</li>
<li>Unordered list item 3</li>
</ul>
<ol>
<li>Ordered list item 1</li>
<li>Ordered list item 2</li>
<li>Ordered list item 3</li>
</ol>
<p>Addresses are also styled to be <strong>awesome</strong>!</p>
<address>
<a href="mailto:john.doe@example.com">john.doe@example.com</a><br />
<a href="tel:778-330-2389">778-330-2389</a><br />
<a href="sms:666-666-6666">666-666-6666</a><br />
</address>
<br />
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<h3>Heading 3</h3>
<h4>Heading 4</h4>
<h5>Heading 5</h5>
<h6>Heading 6</h6>
<footer>
<a href="#">Back to top <span class="emoji"></span></a>
</footer>
<script
src="https://unpkg.com/clipboard-polyfill@2.8.0/build/clipboard-polyfill.promise.js"
defer
></script>
<script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js" defer></script>
<script src="script.js" defer></script>
</body>
</html>
<!DOCTYPE html><html lang="en"><head><title>Water.css</title><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="preload" as="style" href="https://cdn.jsdelivr.net/gh/kognise/water.css/dist/dark-legacy.standalone.min.css"><link rel="preload" as="style" href="https://cdn.jsdelivr.net/gh/kognise/water.css/dist/dark-legacy.standalone.min.css" media="(prefers-color-scheme: dark)"><link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css/dist/dark-legacy.min.css"><link rel="stylesheet" href="../dark.min.css"><link rel="stylesheet" id="js-stylesheet"><link rel="stylesheet" href="style.css"><script async src="https://www.googletagmanager.com/gtag/js?id=UA-116663597-6"></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-116663597-6");</script></head><body> <h1>Water.css</h1> <p> Water.css is a just-add-css collection of styles to make simple websites like this just a little bit nicer. <br> Now you can write your simple static site with nice semantic html, and Water.css will manage the styling for you. </p> <div class="row"> <div> <a href="#installation"><b>Get it already!</b></a> <br> <a href="https://github.com/kognise/water.css"><b>GitHub</b></a> </div> <a href="https://www.producthunt.com/posts/water-css?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-water-css" target="_blank"> <img id="js-producthunt" src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=150490&theme=dark&period=daily" alt="Water.css - Make your tiny website just a little nicer | Product Hunt Embed" style="width:250px;height:54px" width="250px" height="54px"> </a> </div> <h2>Installation</h2> <div id="installation" v-cloak=""> <header class="row"> <h3>Paste this into the <code>&lt;head&gt;</code> of your HTML:</h3> <button type="button" @click="copyToClipboard"> <transition> <span v-if="copyStatus === 'success'" class="emoji"></span> <span v-else-if="copyStatus === 'failed'" class="emoji"></span> </transition> Copy to clipboard </button> </header> <transition mode="out-in"> <pre :key="selectedVersion.fileSnippet"><code>{{selectedVersion.fileSnippet}}</code></pre> </transition> <h3>Version options:</h3> <form action="./" method="post" @submit.prevent=""> <label> <input type="radio" value="dark" checked name="theme" v-model="versionOptions.theme"> Dark theme <span class="emoji">🌙</span> <span v-if="!versionOptions.isStandalone" class="emoji translucent" title="Selected theme may be overwritten by theme settings on user's device"> / ☀ </span> </label> <label> <input type="radio" value="light" name="theme" v-model="versionOptions.theme"> Light theme <span class="emoji"></span> <span v-if="!versionOptions.isStandalone" class="emoji translucent" title="Selected theme may be overwritten by theme settings on user's device"> / 🌙 </span> </label> <br><br> <label> <input type="checkbox" checked v-model="versionOptions.isStandalone"> Enforce theme? (ignore <code>prefers-color-scheme</code>) </label> <br><br> <label> <input type="checkbox" v-model="versionOptions.isLegacy"> Support Internet Explorer and other legacy browsers? </label> </form> <h3>Version info:</h3> <table> <tbody> <tr> <th>File</th> <td>{{ selectedVersion.fileName }}</td> </tr> <tr> <th>Size (min+gzip)</th> <td>{{ selectedVersion.fileSize }}KB</td> </tr> <tr> <th>Theme</th> <td> <template v-if="versionOptions.isStandalone"> <span v-if="versionOptions.theme === 'dark'" class="emoji">🌙</span> <span v-else="" class="emoji"></span> {{ versionOptions.theme | capitalize }} </template> <template v-else=""> <span v-if="versionOptions.theme === 'dark'" class="emoji" title="Selected theme may be overwritten by theme settings on user's device"> 🌙<span class="translucent"> / ☀</span> </span> <span v-else="" class="emoji" title="Selected theme may be overwritten by theme settings on user's device"><span class="translucent"> / 🌙</span> </span> Defaults to {{ versionOptions.theme }}, but respects user-defined theme settings. (detected via <code>prefers-color-scheme</code>) <template v-if="preferedColorScheme"> <br>Your device is currently set to {{ preferedColorScheme }} mode. </template> </template> </td> </tr> <tr> <th>Browser support</th> <td> <template v-if="versionOptions.isLegacy"> All browsers (including Internet Explorer) </template> <template v-else=""> All current browsers (<a href="https://caniuse.com/#feat=css-variables">support for CSS Custom Properties</a>) </template> </td> </tr> </tbody> </table>
</div> <h2 id="goals">Goals</h2> <ul> <li>Responsive</li> <li>Good code quality</li> <li>Good browser support</li> <li>Small size (&lt; 2kb)</li> <li>Beautiful</li> <li>No classes</li> </ul> <h2 id="responsive">Is it responsive?</h2> <p> <strong>Heck yeah!</strong> It doesn't include any fancy styles so it's easily mobile responsive. Just add the famous <a href="https://www.w3schools.com/css/css_rwd_viewport.asp">responsive viewport tag</a> and you'll be good to go! </p> <p>In fact, try resizing this page. Everything flows super nicely as you'll see.</p> <h2 id="demo">Element demos</h2> <p>This is supposed to be a demo page so we need more elements!</p> <h3 id="form-elements">Form elements</h3> <form> <label for="email">Email</label> <input type="email" name="email" id="email" placeholder="john.doe@gmail.com"> <label for="id">User id (read only)</label> <input readonly name="id" id="id" value="04D6H89Z"> <label for="disabled">Random disabled input</label> <input disabled name="disabled" id="disabled" placeholder="Because why not?"> <label for="about">About me</label> <textarea name="about" id="about" placeholder="I am a textarea..."></textarea> <label>Choose a Doe:</label> <div> <input type="radio" id="john" name="drone" value="john" checked> <label for="john">John Doe</label> </div> <div> <input type="radio" id="jane" name="drone" value="jane" checked> <label for="jane">Jane Doe</label> </div> <div> <input type="radio" id="johnny" name="drone" value="johnny" checked> <label for="johnny">Johnny Doe</label> </div> <br> <input type="checkbox" name="remember" id="remember" checked> <label for="remember">Remember me</label> <input type="submit"> </form> <h3 id="code">Code</h3> <p> Below is some code, you can copy it with <kbd>Ctrl-C</kbd>. Did you know, <code>alert(1)</code> can show an alert in JavaScript! </p> <pre><code>// This logs a message to the console and check out the scrollbar.<br>console.log('Hello, world!')</code></pre> <h3 id="other">Other</h3> <p>Here's a horizontal rule and image because I don't know where else to put them.</p> <img src="https://placekitten.com/408/287" alt="Example kitten"> <hr> <p>And here's a nicely marked up table!</p> <table> <thead> <tr> <th>Name</th> <th>Quantity</th> <th>Price</th> </tr> </thead> <tbody> <tr> <td>Godzilla</td> <td>2</td> <td>$299.99</td> </tr> <tr> <td>Mozilla</td> <td>10</td> <td>$100,000.00</td> </tr> <tr> <td>Quesadilla</td> <td>1</td> <td>$2.22</td> </tr> </tbody> </table> <h3 id="typography">Typography</h3> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque dictum hendrerit velit, quis ullamcorper sem congue ac. Quisque id magna rhoncus, sodales massa vel, vestibulum elit. Duis ornare accumsan egestas. Proin maximus lacus interdum leo molestie convallis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut iaculis risus eu felis feugiat, eu mollis neque elementum. Donec interdum, nisl id dignissim iaculis, felis dui aliquet dui, non fermentum velit lectus ac quam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. <strong>This is strong,</strong> this is normal, <b>this is just bold,</b> <em>and this is emphasized!</em> And heck, <a href="/">here</a>'s a link. </p> <blockquote cite="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote"> "The HTML blockquote Element (or HTML Block Quotation Element) indicates that the enclosed text is an extended quotation. Usually, this is rendered visually by indentation (see <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote#Usage_notes">Notes</a> for how to change it). A URL for the source of the quotation may be given using the <code>cite</code> attribute, while a text representation of the source can be given using the <code>&ltcite&gt</code> cite element." <footer> <cite>MDN, "The Block Quotation element"</cite> </footer> </blockquote> <ul> <li>Unordered list item 1</li> <li>Unordered list item 2</li> <li>Unordered list item 3</li> </ul> <ol> <li>Ordered list item 1</li> <li>Ordered list item 2</li> <li>Ordered list item 3</li> </ol> <p>Addresses are also styled to be <strong>awesome</strong>!</p> <address> <a href="mailto:john.doe@example.com">john.doe@example.com</a><br> <a href="tel:778-330-2389">778-330-2389</a><br> <a href="sms:666-666-6666">666-666-6666</a><br> </address> <br> <h1>Heading 1</h1> <h2>Heading 2</h2> <h3>Heading 3</h3> <h4>Heading 4</h4> <h5>Heading 5</h5> <h6>Heading 6</h6> <footer> <a href="#">Back to top <span class="emoji"></span></a> </footer> <script src="https://unpkg.com/clipboard-polyfill@2.8.0/build/clipboard-polyfill.promise.js" defer></script> <script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js" defer></script> <script src="script.js" defer></script> </body></html>

2
dist/docs/style.css vendored
View File

@@ -1,2 +1,2 @@
html{scroll-behavior:smooth}#js-producthunt{margin-top:1rem}#installation header>h3{margin:1rem 2.5rem 1rem 0}#installation header button{position:relative;margin-left:auto;overflow:visible}#installation header button span{position:absolute;left:-2rem;display:inline-block;transform:scale(1.3)}#installation table{table-layout:fixed}#installation table th{border:none;vertical-align:top;width:35%}body>footer{padding-top:2rem;display:flex;justify-content:flex-end;align-items:flex-end}.row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.emoji{font-family:Segoe UI Emoji,Apple Color Emoji,Noto Color Emoji,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.translucent{opacity:.5}.v-enter,.v-leave-to{transform:scale(0)!important}.v-enter-active,.v-leave-active{transition:transform .22s cubic-bezier(.175,.885,.32,1.275)}[v-cloak]>:not(h2){display:none}[v-cloak]:after{content:"Version picker is loading..."}
html{scroll-behavior:smooth}#js-producthunt{margin-top:1rem}#installation{overflow:hidden}#installation header>h3{margin:1rem 2.5rem 1rem 0}#installation header button{position:relative;margin-left:auto;overflow:visible}#installation header button span{position:absolute;left:-2rem;display:inline-block;transform:scale(1.3)}#installation table{table-layout:fixed}#installation table th{border:none;vertical-align:top;width:35%}body>footer{padding-top:2rem;display:flex;justify-content:flex-end;align-items:flex-end}.row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.emoji{font-family:Segoe UI Emoji,Apple Color Emoji,Noto Color Emoji,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.translucent{opacity:.4}.v-enter,.v-leave-to{transform:scale(0)!important}.v-enter-active,.v-leave-active{transition:transform .22s cubic-bezier(.175,.885,.32,1.275)}[v-cloak]>*{display:none}[v-cloak]:after{content:"Version picker is loading..."}
/*# sourceMappingURL=style.css.map */

View File

@@ -1 +1 @@
{"version":3,"sources":["style.css"],"names":[],"mappings":"AAAA,KACE,sBACF,CAEA,gBACE,eACF,CAEA,wBACE,yBACF,CAEA,4BACE,iBAAkB,CAClB,gBAAiB,CACjB,gBACF,CACA,iCACE,iBAAkB,CAClB,UAAW,CACX,oBAAqB,CACrB,oBACF,CAEA,oBACE,kBACF,CACA,uBACE,WAAY,CACZ,kBAAmB,CACnB,SACF,CAEA,YACE,gBAAiB,CACjB,YAAa,CACb,wBAAyB,CACzB,oBACF,CAGA,KACE,YAAa,CACb,cAAe,CACf,kBAAmB,CACnB,6BACF,CAGA,OACE,+LAGF,CACA,aACE,UACF,CAGA,qBAEE,4BACF,CACA,gCAEE,2DACF,CACA,mBACE,YACF,CACA,gBACE,sCACF","file":"style.css","sourcesContent":["html {\n scroll-behavior: smooth;\n}\n\n#js-producthunt {\n margin-top: 1rem;\n}\n\n#installation header > h3 {\n margin: 1rem 2.5rem 1rem 0;\n}\n/* Make the ✔ / ❌ Emoji appear next to the button */\n#installation header button {\n position: relative;\n margin-left: auto;\n overflow: visible;\n}\n#installation header button span {\n position: absolute;\n left: -2rem;\n display: inline-block;\n transform: scale(1.3);\n}\n/* Fixed layout so columns don't jump when content changes */\n#installation table {\n table-layout: fixed;\n}\n#installation table th {\n border: none;\n vertical-align: top;\n width: 35%;\n}\n\nbody > footer {\n padding-top: 2rem;\n display: flex;\n justify-content: flex-end;\n align-items: flex-end;\n}\n\n/* Used for (Links / ProductHunt) and (Installation / Copy-Button) rows */\n.row {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n/* Use proper Emoji instead of plain Unicode chars */\n.emoji {\n font-family: 'Segoe UI Emoji', 'Apple Color Emoji', 'Noto Color Emoji', system-ui, -apple-system,\n BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans,\n Helvetica Neue, sans-serif;\n}\n.translucent {\n opacity: 0.5;\n}\n\n/* For the bounce transitions of code snippet and copy success Emoji */\n.v-enter,\n.v-leave-to {\n transform: scale(0) !important;\n}\n.v-enter-active,\n.v-leave-active {\n transition: transform 220ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n}\n[v-cloak] > *:not(h2) {\n display: none;\n}\n[v-cloak]::after {\n content: 'Version picker is loading...';\n}\n"]}
{"version":3,"sources":["style.css"],"names":[],"mappings":"AAAA,KACE,sBACF,CAEA,gBACE,eACF,CAEA,cACE,eACF,CACA,wBACE,yBACF,CAEA,4BACE,iBAAkB,CAClB,gBAAiB,CACjB,gBACF,CACA,iCACE,iBAAkB,CAClB,UAAW,CACX,oBAAqB,CACrB,oBACF,CAEA,oBACE,kBACF,CACA,uBACE,WAAY,CACZ,kBAAmB,CACnB,SACF,CAEA,YACE,gBAAiB,CACjB,YAAa,CACb,wBAAyB,CACzB,oBACF,CAGA,KACE,YAAa,CACb,cAAe,CACf,kBAAmB,CACnB,6BACF,CAGA,OACE,+LAGF,CACA,aACE,UACF,CAGA,qBAEE,4BACF,CACA,gCAEE,2DACF,CACA,YACE,YACF,CACA,gBACE,sCACF","file":"style.css","sourcesContent":["html {\n scroll-behavior: smooth;\n}\n\n#js-producthunt {\n margin-top: 1rem;\n}\n\n#installation {\n overflow: hidden;\n}\n#installation header > h3 {\n margin: 1rem 2.5rem 1rem 0;\n}\n/* Make the ✔ / ❌ Emoji appear next to the button */\n#installation header button {\n position: relative;\n margin-left: auto;\n overflow: visible;\n}\n#installation header button span {\n position: absolute;\n left: -2rem;\n display: inline-block;\n transform: scale(1.3);\n}\n/* Fixed layout so columns don't jump when content changes */\n#installation table {\n table-layout: fixed;\n}\n#installation table th {\n border: none;\n vertical-align: top;\n width: 35%;\n}\n\nbody > footer {\n padding-top: 2rem;\n display: flex;\n justify-content: flex-end;\n align-items: flex-end;\n}\n\n/* Used for (Links / ProductHunt) and (Installation / Copy-Button) rows */\n.row {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n/* Use proper Emoji instead of plain Unicode chars */\n.emoji {\n font-family: 'Segoe UI Emoji', 'Apple Color Emoji', 'Noto Color Emoji', system-ui, -apple-system,\n BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans,\n Helvetica Neue, sans-serif;\n}\n.translucent {\n opacity: 0.4;\n}\n\n/* For the bounce transitions of code snippet and copy success Emoji */\n.v-enter,\n.v-leave-to {\n transform: scale(0) !important;\n}\n.v-enter-active,\n.v-leave-active {\n transition: transform 220ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n}\n[v-cloak] > * {\n display: none;\n}\n[v-cloak]::after {\n content: 'Version picker is loading...';\n}\n"]}

View File

@@ -82,125 +82,8 @@
</a>
</div>
<!-- Start interactive version picker -->
<div id="installation" v-cloak>
<h2>Installation</h2>
<div style="overflow: hidden">
<header class="row">
<h3>Paste this into the <code>&lt;head&gt;</code> of your HTML:</h3>
<button type="button" @click="copyToClipboard">
<transition>
<span v-if="copyStatus === 'success'" class="emoji"></span>
<span v-else-if="copyStatus === 'failed'" class="emoji"></span>
</transition>
Copy to clipboard
</button>
</header>
<transition mode="out-in">
<pre :key="selectedVersion.fileSnippet"><code>{{selectedVersion.fileSnippet}}</code></pre>
</transition>
<h3>Version options:</h3>
<form action="./" method="post" @submit.prevent>
<label>
<input type="radio" value="dark" checked name="theme" v-model="versionOptions.theme" />
Dark theme <span class="emoji">🌙</span>
<span
v-if="!versionOptions.isStandalone"
class="emoji translucent"
title="Selected theme may be overwritten by theme settings on user's device"
>
/ ☀</span
>
</label>
<label>
<input type="radio" value="light" name="theme" v-model="versionOptions.theme" />
Light theme <span class="emoji"></span>
<span
v-if="!versionOptions.isStandalone"
class="emoji translucent"
title="Selected theme may be overwritten by theme settings on user's device"
>
/ 🌙</span
>
</label>
<br /><br />
<label>
<input type="checkbox" checked v-model="versionOptions.isStandalone" />
Enforce theme? (ignore <code>prefers-color-scheme</code>)
</label>
<br /><br />
<label>
<input type="checkbox" v-model="versionOptions.isLegacy" />
Support Internet Explorer and other legacy browsers?
</label>
</form>
<h3>Version info:</h3>
<table>
<tbody>
<tr>
<th>File</th>
<td>{{ selectedVersion.fileName }}</td>
</tr>
<tr>
<th>Size (min+gzip)</th>
<td>{{ selectedVersion.fileSize }}KB</td>
</tr>
<tr>
<th>Theme</th>
<td>
<template v-if="versionOptions.isStandalone">
<span v-if="versionOptions.theme === 'dark'" class="emoji">🌙</span>
<span v-else class="emoji"></span>
{{ versionOptions.theme | capitalize }}
</template>
<template v-else>
<span
v-if="versionOptions.theme === 'dark'"
class="emoji"
title="Selected theme may be overwritten by theme settings on user's device"
>
🌙<span class="translucent"> / ☀</span>
</span>
<span
v-else
class="emoji"
title="Selected theme may be overwritten by theme settings on user's device"
>
<span class="translucent"> / 🌙</span></span
>
Defaults to {{ versionOptions.theme }}, but respects user-defined theme settings.
(detected via <code>prefers-color-scheme</code>)
<template v-if="preferedColorScheme">
<br />Your device is currently set to {{ preferedColorScheme }} mode.
</template>
</template>
</td>
</tr>
<tr>
<th>Browser support</th>
<td>
<template v-if="versionOptions.isLegacy">
All browsers (including Internet Explorer)
</template>
<template v-else>
All current browsers (<a href="https://caniuse.com/#feat=css-variables"
>support for CSS Custom Properties</a
>)
</template>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- End interactive version picker -->
<h2>Installation</h2>
<include src="./versionpicker.html"></include>
<h2 id="goals">Goals</h2>
<ul>

View File

@@ -6,6 +6,9 @@ html {
margin-top: 1rem;
}
#installation {
overflow: hidden;
}
#installation header > h3 {
margin: 1rem 2.5rem 1rem 0;
}
@@ -53,7 +56,7 @@ body > footer {
Helvetica Neue, sans-serif;
}
.translucent {
opacity: 0.5;
opacity: 0.4;
}
/* For the bounce transitions of code snippet and copy success Emoji */
@@ -65,7 +68,7 @@ body > footer {
.v-leave-active {
transition: transform 220ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
[v-cloak] > *:not(h2) {
[v-cloak] > * {
display: none;
}
[v-cloak]::after {

115
docs/versionpicker.html Executable file
View File

@@ -0,0 +1,115 @@
<!-- Start interactive version picker -->
<div id="installation" v-cloak>
<header class="row">
<h3>Paste this into the <code>&lt;head&gt;</code> of your HTML:</h3>
<button type="button" @click="copyToClipboard">
<transition>
<span v-if="copyStatus === 'success'" class="emoji"></span>
<span v-else-if="copyStatus === 'failed'" class="emoji"></span>
</transition>
Copy to clipboard
</button>
</header>
<transition mode="out-in">
<pre :key="selectedVersion.fileSnippet"><code>{{selectedVersion.fileSnippet}}</code></pre>
</transition>
<h3>Version options:</h3>
<form action="./" method="post" @submit.prevent>
<label>
<input type="radio" value="dark" checked name="theme" v-model="versionOptions.theme" />
Dark theme <span class="emoji">🌙</span>
<span
v-if="!versionOptions.isStandalone"
class="emoji translucent"
title="Selected theme may be overwritten by theme settings on user's device"
>
/ ☀
</span>
</label>
<label>
<input type="radio" value="light" name="theme" v-model="versionOptions.theme" />
Light theme <span class="emoji"></span>
<span
v-if="!versionOptions.isStandalone"
class="emoji translucent"
title="Selected theme may be overwritten by theme settings on user's device"
>
/ 🌙
</span>
</label>
<br /><br />
<label>
<input type="checkbox" checked v-model="versionOptions.isStandalone" />
Enforce theme? (ignore <code>prefers-color-scheme</code>)
</label>
<br /><br />
<label>
<input type="checkbox" v-model="versionOptions.isLegacy" />
Support Internet Explorer and other legacy browsers?
</label>
</form>
<h3>Version info:</h3>
<table>
<tbody>
<tr>
<th>File</th>
<td>{{ selectedVersion.fileName }}</td>
</tr>
<tr>
<th>Size (min+gzip)</th>
<td>{{ selectedVersion.fileSize }}KB</td>
</tr>
<tr>
<th>Theme</th>
<td>
<template v-if="versionOptions.isStandalone">
<span v-if="versionOptions.theme === 'dark'" class="emoji">🌙</span>
<span v-else class="emoji"></span>
{{ versionOptions.theme | capitalize }}
</template>
<template v-else>
<span
v-if="versionOptions.theme === 'dark'"
class="emoji"
title="Selected theme may be overwritten by theme settings on user's device"
>
🌙<span class="translucent"> / ☀</span>
</span>
<span
v-else
class="emoji"
title="Selected theme may be overwritten by theme settings on user's device"
>
<span class="translucent"> / 🌙</span>
</span>
Defaults to {{ versionOptions.theme }}, but respects user-defined theme settings.
(detected via <code>prefers-color-scheme</code>)
<template v-if="preferedColorScheme">
<br />Your device is currently set to {{ preferedColorScheme }} mode.
</template>
</template>
</td>
</tr>
<tr>
<th>Browser support</th>
<td>
<template v-if="versionOptions.isLegacy">
All browsers (including Internet Explorer)
</template>
<template v-else>
All current browsers (<a href="https://caniuse.com/#feat=css-variables"
>support for CSS Custom Properties</a
>)
</template>
</td>
</tr>
</tbody>
</table>
</div>
<!-- End interactive version picker -->

View File

@@ -11,6 +11,9 @@ const filter = require('gulp-filter')
const flatten = require('gulp-flatten')
const babel = require('gulp-babel')
const terser = require('gulp-terser')
const posthtml = require('gulp-posthtml')
const posthtmlInclude = require('posthtml-include')
const htmlnano = require('htmlnano')
const sizereport = require('gulp-sizereport')
const postcssCssVariables = require('postcss-css-variables')
const postcssImport = require('postcss-import')
@@ -113,23 +116,37 @@ function style() {
}
function docs() {
const htmlOnly = filter('**/*.html', { restore: true })
const jsOnly = filter('**/*.js', { restore: true })
const cssOnly = filter('**/*.css', { restore: true })
return gulp
.src(paths.docs.src)
.pipe(jsOnly)
.pipe(sourcemaps.init())
.pipe(babel({ presets: ['@babel/preset-env'] }))
.pipe(terser({ toplevel: true }))
.pipe(sourcemaps.write('.'))
.pipe(jsOnly.restore)
.pipe(cssOnly)
.pipe(sourcemaps.init())
.pipe(postcss([cssnano()]))
.pipe(sourcemaps.write('.'))
.pipe(cssOnly.restore)
.pipe(gulp.dest(paths.docs.dest))
return (
gulp
// Exclude all HTML files but index.html
.src(paths.docs.src, { ignore: '**/!(index).html' })
// * Process HTML *
.pipe(htmlOnly)
.pipe(posthtml([posthtmlInclude({ root: './docs/' }), htmlnano()]))
.pipe(htmlOnly.restore)
// * Process JS *
.pipe(jsOnly)
.pipe(sourcemaps.init())
.pipe(babel({ presets: ['@babel/preset-env'] }))
.pipe(terser({ toplevel: true }))
.pipe(sourcemaps.write('.'))
.pipe(jsOnly.restore)
// * Process CSS *
.pipe(cssOnly)
.pipe(sourcemaps.init())
.pipe(postcss([cssnano()]))
.pipe(sourcemaps.write('.'))
.pipe(cssOnly.restore)
.pipe(gulp.dest(paths.docs.dest))
)
}
const browserReload = done => (browserSync.reload(), done())

View File

@@ -36,13 +36,16 @@
"gulp-filter": "^5.1.0",
"gulp-flatten": "^0.4.0",
"gulp-postcss": "^8.0.0",
"gulp-posthtml": "^3.0.4",
"gulp-rename": "^1.4.0",
"gulp-sizereport": "^1.2.1",
"gulp-sourcemaps": "^2.6.5",
"gulp-terser": "^1.2.0",
"htmlnano": "^0.2.3",
"postcss-color-mod-function": "^3.0.3",
"postcss-css-variables": "^0.12.0",
"postcss-import": "^12.0.1"
"postcss-import": "^12.0.1",
"posthtml-include": "^1.2.0"
},
"browserslist": [
"defaults AND not android 4.4.3"

810
yarn.lock

File diff suppressed because it is too large Load Diff