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>