Reorganize styleguide (pattern library) to distinguish static layouts, styleguide from Sass powering it

This commit is contained in:
benjamin melançon 2018-08-20 09:42:55 -04:00
parent b9040a7fde
commit 952af16725
235 changed files with 4 additions and 4 deletions

View file

@ -0,0 +1,64 @@
'use strict';
/**
* This module is used to load the base KSS builder class needed by this builder
* and to define any custom CLI options or extend any base class methods.
*
* Note: since this builder wants to extend the KssBuilderBaseTwig class, it
* must export a KssBuilderBaseTwig sub-class as a module. Otherwise, kss-node
* will assume the builder wants to use the KssBuilderBaseHandlebars class.
*
* This file's name should follow standard node.js require() conventions. It
* should either be named index.js or have its name set in the "main" property
* of the builder's package.json. See
* http://nodejs.org/api/modules.html#modules_folders_as_modules
*
* @module kss/builder/twig
*/
// We want to extend kss-node's Twig builder so we can add options that
// are used in our templates.
let KssBuilderBaseTwig;
try {
// In order for a builder to be "kss clone"-able, it must use the
// require('kss/builder/path') syntax.
KssBuilderBaseTwig = require('kss/builder/base/twig');
} catch (e) {
// The above require() line will always work.
//
// Unless you are one of the developers of kss-node and are using a git clone
// of kss-node where this code will not be inside a "node_modules/kss" folder
// which would allow node.js to find it with require('kss/anything'), forcing
// you to write a long-winded comment and catch the error and try again using
// a relative path.
KssBuilderBaseTwig = require('../base/twig');
}
/**
* A kss-node builder that takes input files and builds a style guide using Twig
* templates.
*/
class KssBuilderTwig extends KssBuilderBaseTwig {
/**
* Create a builder object.
*/
constructor() {
// First call the constructor of KssBuilderBaseTwig.
super();
// Then tell kss which Yargs-like options this builder adds.
this.addOptionDefinitions({
title: {
group: 'Style guide:',
string: true,
multiple: false,
describe: 'Title of the style guide',
default: 'KSS Style Guide'
}
});
}
}
module.exports = KssBuilderTwig;

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{ options.title }}</title>
<meta name="description" content="">
<meta name="generator" content="kss-node">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="./kss-assets/kss.css">
{{ styles|raw }}
</head>
<body id="kss-node" {% if template.isItem %}class="kss-fullscreen-mode"{% endif %}>
{% include "sidebar.twig" %}
<!-- kss-main -->
<div class="kss-main-wrap">
<article role="main" class="kss-main kss-homepage content">
{{ homepage|raw }}
</article>
</div>
{{ scripts|raw }}
<!-- Automatically built using <a href="https://github.com/kss-node/kss-node">kss-node</a>. -->
</body>
</html>

View file

@ -0,0 +1,3 @@
{% for section in sections %}
{{ section.example|raw }}
{% endfor %}

View file

@ -0,0 +1,2 @@
WARNING: This folder is deleted and re-recreated each time the style guide is
built. Do NOT put your own files in this folder.

View file

@ -0,0 +1,59 @@
(function (window, document) {
'use strict';
// Set the configuration values on object creation.
// - idPrefix: The string that uniquely prefixes the ID of all elements that
// can receive the fullscreen focus.
// - bodyClass: The class that is set on the body element when the fullscreen
// mode is toggled on.
// - elementClass: the class that is set on the element that is receiving the
// fullscreen focus.
var KssFullScreen = function (config) {
this.idPrefix = config.idPrefix || 'kss-fullscreen-';
this.bodyClass = config.bodyClass || 'kss-fullscreen-mode';
this.elementClass = config.elementClass || 'is-fullscreen';
this.init();
};
// Initialize the page to see if the fullscreen mode should be immediately
// turned on.
KssFullScreen.prototype.init = function () {
// Check the location hash to see if it matches the idPrefix.
if (window.location.hash.slice(0, this.idPrefix.length + 1) === '#' + this.idPrefix) {
this.setFocus(window.location.hash.slice(1 + this.idPrefix.length));
}
var self = this;
// Initialize all fullscreen toggle buttons.
document.querySelectorAll('a[data-kss-fullscreen]').forEach(function (button) {
// Get the section reference from the data attribute.
button.onclick = self.setFocus.bind(self, button.dataset.kssFullscreen);
});
};
// Activation function that takes the ID of the element that will receive
// fullscreen focus.
KssFullScreen.prototype.setFocus = function (id) {
var el;
// Find the element with the given ID and start fullscreen mode.
if (el = document.getElementById(id)) {
el.classList.toggle('is-fullscreen');
document.body.classList.toggle('kss-fullscreen-mode');
// When enabling the focus mode, change the location hash.
if (el.classList.contains('is-fullscreen')) {
window.location.hash = '#' + this.idPrefix + id;
// Don't follow the link location.
return false;
}
}
return true;
};
// Export to DOM global space.
window.KssFullScreen = KssFullScreen;
})(window, document);

View file

@ -0,0 +1,26 @@
(function (window, document) {
'use strict';
var KssGuides = function (config) {
this.bodyClass = config.bodyClass || 'kss-guides-mode';
this.init();
};
KssGuides.prototype.init = function () {
var self = this;
// Initialize all guides toggle buttons.
document.querySelectorAll('a[data-kss-guides]').forEach(function (el) {
el.onclick = self.showGuides.bind(self);
});
};
// Toggle the guides mode.
KssGuides.prototype.showGuides = function () {
document.getElementsByTagName('body')[0].classList.toggle(this.bodyClass);
};
// Export to DOM global space.
window.KssGuides = KssGuides;
})(window, document);

View file

@ -0,0 +1,40 @@
(function (window, document) {
'use strict';
var KssMarkup = function (config) {
this.bodyClass = config.bodyClass || 'kss-markup-mode';
this.detailsClass = config.detailsClass || 'kss-markup';
this.init();
};
KssMarkup.prototype.init = function () {
var self = this;
// Initialize all markup toggle buttons.
document.querySelectorAll('a[data-kss-markup]').forEach(function (el) {
el.onclick = self.showGuides.bind(self);
});
};
// Activation function that takes the ID of the element that will receive
// fullscreen focus.
KssMarkup.prototype.showGuides = function () {
var body = document.getElementsByTagName('body')[0],
enabled = body.classList.contains(this.bodyClass);
document.querySelectorAll('.' + this.detailsClass).forEach(function (el) {
if (enabled) {
el.removeAttribute('open');
} else {
el.setAttribute('open', '');
}
});
// Toggle the markup mode.
body.classList.toggle(this.bodyClass);
};
// Export to DOM global space.
window.KssMarkup = KssMarkup;
})(window, document);

View file

