mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2024-11-27 17:00:54 +01:00
Initial commit
This commit is contained in:
commit
4fdcb8de92
22
.gitignore
vendored
Normal file
22
.gitignore
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
# Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
# IN THE SOFTWARE.
|
||||
|
||||
# Mac OS X internals
|
||||
.DS_Store
|
329
Gulpfile.js
Executable file
329
Gulpfile.js
Executable file
@ -0,0 +1,329 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Imports
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
var gulp = require('gulp');
|
||||
var addsrc = require('gulp-add-src');
|
||||
var args = require('yargs').argv;
|
||||
var autoprefix = require('autoprefixer-core');
|
||||
var child = require('child_process');
|
||||
var clean = require('del');
|
||||
var collect = require('gulp-rev-collector');
|
||||
var compact = require('gulp-remove-empty-lines');
|
||||
var concat = require('gulp-concat');
|
||||
var ignore = require('gulp-ignore');
|
||||
var gulpif = require('gulp-if');
|
||||
var mincss = require('gulp-minify-css');
|
||||
var minhtml = require('gulp-htmlmin');
|
||||
var minimage = require('gulp-image-optimization');
|
||||
var modernizr = require('gulp-modernizr');
|
||||
var mqpacker = require('css-mqpacker');
|
||||
var notifier = require('node-notifier');
|
||||
var plumber = require('gulp-plumber');
|
||||
var postcss = require('gulp-postcss');
|
||||
var rev = require('gulp-rev');
|
||||
var sass = require('gulp-sass');
|
||||
var sourcemaps = require('gulp-sourcemaps');
|
||||
var uglify = require('gulp-uglify');
|
||||
var util = require('gulp-util');
|
||||
var vinyl = require('vinyl-paths');
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Locals
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Application server */
|
||||
var server = null;
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Overrides
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Override gulp.src() for nicer error handling.
|
||||
*/
|
||||
var src = gulp.src;
|
||||
gulp.src = function() {
|
||||
return src.apply(gulp, arguments)
|
||||
.pipe(
|
||||
plumber(function(error) {
|
||||
util.log(util.colors.red(
|
||||
'Error (' + error.plugin + '): ' + error.message
|
||||
));
|
||||
notifier.notify({
|
||||
title: 'Error (' + error.plugin + ')',
|
||||
message: error.message.split('\n')[0]
|
||||
});
|
||||
this.emit('end');
|
||||
}));
|
||||
};
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Asset pipeline
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Build stylesheets from SASS source.
|
||||
*/
|
||||
gulp.task('assets:stylesheets', function() {
|
||||
return gulp.src('src/assets/stylesheets/*.scss')
|
||||
.pipe(gulpif(args.sourcemaps, sourcemaps.init()))
|
||||
.pipe(
|
||||
sass({
|
||||
includePaths: [
|
||||
'bower_components/bourbon/app/assets/stylesheets/',
|
||||
'bower_components/quantum-colors/',
|
||||
'bower_components/quantum-shadows/'
|
||||
]
|
||||
}))
|
||||
.pipe(
|
||||
postcss([
|
||||
autoprefix(),
|
||||
mqpacker
|
||||
]))
|
||||
.pipe(gulpif(args.sourcemaps, sourcemaps.write()))
|
||||
.pipe(gulpif(args.production, mincss()))
|
||||
.pipe(gulp.dest('dist/assets/stylesheets/'));
|
||||
});
|
||||
|
||||
/*
|
||||
* Build javascripts from Bower components and source.
|
||||
*/
|
||||
gulp.task('assets:javascripts', function() {
|
||||
return gulp.src([
|
||||
|
||||
/* Bower components */
|
||||
'bower_components/classlist/classList.js',
|
||||
'bower_components/fastclick/lib/fastclick.js',
|
||||
'bower_components/pegasus/dist/pegasus.js',
|
||||
'bower_components/lunr.js/lunr.js',
|
||||
|
||||
/* Application javascripts */
|
||||
'src/assets/javascripts/application.js',
|
||||
'src/assets/javascripts/standalone.js'
|
||||
]).pipe(gulpif(args.sourcemaps, sourcemaps.init()))
|
||||
.pipe(concat('application.js'))
|
||||
.pipe(gulpif(args.sourcemaps, sourcemaps.write()))
|
||||
.pipe(gulpif(args.production, uglify()))
|
||||
.pipe(gulp.dest('dist/assets/javascripts/'));
|
||||
});
|
||||
|
||||
/*
|
||||
* Create a customized modernizr build.
|
||||
*/
|
||||
gulp.task('assets:modernizr', [
|
||||
'assets:stylesheets',
|
||||
'assets:javascripts'
|
||||
], function() {
|
||||
return gulp.src([
|
||||
'dist/assets/stylesheets/application.css',
|
||||
'dist/assets/javascripts/application.js'
|
||||
]).pipe(
|
||||
modernizr({
|
||||
options: [
|
||||
'addTest', /* Add custom tests */
|
||||
'fnBind', /* Use function.bind */
|
||||
'html5printshiv', /* HTML5 support for IE */
|
||||
'setClasses', /* Add CSS classes to root tag */
|
||||
'testProp' /* Test for properties */
|
||||
]
|
||||
}))
|
||||
.pipe(addsrc.append('bower_components/respond/dest/respond.src.js'))
|
||||
.pipe(concat('modernizr.js'))
|
||||
.pipe(gulpif(args.production, uglify()))
|
||||
.pipe(gulp.dest('dist/assets/javascripts'));
|
||||
});
|
||||
|
||||
/*
|
||||
* Copy static assets like images and webfonts.
|
||||
*/
|
||||
gulp.task('assets:static', function() {
|
||||
return gulp.src('src/assets/{fonts,images}/*.{jpg,png,gif}')
|
||||
.pipe(gulpif(args.production,
|
||||
minimage({
|
||||
optimizationLevel: 5,
|
||||
progressive: true,
|
||||
interlaced: true
|
||||
})))
|
||||
.pipe(addsrc.append('src/assets/{fonts,images}/*.{eot,svg,ttf,woff}'))
|
||||
.pipe(gulp.dest('dist/assets/'));
|
||||
});
|
||||
|
||||
/*
|
||||
* Minify views.
|
||||
*/
|
||||
gulp.task('assets:views', args.production ? [
|
||||
'assets:revisions:clean',
|
||||
'assets:revisions'
|
||||
] : [], function() {
|
||||
return gulp.src([
|
||||
'src/views/*.html'
|
||||
]).pipe(
|
||||
minhtml({
|
||||
collapseBooleanAttributes: true,
|
||||
removeComments: true,
|
||||
removeScriptTypeAttributes: true,
|
||||
removeStyleLinkTypeAttributes: true
|
||||
}))
|
||||
.pipe(compact())
|
||||
.pipe(gulpif(args.production,
|
||||
addsrc.append([
|
||||
'dist/manifest.json',
|
||||
'dist/**/*.css'
|
||||
])))
|
||||
.pipe(gulpif(args.production, collect()))
|
||||
.pipe(ignore.exclude(/manifest\.json$/))
|
||||
.pipe(gulp.dest('dist'));
|
||||
});
|
||||
|
||||
/*
|
||||
* Clean outdated revisions.
|
||||
*/
|
||||
gulp.task('assets:revisions:clean', function() {
|
||||
return gulp.src(['dist/**/*.{css,js,png,jpg,gif}'])
|
||||
.pipe(ignore.include(/-[a-f0-9]{8}\.(css|js|png|jpg|gif)$/))
|
||||
.pipe(vinyl(clean));
|
||||
});
|
||||
|
||||
/*
|
||||
* Revision assets after build.
|
||||
*/
|
||||
gulp.task('assets:revisions', [
|
||||
'assets:revisions:clean',
|
||||
'assets:stylesheets',
|
||||
'assets:javascripts',
|
||||
'assets:static'
|
||||
], function() {
|
||||
return gulp.src(['dist/**/*.{css,js,png,jpg,gif}'])
|
||||
.pipe(ignore.exclude(/-[a-f0-9]{8}\.(css|js|png|jpg|gif)$/))
|
||||
.pipe(rev())
|
||||
.pipe(gulp.dest('dist'))
|
||||
.pipe(rev.manifest('manifest.json'))
|
||||
.pipe(gulp.dest('dist'));
|
||||
});
|
||||
|
||||
/*
|
||||
* Build assets.
|
||||
*/
|
||||
gulp.task('assets:build', [
|
||||
'assets:stylesheets',
|
||||
'assets:javascripts',
|
||||
'assets:modernizr',
|
||||
'assets:static',
|
||||
'assets:views'
|
||||
]);
|
||||
|
||||
/*
|
||||
* Watch assets for changes and rebuild on the fly.
|
||||
*/
|
||||
gulp.task('assets:watch', function() {
|
||||
|
||||
/* Rebuild stylesheets */
|
||||
gulp.watch([
|
||||
'src/assets/stylesheets/**/*.scss'
|
||||
], ['assets:stylesheets']);
|
||||
|
||||
/* Rebuild javascripts */
|
||||
gulp.watch([
|
||||
'src/assets/javascripts/**/*.js',
|
||||
'bower.json'
|
||||
], ['assets:javascripts']);
|
||||
|
||||
/* Copy static assets */
|
||||
gulp.watch([
|
||||
'assets/assets/{fonts,images}/*'
|
||||
], ['assets:static']);
|
||||
|
||||
/* Minify views */
|
||||
gulp.watch([
|
||||
'src/views/*.html'
|
||||
], ['assets:views']);
|
||||
});
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Application server
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Build application server.
|
||||
*/
|
||||
gulp.task('server:build', [
|
||||
'assets:build'
|
||||
], function() {
|
||||
return child.spawnSync('mkdocs', ['build']);
|
||||
});
|
||||
|
||||
/*
|
||||
* Restart application server.
|
||||
*/
|
||||
gulp.task('server:spawn', function() {
|
||||
if (server)
|
||||
server.kill();
|
||||
|
||||
/* Spawn application server */
|
||||
server = child.spawn('mkdocs', ['serve', '-a', '0.0.0.0:8000']);
|
||||
|
||||
/* Pretty print server log output */
|
||||
server.stdout.on('data', function(data) {
|
||||
var lines = data.toString().split('\n')
|
||||
for (var l in lines)
|
||||
if (lines[l].length)
|
||||
util.log(lines[l]);
|
||||
});
|
||||
|
||||
/* Print errors to stdout */
|
||||
server.stderr.on('data', function(data) {
|
||||
process.stdout.write(data.toString());
|
||||
});
|
||||
});
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Interface
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Build assets and application server.
|
||||
*/
|
||||
gulp.task('build', [
|
||||
'assets:build',
|
||||
'server:build'
|
||||
]);
|
||||
|
||||
/*
|
||||
* Start asset and server watchdogs.
|
||||
*/
|
||||
gulp.task('watch', [
|
||||
'assets:build',
|
||||
], function() {
|
||||
return gulp.start([
|
||||
'assets:watch',
|
||||
'server:spawn'
|
||||
]);
|
||||
});
|
||||
|
||||
/*
|
||||
* Build assets by default.
|
||||
*/
|
||||
gulp.task('default', ['build']);
|
30
bower.json
Normal file
30
bower.json
Normal file
@ -0,0 +1,30 @@
|
||||
{
|
||||
"name": "materializr",
|
||||
"version": "0.1.0",
|
||||
"description": "A material design template for mkdocs",
|
||||
"homepage": "https://github.com/squidfunk/materializr",
|
||||
"authors": [
|
||||
"squidfunk <martin.donath@squidfunk.com>"
|
||||
],
|
||||
"license": "MIT",
|
||||
"moduleType": [
|
||||
"globals"
|
||||
],
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"bower_components",
|
||||
"node_modules"
|
||||
],
|
||||
"dependencies": {
|
||||
"classlist": "~2014.12.13",
|
||||
"fastclick": "~1.0.6",
|
||||
"lunr.js": "~0.5.10",
|
||||
"pegasus": "~0.3.1",
|
||||
"respond": "~1.4.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"bourbon": "~4.2.2",
|
||||
"quantum-colors": "~1.0.1",
|
||||
"quantum-shadows": "~1.0.0"
|
||||
}
|
||||
}
|
47
package.json
Normal file
47
package.json
Normal file
@ -0,0 +1,47 @@
|
||||
{
|
||||
"name": "materializr",
|
||||
"version": "0.1.0",
|
||||
"description": "A material design template for mkdocs",
|
||||
"homepage": "https://github.com/squidfunk/materializr",
|
||||
"authors": [
|
||||
"squidfunk <martin.donath@squidfunk.com>"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "Gulpfile.js",
|
||||
"scripts": {
|
||||
"start": "gulp watch"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/squidfunk/materializr.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer-core": "^5.1.11",
|
||||
"css-mqpacker": "^3.1.0",
|
||||
"del": "^1.1.1",
|
||||
"gulp": "^3.8.11",
|
||||
"gulp-add-src": "^0.2.0",
|
||||
"gulp-concat": "^2.5.2",
|
||||
"gulp-debug": "^2.0.1",
|
||||
"gulp-htmlmin": "^1.1.1",
|
||||
"gulp-if": "^1.2.5",
|
||||
"gulp-ignore": "^1.2.1",
|
||||
"gulp-image-optimization": "^0.1.3",
|
||||
"gulp-match": "^0.2.1",
|
||||
"gulp-minify-css": "^1.1.0",
|
||||
"gulp-modernizr": "^1.0.0-alpha",
|
||||
"gulp-plumber": "^1.0.0",
|
||||
"gulp-postcss": "^5.1.3",
|
||||
"gulp-remove-empty-lines": "0.0.2",
|
||||
"gulp-rev": "^3.0.1",
|
||||
"gulp-rev-collector": "^1.0.0",
|
||||
"gulp-sass": "^2.0.3",
|
||||
"gulp-sourcemaps": "^1.5.2",
|
||||
"gulp-sync": "^0.1.4",
|
||||
"gulp-uglify": "^1.2.0",
|
||||
"gulp-util": "^3.0.4",
|
||||
"node-notifier": "^4.2.1",
|
||||
"vinyl-paths": "^1.0.0",
|
||||
"yargs": "^3.8.0"
|
||||
}
|
||||
}
|
BIN
src/assets/fonts/icon.eot
Executable file
BIN
src/assets/fonts/icon.eot
Executable file
Binary file not shown.
319
src/assets/fonts/icon.json
Normal file
319
src/assets/fonts/icon.json
Normal file
@ -0,0 +1,319 @@
|
||||
{
|
||||
"IcoMoonType": "selection",
|
||||
"icons": [
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M661.333 597.333h-33.92l-11.733-11.733c41.813-48.427 66.987-111.36 66.987-180.267 0-153.173-124.16-277.333-277.333-277.333s-277.333 124.16-277.333 277.333 124.16 277.333 277.333 277.333c68.907 0 131.84-25.173 180.267-66.773l11.733 11.733v33.707l213.333 212.907 63.573-63.573-212.907-213.333zM405.333 597.333c-106.027 0-192-85.973-192-192s85.973-192 192-192 192 85.973 192 192-85.973 192-192 192z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"search"
|
||||
],
|
||||
"grid": 24
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 1,
|
||||
"order": 7,
|
||||
"prevSize": 24,
|
||||
"code": 58880,
|
||||
"name": "search"
|
||||
},
|
||||
"setIdx": 0,
|
||||
"setId": 3,
|
||||
"iconIdx": 1
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M853.333 469.333h-519.253l238.293-238.293-60.373-60.373-341.333 341.333 341.333 341.333 60.373-60.373-238.293-238.293h519.253v-85.333z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"arrow-back"
|
||||
],
|
||||
"grid": 24
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 2,
|
||||
"order": 4,
|
||||
"prevSize": 24,
|
||||
"code": 58881,
|
||||
"name": "arrow-back"
|
||||
},
|
||||
"setIdx": 0,
|
||||
"setId": 3,
|
||||
"iconIdx": 2
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M426.667 256l-60.373 60.373 195.627 195.627-195.627 195.627 60.373 60.373 256-256z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"chevron-right"
|
||||
],
|
||||
"grid": 24
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 3,
|
||||
"order": 9,
|
||||
"prevSize": 24,
|
||||
"code": 58882,
|
||||
"name": "chevron-right"
|
||||
},
|
||||
"setIdx": 0,
|
||||
"setId": 3,
|
||||
"iconIdx": 3
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M810.667 273.707l-60.373-60.373-238.293 238.293-238.293-238.293-60.373 60.373 238.293 238.293-238.293 238.293 60.373 60.373 238.293-238.293 238.293 238.293 60.373-60.373-238.293-238.293z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"close"
|
||||
],
|
||||
"grid": 24
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 4,
|
||||
"order": 8,
|
||||
"prevSize": 24,
|
||||
"code": 58883,
|
||||
"name": "close"
|
||||
},
|
||||
"setIdx": 0,
|
||||
"setId": 3,
|
||||
"iconIdx": 4
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M128 768h768v-85.333h-768v85.333zM128 554.667h768v-85.333h-768v85.333zM128 256v85.333h768v-85.333h-768z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"menu"
|
||||
],
|
||||
"grid": 24
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 5,
|
||||
"order": 10,
|
||||
"prevSize": 24,
|
||||
"code": 58884,
|
||||
"name": "menu"
|
||||
},
|
||||
"setIdx": 0,
|
||||
"setId": 3,
|
||||
"iconIdx": 5
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M512 170.667l-60.373 60.373 238.293 238.293h-519.253v85.333h519.253l-238.293 238.293 60.373 60.373 341.333-341.333z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"arrow-forward"
|
||||
],
|
||||
"grid": 24
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 6,
|
||||
"order": 15,
|
||||
"prevSize": 24,
|
||||
"code": 58885,
|
||||
"name": "arrow-forward"
|
||||
},
|
||||
"setIdx": 0,
|
||||
"setId": 3,
|
||||
"iconIdx": 6
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M1024 194.418c-37.676 16.708-78.164 28.002-120.66 33.080 43.372-26 76.686-67.17 92.372-116.23-40.596 24.078-85.556 41.56-133.41 50.98-38.32-40.83-92.922-66.34-153.346-66.34-116.022 0-210.088 94.058-210.088 210.078 0 16.466 1.858 32.5 5.44 47.878-174.6-8.764-329.402-92.4-433.018-219.506-18.084 31.028-28.446 67.116-28.446 105.618 0 72.888 37.088 137.192 93.46 174.866-34.438-1.092-66.832-10.542-95.154-26.278-0.020 0.876-0.020 1.756-0.020 2.642 0 101.788 72.418 186.696 168.522 206-17.626 4.8-36.188 7.372-55.348 7.372-13.538 0-26.698-1.32-39.528-3.772 26.736 83.46 104.32 144.206 196.252 145.896-71.9 56.35-162.486 89.934-260.916 89.934-16.958 0-33.68-0.994-50.116-2.94 92.972 59.61 203.402 94.394 322.042 94.394 386.422 0 597.736-320.124 597.736-597.744 0-9.108-0.206-18.168-0.61-27.18 41.056-29.62 76.672-66.62 104.836-108.748z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"twitter",
|
||||
"brand",
|
||||
"tweet",
|
||||
"social"
|
||||
],
|
||||
"defaultCode": 58525,
|
||||
"grid": 24
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 7,
|
||||
"order": 9,
|
||||
"prevSize": 24,
|
||||
"code": 58886,
|
||||
"ligatures": "twitter, brand11",
|
||||
"name": "twitter"
|
||||
},
|
||||
"setIdx": 0,
|
||||
"setId": 3,
|
||||
"iconIdx": 7
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M810.667 384h-170.667v-256h-256v256h-170.667l298.667 298.667 298.667-298.667zM213.333 768v85.333h597.333v-85.333h-597.333z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"file-download"
|
||||
],
|
||||
"grid": 24
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 8,
|
||||
"order": 10,
|
||||
"prevSize": 24,
|
||||
"code": 58888,
|
||||
"name": "download"
|
||||
},
|
||||
"setIdx": 0,
|
||||
"setId": 3,
|
||||
"iconIdx": 8
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M512 736.853l263.68 159.147-69.973-299.947 232.96-201.813-306.773-26.027-119.893-282.88-119.893 282.88-306.773 26.027 232.96 201.813-69.973 299.947z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"star"
|
||||
],
|
||||
"grid": 24
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 9,
|
||||
"order": 9,
|
||||
"prevSize": 24,
|
||||
"code": 58889,
|
||||
"name": "star"
|
||||
},
|
||||
"setIdx": 0,
|
||||
"setId": 3,
|
||||
"iconIdx": 9
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M598 726l84-172h-128v-256h256v256l-84 172h-128zM256 726l86-172h-128v-256h256v256l-86 172h-128z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"format_quote"
|
||||
],
|
||||
"defaultCode": 57924,
|
||||
"grid": 24
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"order": 10,
|
||||
"ligatures": "format_quote",
|
||||
"prevSize": 24,
|
||||
"name": "quote",
|
||||
"id": 247,
|
||||
"code": 58896
|
||||
},
|
||||
"setIdx": 1,
|
||||
"setId": 2,
|
||||
"iconIdx": 247
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M365.714 694.857q0 22.857-7.143 46.857t-24.571 43.429-41.429 19.429-41.429-19.429-24.571-43.429-7.143-46.857 7.143-46.857 24.571-43.429 41.429-19.429 41.429 19.429 24.571 43.429 7.143 46.857zM731.429 694.857q0 22.857-7.143 46.857t-24.571 43.429-41.429 19.429-41.429-19.429-24.571-43.429-7.143-46.857 7.143-46.857 24.571-43.429 41.429-19.429 41.429 19.429 24.571 43.429 7.143 46.857zM822.857 694.857q0-68.571-39.429-116.571t-106.857-48q-23.429 0-111.429 12-40.571 6.286-89.714 6.286t-89.714-6.286q-86.857-12-111.429-12-67.429 0-106.857 48t-39.429 116.571q0 50.286 18.286 87.714t46.286 58.857 69.714 34.286 80 16.857 85.143 4h96q46.857 0 85.143-4t80-16.857 69.714-34.286 46.286-58.857 18.286-87.714zM950.857 594.286q0 118.286-34.857 189.143-21.714 44-60.286 76t-80.571 49.143-97.143 27.143-98 12.571-95.429 2.571q-44.571 0-81.143-1.714t-84.286-7.143-87.143-17.143-78.286-29.429-69.143-46.286-49.143-65.714q-35.429-70.286-35.429-189.143 0-135.429 77.714-226.286-15.429-46.857-15.429-97.143 0-66.286 29.143-124.571 61.714 0 108.571 22.571t108 70.571q84-20 176.571-20 84.571 0 160 18.286 60-46.857 106.857-69.143t108-22.286q29.143 58.286 29.143 124.571 0 49.714-15.429 96 77.714 91.429 77.714 227.429z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"width": 951,
|
||||
"tags": [
|
||||
"github-alt"
|
||||
],
|
||||
"grid": 0
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"order": 13,
|
||||
"id": 1,
|
||||
"prevSize": 24,
|
||||
"code": 58887,
|
||||
"name": "github"
|
||||
},
|
||||
"setIdx": 2,
|
||||
"setId": 1,
|
||||
"iconIdx": 1
|
||||
}
|
||||
],
|
||||
"height": 1024,
|
||||
"metadata": {
|
||||
"name": "icon"
|
||||
},
|
||||
"preferences": {
|
||||
"showGlyphs": true,
|
||||
"showQuickUse": true,
|
||||
"showQuickUse2": true,
|
||||
"showSVGs": true,
|
||||
"fontPref": {
|
||||
"prefix": "icon-",
|
||||
"metadata": {
|
||||
"fontFamily": "icon",
|
||||
"majorVersion": 1,
|
||||
"minorVersion": 0
|
||||
},
|
||||
"metrics": {
|
||||
"emSize": 1024,
|
||||
"baseline": 6.25,
|
||||
"whitespace": 50
|
||||
},
|
||||
"ie7": true,
|
||||
"showSelector": true,
|
||||
"selector": "class",
|
||||
"classSelector": ".icon",
|
||||
"showMetrics": true,
|
||||
"showMetadata": true,
|
||||
"cssVars": true,
|
||||
"embed": false,
|
||||
"noie8": false
|
||||
},
|
||||
"imagePref": {
|
||||
"prefix": "icon-",
|
||||
"png": true,
|
||||
"useClassSelector": true,
|
||||
"color": 4473924,
|
||||
"bgColor": 16777215
|
||||
},
|
||||
"historySize": 100,
|
||||
"showCodes": true,
|
||||
"gridSize": 16
|
||||
}
|
||||
}
|
21
src/assets/fonts/icon.svg
Executable file
21
src/assets/fonts/icon.svg
Executable file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="icon" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||
<glyph unicode="" glyph-name="search" d="M661.333 341.334h-33.92l-11.733 11.733c41.813 48.427 66.987 111.36 66.987 180.267 0 153.173-124.16 277.333-277.333 277.333s-277.333-124.16-277.333-277.333 124.16-277.333 277.333-277.333c68.907 0 131.84 25.173 180.267 66.773l11.733-11.733v-33.707l213.333-212.907 63.573 63.573-212.907 213.333zM405.333 341.334c-106.027 0-192 85.973-192 192s85.973 192 192 192 192-85.973 192-192-85.973-192-192-192z" />
|
||||
<glyph unicode="" glyph-name="arrow-back" d="M853.333 469.334h-519.253l238.293 238.293-60.373 60.373-341.333-341.333 341.333-341.333 60.373 60.373-238.293 238.293h519.253v85.333z" />
|
||||
<glyph unicode="" glyph-name="chevron-right" d="M426.667 682.667l-60.373-60.373 195.627-195.627-195.627-195.627 60.373-60.373 256 256z" />
|
||||
<glyph unicode="" glyph-name="close" d="M810.667 664.96l-60.373 60.373-238.293-238.293-238.293 238.293-60.373-60.373 238.293-238.293-238.293-238.293 60.373-60.373 238.293 238.293 238.293-238.293 60.373 60.373-238.293 238.293z" />
|
||||
<glyph unicode="" glyph-name="menu" d="M128 170.667h768v85.333h-768v-85.333zM128 384h768v85.333h-768v-85.333zM128 682.667v-85.333h768v85.333h-768z" />
|
||||
<glyph unicode="" glyph-name="arrow-forward" d="M512 768l-60.373-60.373 238.293-238.293h-519.253v-85.333h519.253l-238.293-238.293 60.373-60.373 341.333 341.333z" />
|
||||
<glyph unicode="" glyph-name="twitter" d="M1024 744.249c-37.676-16.708-78.164-28.002-120.66-33.080 43.372 26 76.686 67.17 92.372 116.23-40.596-24.078-85.556-41.56-133.41-50.98-38.32 40.83-92.922 66.34-153.346 66.34-116.022 0-210.088-94.058-210.088-210.078 0-16.466 1.858-32.5 5.44-47.878-174.6 8.764-329.402 92.4-433.018 219.506-18.084-31.028-28.446-67.116-28.446-105.618 0-72.888 37.088-137.192 93.46-174.866-34.438 1.092-66.832 10.542-95.154 26.278-0.020-0.876-0.020-1.756-0.020-2.642 0-101.788 72.418-186.696 168.522-206-17.626-4.8-36.188-7.372-55.348-7.372-13.538 0-26.698 1.32-39.528 3.772 26.736-83.46 104.32-144.206 196.252-145.896-71.9-56.35-162.486-89.934-260.916-89.934-16.958 0-33.68 0.994-50.116 2.94 92.972-59.61 203.402-94.394 322.042-94.394 386.422 0 597.736 320.124 597.736 597.744 0 9.108-0.206 18.168-0.61 27.18 41.056 29.62 76.672 66.62 104.836 108.748z" />
|
||||
<glyph unicode="" glyph-name="github" horiz-adv-x="951" d="M365.714 243.81q0-22.857-7.143-46.857t-24.571-43.429-41.429-19.429-41.429 19.429-24.571 43.429-7.143 46.857 7.143 46.857 24.571 43.429 41.429 19.429 41.429-19.429 24.571-43.429 7.143-46.857zM731.429 243.81q0-22.857-7.143-46.857t-24.571-43.429-41.429-19.429-41.429 19.429-24.571 43.429-7.143 46.857 7.143 46.857 24.571 43.429 41.429 19.429 41.429-19.429 24.571-43.429 7.143-46.857zM822.857 243.81q0 68.571-39.429 116.571t-106.857 48q-23.429 0-111.429-12-40.571-6.286-89.714-6.286t-89.714 6.286q-86.857 12-111.429 12-67.429 0-106.857-48t-39.429-116.571q0-50.286 18.286-87.714t46.286-58.857 69.714-34.286 80-16.857 85.143-4h96q46.857 0 85.143 4t80 16.857 69.714 34.286 46.286 58.857 18.286 87.714zM950.857 344.381q0-118.286-34.857-189.143-21.714-44-60.286-76t-80.571-49.143-97.143-27.143-98-12.571-95.429-2.571q-44.571 0-81.143 1.714t-84.286 7.143-87.143 17.143-78.286 29.429-69.143 46.286-49.143 65.714q-35.429 70.286-35.429 189.143 0 135.429 77.714 226.286-15.429 46.857-15.429 97.143 0 66.286 29.143 124.571 61.714 0 108.571-22.571t108-70.571q84 20 176.571 20 84.571 0 160-18.286 60 46.857 106.857 69.143t108 22.286q29.143-58.286 29.143-124.571 0-49.714-15.429-96 77.714-91.429 77.714-227.429z" />
|
||||
<glyph unicode="" glyph-name="download" d="M810.667 554.667h-170.667v256h-256v-256h-170.667l298.667-298.667 298.667 298.667zM213.333 170.667v-85.333h597.333v85.333h-597.333z" />
|
||||
<glyph unicode="" glyph-name="star" d="M512 201.814l263.68-159.147-69.973 299.947 232.96 201.813-306.773 26.027-119.893 282.88-119.893-282.88-306.773-26.027 232.96-201.813-69.973-299.947z" />
|
||||
<glyph unicode="" glyph-name="quote" d="M598 212.667l84 172h-128v256h256v-256l-84-172h-128zM256 212.667l86 172h-128v256h256v-256l-86-172h-128z" />
|
||||
</font></defs></svg>
|
After Width: | Height: | Size: 4.4 KiB |
BIN
src/assets/fonts/icon.ttf
Executable file
BIN
src/assets/fonts/icon.ttf
Executable file
Binary file not shown.
BIN
src/assets/fonts/icon.woff
Executable file
BIN
src/assets/fonts/icon.woff
Executable file
Binary file not shown.
BIN
src/assets/images/favicon-16x16.png
Executable file
BIN
src/assets/images/favicon-16x16.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 317 B |
BIN
src/assets/images/favicon-32x32.png
Executable file
BIN
src/assets/images/favicon-32x32.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 501 B |
518
src/assets/javascripts/application.js
Normal file
518
src/assets/javascripts/application.js
Normal file
@ -0,0 +1,518 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* Hey, there's your missing semicolon, lunr.js! */
|
||||
;
|
||||
|
||||
/* Truncate a string after the given number of characters */
|
||||
String.prototype.truncate = function(n) {
|
||||
if (this.length > n) {
|
||||
while (this[n] != ' ' && --n > 0);
|
||||
return this.substring(0, n) + '…';
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/* Wrap an HTMLElement around each element in an HTMLElement array */
|
||||
HTMLElement.prototype.wrap = function (elms) {
|
||||
if (!elms.length) elms = [elms];
|
||||
for (var i = elms.length - 1; i >= 0; i--) {
|
||||
var child = (i > 0) ? this.cloneNode(true) : this;
|
||||
var el = elms[i];
|
||||
|
||||
/* Cache current parent and sibling */
|
||||
var parent = el.parentNode,
|
||||
sibling = el.nextSibling;
|
||||
|
||||
/* Wrap the element and remove it from its current parent */
|
||||
child.appendChild(el);
|
||||
if (sibling) {
|
||||
parent.insertBefore(child, sibling);
|
||||
} else {
|
||||
parent.appendChild(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Application logic
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Initialize application upon DOM ready */
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
'use strict';
|
||||
|
||||
/* Test for iOS */
|
||||
Modernizr.addTest('ios', function() {
|
||||
return !!navigator.userAgent.match(/(iPad|iPhone|iPod)/g);
|
||||
});
|
||||
|
||||
/* Test for web application context */
|
||||
Modernizr.addTest('standalone', function() {
|
||||
return !!navigator.standalone;
|
||||
});
|
||||
|
||||
/* Attack FastClick to mitigate 300ms delay on touch devices */
|
||||
FastClick.attach(document.body);
|
||||
|
||||
/* Grab relevant elements from the DOM */
|
||||
var toggle = document.getElementById('toggle-search'),
|
||||
reset = document.getElementById('reset-search'),
|
||||
drawer = document.querySelector('.drawer'),
|
||||
anchors = document.querySelectorAll('.anchor'),
|
||||
search = document.querySelector('.search .field'),
|
||||
query = document.querySelector('.query'),
|
||||
meta = document.querySelector('.results .meta');
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Initialize drawer
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Automatically close drawer when anchors are clicked */
|
||||
Array.prototype.forEach.call(anchors, function(item) {
|
||||
item.querySelector('a').addEventListener('click', function() {
|
||||
document.getElementById('toggle-drawer').checked = false;
|
||||
document.body.classList.remove('toggle-drawer');
|
||||
});
|
||||
});
|
||||
|
||||
/* Align drawer to window offset */
|
||||
var pageYOffsetLast = window.pageYOffset;
|
||||
var align = function() {
|
||||
var boundary = window.pageYOffset + window.innerHeight;
|
||||
var clipping = Math.max(0, window.innerHeight - drawer.offsetHeight);
|
||||
|
||||
/* Ensure alignment with footer if at end of document */
|
||||
if (boundary > document.body.clientHeight - (96 - clipping)) {
|
||||
if (drawer.style.position != 'absolute') {
|
||||
drawer.style.position = 'absolute';
|
||||
drawer.style.top = null;
|
||||
drawer.style.bottom = 0;
|
||||
}
|
||||
|
||||
/* Pin drawer to top, if window is higher than drawer */
|
||||
} else if (drawer.offsetHeight < window.innerHeight) {
|
||||
if (drawer.style.position != 'fixed') {
|
||||
drawer.style.position = 'fixed';
|
||||
drawer.style.top = 0;
|
||||
drawer.style.bottom = null;
|
||||
}
|
||||
|
||||
/* If the drawer is not pinned, check if we need to pin it */
|
||||
} else if (drawer.style.position != 'fixed') {
|
||||
|
||||
/* Pin drawer to bottom of window */
|
||||
if (boundary > drawer.offsetTop + drawer.offsetHeight) {
|
||||
drawer.style.position = 'fixed';
|
||||
drawer.style.top = null;
|
||||
drawer.style.bottom = -96 + 'px';
|
||||
|
||||
/* Pin drawer to top of window */
|
||||
} else if (window.pageYOffset < drawer.offsetTop) {
|
||||
drawer.style.position = 'fixed';
|
||||
drawer.style.top = 0;
|
||||
drawer.style.bottom = null;
|
||||
}
|
||||
|
||||
/* If the drawer is pinned, check if we have to unpin it */
|
||||
} else {
|
||||
if (window.pageYOffset > pageYOffsetLast) {
|
||||
if (drawer.style.top) {
|
||||
drawer.style.position = 'absolute';
|
||||
drawer.style.top = Math.max(0, pageYOffsetLast) + 'px';
|
||||
drawer.style.bottom = null;
|
||||
}
|
||||
} else if (drawer.style.bottom) {
|
||||
drawer.style.position = 'absolute';
|
||||
drawer.style.top = (boundary - drawer.offsetHeight) + 'px';
|
||||
drawer.style.bottom = null;
|
||||
}
|
||||
}
|
||||
|
||||
/* Update last offset (mitigiate negative offsets in Safari) */
|
||||
pageYOffsetLast = Math.max(0, window.pageYOffset);
|
||||
}
|
||||
|
||||
/* Check for media query events */
|
||||
var check = function() {
|
||||
var main = document.querySelector('.main');
|
||||
window.removeEventListener('scroll', align);
|
||||
|
||||
/* Reset drawer position when entering collapsed mode */
|
||||
if (matchMedia("only screen and (max-width: 959px)").matches) {
|
||||
drawer.style.position = null;
|
||||
drawer.style.top = null;
|
||||
drawer.style.bottom = null;
|
||||
|
||||
/* Check if the scroll handler needs to be registered */
|
||||
} else if (drawer.offsetHeight + 96 < main.offsetHeight) {
|
||||
window.addEventListener('scroll', align);
|
||||
align();
|
||||
}
|
||||
}
|
||||
|
||||
/* Register resize handler and fire once */
|
||||
window.addEventListener('resize', check);
|
||||
check();
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Initialize search index
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Initialize index */
|
||||
var initialize = function() {
|
||||
pegasus(base_url + '/mkdocs/search_index.json').then(
|
||||
|
||||
/* Request successful, we got the index */
|
||||
function(data, xhr) {
|
||||
|
||||
/* Create index */
|
||||
var index = lunr(function() {
|
||||
this.field('title', { boost: 10 });
|
||||
this.field('text');
|
||||
this.ref('location');
|
||||
});
|
||||
|
||||
/* Index articles */
|
||||
var articles = {};
|
||||
data.docs.map(function(article) {
|
||||
articles.location = base_url + article.location;
|
||||
articles[article.location] = article;
|
||||
index.add(article);
|
||||
});
|
||||
|
||||
/* Register keyhandler to execute search on key up */
|
||||
query.addEventListener('keyup', function() {
|
||||
var container = document.querySelector('.results .list');
|
||||
while (container.firstChild)
|
||||
container.removeChild(container.firstChild);
|
||||
|
||||
/* Abort, if the query is empty */
|
||||
var bar = document.querySelector('.bar.search');
|
||||
if (!query.value.length) {
|
||||
while (meta.firstChild)
|
||||
meta.removeChild(meta.firstChild);
|
||||
|
||||
/* Restore state */
|
||||
bar.classList.remove('non-empty');
|
||||
return;
|
||||
}
|
||||
|
||||
/* Show reset button */
|
||||
bar.classList.add('non-empty');
|
||||
|
||||
/* Execute search */
|
||||
var results = index.search(query.value);
|
||||
results.map(function(result) {
|
||||
var article = articles[result.ref];
|
||||
|
||||
/* Create article container */
|
||||
var teaser = document.createElement('article');
|
||||
teaser.classList.add('result');
|
||||
|
||||
/* Create title element */
|
||||
var title = document.createElement('h1');
|
||||
title.innerHTML = article.title;
|
||||
teaser.appendChild(title);
|
||||
|
||||
/* Create url element */
|
||||
var url = document.createElement('span');
|
||||
url.innerHTML = window.location.host
|
||||
+ article.location.split('#')[0];
|
||||
teaser.appendChild(url);
|
||||
|
||||
// /* Create text element */
|
||||
// var text = document.createElement('p');
|
||||
// text.innerHTML = article.text.truncate(140);
|
||||
// teaser.appendChild(text);
|
||||
|
||||
/* Create a link referring to the article */
|
||||
var link = document.createElement('a');
|
||||
link.href = article.location;
|
||||
link.appendChild(teaser);
|
||||
|
||||
/* Close search and jump to anchor when on same page */
|
||||
var parts = article.location.split('#');
|
||||
if (parts[0] == window.location.pathname) {
|
||||
link.addEventListener('click', function(e) {
|
||||
document.body.classList.remove('toggle-search');
|
||||
document.body.classList.remove('locked');
|
||||
toggle.checked = false;
|
||||
|
||||
/* Prevent default to intercept scroll-to behaviour and
|
||||
stop propagation, as this interferes with the link-lock in
|
||||
the web application context, which opens all internal links
|
||||
inside the same context */
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
/* Scroll to chapter, if given */
|
||||
if (parts.length != 1) {
|
||||
var chapter = document.getElementById(parts[1]);
|
||||
if (chapter) {
|
||||
|
||||
/* Scroll to chapter, but wait for 100ms to prevent flashes
|
||||
on iOS. A short timeout seems to do the trick */
|
||||
setTimeout(function() {
|
||||
chapter.scrollIntoView && chapter.scrollIntoView() ||
|
||||
window.scrollTo(0, chapter.offsetTop);
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* Add article to search results */
|
||||
container.appendChild(link);
|
||||
});
|
||||
|
||||
/* Show number of search results */
|
||||
var number = document.createElement('strong');
|
||||
number.innerHTML = results.length + ' search result'
|
||||
+ (results.length != 1 ? 's' : '');
|
||||
|
||||
/* Update number */
|
||||
while (meta.firstChild)
|
||||
meta.removeChild(meta.firstChild);
|
||||
meta.appendChild(number);
|
||||
});
|
||||
},
|
||||
|
||||
/* Handle error */
|
||||
function(data, xhr) {
|
||||
console.error(data, xhr.status);
|
||||
}
|
||||
);
|
||||
|
||||
/* Remove listener, as we only have to initialize once */
|
||||
toggle.removeEventListener('click', initialize);
|
||||
};
|
||||
|
||||
/* Initialize on first click */
|
||||
toggle.addEventListener('click', initialize);
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Initialize search modal
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Intercept click on search mode toggle */
|
||||
var offset = 0;
|
||||
toggle.addEventListener('click', function(e) {
|
||||
var list = document.body.classList;
|
||||
var lock = !matchMedia('only screen and (min-width: 960px)').matches;
|
||||
|
||||
/* Exiting search mode */
|
||||
if (list.contains('locked')) {
|
||||
list.remove('locked');
|
||||
|
||||
/* Scroll to former position, but wait for 100ms to prevent flashes
|
||||
on iOS. A short timeout seems to do the trick */
|
||||
if (lock)
|
||||
setTimeout(function() {
|
||||
window.scrollTo(0, offset);
|
||||
}, 100);
|
||||
|
||||
/* Entering search mode */
|
||||
} else {
|
||||
offset = window.scrollY;
|
||||
|
||||
/* First timeout: scroll to top after transition, to omit flickering */
|
||||
if (lock)
|
||||
setTimeout(function(){
|
||||
window.scrollTo(0, 0);
|
||||
}, 400);
|
||||
|
||||
/* Second timeout: Lock body after finishing transition and scrolling to
|
||||
top and focus input field. Sadly, the focus event is not dispatched
|
||||
on iOS Safari and there's nothing we can do about it. */
|
||||
setTimeout(function() {
|
||||
|
||||
/* This additional check is necessary to handle fast subsequent clicks
|
||||
on the toggle and the timeout to lock the body must be canceled */
|
||||
if (this.checked) {
|
||||
if (lock)
|
||||
list.add('locked');
|
||||
setTimeout(function() {
|
||||
query.focus();
|
||||
}, 200);
|
||||
}
|
||||
}.bind(this), 450);
|
||||
}
|
||||
});
|
||||
|
||||
/* Dispatch input focus on touch of search section */
|
||||
search.addEventListener('touchstart', function() {
|
||||
query.focus();
|
||||
});
|
||||
|
||||
/* Exit search mode when pressing ESC */
|
||||
window.addEventListener('keyup', function(e) {
|
||||
var code = e.keyCode || e.which;
|
||||
if (code == 27) {
|
||||
document.body.classList.remove('toggle-search');
|
||||
document.body.classList.remove('locked');
|
||||
toggle.checked = false;
|
||||
}
|
||||
});
|
||||
|
||||
/* Delete search results upon click on "x" */
|
||||
var empty = document.getElementById('reset-search');
|
||||
empty.addEventListener('click', function() {
|
||||
var container = document.querySelector('.results .list');
|
||||
while (container.firstChild)
|
||||
container.removeChild(container.firstChild);
|
||||
|
||||
/* Hide search button */
|
||||
var bar = document.querySelector('.bar.search');
|
||||
bar.classList.remove('non-empty');
|
||||
|
||||
/* Reset number of search results */
|
||||
meta.innerHTML = '';
|
||||
|
||||
/* Empty search input */
|
||||
query.value = '';
|
||||
query.focus();
|
||||
});
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Initialize scroll spy
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Retrieve vertical offset of article chapters */
|
||||
var chapters = document.querySelectorAll('h2');
|
||||
chapters = Array.prototype.map.call(chapters, function(item) {
|
||||
return item.offsetTop;
|
||||
});
|
||||
|
||||
/* Update currently active chapter, if the new chapter is two thirds
|
||||
into the viewport - account for iOS web application context */
|
||||
var visible = null;
|
||||
document.addEventListener('scroll', function() {
|
||||
var offset = window.scrollY + (window.innerHeight / 3),
|
||||
active = chapters.length - 1;
|
||||
for (var c = 0; c < active; c++)
|
||||
if (offset < chapters[c + 1])
|
||||
active = c;
|
||||
|
||||
/* Update anchors, if a new chapter became visible */
|
||||
if (active != visible) {
|
||||
visible = active;
|
||||
Array.prototype.forEach.call(anchors, function(item, index) {
|
||||
var link = item.querySelector('a');
|
||||
if (index != visible || link.classList.add('current'))
|
||||
link.classList.remove('current');
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Fix syntax highlighting
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Fix highlighting for function calls */
|
||||
var functions = document.querySelectorAll('.n + .p');
|
||||
Array.prototype.forEach.call(functions, function(item) {
|
||||
var text = item.innerText || item.textContent;
|
||||
if (text && text[0] == '(')
|
||||
item.previousSibling.classList.add('f');
|
||||
});
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Progressive structure enhancement
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Wrap all data tables */
|
||||
var tables = document.querySelectorAll('table');
|
||||
Array.prototype.forEach.call(tables, function(item) {
|
||||
var wrapper = document.createElement('div');
|
||||
wrapper.classList.add('data');
|
||||
wrapper.wrap(item);
|
||||
});
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Fix overflow scrolling on iOS
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Force 1px scroll offset to trigger overflow scrolling */
|
||||
if (Modernizr.ios) {
|
||||
var scrollable = document.querySelectorAll(
|
||||
'.scrollable, .standalone .article');
|
||||
Array.prototype.forEach.call(scrollable, function(item) {
|
||||
item.addEventListener('touchstart', function() {
|
||||
var top = this.scrollTop;
|
||||
|
||||
/* We're at the top of the container */
|
||||
if (top == 0) {
|
||||
this.scrollTop = 1;
|
||||
|
||||
/* We're at the bottom of the container */
|
||||
} else if (top + this.offsetHeight == this.scrollHeight) {
|
||||
this.scrollTop = top - 1;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/* Prevent scrolling on project, overlay and header */
|
||||
var prevented = document.querySelectorAll('.project, .overlay, .header');
|
||||
Array.prototype.forEach.call(prevented, function(item) {
|
||||
item.addEventListener('touchmove', function(e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
});
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Fallback for browsers that don't support :checked
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Set representative class on body for active toggle */
|
||||
var toggles = document.querySelectorAll('.toggle');
|
||||
Array.prototype.forEach.call(toggles, function(item) {
|
||||
item.addEventListener('click', function() {
|
||||
document.body.classList.toggle(this.id);
|
||||
});
|
||||
});
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Initialize GitHub star button
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Get Stars for current repository */
|
||||
pegasus('https://api.github.com/repos/' + repo_id + '/stargazers').then(
|
||||
|
||||
/* Request successful, we got the stars */
|
||||
function(data, xhr) {
|
||||
var count = data.length;
|
||||
if (count > 1000)
|
||||
count = (count / 1000).toFixed(1) + "k";
|
||||
|
||||
/* Set number of stars */
|
||||
var stars = document.querySelector('.repo-stars .count');
|
||||
stars.innerHTML = count;
|
||||
},
|
||||
|
||||
/* Handle error */
|
||||
function(data, xhr) {
|
||||
console.error(data, xhr.status);
|
||||
}
|
||||
);
|
||||
});
|
49
src/assets/javascripts/standalone.js
Normal file
49
src/assets/javascripts/standalone.js
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Taken and adapted from https://gist.github.com/kylebarrow/1042026
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Detect standalone mode */
|
||||
if (('standalone' in window.navigator) && window.navigator.standalone) {
|
||||
|
||||
/* If you want to prevent remote links in standalone web apps opening
|
||||
Mobile Safari, change 'remotes' to true */
|
||||
var node, remotes = false;
|
||||
|
||||
/* Bind to document */
|
||||
document.addEventListener('click', function(event) {
|
||||
node = event.target;
|
||||
|
||||
/* Bubble up until we hit link or top HTML element. Warning: BODY element
|
||||
is not compulsory so better to stop on HTML */
|
||||
while (node.nodeName !== 'A' && node.nodeName !== 'HTML') {
|
||||
node = node.parentNode;
|
||||
}
|
||||
if ('href' in node && node.href.indexOf('http') !== -1 && (
|
||||
node.href.indexOf(document.location.host) !== -1 || remotes)) {
|
||||
event.preventDefault();
|
||||
document.location.href = node.href;
|
||||
}
|
||||
}, false);
|
||||
}
|
75
src/assets/stylesheets/_highlight.scss
Normal file
75
src/assets/stylesheets/_highlight.scss
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Code highlighter
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Comments
|
||||
*/
|
||||
.c,
|
||||
.cm {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/*
|
||||
* Keywords
|
||||
*/
|
||||
.k {
|
||||
color: $pink-500;
|
||||
}
|
||||
|
||||
/*
|
||||
* Types
|
||||
*/
|
||||
.kt, .kd {
|
||||
color: $light-blue-300;
|
||||
}
|
||||
|
||||
/*
|
||||
* Strings
|
||||
*/
|
||||
.s {
|
||||
color: $lime-300;
|
||||
}
|
||||
|
||||
/*
|
||||
* Operators and names
|
||||
*/
|
||||
.o, .na {
|
||||
color: $white-light;
|
||||
}
|
||||
|
||||
/*
|
||||
* Numbers
|
||||
*/
|
||||
.mi {
|
||||
color: $deep-purple-300;
|
||||
}
|
||||
|
||||
/*
|
||||
* Functions
|
||||
*/
|
||||
.n.f {
|
||||
color: saturate(mix($green-300, $teal-300, 50%), 50%);
|
||||
}
|
47
src/assets/stylesheets/_palette.scss
Normal file
47
src/assets/stylesheets/_palette.scss
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Palette
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Primary and accent color
|
||||
*/
|
||||
$primary: $indigo-500;
|
||||
$accent: $teal-500;
|
||||
|
||||
/*
|
||||
* Black opacities
|
||||
*/
|
||||
$black: rgba(black, 0.87);
|
||||
$black-light: rgba(black, 0.54);
|
||||
$black-lighter: rgba(black, 0.26);
|
||||
$black-lightest: rgba(black, 0.12);
|
||||
|
||||
/*
|
||||
* White opacities
|
||||
*/
|
||||
$white: rgba(white, 1.00);
|
||||
$white-light: rgba(white, 0.70);
|
||||
$white-lighter: rgba(white, 0.30);
|
||||
$white-lightest: rgba(white, 0.12);
|
66
src/assets/stylesheets/_print.scss
Normal file
66
src/assets/stylesheets/_print.scss
Normal file
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Print overrides
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Print styles
|
||||
*/
|
||||
@media print {
|
||||
|
||||
/*
|
||||
* Hide non-relevant elements
|
||||
*/
|
||||
.header, .project, .footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* Article
|
||||
*/
|
||||
.article {
|
||||
|
||||
/*
|
||||
* Remove color in all code blocks
|
||||
*/
|
||||
pre, pre * {
|
||||
color: $black !important;
|
||||
}
|
||||
|
||||
/*
|
||||
* Border-radius makes this table entirely black on paper
|
||||
*/
|
||||
table {
|
||||
border-radius: none;
|
||||
box-shadow: none;
|
||||
|
||||
/*
|
||||
* Color header
|
||||
*/
|
||||
th {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
143
src/assets/stylesheets/_reset.scss
Normal file
143
src/assets/stylesheets/_reset.scss
Normal file
@ -0,0 +1,143 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Resets
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Enfore correct box model - the prefixed versions are necessary for older
|
||||
* browsers, i.e. Chrome < 10, Firefox < 29, Safari < 6 and Android < 4
|
||||
*/
|
||||
html {
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
}
|
||||
|
||||
/*
|
||||
* All elements shall inherit the document default
|
||||
*/
|
||||
*, *:before, *:after {
|
||||
box-sizing: inherit;
|
||||
-moz-box-sizing: inherit;
|
||||
-webkit-box-sizing: inherit;
|
||||
}
|
||||
|
||||
/*
|
||||
* 16px --> 10px, browser default
|
||||
*/
|
||||
html {
|
||||
font-size: 62.5%;
|
||||
text-size-adjust: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset spacing and borders for all tags
|
||||
*/
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup, main,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset list styles
|
||||
*/
|
||||
ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset table styles
|
||||
*/
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset table cell styles
|
||||
*/
|
||||
td {
|
||||
text-align: left;
|
||||
font-weight: normal;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset (native) button styles
|
||||
*/
|
||||
button {
|
||||
outline: 0;
|
||||
padding: 0;
|
||||
|
||||
background: transparent;
|
||||
border: none;
|
||||
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset (native) input styles
|
||||
*/
|
||||
input {
|
||||
@include appearance(none);
|
||||
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset link styles
|
||||
*/
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset tap outlines on iOS and Android
|
||||
*/
|
||||
a, button, label, input {
|
||||
-webkit-tap-highlight-color: rgba(white, 0);
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset headlines
|
||||
*/
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: inherit;
|
||||
}
|
38
src/assets/stylesheets/_shame.scss
Normal file
38
src/assets/stylesheets/_shame.scss
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Here should be nothing
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* [tablet portait+]: Slightly larger project name */
|
||||
@include break-from-device(tablet landscape) {
|
||||
.project .name {
|
||||
color: $black;
|
||||
}
|
||||
}
|
||||
|
||||
@include break-from-device(tablet landscape) {
|
||||
.button-menu {
|
||||
display: none;
|
||||
}
|
||||
}
|
50
src/assets/stylesheets/application.scss
Normal file
50
src/assets/stylesheets/application.scss
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Dependencies
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
@import "bourbon";
|
||||
@import "quantum-colors";
|
||||
@import "quantum-shadows";
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Application
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
@import "reset";
|
||||
@import "palette";
|
||||
@import "highlight";
|
||||
|
||||
@import "fonts/icon";
|
||||
|
||||
@import "mixins/break";
|
||||
|
||||
@import "modules/base";
|
||||
@import "modules/drawer";
|
||||
@import "modules/article";
|
||||
@import "modules/search";
|
||||
|
||||
@import "print";
|
||||
|
||||
@import "shame";
|
137
src/assets/stylesheets/fonts/_icon.scss
Normal file
137
src/assets/stylesheets/fonts/_icon.scss
Normal file
@ -0,0 +1,137 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Font faces
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Icon font
|
||||
*/
|
||||
@font-face {
|
||||
font-family: 'Icon';
|
||||
src: url('/assets/fonts/icon.eot?52m981');
|
||||
src: url('/assets/fonts/icon.eot?#iefix52m981') format('embedded-opentype'),
|
||||
url('/assets/fonts/icon.woff?52m981') format('woff'),
|
||||
url('/assets/fonts/icon.ttf?52m981') format('truetype'),
|
||||
url('/assets/fonts/icon.svg?52m981#icon') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Representational classes
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Base icon class
|
||||
*/
|
||||
.icon {
|
||||
font-family: 'Icon';
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
|
||||
/* Better Font Rendering */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/*
|
||||
* Magnifying glass
|
||||
*/
|
||||
.icon-search:before {
|
||||
content: "\e600";
|
||||
}
|
||||
|
||||
/*
|
||||
* Back arrow
|
||||
*/
|
||||
.icon-back:before {
|
||||
content: "\e601";
|
||||
}
|
||||
|
||||
/*
|
||||
* Link indicator
|
||||
*/
|
||||
.icon-link:before {
|
||||
content: "\e602";
|
||||
}
|
||||
|
||||
/*
|
||||
* Close button
|
||||
*/
|
||||
.icon-close:before {
|
||||
content: "\e603";
|
||||
}
|
||||
|
||||
/*
|
||||
* Hamburger icon
|
||||
*/
|
||||
.icon-menu:before {
|
||||
content: "\e604";
|
||||
}
|
||||
|
||||
/*
|
||||
* Forward arrow
|
||||
*/
|
||||
.icon-forward:before {
|
||||
content: "\e605";
|
||||
}
|
||||
|
||||
/*
|
||||
* Twitter icon
|
||||
*/
|
||||
.icon-twitter:before {
|
||||
content: "\e606";
|
||||
}
|
||||
|
||||
/*
|
||||
* GitHub icon
|
||||
*/
|
||||
.icon-github:before {
|
||||
content: "\e607";
|
||||
}
|
||||
|
||||
/*
|
||||
* Download icon
|
||||
*/
|
||||
.icon-download:before {
|
||||
content: "\e608";
|
||||
}
|
||||
|
||||
/*
|
||||
* Star icon
|
||||
*/
|
||||
.icon-star:before {
|
||||
content: "\e609";
|
||||
}
|
||||
|
||||
/*
|
||||
* Quote icon
|
||||
*/
|
||||
.icon-quote:before {
|
||||
content: "\e610";
|
||||
}
|
206
src/assets/stylesheets/mixins/_break.scss
Normal file
206
src/assets/stylesheets/mixins/_break.scss
Normal file
@ -0,0 +1,206 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Defaults
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
$break: (
|
||||
devices: (
|
||||
mobile: (
|
||||
portrait: 220px 479px,
|
||||
landscape: 480px 719px
|
||||
),
|
||||
tablet: (
|
||||
portrait: 720px 959px,
|
||||
landscape: 960px 1199px
|
||||
),
|
||||
screen: 1200px
|
||||
)
|
||||
) !default;
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Helper functions
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Choose minimum and maximum device widths.
|
||||
*/
|
||||
@function break-select-min-max($devices) {
|
||||
$min: 1000000; $max: 0;
|
||||
@each $key, $value in $devices {
|
||||
@while type-of($value) == map {
|
||||
$value: break-select-min-max($value);
|
||||
}
|
||||
@if type-of($value) == list {
|
||||
@each $number in $value {
|
||||
@if type-of($number) == number {
|
||||
$min: min($number, $min);
|
||||
@if $max != null {
|
||||
$max: max($number, $max);
|
||||
}
|
||||
} @else {
|
||||
@warn "Invalid number: #{$number}";
|
||||
}
|
||||
}
|
||||
} @elseif type-of($value) == number {
|
||||
$min: min($value, $min);
|
||||
$max: null;
|
||||
} @else {
|
||||
@warn "Invalid tuple: #{$value}";
|
||||
}
|
||||
}
|
||||
@return $min, $max;
|
||||
}
|
||||
|
||||
/*
|
||||
* Select minimum and maximum widths for a device breakpoint.
|
||||
*/
|
||||
@function break-select-device($device) {
|
||||
$devices: map-get($break, devices);
|
||||
@for $n from 1 through length($device) {
|
||||
@if type-of($devices) == map {
|
||||
$devices: map-get($devices, nth($device, $n));
|
||||
} @else {
|
||||
@warn "Invalid device map: #{$devices}";
|
||||
}
|
||||
}
|
||||
@if type-of($devices) == list or
|
||||
type-of($devices) == number {
|
||||
$devices: (default: $devices);
|
||||
}
|
||||
@return break-select-min-max($devices);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Mixins for numeric breakpoints
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* A minimum-maximum media query breakpoint.
|
||||
*/
|
||||
@mixin break-at($breakpoint) {
|
||||
@if type-of($breakpoint) == number {
|
||||
@media only screen and (min-width: $breakpoint) {
|
||||
@content;
|
||||
}
|
||||
} @elseif type-of($breakpoint) == list {
|
||||
$min: nth($breakpoint, 1); $max: nth($breakpoint, 2);
|
||||
@if type-of($min) == number and type-of($max) == number {
|
||||
@media only screen and (min-width: $min) and (max-width: $max) {
|
||||
@content;
|
||||
}
|
||||
} @else {
|
||||
@warn "Invalid breakpoint: #{$breakpoint}";
|
||||
}
|
||||
} @else {
|
||||
@warn "Invalid breakpoint: #{$breakpoint}";
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* An orientation media query breakpoint.
|
||||
*/
|
||||
@mixin break-at-orientation($breakpoint) {
|
||||
@if type-of($breakpoint) == string {
|
||||
@media only screen and (orientation: $breakpoint) {
|
||||
@content;
|
||||
}
|
||||
} @else {
|
||||
@warn "Invalid breakpoint: #{$breakpoint}";
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* A maximum-aspect-ratio media query breakpoint.
|
||||
*/
|
||||
@mixin break-at-ratio($breakpoint) {
|
||||
@if type-of($breakpoint) == number {
|
||||
@media only screen and (max-aspect-ratio: $breakpoint) {
|
||||
@content;
|
||||
}
|
||||
} @else {
|
||||
@warn "Invalid breakpoint: #{$breakpoint}";
|
||||
}
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Mixins for device breakpoints
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* A minimum-maximum media query device breakpoint.
|
||||
*/
|
||||
@mixin break-at-device($device) {
|
||||
@if type-of($device) == string {
|
||||
$device: $device,;
|
||||
}
|
||||
@if type-of($device) == list {
|
||||
$breakpoint: break-select-device($device);
|
||||
@if nth($breakpoint, 2) != null {
|
||||
$min: nth($breakpoint, 1); $max: nth($breakpoint, 2);
|
||||
@media only screen and (min-width: $min) and (max-width: $max) {
|
||||
@content;
|
||||
}
|
||||
} @else {
|
||||
@warn "Invalid device: #{$device}";
|
||||
}
|
||||
} @else {
|
||||
@warn "Invalid device: #{$device}";
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* A minimum media query device breakpoint.
|
||||
*/
|
||||
@mixin break-from-device($device) {
|
||||
@if type-of($device) == string {
|
||||
$device: $device,;
|
||||
}
|
||||
@if type-of($device) == list {
|
||||
$breakpoint: break-select-device($device);
|
||||
$min: nth($breakpoint, 1);
|
||||
@media only screen and (min-width: $min) {
|
||||
@content;
|
||||
}
|
||||
} @else {
|
||||
@warn "Invalid device: #{$device}";
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* A maximum media query device breakpoint.
|
||||
*/
|
||||
@mixin break-to-device($device) {
|
||||
@if type-of($device) == string {
|
||||
$device: $device,;
|
||||
}
|
||||
@if type-of($device) == list {
|
||||
$breakpoint: break-select-device($device);
|
||||
$max: nth($breakpoint, 1) - 1;
|
||||
@media only screen and (max-width: $max) {
|
||||
@content;
|
||||
}
|
||||
} @else {
|
||||
@warn "Invalid device: #{$device}";
|
||||
}
|
||||
}
|
26
src/assets/stylesheets/modules/_article.scss
Normal file
26
src/assets/stylesheets/modules/_article.scss
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
@import "article/animation";
|
||||
@import "article/appearance";
|
||||
@import "article/layout";
|
||||
@import "article/typography";
|
26
src/assets/stylesheets/modules/_base.scss
Normal file
26
src/assets/stylesheets/modules/_base.scss
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
@import "base/animation";
|
||||
@import "base/appearance";
|
||||
@import "base/layout";
|
||||
@import "base/typography";
|
26
src/assets/stylesheets/modules/_drawer.scss
Normal file
26
src/assets/stylesheets/modules/_drawer.scss
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
@import "drawer/animation";
|
||||
@import "drawer/appearance";
|
||||
@import "drawer/layout";
|
||||
@import "drawer/typography";
|
26
src/assets/stylesheets/modules/_search.scss
Normal file
26
src/assets/stylesheets/modules/_search.scss
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
@import "search/animation";
|
||||
@import "search/appearance";
|
||||
@import "search/layout";
|
||||
@import "search/typography";
|
45
src/assets/stylesheets/modules/article/_animation.scss
Normal file
45
src/assets/stylesheets/modules/article/_animation.scss
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Article animation
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Fade color after highlighting
|
||||
*/
|
||||
pre span {
|
||||
transition: color .25s;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copyright and theme information
|
||||
*/
|
||||
.copyright {
|
||||
|
||||
/*
|
||||
* Animate color on hover
|
||||
*/
|
||||
a {
|
||||
transition: color .25s;
|
||||
}
|
||||
}
|
152
src/assets/stylesheets/modules/article/_appearance.scss
Normal file
152
src/assets/stylesheets/modules/article/_appearance.scss
Normal file
@ -0,0 +1,152 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Article appearance
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Article
|
||||
*/
|
||||
.article {
|
||||
color: $black;
|
||||
|
||||
|
||||
/*
|
||||
* Differing top and bottom rubberband backgrounds in iOS web application
|
||||
*/
|
||||
.ios.standalone & {
|
||||
background: linear-gradient(
|
||||
to bottom, $white 50%, $primary 50%);
|
||||
|
||||
/* Hack [iOS]: Mitigate black bounding box with linear gradient */
|
||||
.wrapper {
|
||||
background: linear-gradient(
|
||||
to bottom, $white 50%, $white 50%);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Headlines and chapters in primary color
|
||||
*/
|
||||
h1, h2, p > code, td > code {
|
||||
color: $primary;
|
||||
}
|
||||
|
||||
/*
|
||||
* Code listing in negative colors
|
||||
*/
|
||||
pre {
|
||||
background: $black;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
/*
|
||||
* Color links
|
||||
*/
|
||||
a {
|
||||
color: $primary;
|
||||
|
||||
/*
|
||||
* Hovered link
|
||||
*/
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $accent;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Data tables
|
||||
*/
|
||||
table {
|
||||
@include drop-shadow(1);
|
||||
|
||||
border-radius: 3px;
|
||||
|
||||
/*
|
||||
* Table heading
|
||||
*/
|
||||
th {
|
||||
background: mix($primary, $white, 75%);
|
||||
color: $white;
|
||||
|
||||
/*
|
||||
* Round upper left border
|
||||
*/
|
||||
&:first-child {
|
||||
border-top-left-radius: 3px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Round upper right border
|
||||
*/
|
||||
&:last-child {
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Table cell
|
||||
*/
|
||||
td {
|
||||
border-top: 1px solid rgba($black, 0.05);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Article footer
|
||||
*/
|
||||
.footer {
|
||||
background: $primary;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copyright and theme information
|
||||
*/
|
||||
.copyright {
|
||||
color: $black-light;
|
||||
}
|
||||
|
||||
/*
|
||||
* Pagination
|
||||
*/
|
||||
.pagination {
|
||||
|
||||
/*
|
||||
* Inherit color for links
|
||||
*/
|
||||
a,
|
||||
a:hover,
|
||||
a:focus {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/*
|
||||
* Smaller font size for direction
|
||||
*/
|
||||
.direction {
|
||||
color: $white-light;
|
||||
}
|
||||
}
|
455
src/assets/stylesheets/modules/article/_layout.scss
Normal file
455
src/assets/stylesheets/modules/article/_layout.scss
Normal file
@ -0,0 +1,455 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Article layout
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Article
|
||||
*/
|
||||
.article {
|
||||
font-size: 14px;
|
||||
line-height: 24px;
|
||||
|
||||
/* [tablet landscape+]: Indent to account for drawer */
|
||||
@include break-from-device(tablet landscape) {
|
||||
margin-left: 262px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Clearfix
|
||||
*/
|
||||
&:after {
|
||||
display: block;
|
||||
content: " ";
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/*
|
||||
* Article wrapper
|
||||
*/
|
||||
.wrapper {
|
||||
padding: 116px 16px 92px;
|
||||
|
||||
/* [tablet portait+]: Increase top spacing */
|
||||
@include break-from-device(tablet portrait) {
|
||||
padding: 128px 24px 96px;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable overflow scrolling in iOS web application
|
||||
*/
|
||||
.ios.standalone & {
|
||||
@include position(absolute, 56px 0 0 0);
|
||||
|
||||
overflow: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
|
||||
/* [orientation: portrait]: Account for status bar in portrait mode */
|
||||
@include break-at-orientation(portrait) {
|
||||
@include position(absolute, (56px + 20px) 0 0 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Article wrapper
|
||||
*/
|
||||
.wrapper {
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
padding-top: 60px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Article headlines
|
||||
*/
|
||||
h1 {
|
||||
font-size: 24px;
|
||||
line-height: 32px;
|
||||
padding-top: 20px;
|
||||
margin-bottom: 42px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Article chapters - account for fixed header offset
|
||||
*/
|
||||
h2 {
|
||||
font-size: 20px;
|
||||
line-height: 28px;
|
||||
padding-top: (36px + 56px);
|
||||
margin-top: (0px - 56px);
|
||||
|
||||
/*
|
||||
* No offset correction in iOS web application
|
||||
*/
|
||||
.ios.standalone & {
|
||||
padding-top: 36px;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Paragraphs and section titles
|
||||
*/
|
||||
p, h3, li {
|
||||
font-size: 14px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
/*
|
||||
* List elements
|
||||
*/
|
||||
li {
|
||||
margin-left: 18px;
|
||||
|
||||
/*
|
||||
* Inline paragraphs in list elements
|
||||
*/
|
||||
p {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Add icon for elements of an unordered list
|
||||
*/
|
||||
ul li:before {
|
||||
display: inline-block;
|
||||
content: '\e602';
|
||||
font-family: 'Icon';
|
||||
font-size: 16px;
|
||||
width: 1.2em;
|
||||
margin-left: -1.2em;
|
||||
vertical-align: -0.1em;
|
||||
}
|
||||
|
||||
/*
|
||||
* Inline code snippets must not wrap
|
||||
*/
|
||||
p > code {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/*
|
||||
* Code listing container
|
||||
*/
|
||||
pre {
|
||||
padding: 16px;
|
||||
margin: 20px -16px 0;
|
||||
overflow: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
|
||||
/*
|
||||
* Code listing
|
||||
*/
|
||||
code {
|
||||
line-height: 21px;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Data tables
|
||||
*/
|
||||
table {
|
||||
margin: 40px 0 20px;
|
||||
font-size: 13px;
|
||||
|
||||
/*
|
||||
* The semi-cool solution, in case javascript is not available
|
||||
*/
|
||||
.no-js & {
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
overflow: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
/*
|
||||
* Table heading
|
||||
*/
|
||||
th {
|
||||
min-width: 100px;
|
||||
padding: 12px 16px;
|
||||
font-size: 12px;
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/*
|
||||
* Table cell
|
||||
*/
|
||||
td {
|
||||
padding: 12px 16px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Data table wrapper, in case javascript is available
|
||||
*/
|
||||
.data {
|
||||
margin: 20px -16px;
|
||||
padding: 20px 0;
|
||||
overflow: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
text-align: center;
|
||||
|
||||
/*
|
||||
* Data table
|
||||
*/
|
||||
table {
|
||||
display: inline-block;
|
||||
margin: 0 16px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* [tablet portait+]: Increase spacing */
|
||||
@include break-from-device(tablet portrait) {
|
||||
margin: 20px -24px;
|
||||
|
||||
/*
|
||||
* Data table
|
||||
*/
|
||||
table {
|
||||
margin: 0 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* [tablet portait+]: Increase spacing */
|
||||
@include break-from-device(tablet portrait) {
|
||||
|
||||
/*
|
||||
* Account for larged header bar and anchors
|
||||
*/
|
||||
h2 {
|
||||
padding-top: (28px + 72px);
|
||||
margin-top: (8px - 72px);
|
||||
|
||||
/*
|
||||
* No offset correction in iOS web application
|
||||
*/
|
||||
.ios.standalone & {
|
||||
padding-top: 28px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Increase spacing for code blocks
|
||||
*/
|
||||
pre {
|
||||
padding: 20px 24px;
|
||||
margin: 20px -24px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Article footer
|
||||
*/
|
||||
.footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
padding: 0 4px;
|
||||
|
||||
/* [tablet portait+]: Larger spacing */
|
||||
@include break-from-device(tablet portrait) {
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
/* [tablet landscape+]: Stretch footer to viewport */
|
||||
@include break-from-device(tablet landscape) {
|
||||
z-index: 5;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Copyright and theme information
|
||||
*/
|
||||
.copyright {
|
||||
margin: 20px 0;
|
||||
|
||||
/* [tablet landscape+]: Add bottom spacing */
|
||||
@include break-from-device(tablet landscape) {
|
||||
margin-bottom: 64px;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Pagination
|
||||
*/
|
||||
.pagination {
|
||||
max-width: 1184px;
|
||||
height: 92px;
|
||||
padding: 4px 0;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
overflow: hidden;
|
||||
|
||||
/* [tablet portait+]: Larger pagination and spacing */
|
||||
@include break-from-device(tablet portrait) {
|
||||
height: 96px;
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Links should span icons entirely
|
||||
*/
|
||||
a {
|
||||
display: block;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Previous and next page
|
||||
*/
|
||||
.previous,
|
||||
.next {
|
||||
position: relative;
|
||||
float: left;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Previous page
|
||||
*/
|
||||
.previous {
|
||||
width: 25%;
|
||||
|
||||
/*
|
||||
* Hide direction
|
||||
*/
|
||||
.direction {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* Hide title
|
||||
*/
|
||||
.stretch {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Next page
|
||||
*/
|
||||
.next {
|
||||
width: 75%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/*
|
||||
* Link to page
|
||||
*/
|
||||
.page {
|
||||
display: table;
|
||||
position: absolute;
|
||||
bottom: 4px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Put direction over page title
|
||||
*/
|
||||
.direction {
|
||||
display: block;
|
||||
position: absolute;
|
||||
bottom: 40px;
|
||||
width: 100%;
|
||||
font-size: 15px;
|
||||
line-height: 20px;
|
||||
padding: 0 52px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Decrease indent for stretching content
|
||||
*/
|
||||
.stretch {
|
||||
padding: 0 4px;
|
||||
|
||||
/*
|
||||
* Correct vertical spacing
|
||||
*/
|
||||
.title {
|
||||
font-size: 18px;
|
||||
padding: 11px 0 13px;
|
||||
}
|
||||
}
|
||||
|
||||
/* [mobile landscape+]: Proportional width for pagination */
|
||||
@include break-from-device(mobile landscape) {
|
||||
|
||||
/*
|
||||
* Previous and next page
|
||||
*/
|
||||
.previous,
|
||||
.next {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Previous page
|
||||
*/
|
||||
.previous {
|
||||
width: 50%;
|
||||
|
||||
/*
|
||||
* Show direction
|
||||
*/
|
||||
.direction {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*
|
||||
* Show title
|
||||
*/
|
||||
.stretch {
|
||||
display: table;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* [tablet portrait+]: Increase vertical spacing */
|
||||
@include break-from-device(tablet portrait) {
|
||||
|
||||
/*
|
||||
* Increase vertical spacing
|
||||
*/
|
||||
.direction {
|
||||
padding: 0 56px;
|
||||
bottom: 40px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Increase vertical spacing
|
||||
*/
|
||||
.stretch {
|
||||
padding: 0 8px;
|
||||
}
|
||||
}
|
||||
}
|
38
src/assets/stylesheets/modules/article/_typography.scss
Normal file
38
src/assets/stylesheets/modules/article/_typography.scss
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Article typography
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Article
|
||||
*/
|
||||
.article {
|
||||
|
||||
/*
|
||||
* Section titles should be bold
|
||||
*/
|
||||
h3 {
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
73
src/assets/stylesheets/modules/base/_animation.scss
Normal file
73
src/assets/stylesheets/modules/base/_animation.scss
Normal file
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Base animation
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Animate color on hover
|
||||
*/
|
||||
a {
|
||||
transition: color .25s;
|
||||
}
|
||||
|
||||
/*
|
||||
* Overlay
|
||||
*/
|
||||
.overlay {
|
||||
transition: opacity .25s,
|
||||
width .0s .25s,
|
||||
height .0s .25s;
|
||||
|
||||
/*
|
||||
* Expanded drawer
|
||||
*/
|
||||
#toggle-drawer:checked ~ &,
|
||||
.toggle-drawer & {
|
||||
transition: opacity .25s,
|
||||
width .0s,
|
||||
height .0s;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Application header - check for javascript to omit flashing
|
||||
*/
|
||||
.js .header {
|
||||
transition: background .6s,
|
||||
color .6s;
|
||||
|
||||
/*
|
||||
* Status bar
|
||||
*/
|
||||
&:before {
|
||||
transition: background .6s;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Extended visible touch area on icon
|
||||
*/
|
||||
.button .icon {
|
||||
transition: background .25s;
|
||||
}
|
137
src/assets/stylesheets/modules/base/_appearance.scss
Normal file
137
src/assets/stylesheets/modules/base/_appearance.scss
Normal file
@ -0,0 +1,137 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Base appearance
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Device specific background hacks related to rubberband
|
||||
*/
|
||||
body {
|
||||
|
||||
/* Hack [Chrome, Opera]: Set background color in Chrome and Opera */
|
||||
@supports (-webkit-appearance: none) {
|
||||
background: $primary;
|
||||
}
|
||||
|
||||
/*
|
||||
* Don't tint menu bar on iOS
|
||||
*/
|
||||
.ios & {
|
||||
background: $white;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Horizontal separators
|
||||
*/
|
||||
hr {
|
||||
border: 0;
|
||||
border-top: 1px solid $black-lightest;
|
||||
}
|
||||
|
||||
/*
|
||||
* Toggle button
|
||||
*/
|
||||
.toggle-button {
|
||||
cursor: pointer;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/*
|
||||
* Backdrop
|
||||
*/
|
||||
.backdrop {
|
||||
background: $white;
|
||||
|
||||
/* [tablet landscape+]: Introduce paper with shadow */
|
||||
@include break-from-device(tablet landscape) {
|
||||
background: darken($white, 5%);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Backdrop paper with shadow
|
||||
*/
|
||||
.backdrop-paper:after {
|
||||
background: $white;
|
||||
|
||||
/* [tablet landscape+]: Add drop shadow */
|
||||
@include break-from-device(tablet landscape) {
|
||||
@include drop-shadow(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Overlay
|
||||
*/
|
||||
.overlay {
|
||||
background: $black-light;
|
||||
opacity: 0;
|
||||
|
||||
/*
|
||||
* Expanded drawer
|
||||
*/
|
||||
#toggle-drawer:checked ~ &,
|
||||
.toggle-drawer & {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Application header
|
||||
*/
|
||||
.header {
|
||||
@include drop-shadow(1);
|
||||
|
||||
background: $primary;
|
||||
color: $white;
|
||||
|
||||
/*
|
||||
* Add status bar overlay for iOS web application
|
||||
*/
|
||||
.ios.standalone &:before {
|
||||
background: $black-lightest;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Navigation path within header bar
|
||||
*/
|
||||
.bar .path {
|
||||
color: $white-light;
|
||||
}
|
||||
|
||||
/*
|
||||
* Draw round area around icon on touch
|
||||
*/
|
||||
.button .icon {
|
||||
border-radius: 100%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Pushed/clicked icon
|
||||
*/
|
||||
.button .icon:active {
|
||||
background: $white-lightest;
|
||||
}
|
347
src/assets/stylesheets/modules/base/_layout.scss
Normal file
347
src/assets/stylesheets/modules/base/_layout.scss
Normal file
@ -0,0 +1,347 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Base layout
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Stretch container to viewport
|
||||
*/
|
||||
html {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Stretch body to container and leave room for sticky footer.
|
||||
*/
|
||||
body {
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Horizontal separators
|
||||
*/
|
||||
hr {
|
||||
display: block;
|
||||
height: 1px;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Lock body (e.g. in search mode)
|
||||
*/
|
||||
.locked {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scrollable container
|
||||
*/
|
||||
.scrollable {
|
||||
@include position(absolute, 0 0 0 0);
|
||||
|
||||
overflow: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
|
||||
/*
|
||||
* Content wrapper
|
||||
*/
|
||||
.wrapper {
|
||||
height: 100%;
|
||||
|
||||
/* Hack [iOS]: Force overflow scrolling */
|
||||
.ios & {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Toggle states and button
|
||||
*/
|
||||
.toggle {
|
||||
display: none;
|
||||
|
||||
/*
|
||||
* Toggle button
|
||||
*/
|
||||
&-button {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Backdrop
|
||||
*/
|
||||
.backdrop {
|
||||
@include position(absolute, 0 0 0 0);
|
||||
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Backdrop paper container
|
||||
*/
|
||||
.backdrop-paper {
|
||||
max-width: 1200px;
|
||||
height: 100%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
||||
/*
|
||||
* Actual paper
|
||||
*/
|
||||
&:after {
|
||||
display: block;
|
||||
content: " ";
|
||||
height: 100%;
|
||||
margin-left: 262px;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Overlay
|
||||
*/
|
||||
.overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
z-index: 4;
|
||||
|
||||
/* [tablet landscape-]: Trigger overlay */
|
||||
@include break-to-device(tablet landscape) {
|
||||
|
||||
/*
|
||||
* Expanded drawer
|
||||
*/
|
||||
#toggle-drawer:checked ~ &,
|
||||
.toggle-drawer & {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Application header stays always on top
|
||||
*/
|
||||
.header {
|
||||
@include user-select(none);
|
||||
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 3;
|
||||
height: 56px;
|
||||
padding: 4px;
|
||||
overflow: hidden;
|
||||
|
||||
/* [tablet portait+]: Larger header bar */
|
||||
@include break-from-device(tablet portrait) {
|
||||
height: 64px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
/* [screen+]: Stretch to screen */
|
||||
@include break-from-device(screen) {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Absolute positioning in iOS web application
|
||||
*/
|
||||
.ios.standalone & {
|
||||
position: absolute;
|
||||
|
||||
/* [orientation: portrait]: Account for status bar in portrait mode */
|
||||
@include break-at-orientation(portrait) {
|
||||
height: (56px + 20px);
|
||||
padding-top: (4px + 20px);
|
||||
|
||||
/* [tablet portait+]: Larger header bar */
|
||||
@include break-from-device(tablet portrait) {
|
||||
height: (64px + 20px);
|
||||
padding-top: (8px + 20px);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add status bar overlay
|
||||
*/
|
||||
&:before {
|
||||
content: " ";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 4;
|
||||
width: 100%;
|
||||
height: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Header bar
|
||||
*/
|
||||
.bar {
|
||||
display: table;
|
||||
max-width: 1184px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
||||
/*
|
||||
* Links should span icons entirely
|
||||
*/
|
||||
a {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*
|
||||
* Hide search button, in case javascript is not available.
|
||||
*/
|
||||
.no-js & .button-search {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* Navigation path
|
||||
*/
|
||||
.path {
|
||||
|
||||
/*
|
||||
* Correct icon alignment
|
||||
*/
|
||||
.icon:before {
|
||||
vertical-align: -1.5px;
|
||||
}
|
||||
|
||||
/* [tablet portait-]: Hide path */
|
||||
@include break-to-device(tablet portrait) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Buttons
|
||||
*/
|
||||
.button {
|
||||
display: table-cell;
|
||||
vertical-align: top;
|
||||
width: 1%;
|
||||
|
||||
/*
|
||||
* Remove native spacing on button
|
||||
*/
|
||||
button {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
/* Hack [IE]: Remove button offset in active state */
|
||||
&:active:before {
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Button icons
|
||||
*/
|
||||
.icon {
|
||||
display: inline-block;
|
||||
font-size: 24px;
|
||||
padding: 8px;
|
||||
margin: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Hide source and twitter button
|
||||
*/
|
||||
.button-github,
|
||||
.button-twitter {
|
||||
|
||||
/* [mobile landscape-]: Hide button */
|
||||
@include break-to-device(mobile landscape) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Stretch content to remaining space
|
||||
*/
|
||||
.stretch {
|
||||
display: table;
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
|
||||
/*
|
||||
* Set vertical spacing for header
|
||||
*/
|
||||
.header & {
|
||||
padding: 0 20px;
|
||||
|
||||
/* [tablet portait+]: Increase vertical spacing */
|
||||
@include break-from-device(tablet portrait) {
|
||||
padding: 0 24px;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Title with ellipsis on overflow
|
||||
*/
|
||||
.title {
|
||||
display: table-cell;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
/*
|
||||
* Increase header font size
|
||||
*/
|
||||
.header & {
|
||||
font-size: 18px;
|
||||
padding: 13px 0;
|
||||
|
||||
/* [tablet portait+]: Slightly larger typography in header */
|
||||
@include break-from-device(tablet portrait) {
|
||||
font-size: 20px;
|
||||
padding: 12px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Main content
|
||||
*/
|
||||
.main {
|
||||
max-width: 1200px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
58
src/assets/stylesheets/modules/base/_typography.scss
Normal file
58
src/assets/stylesheets/modules/base/_typography.scss
Normal file
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Base typography
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Default font styles
|
||||
*/
|
||||
body, input {
|
||||
font-family: 'Ubuntu', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
font-weight: 400;
|
||||
|
||||
/* Enable font-smoothing in Webkit and FF */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
/*
|
||||
* Use system fonts, if browser doesn't support webfonts
|
||||
*/
|
||||
.no-fontface & {
|
||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Proportional fonts
|
||||
*/
|
||||
pre, code {
|
||||
font-family: 'Ubuntu Mono', 'Courier New', 'Courier', monospace;
|
||||
|
||||
/*
|
||||
* Use system fonts, if browser doesn't support webfonts
|
||||
*/
|
||||
.no-fontface & {
|
||||
font-family: 'Courier New', 'Courier', monospace;
|
||||
}
|
||||
}
|
74
src/assets/stylesheets/modules/drawer/_animation.scss
Normal file
74
src/assets/stylesheets/modules/drawer/_animation.scss
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Drawer animation
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Drawer container
|
||||
*/
|
||||
.drawer {
|
||||
|
||||
/* [tablet landscape-]: Hide menu */
|
||||
@include break-to-device(tablet landscape) {
|
||||
transform: translate3d(-262px, 0, 0);
|
||||
transition: transform .25s cubic-bezier(.4, 0, .2, 1);
|
||||
|
||||
/*
|
||||
* Just hide drawer, if browser doesn't support 3D transforms
|
||||
*/
|
||||
.no-csstransforms3d & {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Expanded drawer
|
||||
*/
|
||||
#toggle-drawer:checked ~ .main &,
|
||||
.toggle-drawer & {
|
||||
transform: translate3d(0, 0, 0);
|
||||
|
||||
/*
|
||||
* Just show drawer, if browser doesn't support 3D transforms
|
||||
*/
|
||||
.no-csstransforms3d & {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Project logo image
|
||||
*/
|
||||
.project .logo img {
|
||||
transition: box-shadow .4s;
|
||||
}
|
||||
|
||||
/*
|
||||
* Repository buttons
|
||||
*/
|
||||
.repo a {
|
||||
transition: box-shadow .4s,
|
||||
opacity .4s;
|
||||
}
|
149
src/assets/stylesheets/modules/drawer/_appearance.scss
Normal file
149
src/assets/stylesheets/modules/drawer/_appearance.scss
Normal file
@ -0,0 +1,149 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Drawer appearance
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Drawer container
|
||||
*/
|
||||
.drawer {
|
||||
|
||||
/* [tablet landscape-]: Light gray background */
|
||||
@include break-to-device(tablet landscape) {
|
||||
background: darken($white, 5%);
|
||||
}
|
||||
|
||||
/*
|
||||
* Color links
|
||||
*/
|
||||
.toc a {
|
||||
|
||||
/*
|
||||
* Current active element
|
||||
*/
|
||||
&.current {
|
||||
color: $primary;
|
||||
}
|
||||
|
||||
/*
|
||||
* Hovered link
|
||||
*/
|
||||
&:hover, &:focus {
|
||||
color: $accent;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Main sections
|
||||
*/
|
||||
.section {
|
||||
color: $black-light;
|
||||
}
|
||||
|
||||
/*
|
||||
* Content wrapper
|
||||
*/
|
||||
.wrapper {
|
||||
|
||||
/* [tablet landscape-]: Light gray background */
|
||||
@include break-to-device(tablet landscape) {
|
||||
background: darken($white, 5%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Project information
|
||||
*/
|
||||
.project {
|
||||
color: $white;
|
||||
|
||||
/* [tablet landscape-]: Add drop shadow */
|
||||
@include break-to-device(tablet landscape) {
|
||||
@include drop-shadow(1);
|
||||
|
||||
background: $primary;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add status bar overlay for iOS web application
|
||||
*/
|
||||
.ios.standalone &:before {
|
||||
background: $black-lightest;
|
||||
}
|
||||
|
||||
/*
|
||||
* Project logo
|
||||
*/
|
||||
.logo img {
|
||||
background: $white;
|
||||
border-radius: 100%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scale logo on hover
|
||||
*/
|
||||
&:hover .logo img,
|
||||
&:focus .logo img {
|
||||
@include drop-shadow(3);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Repository buttons
|
||||
*/
|
||||
.repo a {
|
||||
@include drop-shadow(1);
|
||||
|
||||
background: $accent;
|
||||
color: $white;
|
||||
border-radius: 3px;
|
||||
|
||||
/*
|
||||
* Hovered button
|
||||
*/
|
||||
&:hover, &:focus {
|
||||
@include drop-shadow(3);
|
||||
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
/*
|
||||
* Stars
|
||||
*/
|
||||
.count {
|
||||
background: $black-lighter;
|
||||
color: $white;
|
||||
border-radius: 0px 3px 3px 0px;
|
||||
|
||||
/*
|
||||
* Star bubble
|
||||
*/
|
||||
&:before {
|
||||
border-width: 15px 5px 15px 0;
|
||||
border-color: transparent $black-lighter;
|
||||
border-style: solid;
|
||||
}
|
||||
}
|
||||
}
|
281
src/assets/stylesheets/modules/drawer/_layout.scss
Normal file
281
src/assets/stylesheets/modules/drawer/_layout.scss
Normal file
@ -0,0 +1,281 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Drawer layout
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Drawer container
|
||||
*/
|
||||
.drawer {
|
||||
width: 262px;
|
||||
font-size: 13px;
|
||||
line-height: 1.0em;
|
||||
|
||||
/* [tablet landscape-]: Fixed positioning */
|
||||
@include break-to-device(tablet landscape) {
|
||||
position: fixed;
|
||||
z-index: 5;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* [tablet landscape+]: Inline with content */
|
||||
@include break-from-device(tablet landscape) {
|
||||
position: static;
|
||||
float: left;
|
||||
height: auto;
|
||||
margin-bottom: 96px;
|
||||
padding-top: 80px;
|
||||
}
|
||||
|
||||
/* Hack [iOS]: Mitigate scrolling of parent container on boundaries */
|
||||
.ios & {
|
||||
overflow: scroll;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
/*
|
||||
* Links to articles
|
||||
*/
|
||||
.toc li a {
|
||||
display: block;
|
||||
padding: 14.5px 24px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
/*
|
||||
* Links to chapters inside the current article
|
||||
*/
|
||||
.toc li.anchor a {
|
||||
padding: 10px 24px 10px 48px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Main sections
|
||||
*/
|
||||
.section {
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
padding: 14.5px 24px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scrollable container
|
||||
*/
|
||||
.scrollable {
|
||||
top: 104px;
|
||||
z-index: -1;
|
||||
|
||||
/* [tablet landscape+]: Revert fixed positioning */
|
||||
@include break-from-device(tablet landscape) {
|
||||
position: initial;
|
||||
}
|
||||
|
||||
/*
|
||||
* Leave room for status bar in iOS web application
|
||||
*/
|
||||
.ios.standalone & {
|
||||
|
||||
/* [orientation: portrait]: Account for status bar in portrait mode */
|
||||
@include break-at-orientation(portrait) {
|
||||
top: (104px + 20px);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Content wrapper
|
||||
*/
|
||||
.wrapper {
|
||||
height: auto;
|
||||
min-height: 100%;
|
||||
|
||||
/*
|
||||
* Add spacing at top and bottom of separator
|
||||
*/
|
||||
hr {
|
||||
margin: 12px 0;
|
||||
|
||||
/* [screen+]: Shorten separator */
|
||||
@include break-from-device(screen) {
|
||||
width: 48px;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Add spacing at top and bottom of top level navigation
|
||||
*/
|
||||
.toc {
|
||||
margin: 12px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Project information
|
||||
*/
|
||||
.project {
|
||||
display: block;
|
||||
|
||||
/*
|
||||
* Leave room for status bar in iOS web application
|
||||
*/
|
||||
.ios.standalone & {
|
||||
|
||||
/* [orientation: portrait]: Account for status bar in portrait mode */
|
||||
@include break-at-orientation(portrait) {
|
||||
padding-top: 20px;
|
||||
|
||||
/*
|
||||
* Add status bar overlay
|
||||
*/
|
||||
&:before {
|
||||
content: " ";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 4;
|
||||
width: 100%;
|
||||
height: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Project banner
|
||||
*/
|
||||
.banner {
|
||||
display: table;
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Project logo
|
||||
*/
|
||||
.logo {
|
||||
display: table-cell;
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
|
||||
/*
|
||||
* Project logo image
|
||||
*/
|
||||
img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Project name
|
||||
*/
|
||||
.name {
|
||||
display: table-cell;
|
||||
font-size: 16px;
|
||||
line-height: 1.25em;
|
||||
padding-left: 16px;
|
||||
vertical-align: middle;
|
||||
|
||||
/* [tablet portait+]: Slightly larger project name */
|
||||
@include break-from-device(tablet portrait) {
|
||||
margin: 26px 0 0 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Repository
|
||||
*/
|
||||
.repo {
|
||||
padding: 0 16px;
|
||||
margin: 24px 0;
|
||||
text-align: center;
|
||||
|
||||
/*
|
||||
* Inline buttons
|
||||
*/
|
||||
li {
|
||||
display: inline-block;
|
||||
padding-right: 12px;
|
||||
white-space: nowrap;
|
||||
|
||||
/*
|
||||
* No padding on last button
|
||||
*/
|
||||
&:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Buttons
|
||||
*/
|
||||
a {
|
||||
display: inline-block;
|
||||
padding: 0px 10px 0px 6px;
|
||||
font-size: 12px;
|
||||
line-height: 30px;
|
||||
height: 30px;
|
||||
|
||||
/*
|
||||
* Slightly larger icons
|
||||
*/
|
||||
.icon {
|
||||
font-size: 18px;
|
||||
vertical-align: -3px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Stars
|
||||
*/
|
||||
.count {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
padding: 0px 8px 0 4px;
|
||||
margin: 0 -10px 0 8px;
|
||||
font-size: 12px;
|
||||
|
||||
/*
|
||||
* Star bubble
|
||||
*/
|
||||
&:before {
|
||||
content: " ";
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: -5px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Hide count, in case javascript is not available.
|
||||
*/
|
||||
.no-js & {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
69
src/assets/stylesheets/modules/drawer/_typography.scss
Normal file
69
src/assets/stylesheets/modules/drawer/_typography.scss
Normal file
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Drawer typography
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Drawer container
|
||||
*/
|
||||
.drawer {
|
||||
|
||||
/*
|
||||
* Links to articles
|
||||
*/
|
||||
.toc li a {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/*
|
||||
* Links to chapters inside the current article
|
||||
*/
|
||||
.toc li.anchor a {
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
/*
|
||||
* Main sections
|
||||
*/
|
||||
.section {
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Repository buttons
|
||||
*/
|
||||
.repo a {
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
|
||||
/*
|
||||
* Stars
|
||||
*/
|
||||
.count {
|
||||
text-transform: none;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
134
src/assets/stylesheets/modules/search/_animation.scss
Normal file
134
src/assets/stylesheets/modules/search/_animation.scss
Normal file
@ -0,0 +1,134 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Search animation
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Animate header bar in offset and opacity
|
||||
*/
|
||||
.bar {
|
||||
transform: translate3d(0, 0, 0);
|
||||
transition: opacity .2s cubic-bezier(.75, 0, .25, 1),
|
||||
transform .4s cubic-bezier(.75, 0, .25, 1);
|
||||
|
||||
/*
|
||||
* Active search mode
|
||||
*/
|
||||
#toggle-search:checked ~ .header &,
|
||||
.toggle-search & {
|
||||
transform: translate3d(0, -56px, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Search animations
|
||||
*/
|
||||
&.search {
|
||||
|
||||
/*
|
||||
* Hide reset button by default
|
||||
*/
|
||||
.button-reset {
|
||||
transform: scale(0.5, 0.5);
|
||||
transition: opacity .4s cubic-bezier(.1, .7, .1, 1),
|
||||
transform .4s cubic-bezier(.1, .7, .1, 1);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Show reset button if search is not empty
|
||||
*/
|
||||
&.non-empty .button-reset {
|
||||
transform: scale(1.0, 1.0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Search results
|
||||
*/
|
||||
.results {
|
||||
transition: opacity .3s .1s,
|
||||
width .0s .4s,
|
||||
height .0s .4s;
|
||||
|
||||
/*
|
||||
* Active search mode
|
||||
*/
|
||||
#toggle-search:checked ~ .main &,
|
||||
.toggle-search & {
|
||||
transition: opacity .4s,
|
||||
width .0s,
|
||||
height .0s;
|
||||
}
|
||||
|
||||
/*
|
||||
* Search result item link
|
||||
*/
|
||||
.list a {
|
||||
transition: background .25s;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Just hide and show bars, if browser doesn't support 3D transforms
|
||||
*/
|
||||
.no-csstransforms3d {
|
||||
|
||||
/*
|
||||
* Show default bar
|
||||
*/
|
||||
.bar.default {
|
||||
display: table;
|
||||
}
|
||||
|
||||
/*
|
||||
* Hide search bar
|
||||
*/
|
||||
.bar.search {
|
||||
display: none;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Active search mode
|
||||
*/
|
||||
#toggle-search:checked ~ .header,
|
||||
.toggle-search {
|
||||
|
||||
/*
|
||||
* Hide default bar
|
||||
*/
|
||||
.bar.default {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* Show search bar
|
||||
*/
|
||||
.bar.search {
|
||||
display: table;
|
||||
}
|
||||
}
|
||||
}
|
139
src/assets/stylesheets/modules/search/_appearance.scss
Normal file
139
src/assets/stylesheets/modules/search/_appearance.scss
Normal file
@ -0,0 +1,139 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Search appearance
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Search bar
|
||||
*/
|
||||
.bar.search {
|
||||
opacity: 0;
|
||||
|
||||
/*
|
||||
* Search input
|
||||
*/
|
||||
.query {
|
||||
background: transparent;
|
||||
color: $black;
|
||||
|
||||
/*
|
||||
* Search input placeholder
|
||||
*/
|
||||
@include placeholder {
|
||||
color: $black-lighter;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Pushed/clicked icon
|
||||
*/
|
||||
.button .icon:active {
|
||||
background: $black-lightest;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Search results
|
||||
*/
|
||||
.results {
|
||||
@include drop-shadow(2);
|
||||
|
||||
background: $white;
|
||||
color: $black;
|
||||
opacity: 0;
|
||||
|
||||
/*
|
||||
* Active search mode
|
||||
*/
|
||||
#toggle-search:checked ~ .main &,
|
||||
.toggle-search & {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Search meta data
|
||||
*/
|
||||
.meta {
|
||||
background: $primary;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
/*
|
||||
* Search result item link
|
||||
*/
|
||||
.list a {
|
||||
border-bottom: 1px solid $black-lightest;
|
||||
|
||||
/*
|
||||
* Remove border on last element
|
||||
*/
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* Active item link
|
||||
*/
|
||||
&:active {
|
||||
background: $black-lightest;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Article link
|
||||
*/
|
||||
.result span {
|
||||
color: $black-light;
|
||||
}
|
||||
|
||||
/*
|
||||
* Active search bar
|
||||
*/
|
||||
#toggle-search:checked ~ .header,
|
||||
.toggle-search .header {
|
||||
background: $white;
|
||||
color: $black-light;
|
||||
|
||||
/*
|
||||
* Add darker status bar overlay in search mode
|
||||
*/
|
||||
&:before {
|
||||
background: $black-light;
|
||||
}
|
||||
|
||||
/*
|
||||
* Fade out default header bar
|
||||
*/
|
||||
.bar.default {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Fade in search header bar
|
||||
*/
|
||||
.bar.search {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
219
src/assets/stylesheets/modules/search/_layout.scss
Normal file
219
src/assets/stylesheets/modules/search/_layout.scss
Normal file
@ -0,0 +1,219 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Search layout
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Search bar
|
||||
*/
|
||||
.bar.search {
|
||||
margin-top: 8px;
|
||||
|
||||
/*
|
||||
* Search input
|
||||
*/
|
||||
.query {
|
||||
font-size: 18px;
|
||||
padding: 13px 0;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
height: 48px;
|
||||
|
||||
/* [tablet portait+]: Slightly larger typo */
|
||||
@include break-from-device(tablet portrait) {
|
||||
font-size: 20px;
|
||||
padding: 12px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Search results
|
||||
*/
|
||||
.results {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 0;
|
||||
z-index: 2;
|
||||
overflow: scroll;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
|
||||
/* [tablet landscape+]: Limit results to five entries */
|
||||
@include break-from-device(tablet landscape) {
|
||||
top: 64px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scrollable container
|
||||
*/
|
||||
.scrollable {
|
||||
top: 56px;
|
||||
|
||||
/* [tablet portait+]: Increase vertical spacing */
|
||||
@include break-from-device(tablet portrait) {
|
||||
top: 64px;
|
||||
}
|
||||
|
||||
/* [tablet landscape+]: Limit results to five entries */
|
||||
@include break-from-device(tablet landscape) {
|
||||
position: initial;
|
||||
bottom: auto;
|
||||
max-height: 413px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Leave room for status bar in iOS web application
|
||||
*/
|
||||
.ios.standalone & {
|
||||
|
||||
/* [orientation: portrait]: Account for status bar in portrait mode */
|
||||
@include break-at-orientation(portrait) {
|
||||
top: (56px + 20px);
|
||||
|
||||
/* [tablet portait+]: Increase vertical spacing */
|
||||
@include break-from-device(tablet portrait) {
|
||||
top: (64px + 20px);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Active search mode
|
||||
*/
|
||||
#toggle-search:checked ~ .main &,
|
||||
.toggle-search & {
|
||||
width: 100%;
|
||||
|
||||
/* Hack [Firefox]: div doesn't collapse, unless this is applied */
|
||||
overflow-y: visible;
|
||||
|
||||
/* [tablet portait+]: Stretch to viewport */
|
||||
@include break-to-device(tablet landscape) {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Search meta data
|
||||
*/
|
||||
.meta {
|
||||
font-weight: 700;
|
||||
|
||||
/*
|
||||
* Number of results
|
||||
*/
|
||||
strong {
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
max-width: 1200px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding: 16px;
|
||||
|
||||
/* [tablet portait+]: Increase vertical spacing */
|
||||
@include break-from-device(tablet portrait) {
|
||||
padding: 16px 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Search result item link
|
||||
*/
|
||||
.list a {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Search result item
|
||||
*/
|
||||
.result {
|
||||
max-width: 1200px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding: 12px 16px 16px;
|
||||
|
||||
/* [tablet portait+]: Increase vertical spacing */
|
||||
@include break-from-device(tablet portrait) {
|
||||
padding: 16px 24px 20px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Article title
|
||||
*/
|
||||
h1 {
|
||||
line-height: 24px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/*
|
||||
* Article link
|
||||
*/
|
||||
span {
|
||||
font-size: 12px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Prevent flickering on scroll in IE9
|
||||
*/
|
||||
.ie9 {
|
||||
|
||||
/*
|
||||
* Hide search results
|
||||
*/
|
||||
.results {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* Active search mode
|
||||
*/
|
||||
#toggle-search:checked ~ .main,
|
||||
.toggle-search {
|
||||
|
||||
/*
|
||||
* Show search results
|
||||
*/
|
||||
.results {
|
||||
display: block;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/*
|
||||
* Article and footer may shine through, so make them invisible
|
||||
*/
|
||||
.article, .footer {
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
}
|
29
src/assets/stylesheets/modules/search/_typography.scss
Normal file
29
src/assets/stylesheets/modules/search/_typography.scss
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Search meta data
|
||||
*/
|
||||
.meta {
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
}
|
176
src/views/base.html
Normal file
176
src/views/base.html
Normal file
@ -0,0 +1,176 @@
|
||||
<!DOCTYPE html>
|
||||
<!--[if lt IE 7 ]> <html class="no-js ie6"> <![endif]-->
|
||||
<!--[if IE 7 ]> <html class="no-js ie7"> <![endif]-->
|
||||
<!--[if IE 8 ]> <html class="no-js ie8"> <![endif]-->
|
||||
<!--[if IE 9 ]> <html class="no-js ie9"> <![endif]-->
|
||||
<!--[if (gt IE 9)|!(IE)]><!--> <html class="no-js"> <!--<![endif]-->
|
||||
<head>
|
||||
|
||||
<!-- Charset and viewport -->
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,
|
||||
user-scalable=no, initial-scale=1, maximum-scale=1" />
|
||||
|
||||
<!-- General meta tags -->
|
||||
{% block htmltitle %}
|
||||
|
||||
<!-- Site title -->
|
||||
{% if page_title %}
|
||||
<title>{{ page_title }} - {{ site_name }}</title>
|
||||
{% else %}
|
||||
<title>{{ site_name }}</title>
|
||||
{% endif %}
|
||||
|
||||
<!-- Site description -->
|
||||
{% if page_description %}
|
||||
<meta name="description" content="{{ page_description }}" />
|
||||
{% endif %}
|
||||
|
||||
<!-- Canonical -->
|
||||
{% if canonical_url %}
|
||||
<link rel="canonical" href="{{ canonical_url }}" />
|
||||
{% endif %}
|
||||
|
||||
<!-- Author -->
|
||||
{% if site_author %}
|
||||
<meta name="author" content="{{ site_author }}" />
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
<!-- Web application capability on iOS -->
|
||||
<meta name="apple-mobile-web-app-title" content="{{ site_name }}" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style"
|
||||
content="black-translucent" />
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/png"
|
||||
href="{{ base_url }}/assets/images/favicon-32x32.png" sizes="32x32" />
|
||||
<link rel="icon" type="image/png"
|
||||
href="{{ base_url }}/assets/images/favicon-16x16.png" sizes="16x16" />
|
||||
|
||||
<!-- Webfonts -->
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="https://fonts.googleapis.com/css?family=Ubuntu:300,400,700" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="https://fonts.googleapis.com/css?family=Ubuntu+Mono" />
|
||||
|
||||
<!-- Theme-related and custom stylesheets -->
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="{{ base_url }}/assets/stylesheets/application.css" />
|
||||
{% for path in extra_css %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ path }}" />
|
||||
{% endfor %}
|
||||
|
||||
<!-- Custom header -->
|
||||
{% block extrahead %}{% endblock %}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Backdrop -->
|
||||
<div class="backdrop">
|
||||
<div class="backdrop-paper"></div>
|
||||
</div>
|
||||
|
||||
<!-- State toggles -->
|
||||
<input class="toggle" type="checkbox" id="toggle-drawer" />
|
||||
<input class="toggle" type="checkbox" id="toggle-search" />
|
||||
|
||||
<!-- Overlay for expanded drawer -->
|
||||
<label class="toggle-button overlay" for="toggle-drawer"></label>
|
||||
|
||||
<!-- Header -->
|
||||
<header class="header">
|
||||
{% include "header.html" %}
|
||||
</header>
|
||||
|
||||
<!-- Main content -->
|
||||
<main class="main">
|
||||
|
||||
<!-- Drawer with navigation -->
|
||||
<div class="drawer">
|
||||
{% include "drawer.html" %}
|
||||
</div>
|
||||
|
||||
<!-- Article -->
|
||||
<article class="article">
|
||||
<div class="wrapper">
|
||||
|
||||
<!-- Headline -->
|
||||
{% if page_title %}
|
||||
<h1>{{ page_title }}</h1>
|
||||
{% else %}
|
||||
<h1>{{ site_name }}</h1>
|
||||
{% endif %}
|
||||
<hr />
|
||||
|
||||
<!-- Article content -->
|
||||
{{ content }}
|
||||
|
||||
<!-- Copyright and theme information -->
|
||||
<aside class="copyright" role="note">
|
||||
{% if copyright %}
|
||||
{{ copyright }} –
|
||||
{% endif %}
|
||||
Documentation built with
|
||||
<a href="http://www.mkdocs.org" target="_blank">MkDocs</a>
|
||||
using the
|
||||
<a href="https://github.com/squidfunk/materialize"
|
||||
target="_blank">
|
||||
Materialize
|
||||
</a>
|
||||
theme.
|
||||
</aside>
|
||||
|
||||
<!-- Footer -->
|
||||
{% block footer %}
|
||||
<footer class="footer">
|
||||
{% include "footer.html" %}
|
||||
</footer>
|
||||
{% endblock %}
|
||||
</article>
|
||||
</div>
|
||||
|
||||
<!-- Search results -->
|
||||
<div class="results" role="status" aria-live="polite">
|
||||
<div class="scrollable">
|
||||
<div class="wrapper">
|
||||
<div class="meta"></div>
|
||||
<div class="list"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Modernizr -->
|
||||
<script src="{{ base_url }}/assets/javascripts/modernizr.js"></script>
|
||||
|
||||
<!-- Theme-related and custom javascripts -->
|
||||
{% set repo_id = repo_url | replace('https://github.com/', '') %}
|
||||
<script>
|
||||
var base_url = '{{ base_url }}';
|
||||
var repo_id = '{{ repo_id }}';
|
||||
</script>
|
||||
<script src="{{ base_url }}/assets/javascripts/application.js"></script>
|
||||
{% for path in extra_javascript %}
|
||||
<script src="{{ path }}"></script>
|
||||
{% endfor %}
|
||||
|
||||
<!-- Google Analytics -->
|
||||
{% if google_analytics %}
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){
|
||||
i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||
|
||||
[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;
|
||||
m.parentNode.insertBefore(a,m)
|
||||
})(window, document,
|
||||
'script', '//www.google-analytics.com/analytics.js','ga');
|
||||
|
||||
ga('create', '{{ google_analytics[0] }}', '{{ google_analytics[1] }}');
|
||||
ga('set', 'anonymizeIp', true);
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
{% endif %}
|
||||
</body>
|
||||
</html>
|
81
src/views/drawer.html
Normal file
81
src/views/drawer.html
Normal file
@ -0,0 +1,81 @@
|
||||
<!-- Navigation -->
|
||||
<nav aria-label="navigation">
|
||||
|
||||
<!-- Project information -->
|
||||
<a href="/" class="project">
|
||||
|
||||
<!-- Name and logo -->
|
||||
<div class="banner">
|
||||
<div class="logo"></div>
|
||||
<div class="name">
|
||||
{{ site_name }}
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<!-- Repository and table of contents -->
|
||||
<div class="scrollable">
|
||||
<div class="wrapper">
|
||||
|
||||
<!-- Repository -->
|
||||
{% if repo_name == 'GitHub' %}
|
||||
{% set repo_id = repo_url | replace('https://github.com/', '') %}
|
||||
<ul class="repo">
|
||||
<li class="repo-download">
|
||||
<a href="https://github.com/{{ repo_id }}/archive/master.zip"
|
||||
target="_blank" aria-label="Download {{ repo_id }} on GitHub">
|
||||
<i class="icon icon-download"></i> Download
|
||||
</a>
|
||||
</li>
|
||||
<li class="repo-stars">
|
||||
<a href="https://github.com/{{ repo_id }}"
|
||||
target="_blank" aria-label="Star {{ repo_id }} on GitHub">
|
||||
<i class="icon icon-star"></i> Star
|
||||
<span class="count">–</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<hr />
|
||||
{% endif %}
|
||||
|
||||
<!-- Table of contents -->
|
||||
<ul class="toc">
|
||||
{% for nav_item in nav %}
|
||||
{% include "toc.html" %}
|
||||
{% endfor %}
|
||||
|
||||
<!-- Author-related links -->
|
||||
{% if config.extra.author.twitter or config.extra.author.github %}
|
||||
<li>
|
||||
<hr />
|
||||
<span class="section">The author</span>
|
||||
<ul>
|
||||
|
||||
<!-- Twitter -->
|
||||
{% if config.extra.author.twitter %}
|
||||
<li>
|
||||
<a href="https://twitter.com/{{ config.extra.author.twitter }}"
|
||||
title="@{{ config.extra.author.twitter }} on Twitter"
|
||||
target="_blank">
|
||||
@{{ config.extra.author.twitter }} on Twitter
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<!-- GitHub -->
|
||||
{% if config.extra.author.github %}
|
||||
<li>
|
||||
<a href="https://github.com/{{ config.extra.author.github }}"
|
||||
title="@{{ config.extra.author.twitter }} on GitHub"
|
||||
target="_blank">
|
||||
@{{ config.extra.author.github }} on GitHub
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
44
src/views/footer.html
Normal file
44
src/views/footer.html
Normal file
@ -0,0 +1,44 @@
|
||||
<!-- Previous and next page -->
|
||||
{% if include_next_prev %}
|
||||
<nav class="pagination" aria-label="footer navigation">
|
||||
|
||||
<!-- Previous page -->
|
||||
<div class="previous">
|
||||
{% if previous_page %}
|
||||
<a href="{{ previous_page.url }}" title="{{ previous_page.title }}">
|
||||
<span class="direction">Previous</span>
|
||||
<div class="page">
|
||||
<div class="button button-previous"
|
||||
role="button" aria-label="Previous">
|
||||
<i class="icon icon-back"></i>
|
||||
</div>
|
||||
<div class="stretch">
|
||||
<div class="title">
|
||||
{{ previous_page.title }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- Next page -->
|
||||
<div class="next">
|
||||
{% if next_page %}
|
||||
<a href="{{ next_page.url }}" title="{{ next_page.title }}">
|
||||
<span class="direction">Next</span>
|
||||
<div class="page">
|
||||
<div class="stretch">
|
||||
<div class="title">
|
||||
{{ next_page.title }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="button button-next" role="button" aria-label="Next">
|
||||
<i class="icon icon-forward"></i>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</nav>
|
||||
{% endif %}
|
86
src/views/header.html
Normal file
86
src/views/header.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!-- Top-level navigation -->
|
||||
<nav aria-label="top navigation">
|
||||
|
||||
<!-- Default bar -->
|
||||
<div class="bar default">
|
||||
|
||||
<!-- Toggle drawer -->
|
||||
<div class="button button-menu" role="button" aria-label="Menu">
|
||||
<label class="toggle-button icon icon-menu" for="toggle-drawer">
|
||||
<span></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<!-- Page title -->
|
||||
<div class="stretch">
|
||||
<div class="title">
|
||||
{% if current_page %}
|
||||
<span class="path">
|
||||
{% for doc in current_page.ancestors %}
|
||||
{% if doc.link %}
|
||||
<a href="{{ doc.link | e }}">{{ doc.title }}</a>
|
||||
<i class="icon icon-link"></i>
|
||||
{% else %}
|
||||
{{ doc.title }} <i class="icon icon-link"></i>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</span>
|
||||
{% endif %}
|
||||
{% if page_title %}
|
||||
{{ page_title }}
|
||||
{% else %}
|
||||
{{ site_name }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Twitter -->
|
||||
{% if config.extra.author.twitter %}
|
||||
<div class="button button-twitter" role="button" aria-label="Twitter">
|
||||
<a href="https://twitter.com/{{ config.extra.author.twitter }}"
|
||||
title="@{{ config.extra.author.twitter }} on Twitter" target="_blank"
|
||||
class="toggle-button icon icon-twitter"></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<!-- GitHub -->
|
||||
{% if config.extra.author.github %}
|
||||
<div class="button button-github" role="button" aria-label="GitHub">
|
||||
<a href="https://github.com/{{ config.extra.author.github }}"
|
||||
title="@{{ config.extra.author.github }} on GitHub" target="_blank"
|
||||
class="toggle-button icon icon-github"></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<!-- Open search -->
|
||||
<div class="button button-search" role="button" aria-label="Search">
|
||||
<label class="toggle-button icon icon-search" title="Search"
|
||||
for="toggle-search"></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Search bar -->
|
||||
<div class="bar search">
|
||||
|
||||
<!-- Close search -->
|
||||
<div class="button button-close" role="button" aria-label="Close">
|
||||
<label class="toggle-button icon icon-back"
|
||||
for="toggle-search"></label>
|
||||
</div>
|
||||
|
||||
<!-- Search form -->
|
||||
<div class="stretch">
|
||||
<div class="field">
|
||||
<input class="query" type="text" placeholder="Search"
|
||||
autocapitalize="off" autocorrect="off" autocomplete="off"
|
||||
spellcheck="false" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Empty search -->
|
||||
<div class="button button-reset" role="button" aria-label="Search">
|
||||
<button class="toggle-button icon icon-close"
|
||||
id="reset-search"></button>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
37
src/views/toc.html
Normal file
37
src/views/toc.html
Normal file
@ -0,0 +1,37 @@
|
||||
<!-- Render sections -->
|
||||
{% if nav_item.children %}
|
||||
<li>
|
||||
<hr />
|
||||
<span class="section">{{ nav_item.title }}</span>
|
||||
<ul>
|
||||
|
||||
<!-- Render links of section -->
|
||||
{% for nav_item in nav_item.children %}
|
||||
{% include 'toc.html' %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<!-- Render link -->
|
||||
{% else %}
|
||||
<li>
|
||||
<a class="{% if nav_item.active %}current{% endif %}"
|
||||
title="{{ nav_item.title }}" href="{{ nav_item.url }}" >
|
||||
{{ nav_item.title }}
|
||||
</a>
|
||||
|
||||
<!-- Expand active pages -->
|
||||
{% if nav_item == current_page %}
|
||||
<ul>
|
||||
{% for toc_item in toc %}
|
||||
<li class="anchor">
|
||||
<a class="{% if loop.first %}current{% endif %}"
|
||||
title="{{ toc_item.title }}" href="{{ toc_item.url }}">
|
||||
{{ toc_item.title }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endif %}
|
Loading…
Reference in New Issue
Block a user