@ -0,0 +1,204 @@
@charset "UTF-8";
body {
margin: 0;
font-family: sans-serif; }
.kss-section + .kss-section {
margin-top: 60px; }
.kss-title {
margin: 1rem 0;
line-height: 1em;
color: #ccc; }
h1.kss-title {
font-size: 1em; }
h2.kss-title {
font-size: 1em; }
h3.kss-title {
font-size: 1em; }
h4.kss-title {
font-size: 1em; }
.kss-description {
color: #ccc;
font-size: 0.875em;
line-height: 1.6em; }
.kss-pattern__header {
border-bottom: 1px dotted #ccc;
margin-bottom: 2em; }
.kss-code-toggle {
float: right;
color: #ccc; }
.kss-pattern__header:hover .kss-description,
.kss-pattern__header:hover .kss-title,
.kss-pattern__header:hover .kss-code-toggle {
color: #000; }
.kss-sidebar {
box-sizing: border-box;
padding: 0.875em;
position: fixed;
top: 0;
bottom: 0;
left: 0;
width: 280px;
color: #444;
background: #ccc;
overflow-y: auto; }
.kss-main-wrap {
margin-left: 280px;
box-sizing: border-box; }
.kss-main {
box-sizing: border-box;
padding: 1rem 2em; }
.kss-link,
.kss-nav__menu-link {
text-decoration: none;
color: currentColor; }
.kss-nav__menu-link:hover {
text-decoration: none; }
.kss-nav__menu-link {
font-size: 0.875em; }
.kss-source,
.kss-markup {
margin: 1rem 0; }
.kss-source summary:focus,
.kss-markup summary:focus {
outline: 0;
border: 0; }
.kss-source > summary,
.kss-markup > summary {
margin-bottom: 14px;
font-size: 14px;
color: #999; }
.kss-modifier__heading {
display: block;
font-size: 14px;
color: #999;
margin: 1em 0;
padding: 1em 0; }
.kss-modifier__default-name,
.kss-modifier__name,
.kss-parameters__title {
clear: both;
font-weight: bold;
font-size: 14px;
color: #999;
margin: 1em 0; }
.kss-modifier__description {
color: #999;
font-weight: 400; }
.kss-markup pre {
padding: 1em;
background: #F0F8FF;
overflow-x: auto;
font-size: 14px; }
.kss-modifier__wrapper {
padding-bottom: 2em;
margin-bottom: 2em; }
.kss-nav__menu {
padding: 0;
list-style: none; }
.kss-nav__menu-child {
padding: 0 0 0 1em;
list-style: none; }
.kss-nav__menu-link {
display: block;
padding: 0.5em 0;
border-bottom: 1px dotted #999; }
.kss-nav__menu-link:hover {
background: #ddd; }
.kss-parameters {
padding: 0;
list-style: none; }
.kss-parameters__item + .kss-parameters__item {
margin-top: 1em; }
.kss-parameters__name,
.kss-parameters__description {
display: inline-block; }
.kss-parameters__name > code {
background: #F0F8FF;
margin-right: 1em; }
.kss-nav__ref {
color: #999; }
.kss-section {
overflow: visible; }
.kss-section::after {
display: block;
clear: both;
content: ''; }
.kss-pattern {
box-sizing: border-box; }
.kss-pattern-code {
display: none;
box-sizing: border-box; }
.kss-pattern-code.active {
display: block;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 280px;
box-sizing: border-box;
padding: 4em;
overflow-y: auto;
background: white;
z-index: +99; }
.kss-source,
.kss-markup {
color: #ccc;
font-size: 0.875em; }
.kss-pattern-code:hover .kss-source,
.kss-pattern-code:hover .kss-markup {
color: #000; }
@media (min-width: 1024px) {
.kss-pattern {
padding-right: 1em;
width: 100%;
float: left; } }
.kss-nav__menu-link {
font-weight: normal; }
.kss-nav__menu-link.kss-design__link {
font-weight: bold; }
.kss-nav__menu-link.kss-design__link::before {
content: '→'; }

View file

@ -0,0 +1,53 @@
(function() {
var KssStateGenerator;
KssStateGenerator = (function() {
var pseudo_selectors;
pseudo_selectors = ['hover', 'enabled', 'disabled', 'active', 'visited', 'focus', 'target', 'checked', 'empty', 'first-of-type', 'last-of-type', 'first-child', 'last-child'];
function KssStateGenerator() {
var idx, idxs, pseudos, replaceRule, rule, stylesheet, _i, _len, _len2, _ref, _ref2;
pseudos = new RegExp("(\\:" + (pseudo_selectors.join('|\\:')) + ")", "g");
try {
_ref = document.styleSheets;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
stylesheet = _ref[_i];
if (stylesheet.href && stylesheet.href.indexOf(document.domain) >= 0) {
idxs = [];
_ref2 = stylesheet.cssRules;
for (idx = 0, _len2 = _ref2.length; idx < _len2; idx++) {
rule = _ref2[idx];
if ((rule.type === CSSRule.STYLE_RULE) && pseudos.test(rule.selectorText)) {
replaceRule = function(matched, stuff) {
return matched.replace(/\:/g, '.pseudo-class-');
};
this.insertRule(rule.cssText.replace(pseudos, replaceRule));
}
pseudos.lastIndex = 0;
}
}
}
} catch (_error) {}
}
KssStateGenerator.prototype.insertRule = function(rule) {
var headEl, styleEl;
headEl = document.getElementsByTagName('head')[0];
styleEl = document.createElement('style');
styleEl.type = 'text/css';
if (styleEl.styleSheet) {
styleEl.styleSheet.cssText = rule;
} else {
styleEl.appendChild(document.createTextNode(rule));
}
return headEl.appendChild(styleEl);
};
return KssStateGenerator;
})();
new KssStateGenerator;
}).call(this);

View file

@ -0,0 +1,991 @@
body {
margin: 0;
font-family: sans-serif;
}
.kss-section {
}
.kss-section + .kss-section {
margin-top: 60px;
}
.kss-title {
margin: 1rem 0;
line-height: 1em;
color: #ccc;
}
h1.kss-title {font-size: 1em;}
h2.kss-title {font-size: 1em;}
h3.kss-title {font-size: 1em;}
h4.kss-title {font-size: 1em;}
.kss-description {
color: #ccc;
font-size: 0.875em;
line-height: 1.6em;
}
.kss-pattern__header {
border-bottom: 1px dotted #ccc;
margin-bottom: 2em;
}
.kss-code-toggle {
float: right;
color: #ccc;
}
.kss-pattern__header:hover .kss-description,
.kss-pattern__header:hover .kss-title,
.kss-pattern__header:hover .kss-code-toggle {
color: #000;
}
.kss-sidebar {
box-sizing: border-box;
padding: 0.875em;
position: fixed;
top: 0;
bottom: 0;
left: 0;
width: 280px;
color: #444;
background: #ccc;
overflow-y: auto;
}
.kss-main-wrap {
margin-left: 280px;
box-sizing: border-box;
}
.kss-main {
box-sizing: border-box;
padding: 1rem 2em;
}
.kss-link,
.kss-nav__menu-link {
text-decoration: none;
color: currentColor;
}
.kss-nav__menu-link:hover {
text-decoration: none;
}
.kss-nav__menu-link {
font-size: 0.875em;
}
.kss-source,
.kss-markup {
margin: 1rem 0;
}
.kss-source summary:focus,
.kss-markup summary:focus {
outline: 0;
border: 0;
}
.kss-source > summary,
.kss-markup > summary {
margin-bottom: 14px;
font-size: 14px;
color: #999;
}
.kss-modifier__heading {
display: block;
font-size: 14px;
color: #999;
margin: 1em 0;
padding: 1em 0;
}
.kss-modifier__default-name,
.kss-modifier__name,
.kss-parameters__title {
clear: both;
font-weight: bold;
font-size: 14px;
color: #999;
margin: 1em 0;
}
.kss-modifier__description {
color: #999;
font-weight: 400;
}
.kss-markup pre {
padding: 1em;
background: #F0F8FF;
overflow-x: auto;
font-size: 14px;
}
.kss-modifier__wrapper {
padding-bottom: 2em;
margin-bottom: 2em;
}
.kss-nav__menu {
padding: 0;
list-style: none;
}
.kss-nav__menu-child {
padding: 0 0 0 1em;
list-style: none;
}
.kss-nav__menu-link {
display: block;
padding: 0.5em 0;
border-bottom: 1px dotted #999;
}
.kss-nav__menu-link:hover {
background: #ddd;
}
.kss-parameters {
padding: 0;
list-style: none;
}
.kss-parameters__item + .kss-parameters__item {
margin-top: 1em;
}
.kss-parameters__name,
.kss-parameters__description {
display: inline-block;
}
.kss-parameters__name > code {
background: #F0F8FF;
margin-right: 1em;
}
.kss-nav__ref {
color: #999;
}
.kss-section {
overflow: visible;
}
.kss-section::after {
display: block;
clear: both;
content: '';
}
.kss-pattern {
box-sizing: border-box;
}
.kss-pattern-code {
display: none;
box-sizing: border-box;
}
.kss-pattern-code.active {
display: block;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 280px;
box-sizing: border-box;
padding: 4em;
overflow-y: auto;
background: white;
z-index: +99;
}
.kss-source,
.kss-markup {
color: #ccc;
font-size: 0.875em;
}
.kss-pattern-code:hover .kss-source,
.kss-pattern-code:hover .kss-markup {
color: #000;
}
@media (min-width: 1024px) {
.kss-pattern {
padding-right: 1em;
width: 100%;
float: left;
}
}
.kss-nav__menu-link {
font-weight: normal;
}
.kss-nav__menu-link.kss-design__link {
font-weight: bold;
}
.kss-nav__menu-link.kss-design__link::before {
content: '';
}
// // ------------------------------------------------------------------------------
// // Variables - Colors, Fonts, etc.
// // ------------------------------------------------------------------------------
// $kss-colors-background : #fff;
//
// $kss-colors-foreground : #444;
// $kss-colors-heading : #111;
// $kss-colors-quotes : #666;
//
// $kss-colors-link : #0645ad;
// $kss-colors-link-visited : #0645ad;
// $kss-colors-link-hover : lighten($kss-colors-link, 20%);
// $kss-colors-link-active : #faa700;
//
// $kss-font-body : Helvetica, 'Helvetica Neue', Arial, sans-serif;
// $kss-font-code : Menlo, 'Ubuntu Mono', 'Lucida Console', 'Courier New', Courier, monospace;
//
// $kss-font-size : 16px;
// $kss-vertical-rhythm : $kss-font-size * 1.5;
//
// // ------------------------------------------------------------------------------
// // Wrap all of this builder's base HTML styling inside a .kss-style selector.
// // ------------------------------------------------------------------------------
//
// .kss-style {
// color: $kss-colors-foreground;
// font-family: $kss-font-body;
// font-size: $kss-font-size;
// line-height: $kss-vertical-rhythm;
//
// a {
// color: $kss-colors-link;
// text-decoration: none;
// transition-property: color;
// transition-duration: 0.5s;
//
// &:visited { color: $kss-colors-link-visited; }
// &:hover,
// &:focus { color: $kss-colors-link-hover; }
// &:active { color: $kss-colors-link-active; }
//
// &:hover,
// &:active {
// outline: 0;
// }
// }
//
// p {
// margin: ($kss-vertical-rhythm/2) 0 $kss-vertical-rhythm 0;
// }
//
// h1, h2, h3, h4, h5, h6 {
// margin: $kss-vertical-rhythm 0 0 0;
// font-family: $kss-font-body;
// color: $kss-colors-heading;
// line-height: 1.15em;
// }
//
// h4, h5, h6 {
// font-weight: bold;
// }
//
// h1 { font-size: $kss-font-size * 2.5; }
// h2 { font-size: $kss-font-size * 2.25; }
// h3 { font-size: $kss-font-size * 2.125; }
// h4 { font-size: $kss-font-size * 2; }
// h5 { font-size: $kss-font-size * 1.875; }
// h6 { font-size: $kss-font-size * 1.75; }
//
// blockquote {
// color: $kss-colors-quotes;
// margin: 0;
// padding-left: $kss-vertical-rhythm;
// border-left: 0.5em mix($kss-colors-quotes, $kss-colors-background, 25%) solid;
// }
//
// hr {
// display: block;
// height: 2px;
// border: 0;
// border-top: 1px solid lighten($kss-colors-foreground, 60%);
// border-bottom: 1px solid darken($kss-colors-background, 10%);
// margin: $kss-vertical-rhythm 0;
// padding: 0;
// }
//
// pre, code, kbd, samp {
// font-family: $kss-font-code;
// color: mix($kss-colors-foreground, $kss-colors-heading, 50%);
// font-size: 1em;
// }
//
// pre {
// white-space: pre;
// overflow: scroll;
// }
//
// ins {
// color: $kss-colors-heading;
// background: #ff9;
// text-decoration: none;
// }
//
// mark {
// color: $kss-colors-heading;
// background: #ff0;
// font-weight: bold;
// }
//
// sub, sup {
// font-size: 75%;
// line-height: 0;
// position: relative;
// vertical-align: baseline;
// }
// sup { top: -0.5em; }
// sub { bottom: -0.25em; }
//
// ul, ol {
// margin: $kss-vertical-rhythm 0;
// padding: 0 0 0 $kss-vertical-rhythm;
// }
// li p:last-child {
// margin: 0;
// }
// dd {
// margin: 0 0 0 $kss-vertical-rhythm;
// }
//
// img {
// max-width:100%;
// border: 0;
// -ms-interpolation-mode: bicubic;
// vertical-align: middle;
// }
//
// table {
// border-collapse: collapse;
// border-spacing: 0;
// }
// td {
// vertical-align: top;
// }
//
// @media print {
// a, a:visited { text-decoration: underline; }
// hr { height: 1px; border:0; border-bottom:1px solid black; }
// a[href]:after { content: " (" attr(href) ")"; }
// a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
// abbr[title]:after { content: " (" attr(title) ")"; }
// pre, blockquote { border: 1px solid #999; padding-right: 1em; page-break-inside: avoid; }
// tr, img { page-break-inside: avoid; }
// img { max-width: 100% !important; }
// p, h2, h3 { orphans: 3; widows: 3; }
// h2, h3 { page-break-after: avoid; }
// }
// }
//
// // ------------------------------------------------------------------------------
// // Layout and page background
// // ------------------------------------------------------------------------------
//
// #kss-node {
// margin: 0;
// padding: 20px;
// background: #fff;
//
// &.kss-fullscreen-mode {
// .kss-sidebar,
// .kss-section:not(.is-fullscreen),
// .kss-github {
// display: none;
// }
// }
//
// @media screen and (min-width: 769px) {
// padding: 0;
//
// .kss-main,
// .kss-sidebar {
// float: left;
// margin-right: -100%;
// box-sizing: border-box;
// }
// }
//
// .kss-main {
// width: 100%;
// margin: 0 auto;
//
// @media screen and (min-width: 769px) {
// width: 80%;
// margin-left: 20%;
// padding: 0 20px 0 30px;
// }
// }
//
// .kss-sidebar {
// border-bottom:1px solid #ddd;
//
// @media screen and (min-width: 769px) {
// position: fixed;
// width: 20%;
// height: 100%;
// overflow: auto;
// padding: 0 10px 0 20px;
// border-bottom: 0;
// background-image: url(noise-low.png), -ms-radial-gradient(#fff, #eee);
// background-image: url(noise-low.png), -o-radial-gradient(#fff, #eee);
// background-image: url(noise-low.png), -webkit-radial-gradient(#fff, #eee);
// background-image: url(noise-low.png), radial-gradient(#fff, #eee);
// box-shadow: inset -10px 0 10px -10px rgba(0,0,0,0.7);
// }
// }
// }
//
// // ------------------------------------------------------------------------------
// // Sidebar-area components
// // ------------------------------------------------------------------------------
//
// #kss-node {
//
// .kss-doc-title {
// margin: 0;
//
// @media screen and (min-width: 769px) {
// font-size: 1.5em;
// }
// }
//
// .kss-header,
// .kss-nav {
// @media screen and (min-width: 769px) {
// margin-top: 2em;
// }
// }
//
// .kss-nav__menu {
// margin-top: ($kss-vertical-rhythm/2);
// margin-bottom: ($kss-vertical-rhythm/2);
// padding: 0;
// list-style-type: none;
// }
//
// .kss-nav__menu-item {
// display: inline-block;
// padding-right: $kss-vertical-rhythm;
//
// @media screen and (min-width: 769px) {
// display: list-item;
// padding-right: 0;
// }
// }
//
// .kss-nav__menu-link {
// position: relative;
// display: inline-block;
//
// &:before {
// @media screen and (min-width: 769px) {
// content: ' ';
// position: absolute;
// left: -20px;
// width: 0;
// height: 100%;
// background-color: rgba(#000, 0);
// }
// }
//
// &.is-in-viewport:before {
// background-color: #000;
// width: 5px;
// transition: background-color .4s, width .6s;
// }
// }
//
// .kss-nav__menu-child {
// display: none;
//
// @media screen and (min-width: 769px) {
// display: block;
// list-style-type: none;
// margin: 0;
// padding: 0;
//
// // @TODO: The ul is output even when there are no children. Fix this, so
// // we can put these :first-child and :last child styles back on the ul.
// li:first-child {
// margin-top: 10px;
// border-top: 1px solid #ccc;
// padding: 10px 0 0;
// }
//
// li:last-child {
// margin-bottom: 10px;
// border-bottom: 1px solid #ccc;
// padding: 0 0 10px;
// }
// }
// }
//
// .kss-nav__ref {
// color: #333;
// font-weight: bold;
//
// &:after {
// content: ' ';
// }
// }
// .kss-nav__ref-child {
// font-weight: normal;
// }
// }
//
// // ------------------------------------------------------------------------------
// // Content-area components
// // ------------------------------------------------------------------------------
//
// #kss-node {
//
// .kss-section {
// margin-bottom: ($kss-vertical-rhythm * 2);
//
// // "fullscreen" styles copied from Mozilla's default stylesheet.
// &.is-fullscreen {
// position: fixed !important;
// top: 0 !important;
// left: 0 !important;
// right: 0 !important;
// bottom: 0 !important;
// width: 100% !important;
// height: 100% !important;
// margin: 0 !important;
// min-width: 0 !important;
// max-width: none !important;
// min-height: 0 !important;
// max-height: none !important;
// box-sizing: border-box !important;
// object-fit: contain !important;
// transform: none !important;
// // Turn on scrolling if needed.
// overflow: auto !important;
// padding: 20px;
// }
// }
//
// .kss-title {
// margin-bottom: 0;
// }
// .is-fullscreen .kss-title {
// margin-top: 0;
// }
// .kss-title__ref {
// display: block;
// font-size: $kss-font-size;
// line-height: $kss-font-size;
// color: #666;
//
// &:before {
// content: 'Section ';
// }
// }
// .kss-title__permalink {
// display: block;
// color: #000;
// text-decoration: none;
//
// &:hover,
// &:focus,
// &:active {
// color: $kss-colors-link;
//
// @media screen and (min-width: 607px) {
// .kss-title__permalink-hash {
// display: inline;
// }
// }
// }
// }
// .kss-title__permalink-hash {
// display: none;
// color: #ccc;
// }
//
// .kss-toolbar {
// margin: 6px 0 24px;
// display: inline-block;
// border: 1px solid #eee;
// background-color: #f9f9f9;
// border-right-color: #e0e0e0;
// border-bottom-color: #e0e0e0;
// line-height: 1;
// padding: 3px;
//
// a {
// box-sizing: content-box;
// display: inline-block;
// width: 16px;
// height: 16px;
// padding: 3px;
// vertical-align: top;
// // Tooltip wrapper styles:
// position: relative;
// overflow: visible;
//
// + a {
// margin-left: 6px;
// }
//
// .kss-toolbar__icon-fill {
// fill: #ccc;
// }
//
// svg.on {
// display: none;
// }
//
// &:focus,
// &:hover {
// border-color: #000;
//
// .kss-toolbar__icon-fill {
// fill: #000;
// }
// }
// }
// }
// .kss-toolbar__tooltip {
// position: absolute;
// z-index: 1;
// display: inline-block;
// bottom: 100%;
// left: -10px;
// margin-bottom: 5px;
// border: solid 1px #666;
// padding: 8px 10px 6px;
// box-shadow: 2px 2px 2px rgba(0, 0, 0, .25);
// white-space: nowrap;
// color: #000;
// background: #fff;
// cursor: help;
// opacity: 0;
// transition: opacity 0.25s;
// // Visually hidden
// height: 1px;
// width: 1px;
// overflow: hidden;
// clip: rect(1px, 1px, 1px, 1px);
// word-wrap: normal;
//
// // Solid grey triangle.
// &:before,
// &:after {
// content: '';
// position: absolute;
// bottom: -8px;
// left: 15px;
// width: 0;
// height: 0;
// border-width: 7px 5px 0;
// border-color: #666 transparent;
// border-style: solid;
// }
//
// // White triangle knock-out.
// &:after {
// bottom: -6px;
// border-top-color: #fff;
// }
// }
// a:focus,
// a:hover {
// > .kss-toolbar__tooltip {
// opacity: 1;
// // Visually hidden off
// clip: auto;
// height: auto;
// width: auto;
// overflow: visible;
// }
// }
// .is-fullscreen .kss-toolbar a[data-kss-fullscreen],
// &.kss-guides-mode .kss-toolbar a[data-kss-guides],
// &.kss-markup-mode .kss-toolbar a[data-kss-markup] {
// border-color: #666;
// background-color: #666;
//
// .kss-toolbar__icon-fill {
// fill: #fff;
// }
//
// svg.on {
// display: block;
// }
//
// svg.off {
// display: none;
// }
// }
//
// .kss-parameters {
// display: table;
// list-style-type: none;
// margin-top: 0;
// margin-left: 0;
// padding-left: 0;
// }
// .kss-parameters__title {
// font-weight: bold;
// }
// .kss-parameters__item {
// display: table-row;
// }
// .kss-parameters__name {
// display: table-cell;
// padding-right: 20px;
// white-space: nowrap;
// }
// .kss-parameters__description {
// display: table-cell;
// }
// .kss-parameters__default-value code {
// white-space: nowrap;
// }
//
// .kss-modifier__wrapper {
// border: 1px solid #ccc;
// padding: 0 10px 10px;
// }
// .is-fullscreen .kss-modifier__wrapper {
// // Un-do padding on .kss-section.
// margin-left: -20px;
// margin-right: -20px;
// // Remove all padding on the wrapper
// padding-left: 0;
// padding-right: 0;
// border: none;
// }
// .kss-modifier__heading {
// margin: 0 -10px 10px -10px;
// padding: 10px;
// border-bottom: 1px solid #ccc;
// background-color: #eee;
// font-weight: bold;
// }
// .is-fullscreen .kss-modifier__heading {
// margin: 0 20px 10px;
// border: 1px solid #ccc;
// }
// .kss-modifier__default-name {
// font-weight: bold;
// margin-bottom: ($kss-vertical-rhythm / 2);
// }
// .is-fullscreen .kss-modifier__default-name {
// margin-left: 20px;
// margin-right: 20px;
// }
// .kss-modifier__name {
// float: left;
// padding-right: 10px;
// font-weight: bold;
// }
// .is-fullscreen .kss-modifier__name {
// margin-left: 20px;
// }
// .kss-modifier__description {
// margin-bottom: ($kss-vertical-rhythm / 2);
// }
// .is-fullscreen .kss-modifier__description {
// margin-right: 20px;
// }
// .kss-modifier__example {
// clear: left;
// border: 2px dashed transparent;
// position: relative; // Contain the example's absolute positioning.
// z-index: 0; // Establishes a local stacking context.
// margin: -2px -2px ($kss-vertical-rhythm - 2px);
//
// &:last-child {
// margin-bottom: 0;
// }
// }
// &.kss-guides-mode .kss-modifier__example,
// &.kss-guides-mode .kss-modifier__example-footer {
// &:before,
// &:after {
// z-index: -1;
// box-sizing: border-box;
// content: '';
// position: absolute;
// width: 5px;
// height: 5px;
// border: 2px solid #000;
// }
// }
// &.kss-guides-mode .kss-modifier__example {
// border-color: #000;
//
// &:before {
// top: -5px;
// left: -5px;
// border-top: 0;
// border-left: 0;
// }
// &:after {
// top: -5px;
// right: -5px;
// border-top: 0;
// border-right: 0;
// }
// }
// &.kss-guides-mode.kss-fullscreen-mode .kss-modifier__example {
// &:before {
// left: auto;
// right: 0;
// }
// &:after {
// right: auto;
// left: 0;
// }
// }
// .kss-modifier__example-footer {
// clear: both;
// }
// &.kss-guides-mode .kss-modifier__example-footer {
// &:before {
// bottom: -5px;
// left: -5px;
// border-bottom: 0;
// border-left: 0;
// }
// &:after {
// bottom: -5px;
// right: -5px;
// border-right: 0;
// border-bottom: 0;
// }
// }
// &.kss-guides-mode.kss-fullscreen-mode .kss-modifier__example-footer {
// &:before {
// left: auto;
// right: 0;
// }
// &:after {
// right: auto;
// left: 0;
// }
// }
//
// .kss-markup {
// margin: $kss-vertical-rhythm 0;
// border: 1px solid #ccc;
//
// &[open] summary {
// border-bottom: 1px solid #ccc;
// margin-bottom: 3px;
// }
//
// summary {
// padding-left: 10px;
// }
//
// pre {
// margin: 0;
// }
// }
//
// .kss-source {
// font-size: 80%;
// }
//
// .kss-github {
// display:none;
//
// @media screen and (min-width: 501px) {
// display: block;
// position: absolute;
// top: 0;
// right: 0;
// }
//
// img {
// border: 0;
// }
// }
//
// // ------------------------------------------------------------------------------
// // prettify.js styles
// // ------------------------------------------------------------------------------
//
// /* SPAN elements with the classes below are added by prettyprint. */
// .pln { color: #000 } /* plain text */
//
// .str { color: #080 } /* string content */
// .kwd { color: #008 } /* a keyword */
// .com { color: #800 } /* a comment */
// .typ { color: #606 } /* a type name */
// .lit { color: #066 } /* a literal value */
// /* punctuation, lisp open bracket, lisp close bracket */
// .pun, .opn, .clo { color: #660 }
// .tag { color: #008 } /* a markup tag name */
// .atn { color: #606 } /* a markup attribute name */
// .atv { color: #080 } /* a markup attribute value */
// .dec, .var { color: #606 } /* a declaration; a variable name */
// .fun { color: red } /* a function name */
//
// /* Use higher contrast and text-weight for printable form. */
// @media print, projection {
// .str { color: #060 }
// .kwd { color: #006; font-weight: bold }
// .com { color: #600; font-style: italic }
// .typ { color: #404; font-weight: bold }
// .lit { color: #044 }
// .pun, .opn, .clo { color: #440 }
// .tag { color: #006; font-weight: bold }
// .atn { color: #404 }
// .atv { color: #060 }
// }
//
// /* Specify class=linenums on a pre to get line numbering */
// ol.linenums {
// margin: 0;
// padding: 0 0 3px 0;
// list-style-type: none;
//
// li {
// min-height: $kss-vertical-rhythm;
// border-bottom: 1px solid #eee;
// padding: 0 10px;
// background: #fff;
//
// &:first-child {
// padding-top: 3px;
// }
// }
// /* Alternate shading for lines */
// li.L0,
// li.L2,
// li.L4,
// li.L6,
// li.L8 {
// background: #fcfcfc;
// }
// }
// }

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,147 @@
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
function ScrollSpy (wrapper, opt) {
this.doc = document;
this.wrapper = (typeof wrapper === 'string') ? this.doc.querySelector(wrapper) : wrapper;
this.nav = this.wrapper.querySelectorAll(opt.nav);
this.contents = [];
this.win = window;
this.winH = this.win.innerHeight;
this.className = opt.className;
this.callback = opt.callback;
this.init();
}
ScrollSpy.prototype.init = function () {
this.contents = this.getContents();
this.attachEvent();
};
ScrollSpy.prototype.getContents = function () {
var targetList = [];
for (var i = 0, max = this.nav.length; i < max; i++) {
var href = this.nav[i].href;
targetList.push(this.doc.getElementById(href.split('#')[1]));
}
return targetList;
};
ScrollSpy.prototype.attachEvent = function () {
this.win.addEventListener('load', (function () {
this.spy(this.callback);
}).bind(this));
var scrollingTimer;
this.win.addEventListener('scroll', (function () {
if (scrollingTimer) {
clearTimeout(scrollingTimer);
}
var _this = this;
scrollingTimer = setTimeout(function () {
_this.spy(_this.callback);
}, 10);
}).bind(this));
var resizingTimer;
this.win.addEventListener('resize', (function () {
if (resizingTimer) {
clearTimeout(resizingTimer);
}
var _this = this;
resizingTimer = setTimeout(function () {
_this.spy(_this.callback);
}, 10);
}).bind(this));
};
ScrollSpy.prototype.spy = function (cb) {
var elems = this.getElemsViewState();
this.markNav(elems);
if (typeof cb === 'function') {
cb(elems);
}
};
ScrollSpy.prototype.getElemsViewState = function () {
var elemsInView = [],
elemsOutView = [],
viewStatusList = [];
for (var i = 0, max = this.contents.length; i < max; i++) {
var currentContent = this.contents[i],
isInView = this.isInView(currentContent);
if (isInView) {
elemsInView.push(currentContent);
} else {
elemsOutView.push(currentContent);
}
viewStatusList.push(isInView);
}
return {
inView: elemsInView,
outView: elemsOutView,
viewStatusList: viewStatusList
};
};
ScrollSpy.prototype.isInView = function (el) {
var winH = this.winH,
scrollTop = this.doc.documentElement.scrollTop || this.doc.body.scrollTop,
scrollBottom = scrollTop + winH,
rect = el.getBoundingClientRect(),
elTop = rect.top + scrollTop,
elBottom = elTop + el.offsetHeight;
return (elTop < scrollBottom) && (elBottom > scrollTop);
};
ScrollSpy.prototype.markNav = function (elems) {
var navItems = this.nav,
isAlreadyMarked = false;
for (var i = 0, max = navItems.length; i < max; i++) {
if (elems.viewStatusList[i] && !isAlreadyMarked) {
isAlreadyMarked = true;
navItems[i].classList.add(this.className);
} else {
navItems[i].classList.remove(this.className);
}
}
};
module.exports = ScrollSpy;
},{}],2:[function(require,module,exports){
(function (global){
/**
* ScrollSpy
*
*/
var ScrollSpy = require('./modules/scrollspy');
global.ScrollSpy = module.exports = ScrollSpy;
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"./modules/scrollspy":1}]},{},[2]);

View file

@ -0,0 +1,13 @@
{
"name": "kss-node-twig-builder",
"version": "~3.0.0-beta.16",
"description": "The Twig.js builder for kss-node.",
"main": "builder.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"sass": "./node_modules/.bin/node-sass --output-style compressed kss-assets/kss.scss kss-assets/kss.css"
},
"devDependencies": {
"node-sass": "^3.4.2"
}
}

View file

@ -0,0 +1,233 @@
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8">
<title>{{ options.title }}</title>
<meta name="description" content="">
<meta name="generator" content="kss-node">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="kss-assets/kss.css">
{{ styles|raw }}
</head>
<body id="kss-node" {% if template.isItem %}class="kss-fullscreen-mode"{% endif %}>
<div class="kss-sidebar kss-style">
<header class="kss-header">
<a href="/"><h1 class="kss-doc-title">{{ options.title }}</h1></a>
</header>
<nav class="kss-nav">
<ul class="kss-nav__menu">
{% for menu_item in menu %}
<li class="kss-nav__menu-item">
<a class="kss-nav__menu-link" href="section-{{ menu_item.referenceURI }}.html">
<span class="kss-nav__name">{{ menu_item.header }}</span>
</a>
{% if menu_item.isActive and menu_item.children is not empty %}
<ul class="kss-nav__menu-child">
{% for menu_child in menu_item.children %}
<li class="kss-nav__menu-item">
<a class="kss-nav__menu-link" href="section-{{ menu_item.referenceURI }}.html#kssref-{{ menu_child.referenceURI }}">
<span class="kss-nav__name">{{ menu_child.header }}</span>
</a>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
</nav>
</div>
<article role="main" class="kss-main">
{% if template.isHomepage %}
{% if homepage %}
<div id="kssref-0" class="kss-section kss-section--depth-0 kss-overview kss-style">
{{ homepage|raw }}
</div>
{% endif %}
{% else %}
{#
Display each section, in order.
The "root" element comes first in this loop, and can be detected using the
"loop.first" variable as seen below.
#}
{% for section in sections %}
{% set sectionElement = loop.first ? 'div' : 'section' %}
<{{ sectionElement }} id="kssref-{{ section.referenceURI }}" class="kss-section kss-section--depth-{{ section.depth }} {% if template.isItem %}is-fullscreen{% endif %}">
<div class="kss-style">
{% set headerElement = (section.depth > 6) ? 'h6' : 'h' ~ section.depth %}
<{{ headerElement }} class="kss-title kss-title--level-{{ section.depth }}">
<a class="kss-title__permalink" href="#kssref-{{ section.referenceURI }}">
{{ section.header }}
</a>
</{{ headerElement }}>
{% if section.source.filename %}
<div class="kss-source kss-style">
Source: <code>{{ section.source.filename }}</code>, line {{ section.source.line }}
</div>
{% endif %}
{% if section.example %}
<p class="kss-toolbar">
{% if not template.isItem %}
<a href="#kssref-{{section.referenceURI}}" data-kss-fullscreen="kssref-{{section.referenceURI}}">
<span class="kss-toolbar__tooltip">Toggle full screen</span>
<svg class="off" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 64 64">
<path class="kss-toolbar__icon-fill" d="M64 0v26l-10-10-12 12-6-6 12-12-10-10zM28 42l-12 12 10 10h-26v-26l10 10 12-12z"></path>
</svg>
<svg class="on" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 64 64">
<path class="kss-toolbar__icon-fill" d="M28 36v26l-10-10-12 12-6-6 12-12-10-10zM64 6l-12 12 10 10h-26v-26l10 10 12-12z"></path>
</svg>
</a>
<a href="item-{{section.referenceURI}}.html" target="_blank">
<span class="kss-toolbar__tooltip">Open in new window</span>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 64 64">
<rect x="0" y="20" width="40" height="44" fill="#fff"/>
<path class="kss-toolbar__icon-fill" d="M40,64l-40,0l0,-44l40,0l0,44Zm-36,-40l0,36l32,0l0,-36l-32,0Z"/>
<rect class="kss-toolbar__icon-fill" x="0" y="20" width="40" height="10"/>
<rect x="24" y="0" width="40" height="44" fill="#fff"/>
<path class="kss-toolbar__icon-fill" d="M64,44l-40,0l0,-44l40,0l0,44Zm-36,-40l0,36l32,0l0,-36l-32,0Z"/>
<rect class="kss-toolbar__icon-fill" x="24" y="0" width="40" height="10"/>
</svg>
</a>
{% endif %}
<a href="#kssref-{{section.referenceURI}}" data-kss-guides="true">
<span class="kss-toolbar__tooltip">Toggle example guides</span>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 64 64">
<rect class="kss-toolbar__icon-fill" x="5" y="35" width="5" height="9"/>
<rect class="kss-toolbar__icon-fill" x="54" y="21" width="5" height="9"/>
<rect class="kss-toolbar__icon-fill" x="54" y="35" width="5" height="9"/>
<rect class="kss-toolbar__icon-fill" x="5" y="21" width="5" height="9"/>
<rect class="kss-toolbar__icon-fill" x="5" y="0" width="5" height="15"/>
<rect class="kss-toolbar__icon-fill" x="35" y="5" width="9" height="5"/>
<rect class="kss-toolbar__icon-fill" x="20" y="5" width="9" height="5"/>
<rect class="kss-toolbar__icon-fill" x="0" y="5" width="15" height="5"/>
<rect class="kss-toolbar__icon-fill" x="54" y="0" width="5" height="15"/>
<rect class="kss-toolbar__icon-fill" x="49" y="5" width="15" height="5"/>
<rect class="kss-toolbar__icon-fill" x="54" y="49" width="5" height="15"/>
<rect class="kss-toolbar__icon-fill" x="49" y="54" width="15" height="5"/>
<rect class="kss-toolbar__icon-fill" x="5" y="49" width="5" height="15"/>
<rect class="kss-toolbar__icon-fill" x="0" y="54" width="15" height="5"/>
<rect class="kss-toolbar__icon-fill" x="35" y="54" width="9" height="5"/>
<rect class="kss-toolbar__icon-fill" x="20" y="54" width="9" height="5"/>
</svg>
</a>
<a href="#kssref-{{section.referenceURI}}" data-kss-markup="true">
<span class="kss-toolbar__tooltip">Toggle HTML markup</span>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 64 64">
<path class="kss-toolbar__icon-fill" d="M37.555,46.239l6.103,6.103l20.342,-20.342l-20.342,-20.342l-6.103,6.103l14.24,14.239l-14.24,14.239Z"/>
<path class="kss-toolbar__icon-fill" d="M26.445,17.761l-6.103,-6.103l-20.342,20.342l20.342,20.342l6.103,-6.103l-14.24,-14.239l14.24,-14.239Z"/>
</svg>
</a>
</p>
{% endif %}
{% if section.description %}
<div class="kss-description">
{{ section.description|raw }}
</div>
{% endif %}
{% for parameter in section.parameters %}
{% if loop.first %}
<div class="kss-parameters__title">Parameters:</div>
<ul class="kss-parameters">
{% endif %}
<li class="kss-parameters__item">
<div class="kss-parameters__name"><code>{{ parameter.name }}</code></div>
<div class="kss-parameters__description">
{{ parameter.description|raw }}
{% if parameter.defaultValue %}
<div class="kss-parameters__default-value">
Defaults to: <code>{{ parameter.defaultValue }}</code>
</div>
{% endif %}
</div>
</li>
{% if loop.last %}
</ul>
{% endif %}
{% endfor %}
</div>
{% if section.example %}
<div class="kss-modifier__wrapper">
<div class="kss-modifier__heading kss-style">
Example{% if section.modifiers is not empty %}s{% endif %}
</div>
{% if section.modifiers is not empty %}
<div class="kss-modifier__default-name kss-style">
Default styling
</div>
{% endif %}
<div class="kss-modifier__example">
{{ section.example|raw }}
<div class="kss-modifier__example-footer"></div>
</div>
{% for modifier in section.modifiers %}
<div class="kss-modifier__name kss-style">
{{ modifier.name }}
</div>
<div class="kss-modifier__description kss-style">
{{ modifier.description|raw }}
</div>
<div class="kss-modifier__example">
{{ modifier.markup|raw }}
<div class="kss-modifier__example-footer"></div>
</div>
{% endfor %}
</div>
{% if section.markup %}
<details class="kss-markup kss-style">
<summary>
{% if section.markupFile %}
Markup: <code>{{ section.markupFile }}</code>
{% else %}
Markup
{% endif %}
</summary>
<pre class="prettyprint linenums lang-html"><code data-language="html">{{ section.markup|escape('html') }}</code></pre>
</details>
{% endif %}
{% endif %}
</{{ sectionElement }}>
{% endfor %}
{% endif %}
</article>
<!-- SCRIPTS -->
<script src="kss-assets/kss.js"></script>
<script src="kss-assets/scrollspy.js"></script>
<script src="kss-assets/prettify.js"></script>
<script src="kss-assets/kss-fullscreen.js"></script>
<script src="kss-assets/kss-guides.js"></script>
<script src="kss-assets/kss-markup.js"></script>
<script>
prettyPrint();
var spy = new ScrollSpy('#kss-node', {
nav: '.kss-nav__menu-child > li > a',
className: 'is-in-viewport'
});
var kssFullScreen = new KssFullScreen({
idPrefix: 'kss-fullscreen-',
bodyClass: 'kss-fullscreen-mode',
elementClass: 'is-fullscreen'
});
var kssGuides = new KssGuides({
bodyClass: 'kss-guides-mode'
});
var kssMarkup = new KssMarkup({
bodyClass: 'kss-markup-mode',
detailsClass: 'kss-markup'
});
</script>
{{ scripts|raw }}
<!-- Automatically built using <a href="https://github.com/kss-node/kss-node">kss-node</a>. -->
</body>
</html>

View file

@ -0,0 +1,141 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{ options.title }}</title>
<meta name="description" content="">
<meta name="generator" content="kss-node">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="./kss-assets/kss.css">
{{ styles|raw }}
</head>
<body id="kss-node" {% if template.isItem %} class="kss-fullscreen-mode" {% endif %}>
{% include "sidebar.twig" %}
<!-- kss-main -->
<div class="kss-main-wrap">
<article role="main" class="kss-main">
{#
Display each section, in order.
The "root" element comes first in this loop, and can be detected using the
"loop.first" variable as seen below.
#}
{% for section in sections %}
<!-- Section -->
{% set sectionElement = loop.first
? 'div'
: 'section' %}
<{{ sectionElement }} id="" class="kss-section kss-section--depth-{{ section.depth }} {% if template.isItem %}is-fullscreen{% endif %}">
<a name="kssref-{{ section.referenceURI }}"></a>
<div class="kss-pattern"><!-- kss-pattern -->
<!-- Header -->
<div class="kss-pattern__header"><!-- kss-pattern__header -->
<a class="kss-code-toggle" href="#{{ section.referenceURI }}">Info</a>
{% set headerElement = (section.depth > 6)
? 'h6'
: 'h' ~ section.depth %}
<{{ headerElement }} class="kss-title">
{% if ("Design" in section.reference) == true and section.depth != 1 %}
<a class="kss-link" href="item-{{ section.referenceURI }}.html">{{ section.referenceNumber }}
{% else %}
<a class="kss-link" href="#kssref-{{ section.referenceURI }}">{{ section.referenceNumber }}
{% endif %}
{{ section.header }}
</a>
</{{ headerelement }}>
<!-- Description -->
{% if section.description %}
<div class="kss-description">
{{ section.description|raw }}
</div>
{% endif %}
</div><!-- kss-pattern__header -->
<!-- Parameters -->
{% for parameter in section.parameters %}
{% if loop.first %}
<div class="kss-parameters__title">Parameters:</div>
<ul class="kss-parameters">
{% endif %}
<li class="kss-parameters__item">
<div class="kss-parameters__name">
<code>{{ parameter.name }}</code>
</div>
<div class="kss-parameters__description">
{{ parameter.description|raw }}
{% if parameter.defaultValue %}
<div class="kss-parameters__default-value">Defaults to:
<code>{{ parameter.defaultValue }}</code>
</div>
{% endif %}
</div>
</li>
{% if loop.last %}
</ul>
{% endif %}
{% endfor %}
{% if ("Design" in section.reference) == false %}
<!-- Example -->
{% if section.example %}
<div class="kss-modifier__wrapper">
{% if section.modifiers is not empty %}
<div class="kss-modifier__default-name kss-style">Default styling</div>
{% endif %}
<div class="kss-modifier__example">
{{ section.example|raw }}
</div>
{% for modifier in section.modifiers %}
<div class="kss-modifier__name kss-style">{{ modifier.name }}
<span class="kss-modifier__description kss-style">{{ modifier.description|raw }}</span>
</div>
<div class="kss-modifier__example">{{ modifier.markup|raw }}</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
<div id="{{ section.referenceURI }}" class="kss-pattern-code"><!-- kss-pattern-code -->
<a class="kss-code-toggle" href="#{{ section.referenceURI }}">Close</a>
<!-- Source -->
{% if section.source.filename %}
<div class="kss-source kss-style">
<b>Source</b><br>
<code>{{ section.source.filename }}</code>, line
{{ section.source.line }}
</div>
{% endif %}
<!-- Markup -->
{% if ("Design" in section.reference) == false %}
{% if section.markup %}
<div class="kss-markup kss-style">
<b>Markup</b><br>
<code>{{ section.markupFile }}</code>
<pre class="prettyprint linenums lang-html"><code data-language="html">{{ section.markup|escape('html') }}</code></pre>
</div>
{% endif %}
{% endif %}
</div><!-- kss-pattern-code -->
</div><!-- kss-pattern -->
</{{ sectionelement }}>
{% endfor %}
</article>
</div>
{{ scripts|raw }}
<!-- Automatically built using <a href="https://github.com/kss-node/kss-node">kss-node</a>. -->
<script>
$(document).ready(function() {
$(".kss-code-toggle").on("click tap", function(e) {
e.preventDefault();
var url = $(this).attr('href')
var objRef = url.substring(url.indexOf('#') + 1);
$("#" + objRef).toggleClass('active');
});
});
</script>
</body>
</html>

View file

@ -0,0 +1,36 @@
<!-- kss-sidebar -->
<div class="kss-sidebar">
<header class="kss-sidebar__header">
<a class="kss-link" href="index.html">
<h1 class="kss-doc-title">{{ options.title }}</h1>
</a>
</header>
<nav class="kss-nav">
<ul class="kss-nav__menu">
{% for menu_item in menu %}
<li class="kss-nav__menu-item">
<a class="kss-nav__menu-link" href="section-{{ menu_item.referenceURI }}.html">
<!-- <span class="kss-nav__ref">{{ menu_item.referenceNumber }}</span> -->
{{ menu_item.header }}</a>
<!-- Design links stright to item tempplate -->
{% if menu_item.isActive and menu_item.children is not empty %}
<ul class="kss-nav__menu-child">
{% for menu_child in menu_item.children %}
<li class="kss-nav__menu-item">
{% if "design-" in menu_child.referenceURI %}
<a class="kss-nav__menu-link kss-design__link" href="item-{{ menu_child.referenceURI }}.html">
{% else %}
<a class="kss-nav__menu-link" href="section-{{ menu_item.referenceURI }}.html#kssref-{{ menu_child.referenceURI }}">
{% endif %}
<!-- <span class="kss-nav__ref">{{ menu_child.referenceNumber }}</span> -->
{{ menu_child.header }}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
</nav>
</div>

View file

@ -0,0 +1,13 @@
{
"title": "Agaric",
"source": ["./"],
"destination": "../styleguide",
"homepage": "styleguide.md",
"css": [
"../assets/css/agaric.css"
],
"js": [
"../assets/js/jquery-3.2.1.min.js"
],
"builder": "styleguide-builder"
}

View file

@ -0,0 +1,57 @@
Style Guide
===========
## Styleguide Contents
This project contains SASS/CSS and markup samples for the Agaric.com website and any associated websites, including data.agaric.com. SASS source code is compiled to CSS. Handlebars templates are compiled to HTML markup examples.
The SASS/CSS code is built on the [Bulma framework](https://bulma.io).
The markup examples are comiled by the [Assemble static site generator](http://assemble.io). _(It is not necessary to use this in your application.)_
Here is a description of the four directories:
- **assets:** compiled CSS, fonts, and images for production
- **design-output:** compiled HTML
- **design-source:** the templates for the markup samples
- **sass:** the uncompiled SASS files
Here are the complete static layouts:
* [Home](../design-output/index.html)
* [Work](../design-output/work.html)
* [Case Study](../design-output/case_study.html)
* [Initiatives](../design-output/initiatives.html)
* [Initiative](../design-output/initiatives_initiative.html)
* [Team](../design-output/about_team.html)
* [Person](../design-output/about_team_member.html)
* [Events](../design-output/about_events.html)
* [Event](../design-output/about_events_event.html)
* [Insights](../design-output/insights.html)
* [Insight](../design-output/insights_insight.html)
* [Bulma Elements](../design-output/bulma.html)
## Up and running
1. Install Grunt, `npm install -g grunt-cli`, and `npm install -g grunt`
2. Go to the project directory: `cd [PATH_TO_PROJECT]`
3. Install the node modules: `npm install`
4. Run the command `grunt`.
## Image Processing
Creating the duotone images can be accomplished using the [ImageMagick library](http://www.imagemagick.org).
This is a two-step process. The first step is to create a black and white (grayscale) image:
`convert test.jpg -colorspace Gray test_gray.jpg`
The second step is to apply a color lookup table:
`convert test_gray.jpg duo_cinnamon_clut.png -clut test_duo.jpg`
The following duotone color lookup table .PNG files can be found in `\sass\image-processing\`:
* `duo_berry_clut.png` * `duo_blue_clut.png` * `duo_briteblue_clut.png` * `duo_cinnamon_clut.png` * `duo_dandelion_clut.png` * `duo_marine_clut.png`