diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 09637914e..000000000 --- a/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -.DS_Store -.metalsmith/build -npm-debug.log -node_modules -/.agignore -secret_config.json -*.pem diff --git a/.metalsmith/README.md b/.metalsmith/README.md deleted file mode 100644 index b26f7d9de..000000000 --- a/.metalsmith/README.md +++ /dev/null @@ -1,98 +0,0 @@ - -# KDLearn Development - -KDLearn is a series of Markdown files which are compiled to HTML. This -compiling is handled by code found within this directory. - -## Content First - -Note that KDLearn's project structure is **content first**. This means that -when someone visits the repo, they immediately see the content and know how to -write it. They don't have to learn our implementation or even have a clue how -to compile it. They only have to know Markdown. - -So, if you're looking to contribute features to KDLearn, make sure that -implementation stays entirely within this directory. This includes all SASS, -layout images, javascript, etc. - -## Installation - -A global installation of `gulp`, and varying node packages are required. From -the `kdlearn` directory, type the following: - -``` -npm install -g gulp -cd .metalsmith -npm install -``` - -## Building - -With Gulp installed, simply run the following command, to compile the entire -project into HTML. - -``` -cd .metalsmith -gulp -``` - -The `./build` directory will contain all of the compiled html, css, and any -static resources *(such as images/etc)* from the markdown directory. - -## Previewing - -If you want to preview the compiled site, open a new Koding Terminal tab and -run the following: - -``` -cd .metalsmith -gulp preview -``` - -This will run a small HTTP Server on Port `8000`, ie: `http://you.kd.io:8000`. - -Keep this tab open, and in a **different** Koding Terminal tab run your `gulp` -command from above. Each time you compile the site, this will show your -compiled site. - - -## Compiling as you type - -To have your Markdown compiled as you write your documents, run the following -commands: - -``` -cd .metalsmith -gulp watch -``` - -This, in combination with the preview command above, will compile the site each -time you change the Markdown. - -Of course, you can skip the `cd` command if you're already in the source -directory. - -## Troubleshooting - -### Error: No local gulp install found in kdlearn - -The `gulp` command needs to be run from the `kdlearn/.metalsmith` directory. -Assuming that you're in the `kdlearn` directory, navigate into the -`.metalsmith` directory with the following command: - -``` -cd .metalsmith -``` - -### Missing Installation Packages - -If you failed to install the dependencies, or if the **dependencies have -changed**, your `gulp` command may fail with verbose and confusing errors. -There's no telling what the errors will say, because there is no telling what -exactly will be missing when you see it. - -Regardless, if you're running into weird errors, try simply installing the -dependencies again. If you're up to date, nothing will be installed. If you're -missing something, it will be installed. See the [installation -instructions](#installation) above for instructions. - diff --git a/.metalsmith/client/animations.coffee b/.metalsmith/client/animations.coffee deleted file mode 100644 index 72eb43cd5..000000000 --- a/.metalsmith/client/animations.coffee +++ /dev/null @@ -1,140 +0,0 @@ -# -# # General Animations -# -# General animation logic. -# - - - - -# ## Animate -# -# Add classes to the supplied element, and remove them after the -# animation is done. -animate = (jqo, classes, opts={}) -> - # The end classes are used by jquery to detect when the animation - # has ended. - animEndedClasses = 'webkitAnimationEnd mozAnimationEnd - MSAnimationEnd oanimationend animationend' - - # First up, add the animation classes. - jqo.addClass classes - - # If the animation needs to set the display property to a visible - # (not-none) value, we set it right away so that the animations - # are visible. Note that the caller should be assigning a - # css class above that sets the position/alpha/etc of the element - # properly before setting to display. - if opts.display? and opts.display != 'none' - jqo.css 'display', opts.display - - # Add a callback for when the animations end, once. - jqo.one animEndedClasses, -> - jqo.css 'display', opts.display if opts.display? - jqo.removeClass classes - - -# ## Share Animations -# -# Set the share button to animate the sharebuttons in or out. -setupShareAnimations = -> - shareBtns = jQuery '#share-buttons' - - # The visiblity/display usage here is due to two things. - # 1. We want the element hidden on page load. - # 2. The share javascript has issues if the element is set to - # display-none in the source html. So, we're setting it to *hidden* - # with the page style, and then when this JS loads we set it to - # display-none. This way the share-js works properly, and the - # user still doesn't see a flash of the share buttons. - shareBtns.css 'visibility', 'inherit' - shareBtns.css 'display', 'none' - - jQuery('#share').click (e) -> - e.preventDefault() - switch shareBtns.css 'display' - when 'block' - animate shareBtns, 'animated fadeOutUp', - display: 'none' - else - animate shareBtns, 'animated fadeInDown', - display: 'block' - -# ## Search Animations -# -# Setup the animations for when the top search -# icon (upper right) is clicked. -setupSearchAnimations = -> - jQuery('.topSearchButton').on 'click', -> - jQuery('.topSearchBox').slideToggle() - jQuery('.topSearchBox #topSearch').focus() - -# ## Mobile menu Animations -# -# Setup the animations for when the mobile menu -# is clicked. -setupMenuAnimations = -> - jQuery('#mobile-menu').on 'click', -> - jQuery('.toplinks').slideToggle() - -setupSubmenuAnimations = -> - jQuery('nav #menu > .toplinks > li').hover (-> - jQuery(this).find(".icon").removeClass "fa-angle-down" - jQuery(this).find(".icon").addClass "fa-angle-up" - return - ), -> - jQuery(this).find(".icon").removeClass "fa-angle-up" - jQuery(this).find(".icon").addClass "fa-angle-down" - return - - jQuery(".submenu .column:first-child > span.submenu-item").each (i) -> - jQuery(this).hover (-> - jQuery(".submenu .column:last-child > span.submenu-desc").each (j) -> - if i == j - jQuery(this).css 'display', 'block' - return - return - ), -> - jQuery(".submenu .column:last-child > span.submenu-desc").each (j) -> - if i == j - jQuery(this).css 'display', 'none' - return - return - - countFirst = jQuery('.submenu .column:first-child > span.submenu-item').length; - - jQuery(".submenu .column:nth-child(2) > span.submenu-item").each (i) -> - jQuery(this).hover (-> - jQuery(".submenu .column:last-child > span.submenu-desc").each (j) -> - if countFirst + i == j - jQuery(this).css 'display', 'block' - return - return - ), -> - jQuery(".submenu .column:last-child > span.submenu-desc").each (j) -> - if countFirst + i == j - jQuery(this).css 'display', 'none' - return - return - -setupBackTopAnimations = -> - offset = 250 - duration = 300 - jQuery(window).scroll -> - if jQuery(this).scrollTop() > offset - jQuery('.back-to-top').fadeIn duration - else - jQuery('.back-to-top').fadeOut duration - return - jQuery('.back-to-top').click (event) -> - event.preventDefault() - jQuery('html, body').animate { scrollTop: 0 }, duration - false - -# When jquery is ready, setup our animations. -jQuery(document).ready -> - setupSearchAnimations() - setupShareAnimations() - setupMenuAnimations() - setupSubmenuAnimations() - setupBackTopAnimations() \ No newline at end of file diff --git a/.metalsmith/client/images.coffee b/.metalsmith/client/images.coffee deleted file mode 100644 index 9c02db4e4..000000000 --- a/.metalsmith/client/images.coffee +++ /dev/null @@ -1,30 +0,0 @@ -# -# # Images -# -# Some general images code. -# - - - -setupImages = -> - jQuery ".docs-content img" - .each -> - jQuery this - .fancybox - href: - jQuery this - .attr "src" - maxWidth: 800 - maxHeight: 600 - fitToView: false - width: '70%' - height: '70%' - autoSize: false - closeClick: false - openEffect: 'elastic' - closeEffect: 'none' - helpers: title: type: 'inside' - - -# When jquery is ready, run our setup code. -jQuery(document).ready -> setupImages() diff --git a/.metalsmith/client/linkback.coffee b/.metalsmith/client/linkback.coffee deleted file mode 100644 index 7b4e49c94..000000000 --- a/.metalsmith/client/linkback.coffee +++ /dev/null @@ -1,23 +0,0 @@ -# -# # Linkback -# -# Change the linkback user interactions based on the users logged -# in/out status on Koding. -# - - -jQuery.ready -> - username = jQuery.cookie 'ajs_user_id' - # The cookie value is stored as `"foo"`, so we trim off the quotes - # If it equals `"null"` we set it to null - username = if username is '"null"' then null else username[1...-1] - - # If the username doesn't exist, we display a register message. - if not username? - link = jQuery '.koding-linkback .large a' - link.text 'Register for a free Koding account and try this now' - link.attr 'href', 'https://koding.com/Register?\ - utm_source=KodingUniversity&\ - utm_content=SignupButton&\ - utm_campaign=growth' - # If the user does exist, they see the message set in html. diff --git a/.metalsmith/client/search.coffee b/.metalsmith/client/search.coffee deleted file mode 100644 index 2167ea586..000000000 --- a/.metalsmith/client/search.coffee +++ /dev/null @@ -1,27 +0,0 @@ -# -# # Search -# -# Search related coffee. -# - - - -setupSearch = -> - pathname = jQuery location # Get the browser location - .attr 'pathname' # Extract the pathname from that - .replace /\//g, '' # Remove path ambiguity, /search/ vs /search - - # If we're not on the search page, we don't run. - if pathname isnt 'search' then return - - # Get the search results element, and use tapir to populate it. - jQuery '#search-results' - .tapir - 'host': 'http://ulkk65a182f3.leeolayvar.koding.io:3000/search' - 'token': '543475ab3493cda4d1000001' - 'query_param': 'q' - 'summary_limit': 400 - - - -jQuery(document).ready -> setupSearch() diff --git a/.metalsmith/client/videos.coffee b/.metalsmith/client/videos.coffee deleted file mode 100644 index a4c53c2a7..000000000 --- a/.metalsmith/client/videos.coffee +++ /dev/null @@ -1,31 +0,0 @@ -# -# # Videos -# -# Some general video code. -# - - - -setupVideos = -> - jQuery ".youtube-mini" - .fancybox - beforeShow: -> - slug = jQuery @element - .attr 'slug' - @title = '' + @title + '' - maxWidth: 800 - maxHeight: 600 - fitToView: false - width: '70%' - height: '70%' - autoSize: false - closeClick: false - openEffect: 'elastic' - closeEffect: 'none' - helpers: title: type: 'inside' - - - - -# When jquery is ready, run our setup code. -jQuery(document).ready -> setupVideos() diff --git a/.metalsmith/gulpfile.coffee b/.metalsmith/gulpfile.coffee deleted file mode 100644 index 283629759..000000000 --- a/.metalsmith/gulpfile.coffee +++ /dev/null @@ -1,190 +0,0 @@ -# -# # Gulpfile -# -# The Gulpfile is responsible for compiling our Metalsmith project, -# sass, and any other build processes we may need. It also supports live -# compiling the project, and reloading the code. -# -# Run with `cult`, and see README.md for more usage docs. -# -metal = require './metal' -path = require 'path' -connect = require 'connect' -gulp = require 'gulp' -coffee = require 'gulp-coffee' -concat = require 'gulp-concat' -minifyCss = require 'gulp-minify-css' -minifyHtml = require 'gulp-minify-html' -sass = require 'gulp-sass' -uglify = require 'gulp-uglify' -util = require 'gulp-util' - - - -paths = - code: [ - '!sass/**' - # I had a hard time ignoring node_modules, so instead - # i'm manually adding the dirs i want to watch. - '*' - 'plugins/**' - 'static/**' - 'templates/**' - ] - documents: [ - '!**' - '../**/*.md' - ] - sass: './sass/**/*.scss' - staticDocuments: [ - '!**' - '!../**/*.md' - '../**/*.*' - ] - static: [ - '!static/**/*.coffee' - 'static/**/*' - ] - vendor: - js: 'vendor/js/**/*.js' - css: [ - 'vendor/css/**/*.css' - 'vendor/sass/**/*.scss' - 'vendor/sass/**/*.sass' - ] - - -# ## client:coffee -# -# Compile coffee found in the static dir. -gulp.task 'client:coffee', -> - gulp.src 'client/**/*.coffee' - .pipe coffee() - .pipe uglify() - .pipe concat 'main.js' - .pipe gulp.dest 'build/js' - - -# ## metalsmith -# -# Compile our metalsmith markdown and templates. -gulp.task 'metalsmith', (callback) -> metal callback - - -## metalsmith:minify -# -# Minify html in the build directory. -# -# Note: This is a "hack" until i can find a clear -# metalsmith->gulp pipe solution. When that happens, we'll -# just pipe straight from metalsmith into gulp-minify-html. -gulp.task 'metalsmith:minify', ['metalsmith'] -# DISABLED -# The minify-html module was returning a callstack error. To deal with this -# i am disabling it. -#gulp.task 'metalsmith:minify', ['metalsmith'], -> -# gulp.src 'build/**/*.html' -# .pipe minifyHtml() -# .pipe gulp.dest 'build' - - -# ## preview -# -# Run a small http server pointed at the build directory, to preview -# the compiled pages. -gulp.task 'preview', ['build'], -> - connect() - .use connect.static path.join __dirname, 'build' - .listen 8000 - - -# ## sass -# -# Compile our sass to css in the build dir. -gulp.task 'sass', -> - gulp.src paths.sass - .pipe sass() - .pipe minifyCss() - .pipe gulp.dest 'build/css' - - -# ## static -# -# Copy static assets to build dir. -gulp.task 'static', -> - gulp.src paths.static - .pipe gulp.dest 'build' - - -# ## staticDocuments -# -# Copy static assets to build dir. -gulp.task 'staticDocuments', -> - gulp.src paths.staticDocuments - .pipe gulp.dest 'build' - - -# ## vendor:js -# -# Uglify all of the vendor files and concatenate them into a -# single file. -gulp.task 'vendor:js', -> - gulp.src paths.vendor.js - .pipe uglify() - .pipe concat 'vendor.js' - .pipe gulp.dest 'build/js' - - -# ## vendor:css -# -# Minify all the vendor css and sass. Note that the `sass()` plugin -# only cares about sass files. -gulp.task 'vendor:css', -> - gulp.src paths.vendor.css - .pipe sass() - .pipe minifyCss() - .pipe concat 'vendor.css' - .pipe gulp.dest 'build/css' - - -# ## watch:code -# -# Watch the metalsmith code and reload it when changes are detected. -# Note that this will not reload changes to this Gulpfile. -gulp.task 'watch:code', -> - gulp.watch paths.code, ['coffee', 'static'], -> - util.log 'Code changed, reloading and compiling.' - delete require.cache[path.join __dirname, 'metal.coffee'] - metal = require './metal' - metal() - - -# ## watch:md -# -# Run a web server exposing the files in the build directory, and recompile -# the markdown on change. -gulp.task 'watch:md', ['metalsmith'], -> - gulp.watch paths.documents, ['metalsmith'] - - -# ## watch:sass -# -# Watch sass files for changes, compile on change. -gulp.task 'watch:sass', ['sass'], -> - gulp.watch paths.sass, ['sass'] - - -gulp.task 'client', ['client:coffee'] -gulp.task 'vendor', ['vendor:css', 'vendor:js'] - - -gulp.task 'watch', ['watch:md'] -gulp.task 'watch:all', ['watch:md', 'watch:code', 'watch:sass'] -gulp.task 'build', [ - 'metalsmith:minify' - 'client', 'vendor' - 'sass', - 'static', 'staticDocuments' - ] - -gulp.task 'default', ['build'] diff --git a/.metalsmith/helper b/.metalsmith/helper deleted file mode 100755 index 897939944..000000000 --- a/.metalsmith/helper +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env fish -# -# # Helper -# - - -if test (count $argv) -lt 1 - echo " -Helper command required. See the following command for help - - ./helper help -" -else - switch $argv[1] - case "help" - echo " -Commands: - build # Build kdlearn - deploy # Deploy kdlearn - init # Use once to setup a new repo - preview # Run a server to preview on port 8000 - -Example Deploy: - ./helper build - ./helper deploy -" - exit 0 - - case "build" - cd ./build - and set -l cur_br (git branch | sed -n 's/^\* //p') - and test "$cur_br" = "production" - and git reset --hard HEAD - and git clean -fd - and git pull origin production - and cd .. - and gulp - or begin - set -l err $status - echo "Unknown Error. Exit status: $err, build branch: $cur_br" - exit $err - end - - case "deploy" - cd ./build - and git add . - and git commit -m "updated site" - and git push - or begin - set -l err $status - echo "Unknown Error. Exit status: $err" - exit $err - end - - case "init" - rm -rf ./build - and git clone git@github.com:koding/kdlearn build - and cd ./build - and git checkout production - and cd .. - or begin - set -l err $status - echo "Unknown Error. Exit status: $err" - exit $err - end - - case "preview" - cd ./build - and python -m SimpleHTTPServer - end -end - - -# vim: set filetype=fish: diff --git a/.metalsmith/metal.coffee b/.metalsmith/metal.coffee deleted file mode 100644 index c8c67dd5e..000000000 --- a/.metalsmith/metal.coffee +++ /dev/null @@ -1,242 +0,0 @@ -# -# # Metal -# -# Our metalsmith build code. -# -path = require 'path' -highlightjs = require 'highlight.js' -marked = require 'marked' -metalsmith = require 'metalsmith' -collections = require 'metalsmith-collections' -drafts = require 'metalsmith-drafts' -excerpts = require 'metalsmith-excerpts' -ignore = require 'metalsmith-ignore' -markdown = require 'metalsmith-markdown' -metadata = require 'metalsmith-metadata' -permalinks = require 'metalsmith-permalinks' -templates = require 'metalsmith-templates' -aboutSchema = require './plugins/about-schema' -authors = require './plugins/authors' -autoDate = require './plugins/autodate' -defaultMeta = require './plugins/defaultmeta' -descMeta = require './plugins/descriptionMeta' -paginate = require './plugins/paginate' -paginateTags = require './plugins/paginatetags' -popularApi = require './plugins/popularapi' -moment = require './plugins/moment' -feed = require './plugins/feed' -filename = require './plugins/filename' -newPage = require './plugins/new-page' -recentApi = require './plugins/recentapi' -redirects = require './plugins/redirects' -series = require './plugins/series' -snapshot = require './plugins/snapshot' -tags = require './plugins/tags' -titleify = require './plugins/titleify' -videoScraper = require './plugins/video-scraper' - - -# Configure highlightjs with some language aliases -highlightjs.registerLanguage 'coffee', (hljs) -> - hljs.getLanguage('coffeescript') - - -# Create a renderer instance which we'll use to modify the output of -# the markdown. -markedRenderer = new marked.Renderer() -markedRenderer.heading = (text, level) -> - # var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-'); - # - # return '' + - # text + ''; - link = text.toLowerCase().replace /[^\w]+/g, '-' - " - - - #{text} - - " - -# In our version of blockquote, we're looking for `type:foo` strings -# and styling the blockquote based on that string. -# -# It's also worth noting that we're *only* looking at that string if -# it starts a paragraph on a line of it's own. This is mainly for -# implementation simplicity, but also helps provide a sane way to -# split up the markdown. If you want two blockquotes, add a newline to -# ensure a new paragraph. -markedRenderer.blockquote = (quote) -> - quoteTypes = - "tip": "tip fa fa-check-circle" - "alert": "alert fa fa-exclamation-circle" - - # Blocks is the final list of blockquotes that we're going to return - blocks = [] - # Split the quote based on `

type:`, since we know that is what - # starts any quote types. We can then iterate over it, with the - # knowledge that each item in the array is a potentially blockquote - for block, i in quote.split "

type:" - # If block is empty, skip it. This means that

type: was at - # the beginning of the quote, and we can ignore it - continue if block == "" - typeMatch = false - classes = "" - for quoteType, _classes of quoteTypes - # If the blockquote starts with our type, we found it! - if block.indexOf("#{quoteType}\n") == 0 - typeMatch = true - classes = _classes - # Remove the quoteType\n from the block. Eg, - # `good\nfoo\nbar` becomes `foo\nbar` - block = block[quoteType.length+1...] - # Add back the

that we stole, but ignore the type, since - # we don't want that in the final quote for matches - block = "

" + quoteType + "" + block - # If there was no match for any quoteType, then add back the - #

type: that we stole - # Note that the zero index (0) wasn't actually split on the type, - # so make sure not to add type back. - if not typeMatch and i != 0 then block = "

type:" + block - # Now add our block to the final list - blocks.push " -

- #{block} -
- " - # And finally, return our blocks - blocks.join '\n' - - -# ## build -# -# Build our metalsmith project. Exported as a module. -# -# - callback(err, files): A function which is given an error -# or a list of files when metalsmith is done. -module.exports = build = (callback=->) -> - metalsmith __dirname - .source '..' - .destination 'build' - # Ignore files from ever entering the stream - .ignore ['.agignore', '.gitignore', '.git', '.metalsmith', 'legacy'] - .clean false - # Place before the ignore plugin that removes non-markdown - # from the stream - .use metadata - tagNames: 'categories.yaml' - # Filename creates meta information about the originalFilename. - # originalFilename is needed for linking to github for this file. - .use filename() - # Remove files from the stream - .use ignore [ - '**/*' - '!**/*.md' - ] - .use drafts() - .use markdown - renderer: markedRenderer - langPrefix: '' - highlight: (code, lang) -> - lang = [lang] if lang? - highlightjs.highlightAuto(code, lang).value - .use autoDate() - .use excerpts() - .use titleify() - .use moment() - .use series() - .use collections - faq: - pattern: 'faq/**/*.html' - sortBy: 'importance' - guide: - pattern: 'guides/**/*.html' - sortBy: 'date' - reverse: true - .use defaultMeta - collection: 'faq' - metadata: - improvable: true - template: 'faq.toffee' - .use defaultMeta - collection: 'guide' - metadata: - improvable: true - template: 'page.toffee' - .use tags - metaKey: 'categories' - sort: 'date' - reverse: true - .use videoScraper - collection: 'video' - key: 'videoId' - .use authors() - .use newPage - output: 'index' - metadata: template: 'index.toffee' - .use newPage - output: 'search' - metadata: template: 'search.toffee' - .use newPage - output: '404' - metadata: template: '404.toffee' - .use newPage - output: '404-tag' - metadata: template: '404-tag.toffee' - .use snapshot collection: 'faq' - .use snapshot collection: 'guide' - .use paginateTags - collectionSource: 'tags' - perPage: 10 - output: 'categories' - metadata: template: 'tag.toffee' - .use paginate - collection: 'faq' - limit: 10 - output: 'faq' - metadata: template: 'faqs.toffee' - .use paginate - collection: 'video' - limit: 30 - output: 'videos' - metadata: template: 'videos.toffee' - .use paginate - collection: 'guide' - output: 'guides' - metadata: template: 'guides.toffee' - # Create our redirects - .use redirects() - .use permalinks() - .use filename() - .use aboutSchema() # Add itemprop='about' to the first para - .use descMeta() # Add Description Metatag to each Document - # Adding the scripts array to all the pages, means that you can - # Append the script array with some code, and not worry about the - # execution order. - .use defaultMeta - clone: true - metadata: - scripts: [] - .use feed - collections: ['guide', 'faq'] - output: 'rss.xml' - metadata: template: 'feed.toffee' - # foo - .use feed - collections: ['guide', 'faq'] - output: 'sitemap.xml' - metadata: template: 'sitemap.toffee' - # Exposes /api/recent and all variants - .use recentApi() - # Exposes /api/popular and all variants - .use popularApi() - .use templates 'toffee' - .build callback - - - -# If this file is executed directly, run the build script. -if require.main is module then build() diff --git a/.metalsmith/package.json b/.metalsmith/package.json deleted file mode 100644 index 96a4dca57..000000000 --- a/.metalsmith/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "private": true, - "devDependencies": { - "async": "^0.9.0", - "cheerio": "^0.17.0", - "clone": "^0.1.15", - "coffee-script": "^1.7.1", - "connect": "^2.14.5", - "gulp": "3.6.2", - "gulp-coffee": "^1.4.3", - "gulp-concat": "^2.3.4", - "gulp-minify-css": "^0.3.7", - "gulp-minify-html": "^0.1.4", - "gulp-sass": "^0.7.1", - "gulp-uglify": "^0.3.1", - "gulp-util": "^2.2.14", - "highlight.js": "^8.0.0", - "metalsmith-drafts": "0.0.1", - "js-yaml": "^3.2.2", - "marked": "^0.3.2", - "metalsmith": "https://github.com/leeola/metalsmith/tarball/ignores-support-kdlearn", - "metalsmith-collections": "https://github.com/leeola/metalsmith-collections/tarball/fileName", - "metalsmith-excerpts": "^1.0.0", - "metalsmith-ignore": "^0.1.2", - "metalsmith-markdown": "^0.2.1", - "metalsmith-metadata": "0.0.1", - "metalsmith-permalinks": "^0.3.0", - "metalsmith-templates": "^0.7.0", - "moment": "^2.6.0", - "sanitize-html": "^1.1.5", - "toffee": "^0.1.8" - }, - "dependencies": { - "googleapis": "^1.1.3" - } -} diff --git a/.metalsmith/plugins/about-schema.coffee b/.metalsmith/plugins/about-schema.coffee deleted file mode 100644 index 513a04d6b..000000000 --- a/.metalsmith/plugins/about-schema.coffee +++ /dev/null @@ -1,40 +0,0 @@ -# -# # About Schema -# -# To add the schema to the about, we need to edit the html of the -# compile markdown, and inject an atribute into it. This plugin -# handles that. -# -{extname} = require 'path' -cheerio = require 'cheerio' - - - -# isHtml(file) -# -# Check if the given filename is an html file or not. -isHtml = (filename) -> /\.html?/.test extname filename - - - -module.exports = (opts={}) -> - (files, metalsmith, done) -> - for filename, file of files - continue if not isHtml filename - # This may be subject to too much filtering, hard to say. - # Why? Well, metalsmith-collections has an issue with files - # in multiple collections (at the time of this writing). - continue if file.collection isnt 'guide' - - # Create our jquery like object - $ = cheerio.load file.contents.toString() - about = $('p').first() - - # If there is no

found, move onto the next file. - #continue if not ? - - about.attr('itemprop', 'about') - file.contents = new Buffer $.html() - - # Exit when the loop is done. - done() diff --git a/.metalsmith/plugins/authors.coffee b/.metalsmith/plugins/authors.coffee deleted file mode 100644 index b2d1941b7..000000000 --- a/.metalsmith/plugins/authors.coffee +++ /dev/null @@ -1,58 +0,0 @@ -# -# # Authors -# -# The authors plugin will collect all of the authors and create a new page -# with the author data exposed. -# -each = require('async').eachSeries -newPage = require './new-page' - - - -module.exports = (opts={}) -> - opts.metadata ?= {} - (files, metalsmith, done) -> - authors = {} - - collections = metalsmith.metadata().collections - if not collections? - console.warn "Plugin authors() requires the collections() plugin" - return done() - - for file in collections.guide - if not file.author? then continue - - slug = file.username ? file.author.toLowerCase().replace /\W+/g, '' - - if authors[slug]? - author = authors[slug] - else - author = authors[slug] = - name: file.author - slug: slug - username: file.username - guides: [] - - # Replace the author reference with the useful author object. - file.author = author - delete file.username if file.username? - - author.guides.push file - - # Iterate over the authors, creating each of their pages. - each Object.keys(authors), (slug, next) -> - authorOpts = - output: "authors/#{slug}" - metadata: - author: authors[slug] - template: 'author.toffee' - # See awkward func call explanation below - newPage(authorOpts) files, metalsmith, next - - opts.metadata.authors = authors - opts.metadata.template ?= 'authors.toffee' - opts.output = 'authors' - # The newPage call is a plugin, effectively to Middleware. This means it - # is designed as a function to return a function. So, first we call - # the middleware with opts, then we call the returned function - newPage(opts) files, metalsmith, done diff --git a/.metalsmith/plugins/autodate.coffee b/.metalsmith/plugins/autodate.coffee deleted file mode 100644 index a9daf356d..000000000 --- a/.metalsmith/plugins/autodate.coffee +++ /dev/null @@ -1,28 +0,0 @@ -# -# # Autodate -# -# Automatically apply the Unix modified timestamp into the `date` -# variable if not present. -# - - -### -# @param {Object} opts -# @param {Boolean} opts.replaceAll If true, Replace all of the `date` -# values. If false, add `date` values only if it is null. -# @param {Boolean} opts.trimTime Remove the hours/minutes/etc from time -# values if they exist. This is useful to avoid the exact modified time, -# which might be just seconds ago. -### -module.exports = (opts={}) -> - opts.replaceAll ?= false - opts.trimTime ?= true - (files, metalsmith, done) -> - for _, file of files - if not file.date? or opts.replaceAll is true - file.date = new Date file.stats.mtime - if opts.trimTime is true - file.date.setHours 0,0,0,0 - done() - - diff --git a/.metalsmith/plugins/defaultmeta.coffee b/.metalsmith/plugins/defaultmeta.coffee deleted file mode 100644 index bc8fcf034..000000000 --- a/.metalsmith/plugins/defaultmeta.coffee +++ /dev/null @@ -1,45 +0,0 @@ -# -# # Default Meta -# -clone = require 'clone' - - - - -module.exports = (opts={}) -> - opts.collectionKey ?= 'collections' - opts.clone ?= false - - if not opts.metadata? - throw new Error 'defaultMeta() requires `metadata` value' - - (files, metalsmith, done) -> - metadata = metalsmith.metadata() - - # Get the file list we're going to work on, `targetFiles` - if opts.collection? - # If collection is defined, use the collection as the targetFiles - cols = metadata[opts.collectionKey] - col = cols?[opts.collection] - - if not cols? - console.warn "The collectionKey '#{opts.collectionKey} - is not found in metalsmith metadata." - return done() - - if not col? - console.warn "collection '#{opts.collection}' not found." - return done() - - targetFiles = col - else - # If no collection is defined, use all of the files. - targetFiles = [] - targetFiles.push file for filename, file of files - - # Now that we have our target files, add the new meta - for file in targetFiles - for key,val of opts.metadata - val = clone val if opts.clone - file[key] ?= val - done() diff --git a/.metalsmith/plugins/descriptionMeta.coffee b/.metalsmith/plugins/descriptionMeta.coffee deleted file mode 100644 index cb958a3a6..000000000 --- a/.metalsmith/plugins/descriptionMeta.coffee +++ /dev/null @@ -1,31 +0,0 @@ -# -# # Description Meta -# -# If the guide has not defined a meta description, this plugin will use its -# excerpt. If that doesn't exist, it will use a fallback. -# -{extname} = require 'path' -sanitize = require 'sanitize-html' - - - - -module.exports = (opts={}) -> - opts.default = " - Koding is a feature rich cloud-based development environment complete - with free VMs, an attractive IDE and sudo level terminal access. Your - ideal software development playground! - " - - (files, metalsmith, done) -> - for filename, file of files - continue if file.description? - continue if extname(filename) isnt '.html' - if file.excerpt? - # Excerpts are html, and we don't want that for the description. So - # we're ripping that out manually. - file.description = sanitize file.excerpt, - allowedTags: [] - else - file.description = opts.default - done() diff --git a/.metalsmith/plugins/feed.coffee b/.metalsmith/plugins/feed.coffee deleted file mode 100644 index ac3d0e28c..000000000 --- a/.metalsmith/plugins/feed.coffee +++ /dev/null @@ -1,48 +0,0 @@ -# -# # Create Feed -# -# Create a feed page -# -clone = require 'clone' -sanitizeHtml = require 'sanitize-html' - - - - -module.exports = (opts={}) -> - opts.collections ?= [] - opts.metadata ?= {} - - if opts.collection? then opts.collections.push opts.collection - - if not opts.output? - console.warn 'feed requires output filename' - return done() - - items = [] - - # When given a file, create a RSS Item object. - processItem = (file) -> - items.push - link: file.httplink - guid: file.httplink - pubDate: file.date - author: file.author ? 'Koding' - title: file.title - description: sanitizeHtml file.contents.toString(), - allowedTags: [] - - (files, metalsmith, done) -> - collections = metalsmith.metadata().collections - if files[opts.output]? - console.warn "feed cannot write to file '#{opts.output}', already exists" - return done() - - processItem f for f in collections[c] for c in opts.collections - page = clone opts.metadata - page.items = items - page.contents ?= new Buffer '' - page.mode ?= '0664' - - files[opts.output] = page - done() diff --git a/.metalsmith/plugins/filename.coffee b/.metalsmith/plugins/filename.coffee deleted file mode 100644 index 25dbe18f1..000000000 --- a/.metalsmith/plugins/filename.coffee +++ /dev/null @@ -1,23 +0,0 @@ -# -# # Filename -# -path = require 'path' - - - - -linkify = (p) -> - name = path.basename(p).split('.')[0] - if name is 'index' then path.join '/', path.dirname p - else p - - -module.exports = (opts={}) -> - (files, metalsmith, done) -> - for name,file of files - file.originalFilename ?= name - file.files = files - file.filename = name - file.httplink = linkify name - file.abshttplink = "https://learn.koding.com#{file.httplink}" - done() diff --git a/.metalsmith/plugins/moment.coffee b/.metalsmith/plugins/moment.coffee deleted file mode 100644 index 0dc7e9461..000000000 --- a/.metalsmith/plugins/moment.coffee +++ /dev/null @@ -1,13 +0,0 @@ -# -# # Add Moment.js to Metadata -# -moment = require 'moment' - - - - -module.exports = -> (files, metalsmith, done) -> - data = metalsmith.metadata() - data.moment = moment - metalsmith.metadata data - done() diff --git a/.metalsmith/plugins/new-page.coffee b/.metalsmith/plugins/new-page.coffee deleted file mode 100644 index 837525790..000000000 --- a/.metalsmith/plugins/new-page.coffee +++ /dev/null @@ -1,36 +0,0 @@ -# -# # New Page -# -# Create a new page, and include -# -path = require 'path' -clone = require 'clone' - - - - -module.exports = (opts={}) -> - opts.collections ?= [] - opts.metadata ?= {} - if not opts.output? - return console.warn 'new-page requires output filename' - - if path.extname(opts.output) is '' then opts.output += '.html' - - (files, metalsmith, done) -> - if files[opts.output]? - console.warn "new-page unable to create page '#{opts.output}', - it already exists." - return done() - - collections = metalsmith.metadata().collections - if not collections? - return console.warn 'new-page should be run after collections()' - - page = opts.metadata - page.contents ?= new Buffer('') - page.mode ?= '0664' - page.name = opts.output - - files[opts.output] = page - done() diff --git a/.metalsmith/plugins/paginate.coffee b/.metalsmith/plugins/paginate.coffee deleted file mode 100644 index 61f3e82a3..000000000 --- a/.metalsmith/plugins/paginate.coffee +++ /dev/null @@ -1,96 +0,0 @@ -# -# # Paginate -# -# An early copy of metalsmith-paginate-deux. -# -path = require 'path' -clone = require 'clone' - - - -module.exports = (opts={}) -> - # A hard limit on the total number of items to paginate - opts.limit ?= null - # The number of items to show per page, within the limit / count - opts.perPage ?= 10 - # The start page is the number that the pages will start on. For example, - # - foo, foo-1, foo-2 # startPage of 0 - # - foo, foo-2, foo-3 # startPage of 1 - # - foo, foo-3, foo-4 # startPage of 2 - opts.startPage ?= 1 - opts.metadata ?= {} - opts.collectionSource ?= 'collections' - - if not opts.output? - console.warn 'paginate-deux requires output filename' - return done() - - prettyOutput = (out, index) -> - # In the future we'll support multiple styles of output, such as - # - foo, foo-2, foo-3 - # - foo/index, foo/page2, foo/page3 - # - foo/index, foo/index-2, foo/index-3 - # - foo/index, foo/2/index, foo/3/index - - base = path.basename out, '.html' - dir = path.dirname out - if index is opts.startPage then return path.join dir, base - if base is 'index' - return path.join dir, "page-#{index}" - else - return path.join dir, "#{base}-#{index}" - - (files, metalsmith, done) -> - metadata = metalsmith.metadata() - cols = metadata[opts.collectionSource] - col = cols?[opts.collection] - - if not cols? - console.warn "The collectionSource '#{opts.collectionSource} - is not found in metalsmith metadata." - return done() - - if not col? - console.warn "collection '#{opts.collection}' not found." - return done() - - colCount = col.length - if opts.limit? and opts.limit < colCount then colCount = opts.limit - pageCount = Math.ceil colCount / opts.perPage - - pages = [] - prevPage = null - for pageIndex in [0...pageCount] - colStart = pageIndex * opts.perPage - if pageIndex is pageCount-1 - pageFiles = col[colStart...colCount] - else - pageFiles = col[colStart...colStart+opts.perPage] - - page = clone opts.metadata - page.contents ?= new Buffer('') - page.mode ?= '0664' - page.name = prettyOutput opts.output, pageIndex + opts.startPage - page.paginate = - pages: pages - prev: prevPage - next: null - total: pageCount - current: page - index: pageIndex + opts.startPage - files: pageFiles - pageName = "#{page.name}.html" - pages.push page - - if prevPage? then prevPage.paginate.next = page - prevPage = page - - if files[pageName]? - console.warn "pageinate-deux unable to create page '#{pageName}', - it already exists." - return done() - - files[pageName] = page - - # And finally, call done(). Remember, no async in this plugin. - done() diff --git a/.metalsmith/plugins/paginatetags.coffee b/.metalsmith/plugins/paginatetags.coffee deleted file mode 100644 index 840642953..000000000 --- a/.metalsmith/plugins/paginatetags.coffee +++ /dev/null @@ -1,40 +0,0 @@ -# -# # Paginate Tags -# -# Rather than creating paginates manually on the tags, this plugin -# automatically paginates all tags found. -# -paginate = require './paginate' - - - -module.exports = (opts={}) -> - opts.perPage ?= 10 - opts.collectionSource ?= 'tags' - - (files, metalsmith, done) -> - metadata = metalsmith.metadata() - tags = metadata[opts.collectionSource] - tagNames = metadata.tagNames - - if not tags - console.warn "collectionSource '#{opts.collectionSource}' not found in - paginateTags plugin." - return done() - - tagKeys = Object.keys tags - do next = (index=0) -> - if not tagKeys[index]? then return done() - tagKey = tagKeys[index] - tag = tags[tagKey] - fn = paginate - collection: tagKey - collectionSource: 'tags' - limit: opts.limit - perPage: opts.perPage - output: "#{opts.output}/#{tagKey}" - metadata: - tagKey: tagKey - tagName: tagNames[tagKey] - template: 'tag.toffee' - fn files, metalsmith, -> next ++index diff --git a/.metalsmith/plugins/popularapi.coffee b/.metalsmith/plugins/popularapi.coffee deleted file mode 100644 index a0313e078..000000000 --- a/.metalsmith/plugins/popularapi.coffee +++ /dev/null @@ -1,176 +0,0 @@ -# -# # Recent API -# -# The recent api bakes the following json API endpoints: -# -# /api/popular/.json -# /api/popular//.json -# -# The following arguments are supported: -# -# -# Limited to X guides, where X by default is: -# - 10 -# -# All existing tags -# -# TODO: Unify recentapi & popular api codebases -# -path = require 'path' -google = require 'googleapis' -analytics = google.analytics 'v3' - - - -# Load secrets from the home directory -secrets = require(path.join process.env.HOME, ".kdlearn", "secret_config.json").analytics - - -# Create a new file in the files object. -newFile = (files, uri, content) -> - page = {} - page.output = uri - page.contents = new Buffer content - page.mode = '0664' - files[page.output] = page - null - -# Return an api friendly representation of a file -printableFile = (file, opts={}) -> - opts.baseHttp ?= "http://learn.koding.com/" - file = - title: file.title - url: [opts.baseHttp, file.filename].join "" - author: file.author.name - #author: - # name: file.author.name - # username: file.author.username - date: file.date - -# Return a sort function that sorts two objects by a key. -sortByKey = (sortKey) -> (a,b) -> - return 1 if a[sortKey] < b[sortKey] - return -1 if a[sortKey] > b[sortKey] - return 0 - - -# Query Google Analytics and callback with there response -queryAnalytics = (opts={}, callback) -> - authClient = new google.auth.JWT( - secrets.email, - path.join(process.env.HOME, ".kdlearn", secrets["key-file"]), - secrets.key, - ['https://www.googleapis.com/auth/analytics.readonly'] - ) - - authClient.authorize (err, tokens) -> - # Bail on any errors - if err? then return callback err, tokens - - analytics.data.ga.get - auth: authClient - "ids":"ga:#{secrets.id}", - "start-date":"2015-01-29", - "end-date":"2015-02-12", - "metrics":"ga:pageViews", - "dimensions":"ga:pagePath", - "sort":"-ga:pageViews", - "max-results":"25" - (err, result) -> - if err? then return callback err, result, tokens - callback null, result.rows ? [] - - -# Query Google Analytics for Page Views and add the -# returned values to the files. -addPageViews = (files, opts={}, callback) -> - if typeof opts is 'function' - callback = opts - opts = {} - - queryAnalytics null, (err, rows) -> - if err? - console.log "[Warning] Google Authorization Failed!" - console.log "[Warning] Auth Debug:", arguments - return callback err, rows - - # Convery rows to an object (key/value) for easy lookup - pageViews = {} - for row in rows - [page, views] = row - # Skip if not a /guides/ page - continue if page[0...8] != '/guides/' - page += 'index.html' - pageViews[page] = parseInt(views) - - # Now loop through all files, adding page ranks as they exist, - # and defaulting to zero if they don't. - for filename, file of files - filename = "/#{filename}" if filename[0] != "/" - if pageViews[filename]? - file.pageViews = pageViews[filename] - # If the rows list is especially large, we should probably delete - # the items after use. For now though, not worrying about that. - #delete pageViews[filename] - else - file.pageViews = 0 - callback null - - -addApiFiles = (files, metalsmith, opts={}, callback) -> - metadata = metalsmith.metadata() - # The full list of tags - {tags} = metadata - guides = metadata.collections.guide ? [] - - # Create /api/popular/.json - api = {} - for count in opts.counts - cApi = guides[..] - cApi.sort sortByKey "pageViews" - cApi = api[count] = cApi[0...count] - for guide, i in cApi - cApi[i] = printableFile guide, opts - - # Now add our plain count apis - for count, json of api - newFile files, "api/popular/#{count}.json", - #JSON.stringify json - # Temporarily pretty formatted - JSON.stringify json, null, 2 - - # Create /api/popular//.json - api = {} - for tagName, tGuides of tags - tApi = api[tagName] ?= {} - for count in opts.counts - cApi = tGuides[..] - cApi.sort sortByKey "pageViews" - cApi = tApi[count] = cApi[0...count] - for guide, i in cApi - cApi[i] = printableFile guide, opts - - # Now add the tag api to the files object - for tagName, tApi of api - for count, json of tApi - newFile files, "api/popular/#{tagName}/#{count}.json", - #JSON.stringify json - # Temporarily pretty formatted - JSON.stringify json, null, 2 - - callback() - - -module.exports = (opts={}) -> - opts.counts = [10] - - (files, metalsmith, done) -> - metadata = metalsmith.metadata() - # The full list of tags - {tags} = metadata - guides = metadata.collections.guide ? [] - - addPageViews files, null, (err) -> - if err? then return done() - addApiFiles files, metalsmith, opts, -> done() - diff --git a/.metalsmith/plugins/recentapi.coffee b/.metalsmith/plugins/recentapi.coffee deleted file mode 100644 index 74eb933ec..000000000 --- a/.metalsmith/plugins/recentapi.coffee +++ /dev/null @@ -1,93 +0,0 @@ -# -# # Recent API -# -# The recent api bakes the following json API endpoints: -# -# /api/recent/.json -# /api/recent//.json -# -# The following arguments are supported: -# -# -# Limited to X guides, where X by default is: -# - 10 -# -# All existing tags -# -# TODO: Unify recentapi & popular api codebases -# -path = require 'path' - - - -newFile = (files, uri, content) -> - page = {} - page.output = uri - page.contents = new Buffer content - page.mode = '0664' - files[page.output] = page - null - -printableFile = (file, opts={}) -> - opts.baseHttp ?= "https://learn.koding.com/" - file = - title: file.title - url: [opts.baseHttp, file.filename].join "" - author: file.author.name - #author: - # name: file.author.name - # username: file.author.username - date: file.date - -sortByKey = (sortKey) -> (a,b) -> - return 1 if a[sortKey] < b[sortKey] - return -1 if a[sortKey] > b[sortKey] - return 0 - -module.exports = (opts={}) -> - opts.counts = [10] - - (files, metalsmith, done) -> - metadata = metalsmith.metadata() - # The full list of tags - {tags} = metadata - guides = metadata.collections.guide ? [] - - # Create /api/recent/.json - api = {} - for count in opts.counts - cApi = api[count] ?= [] - for guide in guides - cApi.push printableFile guide, opts - # Sort the cApi list by the recentType key value - cApi.sort sortByKey "date" - api[count] = cApi[0...count] - - # Now add our plain count apis - for count, json of api - newFile files, "api/recent/#{count}.json", - #JSON.stringify json - # Temporarily pretty formatted - JSON.stringify json, null, 2 - - # Create /api/recent//.json - api = {} - for tagName, tFiles of tags - tApi = api[tagName] ?= {} - for count in opts.counts - cApi = tApi[count] ?= [] - for file in tFiles - cApi.push printableFile file, opts - # Sort the cApi list by the recentType key value - cApi.sort sortByKey "date" - tApi[count] = cApi[0...count] - - # Now add the tag api to the files object - for tagName, tApi of api - for count, json of tApi - newFile files, "api/recent/#{tagName}/#{count}.json", - #JSON.stringify json - # Temporarily pretty formatted - JSON.stringify json, null, 2 - - done() diff --git a/.metalsmith/plugins/redirects.coffee b/.metalsmith/plugins/redirects.coffee deleted file mode 100644 index fb0bf7c83..000000000 --- a/.metalsmith/plugins/redirects.coffee +++ /dev/null @@ -1,35 +0,0 @@ -# -# # Redirect -# -# A plugin to create pages based off of a template and source json -# file. -# -fs = require 'fs' -yaml = require 'js-yaml' -newPage = require './new-page' - - - - -module.exports = (opts={}) -> - opts.redirects ?= '../redirects.yaml' - opts.template ?= 'redirect.toffee' - - redirects = yaml.safeLoad fs.readFileSync opts.redirects, 'utf8' - - (files, metalsmith, done) -> - redirectKeys = Object.keys redirects - do next = -> - rSource = redirectKeys.pop() - if not rSource? then return done() - rDestination = redirects[rSource] - - output = if rSource[0] is '/' then rSource[1..] else rSource - pageOpts = - output: output - metadata: - template: opts.template - source: rSource - destination: rDestination - newPage(pageOpts) files, metalsmith, next - diff --git a/.metalsmith/plugins/series.coffee b/.metalsmith/plugins/series.coffee deleted file mode 100644 index ba7a6624f..000000000 --- a/.metalsmith/plugins/series.coffee +++ /dev/null @@ -1,70 +0,0 @@ -# -# # Series -# -# The plugin responsible for chaining multiple guides marked as Series -# together. -# - - - - -module.exports = (opts={}) -> - opts.prependSeriesTitle ?= true - - (files, metalsmith, done) -> - metadata = metalsmith.metadata() - metadata.series ?= {} - #if metalsmith.metadata().collections? - # return console.warn 'The series plugin must be - # placed before the collections plugin.' - - # First, go through and add all files with a `series` metaattr to the list - # of pages for that series. - for filename, file of files - if not file.series? then continue - - if not file['series-index']? - console.warn "File #{filename} of series #{file.series} - is missing the `series-index` metadata. Defaulting to 1" - file['series-index'] = 1 - - # Get the series list, and create it if needed - metadata.series[file.series] ?= [] - series = metadata.series[file.series] - index = file['series-index'] - - # If the index exists, then the user defined two guides with the - # same index. Rather than replace them, we splice the overlap guide - # into the index. If it doesn't exist, we just assign the index - # manually. - # - # This is done to ensure page order for the series, rather than pushing - # then all and then sorting them after. - if series[index]? then series.splice index, 0, file - else series[index] = file - - # Now go through and replace the `series` meta attr for each series page - # with an object for the previous, next, and etc information. - for seriesName, series of metadata.series - prev = null - title = series[0]?.title - for page, index in series - if not page? - console.warn "Error: The Series plugin found a series with - a missing guide. Check the series '#{title}' for a missing - guide at the index of '#{index}'." - throw new Error "Missing Series Guide" - - if opts.prependSeriesTitle is true and index isnt 0 - page.title = "#{title}: #{page.title}" - - page.series = - name: seriesName - pages: series - pageNumber: index - prev: prev - next: null - if prev? then prev.series.next = page - prev = page - - done() diff --git a/.metalsmith/plugins/snapshot.coffee b/.metalsmith/plugins/snapshot.coffee deleted file mode 100644 index 901b11ca5..000000000 --- a/.metalsmith/plugins/snapshot.coffee +++ /dev/null @@ -1,30 +0,0 @@ -# -# # Snapshot Contents -# -# Add a key to a file's metadata which is a copy of the `contents` value -# at that point in time. Files are matched by collection. -# -# ## Why? -# -# The `contents` metadata is intended to be very mutable. Plugins change it, -# such as rendering markdown or running it through a templating language, -# and after that you cannot access the original data. -# - - - - -module.exports = (opts={}) -> - opts.name ?= 'snapshot' - (files, metalsmith, done) -> - if opts.collection? - collections = metalsmith.metadata().collections - if not collections? - return console.warn 'snapshot should be run after collections() - when using the `collection` option.' - snapshots = collections[opts.collection] - else - snapshots = (v for k,v of files) - - snapshot[opts.name] = snapshot.contents for snapshot in snapshots - done() diff --git a/.metalsmith/plugins/tags.coffee b/.metalsmith/plugins/tags.coffee deleted file mode 100644 index 06b45082f..000000000 --- a/.metalsmith/plugins/tags.coffee +++ /dev/null @@ -1,91 +0,0 @@ -# -# # Tags -# -# Take the `tags` metadata and turn it into collection objects. -# -# Two objects are producted with this plugin: -# -# 1. tags -# 2. tagsByUnique -# -# `tags` is a collection where key is the tag name, and the value is -# a list of all files with that tag. -# -# `tagsByUnique` is a collection where key is the tag name, and value -# is a list of files with that tag, **but** each file only shows up -# once in the *entire collection*. -# - - - - -module.exports = (opts={}) -> - opts.metaKey ?= 'tags' - opts.sort ?= 'date' - opts.reverse ?= false - # Unique Limit is the maximum size of a tagsByUnique list. - # Example: - # - # Take a guide like: guide{tags: [nodejs, js]} - # When this guide is added to the tags and tagsByUnique list, if - # the tagsByUnique['nodejs'] list is already at 5 size, but this - # guide is added to that list anyway, then it's that guide will - # not be seen on the rendered page (since the page only displays - # 5 from each unique tag list). With this option however, - # this guide will instead be assigned to the `js` list, if it - # is less than 5. If both lists are larger than 5, well then - # it won't be seen anywhere. - opts.uniqueMax ?= 5 - - (files, metalsmith, done) -> - metadata = metalsmith.metadata() - # The full list of tags - metadata.tags ?= {} - # Only store each file, once. - metadata.tagsByUnique ?= {} - {tags} = metadata - {tagsByUnique} = metadata - - # Go through each file, pulling the tag list from it - for filename, file of files - if not file[opts.metaKey]? then continue - - if not (file[opts.metaKey] instanceof Array) - console.warn "The metadata key #{opts.metaKey} requires a list - of strings but got #{JSON.stringify file[opts.metaKey]} instead." - continue - - uniqueSet = false - for tag, i in file[opts.metaKey] - if typeof tag isnt 'string' - console.warn "The tag '#{tag}' for #{filename} is not a string. - It is being ignored." - continue - tag = tag.toLowerCase() - tag = tag.replace(/\s+/, "-") - tags[tag] ?= [] - tags[tag].push file - # For the tagsByUnique list, only push this file once. - # Note that this also only pushes the first tag - # listed in the file's tag list, which is a good thing. - # Example being, file[nodejs, javascript] will push to - # nodejs first, and not javascript. Allows you to - # prioritize the list. - tagsByUnique[tag] ?= [] - if not uniqueSet and tagsByUnique[tag].length < opts.uniqueMax - tagsByUnique[tag].push file - uniqueSet = true - - for tagName,tag of tags - if typeof opts.sort is 'function' then tag.sort opts.sort - else tag.sort (a, b) -> - a = a[opts.sort] - b = b[opts.sort] - return 0 if not a and not b - return -1 if not a - return 1 if not b - return -1 if b > a - return 1 if a > b - return 0 - if opts.reverse then tag.reverse() - done() diff --git a/.metalsmith/plugins/titleify.coffee b/.metalsmith/plugins/titleify.coffee deleted file mode 100644 index 8bb956f4d..000000000 --- a/.metalsmith/plugins/titleify.coffee +++ /dev/null @@ -1,49 +0,0 @@ -# -# # Titleify -# -# This plugin allows you to omit the title metadata, and populates it with the -# first found h1. -# -{extname} = require 'path' -cheerio = require 'cheerio' - - - - -# isHtml(file) -# -# Check if the given filename is an html file or not. -isHtml = (filename) -> /\.html?/.test extname filename - - - -module.exports = (opts={}) -> - opts.replaceMetaTitle ?= false - opts.removeFromSource ?= true - - (files, metalsmith, done) -> - for filename,file of files - # If it's not an html file, ignore it - if not isHtml filename then continue - - # Create our jquery like object - $ = cheerio.load file.contents.toString() - domTitle = $('h1').first() - - # If there is no h1 found, move onto the next file. - if not domTitle.text()? then continue - - # Set/Replace the file title - if not file.title? or opts.replaceMetaTitle - file.title = domTitle - .text() - .replace(/^\s+/, '') # Trim opening whitespace - .replace(/\s+$/, '') # Trim closing whitespace - - # Remove the source h1, if needed - if opts.removeFromSource - domTitle.remove() - file.contents = new Buffer $.html() - - # And of course, after the loop is done.. go home. - done() diff --git a/.metalsmith/plugins/video-scraper.coffee b/.metalsmith/plugins/video-scraper.coffee deleted file mode 100644 index 3f8995a36..000000000 --- a/.metalsmith/plugins/video-scraper.coffee +++ /dev/null @@ -1,30 +0,0 @@ -# -# # Video Scrape -# -clone = require 'clone' - - - - -module.exports = ({collection, key}) -> - collection ?= 'videos' - key ?= 'videoUrl' - (files, metalsmith, done) -> - collections = metalsmith.metadata().collections - if not collections? - return console.warn 'videoScraper should be run after collections()' - - collections[collection] ?= [] - coll = collections[collection] - - previous = null - for name, file of files - if file[key]? - file = clone file - previous.next = file if previous? - file.previous = previous - file.next = null - previous = file - coll.push file - done() - diff --git a/.metalsmith/sass/_css3.scss b/.metalsmith/sass/_css3.scss deleted file mode 100644 index 01cbf0cd4..000000000 --- a/.metalsmith/sass/_css3.scss +++ /dev/null @@ -1,20 +0,0 @@ -@import "css3/border-radius"; -// @import "css3/inline-block"; -// @import "css3/opacity"; -// @import "css3/box-shadow"; -// @import "css3/text-shadow"; -// @import "css3/columns"; -@import "css3/box-sizing"; -// @import "css3/box"; -// @import "css3/images"; -// @import "css3/background-clip"; -// @import "css3/background-origin"; -// @import "css3/background-size"; -// @import "css3/font-face"; -@import "css3/transform"; -@import "css3/transition"; -// @import "css3/appearance"; -// @import "css3/regions"; -// @import "css3/hyphenation"; -// @import "css3/filter"; -// @import "css3/user-interface"; diff --git a/.metalsmith/sass/_support.scss b/.metalsmith/sass/_support.scss deleted file mode 100644 index 37b6e1729..000000000 --- a/.metalsmith/sass/_support.scss +++ /dev/null @@ -1,40 +0,0 @@ -// Usually compass hacks apply to both ie6 & 7 -- set this to false to disable support for both. -$legacy-support-for-ie: true !default; - -// Setting this to false will result in smaller output, but no support for ie6 hacks -$legacy-support-for-ie6: $legacy-support-for-ie !default; - -// Setting this to false will result in smaller output, but no support for ie7 hacks -$legacy-support-for-ie7: $legacy-support-for-ie !default; - -// Setting this to false will result in smaller output, but no support for legacy ie8 hacks -$legacy-support-for-ie8: $legacy-support-for-ie !default; - -// @private -// The user can simply set $legacy-support-for-ie and 6, 7, and 8 will be set accordingly, -// But in case the user set each of those explicitly, we need to sync the value of -// this combined variable. -$legacy-support-for-ie: $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8; - -// Whether to output legacy support for mozilla. -// Usually this means hacks to support Firefox 3.6 or earlier. -$legacy-support-for-mozilla: true; - -// Support for mozilla in experimental css3 properties (-moz). -$experimental-support-for-mozilla : true !default; -// Support for webkit in experimental css3 properties (-webkit). -$experimental-support-for-webkit : true !default; -// Support for webkit's original (non-standard) gradient syntax. -$support-for-original-webkit-gradients : true !default; -// Support for opera in experimental css3 properties (-o). -$experimental-support-for-opera : true !default; -// Support for microsoft in experimental css3 properties (-ms). -$experimental-support-for-microsoft : true !default; -// Support for khtml in experimental css3 properties (-khtml). -$experimental-support-for-khtml : false !default; -// Support for svg in experimental css3 properties. -// Setting this to true might add significant size to your -// generated stylesheets. -$experimental-support-for-svg : false !default; -// Support for CSS PIE in experimental css3 properties (-pie). -$experimental-support-for-pie : false !default; diff --git a/.metalsmith/sass/css3/_appearance.scss b/.metalsmith/sass/css3/_appearance.scss deleted file mode 100644 index c6e653374..000000000 --- a/.metalsmith/sass/css3/_appearance.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import "shared"; - -// Change the appearance for Mozilla, Webkit and possibly the future. -// The appearance property is currently not present in any newer CSS specification. -// -// There is no official list of accepted values, but you might check these source: -// -// * [Mozilla](https://developer.mozilla.org/en/CSS/-moz-appearance) -// * [Webkit](http://code.google.com/p/webkit-mirror/source/browse/Source/WebCore/css/CSSValueKeywords.in?spec=svnf1aea559dcd025a8946aa7da6e4e8306f5c1b604&r=63c7d1af44430b314233fea342c3ddb2a052e365) -// (search for 'appearance' within the page) - -@mixin appearance($ap) { - $ap: unquote($ap); - @include experimental(appearance, $ap, - -moz, -webkit, not -o, not -ms, not -khtml, official - ); -} diff --git a/.metalsmith/sass/css3/_background-clip.scss b/.metalsmith/sass/css3/_background-clip.scss deleted file mode 100644 index 6ce473f6e..000000000 --- a/.metalsmith/sass/css3/_background-clip.scss +++ /dev/null @@ -1,43 +0,0 @@ -@import "shared"; - -// The default value is `padding-box` -- the box model used by modern browsers. -// -// If you wish to do so, you can override the default constant with `border-box` -// -// To override to the default border-box model, use this code: -// $default-background-clip: border-box - -$default-background-clip: padding-box !default; - -// Clip the background (image and color) at the edge of the padding or border. -// -// Legal Values: -// -// * padding-box -// * border-box -// * text - -@mixin background-clip($clip: $default-background-clip) { - // webkit and mozilla use the deprecated short [border | padding] - $clip: unquote($clip); - $deprecated: $clip; - @if $clip == padding-box { $deprecated: padding; } - @if $clip == border-box { $deprecated: border; } - // Support for webkit and mozilla's use of the deprecated short form - @include experimental(background-clip, $deprecated, - -moz, - -webkit, - not -o, - not -ms, - not -khtml, - not official - ); - @include experimental(background-clip, $clip, - not -moz, - not -webkit, - not -o, - not -ms, - -khtml, - official - ); -} diff --git a/.metalsmith/sass/css3/_background-origin.scss b/.metalsmith/sass/css3/_background-origin.scss deleted file mode 100644 index bc8eaa8aa..000000000 --- a/.metalsmith/sass/css3/_background-origin.scss +++ /dev/null @@ -1,42 +0,0 @@ -// Override `$default-background-origin` to change the default. - -@import "shared"; - -$default-background-origin: content-box !default; - -// Position the background off the edge of the padding, border or content -// -// * Possible values: -// * `padding-box` -// * `border-box` -// * `content-box` -// * browser defaults to `padding-box` -// * mixin defaults to `content-box` - - -@mixin background-origin($origin: $default-background-origin) { - $origin: unquote($origin); - // webkit and mozilla use the deprecated short [border | padding | content] - $deprecated: $origin; - @if $origin == padding-box { $deprecated: padding; } - @if $origin == border-box { $deprecated: border; } - @if $origin == content-box { $deprecated: content; } - - // Support for webkit and mozilla's use of the deprecated short form - @include experimental(background-origin, $deprecated, - -moz, - -webkit, - not -o, - not -ms, - not -khtml, - not official - ); - @include experimental(background-origin, $origin, - not -moz, - not -webkit, - -o, - -ms, - -khtml, - official - ); -} diff --git a/.metalsmith/sass/css3/_background-size.scss b/.metalsmith/sass/css3/_background-size.scss deleted file mode 100644 index 9d3644702..000000000 --- a/.metalsmith/sass/css3/_background-size.scss +++ /dev/null @@ -1,26 +0,0 @@ -@import "shared"; - -// override to change the default -$default-background-size: 100% auto !default; - -// Set the size of background images using px, width and height, or percentages. -// Currently supported in: Opera, Gecko, Webkit. -// -// * percentages are relative to the background-origin (default = padding-box) -// * mixin defaults to: `$default-background-size` -@mixin background-size( - $size-1: $default-background-size, - $size-2: false, - $size-3: false, - $size-4: false, - $size-5: false, - $size-6: false, - $size-7: false, - $size-8: false, - $size-9: false, - $size-10: false -) { - $size-1: if(type-of($size-1) == string, unquote($size-1), $size-1); - $sizes: compact($size-1, $size-2, $size-3, $size-4, $size-5, $size-6, $size-7, $size-8, $size-9, $size-10); - @include experimental(background-size, $sizes, -moz, -webkit, -o, not -ms, not -khtml); -} diff --git a/.metalsmith/sass/css3/_border-radius.scss b/.metalsmith/sass/css3/_border-radius.scss deleted file mode 100644 index 2da902269..000000000 --- a/.metalsmith/sass/css3/_border-radius.scss +++ /dev/null @@ -1,130 +0,0 @@ -@import "shared"; - -$default-border-radius: 5px !default; - -// Round all corners by a specific amount, defaults to value of `$default-border-radius`. -// -// When two values are passed, the first is the horizontal radius -// and the second is the vertical radius. -// -// Note: webkit does not support shorthand syntax for several corners at once. -// So in the case where you pass several values only the first will be passed to webkit. -// -// Examples: -// -// .simple { @include border-radius(4px, 4px); } -// .compound { @include border-radius(2px 5px, 3px 6px); } -// .crazy { @include border-radius(1px 3px 5px 7px, 2px 4px 6px 8px)} -// -// Which generates: -// -// .simple { -// -webkit-border-radius: 4px 4px; -// -moz-border-radius: 4px / 4px; -// -khtml-border-radius: 4px / 4px; -// border-radius: 4px / 4px; } -// -// .compound { -// -webkit-border-radius: 2px 3px; -// -moz-border-radius: 2px 5px / 3px 6px; -// -khtml-border-radius: 2px 5px / 3px 6px; -// border-radius: 2px 5px / 3px 6px; } -// -// .crazy { -// -webkit-border-radius: 1px 2px; -// -moz-border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px; -// -khtml-border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px; -// border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px; } - -@mixin border-radius($radius: $default-border-radius, $vertical-radius: false) { - - @if $vertical-radius { - // Webkit doesn't understand the official shorthand syntax for specifying - // a vertical radius unless so in case there's several we only take the first. - @include experimental(border-radius, first-value-of($radius) first-value-of($vertical-radius), - not -moz, - -webkit, - not -o, - not -ms, - not -khtml, - not official - ); - @include experimental("border-radius", $radius unquote("/") $vertical-radius, - -moz, - not -webkit, - not -o, - not -ms, - -khtml, - official - ); - } - @else { - @include experimental(border-radius, $radius); - } -} - -// Round radius at position by amount. -// -// * legal values for `$vert`: `top`, `bottom` -// * legal values for `$horz`: `left`, `right` - -@mixin border-corner-radius($vert, $horz, $radius: $default-border-radius) { - // Support for mozilla's syntax for specifying a corner - @include experimental("border-radius-#{$vert}#{$horz}", $radius, - -moz, - not -webkit, - not -o, - not -ms, - not -khtml, - not official - ); - @include experimental("border-#{$vert}-#{$horz}-radius", $radius, - not -moz, - -webkit, - not -o, - not -ms, - -khtml, - official - ); - -} - -// Round top-left corner only - -@mixin border-top-left-radius($radius: $default-border-radius) { - @include border-corner-radius(top, left, $radius); } - -// Round top-right corner only - -@mixin border-top-right-radius($radius: $default-border-radius) { - @include border-corner-radius(top, right, $radius); } - -// Round bottom-left corner only - -@mixin border-bottom-left-radius($radius: $default-border-radius) { - @include border-corner-radius(bottom, left, $radius); } - -// Round bottom-right corner only - -@mixin border-bottom-right-radius($radius: $default-border-radius) { - @include border-corner-radius(bottom, right, $radius); } - -// Round both top corners by amount -@mixin border-top-radius($radius: $default-border-radius) { - @include border-top-left-radius($radius); - @include border-top-right-radius($radius); } - -// Round both right corners by amount -@mixin border-right-radius($radius: $default-border-radius) { - @include border-top-right-radius($radius); - @include border-bottom-right-radius($radius); } - -// Round both bottom corners by amount -@mixin border-bottom-radius($radius: $default-border-radius) { - @include border-bottom-left-radius($radius); - @include border-bottom-right-radius($radius); } - -// Round both left corners by amount -@mixin border-left-radius($radius: $default-border-radius) { - @include border-top-left-radius($radius); - @include border-bottom-left-radius($radius); } diff --git a/.metalsmith/sass/css3/_box-shadow.scss b/.metalsmith/sass/css3/_box-shadow.scss deleted file mode 100644 index ea47dc971..000000000 --- a/.metalsmith/sass/css3/_box-shadow.scss +++ /dev/null @@ -1,76 +0,0 @@ -// @doc off -// These defaults make the arguments optional for this mixin -// If you like, set different defaults before importing. -// @doc on - -@import "shared"; - - -// The default color for box shadows -$default-box-shadow-color: #333333 !default; - -// The default horizontal offset. Positive is to the right. -$default-box-shadow-h-offset: 0px !default; - -// The default vertical offset. Positive is down. -$default-box-shadow-v-offset: 0px !default; - -// The default blur length. -$default-box-shadow-blur: 5px !default; - -// The default spread length. -$default-box-shadow-spread : false !default; - -// The default shadow inset: inset or false (for standard shadow). -$default-box-shadow-inset : false !default; - -// Provides cross-browser for Webkit, Gecko, and CSS3 box shadows when one or more box -// shadows are needed. -// Each shadow argument should adhere to the standard css3 syntax for the -// box-shadow property. -@mixin box-shadow( - $shadow-1 : default, - $shadow-2 : false, - $shadow-3 : false, - $shadow-4 : false, - $shadow-5 : false, - $shadow-6 : false, - $shadow-7 : false, - $shadow-8 : false, - $shadow-9 : false, - $shadow-10: false -) { - @if $shadow-1 == default { - $shadow-1 : -compass-space-list(compact(if($default-box-shadow-inset, inset, false), $default-box-shadow-h-offset, $default-box-shadow-v-offset, $default-box-shadow-blur, $default-box-shadow-spread, $default-box-shadow-color)); - } - $shadow : compact($shadow-1, $shadow-2, $shadow-3, $shadow-4, $shadow-5, $shadow-6, $shadow-7, $shadow-8, $shadow-9, $shadow-10); - @include experimental(box-shadow, $shadow, - -moz, -webkit, not -o, not -ms, not -khtml, official - ); -} - -// Provides a single cross-browser CSS box shadow for Webkit, Gecko, and CSS3. -// Includes default arguments for color, horizontal offset, vertical offset, blur length, spread length, and inset. -@mixin single-box-shadow( - $color : $default-box-shadow-color, - $hoff : $default-box-shadow-h-offset, - $voff : $default-box-shadow-v-offset, - $blur : $default-box-shadow-blur, - $spread : $default-box-shadow-spread, - $inset : $default-box-shadow-inset -) { - @if not ($inset == true or $inset == false or $inset == inset) { - @warn "$inset expected to be true or the inset keyword. Got #{$inset} instead. Using: inset"; - } - - @if $color == none { - @include box-shadow(none); - } @else { - $full : $hoff $voff; - @if $blur { $full: $full $blur; } - @if $spread { $full: $full $spread; } - @if $color { $full: $full $color; } - @if $inset { $full: inset $full; } - @include box-shadow($full); - } -} diff --git a/.metalsmith/sass/css3/_box-sizing.scss b/.metalsmith/sass/css3/_box-sizing.scss deleted file mode 100644 index 93ff8ac08..000000000 --- a/.metalsmith/sass/css3/_box-sizing.scss +++ /dev/null @@ -1,13 +0,0 @@ -@import "shared"; - -// Change the box model for Mozilla, Webkit, IE8 and the future -// -// @param $bs -// [ content-box | border-box ] - -@mixin box-sizing($bs) { - $bs: unquote($bs); - @include experimental(box-sizing, $bs, - -moz, -webkit, not -o, not -ms, not -khtml, official - ); -} diff --git a/.metalsmith/sass/css3/_box.scss b/.metalsmith/sass/css3/_box.scss deleted file mode 100644 index 2abeef3b1..000000000 --- a/.metalsmith/sass/css3/_box.scss +++ /dev/null @@ -1,111 +0,0 @@ -@import "shared"; - -// display:box; must be used for any of the other flexbox mixins to work properly -@mixin display-box { - @include experimental-value(display, box, - -moz, -webkit, not -o, -ms, not -khtml, official - ); -} - -// Default box orientation, assuming that the user wants something less block-like -$default-box-orient: horizontal !default; - -// Box orientation [ horizontal | vertical | inline-axis | block-axis | inherit ] -@mixin box-orient( - $orientation: $default-box-orient -) { - $orientation : unquote($orientation); - @include experimental(box-orient, $orientation, - -moz, -webkit, not -o, -ms, not -khtml, official - ); -} - -// Default box-align -$default-box-align: stretch !default; - -// Box align [ start | end | center | baseline | stretch ] -@mixin box-align( - $alignment: $default-box-align -) { - $alignment : unquote($alignment); - @include experimental(box-align, $alignment, - -moz, -webkit, not -o, -ms, not -khtml, official - ); -} - -// Default box flex -$default-box-flex: 0 !default; - -// mixin which takes an int argument for box flex. Apply this to the children inside the box. -// -// For example: "div.display-box > div.child-box" would get the box flex mixin. -@mixin box-flex( - $flex: $default-box-flex -) { - @include experimental(box-flex, $flex, - -moz, -webkit, not -o, -ms, not -khtml, official - ); -} - -// Default flex group -$default-box-flex-group: 1 !default; - -// mixin which takes an int argument for flexible grouping -@mixin box-flex-group( - $group: $default-box-flex-group -) { - @include experimental(box-flex-group, $group, - -moz, -webkit, not -o, -ms, not -khtml, official - ); -} - -// default for ordinal group -$default-box-ordinal-group: 1 !default; - -// mixin which takes an int argument for ordinal grouping and rearranging the order -@mixin box-ordinal-group( - $group: $default-box-ordinal-group -) { - @include experimental(box-ordinal-group, $group, - -moz, -webkit, not -o, -ms, not -khtml, official - ); -} - -// Box direction default value -$default-box-direction: normal !default; - -// mixin for box-direction [ normal | reverse | inherit ] -@mixin box-direction( - $direction: $default-box-direction -) { - $direction: unquote($direction); - @include experimental(box-direction, $direction, - -moz, -webkit, not -o, -ms, not -khtml, official - ); -} - -// default for box lines -$default-box-lines: single !default; - -// mixin for box lines [ single | multiple ] -@mixin box-lines( - $lines: $default-box-lines -) { - $lines: unquote($lines); - @include experimental(box-lines, $lines, - -moz, -webkit, not -o, -ms, not -khtml, official - ); -} - -// default for box pack -$default-box-pack: start !default; - -// mixin for box pack [ start | end | center | justify ] -@mixin box-pack( - $pack: $default-box-pack -) { - $pack: unquote($pack); - @include experimental(box-pack, $pack, - -moz, -webkit, not -o, -ms, not -khtml, official - ); -} diff --git a/.metalsmith/sass/css3/_columns.scss b/.metalsmith/sass/css3/_columns.scss deleted file mode 100644 index dc795171f..000000000 --- a/.metalsmith/sass/css3/_columns.scss +++ /dev/null @@ -1,157 +0,0 @@ -@import "shared"; - -// Specify the shorthand `columns` property. -// -// Example: -// -// @include columns(20em 2) -@mixin columns($width-and-count) { - @include experimental(columns, $width-and-count, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Specify the number of columns -@mixin column-count($count) { - @include experimental(column-count, $count, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Specify the gap between columns e.g. `20px` -@mixin column-gap($width) { - @include experimental(column-gap, $width, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Specify the width of columns e.g. `100px` -@mixin column-width($width) { - @include experimental(column-width, $width, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Specify how many columns an element should span across. -// -// * legal values are 1, all -@mixin column-span($columns) { - @include experimental(column-span, $columns, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Specify the width of the rule between columns e.g. `1px` -@mixin column-rule-width($width) { - @include experimental(column-rule-width, $width, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Specify the style of the rule between columns e.g. `dotted`. -// This works like border-style. -@mixin column-rule-style($style) { - @include experimental(column-rule-style, unquote($style), - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Specify the color of the rule between columns e.g. `blue`. -// This works like border-color. -@mixin column-rule-color($color) { - @include experimental(column-rule-color, $color, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Mixin encompassing all column rule properties -// For example: -// -// @include column-rule(1px, solid, #c00) -// -// Or the values can be space separated: -// -// @include column-rule(1px solid #c00) -@mixin column-rule($width, $style: false, $color: false) { - $full : -compass-space-list(compact($width, $style, $color)); - @include experimental(column-rule, $full, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Mixin for setting column-break-before -// -// * legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column -// -// Example: -// h2.before {@include column-break-before(always);} -// -// Which generates: -// -// h2.before { -// -webkit-column-break-before: always; -// column-break-before: always;} -@mixin column-break-before($value: auto){ - @include experimental(column-break-before, $value, not -moz, -webkit, not -o, not -ms, not -khtml, official ); -} - -// Mixin for setting column-break-after -// -// * legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column -// -// Example: -// h2.after {@include column-break-after(always); } -// -// Which generates: -// -// h2.after { -// -webkit-column-break-after: always; -// column-break-after: always; } -@mixin column-break-after($value: auto){ - @include experimental(column-break-after, $value, not -moz, -webkit, not -o, not -ms, not -khtml, official ); -} - -// Mixin for setting column-break-inside -// -// * legal values are auto, avoid, avoid-page, avoid-column -// -// Example: -// h2.inside {@include column-break-inside();} -// Which generates: -// -// h2.inside { -// -webkit-column-break-inside: auto; -// column-break-inside: auto;} -@mixin column-break-inside($value: auto){ - @include experimental(column-break-inside, $value, not -moz, -webkit, not -o, not -ms, not -khtml, official ); -} - -// All-purpose mixin for setting column breaks. -// -// * legal values for $type : before, after, inside -// * legal values for '$value' are dependent on $type -// * when $type = before, legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column -// * when $type = after, legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column -// * when $type = inside, legal values are auto, avoid, avoid-page, avoid-column -// -// Examples: -// h2.before {@include column-break(before, always);} -// h2.after {@include column-break(after, always); } -// h2.inside {@include column-break(inside); } -// -// Which generates: -// h2.before { -// -webkit-column-break-before: always; -// column-break-before: always;} -// -// h2.after { -// -webkit-column-break-after: always; -// column-break-after: always; } -// -// h2.inside { -// -webkit-column-break-inside: auto; -// column-break-inside: auto;} - -@mixin column-break($type: before, $value: auto){ - @include experimental("column-break-#{$type}", $value, not -moz, -webkit, not -o, not -ms, not -khtml, official ); -} \ No newline at end of file diff --git a/.metalsmith/sass/css3/_filter.scss b/.metalsmith/sass/css3/_filter.scss deleted file mode 100644 index cd6eb1949..000000000 --- a/.metalsmith/sass/css3/_filter.scss +++ /dev/null @@ -1,23 +0,0 @@ -@import "shared"; - -// Provides cross-browser support for the upcoming (?) css3 filter property. -// -// Each filter argument should adhere to the standard css3 syntax for the -// filter property. -@mixin filter ( - $filter-1, - $filter-2 : false, - $filter-3 : false, - $filter-4 : false, - $filter-5 : false, - $filter-6 : false, - $filter-7 : false, - $filter-8 : false, - $filter-9 : false, - $filter-10: false -) { - $filter : compact($filter-1, $filter-2, $filter-3, $filter-4, $filter-5, $filter-6, $filter-7, $filter-8, $filter-9, $filter-10); - @include experimental(filter, $filter, - -moz, -webkit, not -o, not -ms, not -khtml, official - ); -} diff --git a/.metalsmith/sass/css3/_font-face.scss b/.metalsmith/sass/css3/_font-face.scss deleted file mode 100644 index f2a0ecd53..000000000 --- a/.metalsmith/sass/css3/_font-face.scss +++ /dev/null @@ -1,48 +0,0 @@ -@import "shared"; - -// Cross-browser support for @font-face. Supports IE, Gecko, Webkit, Opera. -// -// * $name is required, arbitrary, and what you will use in font stacks. -// * $font-files is required using font-files('relative/location', 'format'). -// for best results use this order: woff, opentype/truetype, svg -// * $eot is required by IE, and is a relative location of the eot file. -// * $weight shows if the font is bold, defaults to normal -// * $style defaults to normal, might be also italic -// * For android 2.2 Compatiblity, please ensure that your web page has -// a meta viewport tag. -// * To support iOS < 4.2, an SVG file must be provided -// -// If you need to generate other formats check out the Font Squirrel -// [font generator](http://www.fontsquirrel.com/fontface/generator) -// - -// In order to refer to a specific style of the font in your stylesheets as -// e.g. "font-style: italic;", you may add a couple of @font-face includes -// containing the respective font files for each style and specying -// respective the $style parameter. - -// Order of the includes matters, and it is: normal, bold, italic, bold+italic. - -@mixin font-face( - $name, - $font-files, - $eot: false, - $weight: false, - $style: false -) { - $iefont: unquote("#{$eot}?#iefix"); - @font-face { - font-family: quote($name); - @if $eot { - src: font-url($eot); - $font-files: font-url($iefont) unquote("format('embedded-opentype')"), $font-files; - } - src: $font-files; - @if $weight { - font-weight: $weight; - } - @if $style { - font-style: $style; - } - } -} diff --git a/.metalsmith/sass/css3/_hyphenation.scss b/.metalsmith/sass/css3/_hyphenation.scss deleted file mode 100644 index a4f58082e..000000000 --- a/.metalsmith/sass/css3/_hyphenation.scss +++ /dev/null @@ -1,77 +0,0 @@ -@import "shared"; - -// Mixins to support specific CSS Text Level 3 elements -// -// -// -// Mixin for word-break properties -// http://www.w3.org/css3-text/#word-break -// * legal values for $type : normal, keep-all, break-all -// -// Example: -// p.wordBreak {@include word-break(break-all);} -// -// Which generates: -// p.wordBreak { -// -ms-word-break: break-all; -// word-break: break-all; -// word-break: break-word;} -// -@mixin word-break($value: normal){ - @if $value == break-all { - //Most browsers handle the break-all case the same... - @include experimental(word-break, $value, - not -moz, not -webkit, not -o, -ms, not -khtml, official - ); - //Webkit handles break-all differently... as break-word - @include experimental(word-break, break-word, - not -moz, not -webkit, not -o, not -ms, not -khtml, official - ); - } - @else { - @include experimental(word-break, $value, - not -moz, not -webkit, not -o, -ms, not -khtml, official - ); - } -} - -// Mixin for the hyphens property -// -// W3C specification: http://www.w3.org/TR/css3-text/#hyphens -// * legal values for $type : auto, manual, none -// -// Example: -// p { -// @include hyphens(auto);} -// Which generates: -// p { -// -moz-hyphens: auto; -// -webkit-hyphens: auto; -// hyphens: auto;} -// -@mixin hyphens($value: auto){ - @include experimental(hyphens, $value, - -moz, -webkit, not -o, not -ms, not -khtml, official - ); -} - -// Mixin for x-browser hyphenation based on @auchenberg's post: -// Removes the need for the HTML tag -// http://blog.kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/ -// -// Example: -// div {@include hyphenation;} -// -// Which generates: -// div { -// -ms-word-break: break-all; -// word-break: break-all; -// word-break: break-word; -// -moz-hyphens: auto; -// -webkit-hyphens: auto; -// hyphens: auto;} -// -@mixin hyphenation{ - @include word-break(break-all); - @include hyphens; -} diff --git a/.metalsmith/sass/css3/_images.scss b/.metalsmith/sass/css3/_images.scss deleted file mode 100644 index e241776e7..000000000 --- a/.metalsmith/sass/css3/_images.scss +++ /dev/null @@ -1,132 +0,0 @@ -@import "shared"; -@import "compass/utilities/general/hacks"; - -// Background property support for vendor prefixing within values. -@mixin background( - $background-1, - $background-2: false, - $background-3: false, - $background-4: false, - $background-5: false, - $background-6: false, - $background-7: false, - $background-8: false, - $background-9: false, - $background-10: false -) { - $backgrounds: compact($background-1, $background-2, $background-3, $background-4, $background-5, - $background-6, $background-7, $background-8, $background-9, $background-10); - $mult-bgs: -compass-list-size($backgrounds) > 1; - $add-pie-bg: prefixed(-pie, $backgrounds) or $mult-bgs; - @if $experimental-support-for-svg and prefixed(-svg, $backgrounds) { background: -svg($backgrounds); } - @if $support-for-original-webkit-gradients and prefixed(-owg, $backgrounds) { background: -owg($backgrounds); } - @if $experimental-support-for-webkit and prefixed(-webkit, $backgrounds) { background: -webkit($backgrounds); } - @if $experimental-support-for-mozilla and prefixed(-moz, $backgrounds) { background: -moz($backgrounds); } - @if $experimental-support-for-opera and prefixed(-o, $backgrounds) { background: -o($backgrounds); } - @if $experimental-support-for-pie and $add-pie-bg { -pie-background: -pie($backgrounds); } - background: $backgrounds ; -} - -@mixin background-with-css2-fallback( - $background-1, - $background-2: false, - $background-3: false, - $background-4: false, - $background-5: false, - $background-6: false, - $background-7: false, - $background-8: false, - $background-9: false, - $background-10: false -) { - $backgrounds: compact($background-1, $background-2, $background-3, $background-4, $background-5, - $background-6, $background-7, $background-8, $background-9, $background-10); - $mult-bgs: -compass-list-size($backgrounds) > 1; - $simple-background: if($mult-bgs or prefixed(-css2, $backgrounds), -css2(-compass-nth($backgrounds, last)), false); - @if not blank($simple-background) { background: $simple-background; } - @include background($background-1, $background-2, $background-3, $background-4, $background-5, - $background-6, $background-7, $background-8, $background-9, $background-10); -} - - -// Background image property support for vendor prefixing within values. -@mixin background-image( - $image-1, - $image-2: false, - $image-3: false, - $image-4: false, - $image-5: false, - $image-6: false, - $image-7: false, - $image-8: false, - $image-9: false, - $image-10: false -) { - $images: compact($image-1, $image-2, $image-3, $image-4, $image-5, $image-6, $image-7, $image-8, $image-9, $image-10); - $add-pie-bg: prefixed(-pie, $images) or -compass-list-size($images) > 1; - - @if $experimental-support-for-svg and prefixed(-svg, $images) { background-image: -svg($images); background-size: 100%; } - @if $support-for-original-webkit-gradients and prefixed(-owg, $images) { background-image: -owg($images); } - @if $experimental-support-for-webkit and prefixed(-webkit, $images) { background-image: -webkit($images); } - @if $experimental-support-for-mozilla and prefixed(-moz, $images) { background-image: -moz($images); } - @if $experimental-support-for-opera and prefixed(-o, $images) { background-image: -o($images); } - @if $experimental-support-for-pie and $add-pie-bg { @warn "PIE does not support background-image. Use @include background(#{$images}) instead." } - background-image: $images ; -} - -// Emit a IE-Specific filters that renders a simple linear gradient. -// For use in IE 6 - 8. Best practice would have you apply this via a -// conditional IE stylesheet, but if you must, you should place this before -// any background-image properties that you have specified. -// -// For the `$orientation` parameter, you can pass `vertical` or `horizontal`. -@mixin filter-gradient($start-color, $end-color, $orientation: vertical) { - @include has-layout; - $gradient-type: if($orientation == vertical, 0, 1); - @if $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 { - filter: progid:DXImageTransform.Microsoft.gradient(gradientType=#{$gradient-type}, startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}'); - } -} - - -// Border image property support for vendor prefixing properties and values. -@mixin border-image($value) { - @if $experimental-support-for-mozilla { -moz-border-image: -moz(reject(-compass-list($value), fill)); } - @if $support-for-original-webkit-gradients { -webkit-border-image: -owg(reject(-compass-list($value), fill)); } - @if $experimental-support-for-webkit { -webkit-border-image: -webkit(reject(-compass-list($value), fill)); } - @if $experimental-support-for-opera { -o-border-image: -o(reject(-compass-list($value), fill)); } - @if $experimental-support-for-svg { border-image: -svg(reject(-compass-list($value), fill)); } - border-image: $value; -} - -// List style image property support for vendor prefixing within values. -@mixin list-style-image($image) { - @if $experimental-support-for-mozilla and prefixed(-moz, $image) { list-style-image: -moz($image); } - @if $support-for-original-webkit-gradients and prefixed(-owg, $image) { list-style-image: -owg($image); } - @if $experimental-support-for-webkit and prefixed(-webkit, $image) { list-style-image: -webkit($image); } - @if $experimental-support-for-opera and prefixed(-o, $image) { list-style-image: -o($image); } - @if $experimental-support-for-svg and prefixed(-svg, $image) { list-style-image: -svg($image); } - list-style-image: $image ; -} - -// List style property support for vendor prefixing within values. -@mixin list-style($value) { - $value: -compass-list($value); - @if $experimental-support-for-mozilla and prefixed(-moz, $value) { list-style-image: -moz($value); } - @if $support-for-original-webkit-gradients and prefixed(-owg, $value) { list-style-image: -owg($value); } - @if $experimental-support-for-webkit and prefixed(-webkit, $value) { list-style-image: -webkit($value); } - @if $experimental-support-for-opera and prefixed(-o, $value) { list-style-image: -o($value); } - @if $experimental-support-for-svg and prefixed(-svg, $value) { list-style-image: -svg($value); } - list-style-image: $value ; -} - -// content property support for vendor prefixing within values. -@mixin content($value) { - $value: -compass-list($value); - @if $experimental-support-for-mozilla and prefixed(-moz, $value) { content: -moz($value); } - @if $support-for-original-webkit-gradients and prefixed(-owg, $value) { content: -owg($value); } - @if $experimental-support-for-webkit and prefixed(-webkit, $value) { content: -webkit($value); } - @if $experimental-support-for-opera and prefixed(-o, $value) { content: -o($value); } - @if $experimental-support-for-svg and prefixed(-svg, $value) { content: -svg($value); } - content: $value ; -} diff --git a/.metalsmith/sass/css3/_inline-block.scss b/.metalsmith/sass/css3/_inline-block.scss deleted file mode 100644 index 75519b131..000000000 --- a/.metalsmith/sass/css3/_inline-block.scss +++ /dev/null @@ -1,22 +0,0 @@ -@import "shared"; - -// Set `$inline-block-alignment` to `none` or `false` to disable the output -// of a vertical-align property in the inline-block mixin. -// Or set it to a legal value for `vertical-align` to change the default. -$inline-block-alignment: middle !default; - -// Provides a cross-browser method to implement `display: inline-block;` -@mixin inline-block($alignment: $inline-block-alignment) { - @if $legacy-support-for-mozilla { - display: -moz-inline-stack; - } - display: inline-block; - @if $alignment and $alignment != none { - vertical-align: $alignment; - } - @if $legacy-support-for-ie { - *vertical-align: auto; - zoom: 1; - *display: inline; - } -} diff --git a/.metalsmith/sass/css3/_opacity.scss b/.metalsmith/sass/css3/_opacity.scss deleted file mode 100644 index fc497ffe4..000000000 --- a/.metalsmith/sass/css3/_opacity.scss +++ /dev/null @@ -1,19 +0,0 @@ -@import "shared"; - -// Provides cross-browser CSS opacity. Takes a number between 0 and 1 as the argument, e.g. 0.5 for 50% opacity. -// -// @param $opacity -// A number between 0 and 1, where 0 is transparent and 1 is opaque. - -@mixin opacity($opacity) { - @if $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 { - filter: unquote("progid:DXImageTransform.Microsoft.Alpha(Opacity=#{round($opacity * 100)})"); - } - opacity: $opacity; -} - -// Make an element completely transparent. -@mixin transparent { @include opacity(0); } - -// Make an element completely opaque. -@mixin opaque { @include opacity(1); } diff --git a/.metalsmith/sass/css3/_pie.scss b/.metalsmith/sass/css3/_pie.scss deleted file mode 100644 index 81e2e5167..000000000 --- a/.metalsmith/sass/css3/_pie.scss +++ /dev/null @@ -1,73 +0,0 @@ -$experimental-support-for-pie: true; - -// It is recommended that you use Sass's @extend directive to apply the behavior -// to your PIE elements. To assist you, Compass provides this variable. -// When set, it will cause the `@include pie` mixin to extend this class. -// The class name you provide should **not** include the `.`. -$pie-base-class: false !default; - -// The default approach to using PIE. -// Can be one of: -// -// * relative (default) -// * z-index -// * none -$pie-default-approach: relative !default; - -// The location of your PIE behavior file -// This should be root-relative to your web server -// relative assets don't work. It is recommended that -// you set this yourself. -$pie-behavior: stylesheet-url("PIE.htc") !default; - -// When using the z-index approach, the -// first ancestor of the PIE element at -// or before the container's opaque background -// should have a z-index set as well to ensure -// propert z-index stacking. -// -// The `$position` argument must be some non-static -// value (absolute, relative, etc.) -@mixin pie-container($z-index: 0, $position: relative) { - z-index: $z-index; - position: $position; -} - -// PIE elements must have this behavior attached to them. -// IE is broken -- it doesn't think of behavior urls as -// relative to the stylesheet. It considers them relative -// to the webpage. As a result, you cannot reliably use -// compass's relative_assets with PIE. -// -// * `$approach` - one of: relative, z-index, or none -// * `$z-index` - when using the z-index approach, this -// is the z-index that is applied. -@mixin pie-element( - $approach: $pie-default-approach, - $z-index: 0 -) { - behavior: $pie-behavior; - @if $approach == relative { - position: relative; - } - @else if $approach == z-index { - z-index: $z-index; - } -} - -// a smart mixin that knows to extend or include pie-element according -// to your stylesheet's configuration variables. -@mixin pie($base-class: $pie-base-class) { - @if $base-class { - @extend .#{$base-class}; - } - @else { - @include pie-element; - } -} - -// Watch `$n` levels of ancestors for changes to their class attribute -// So that cascading styles will work correctly on the PIE element. -@mixin pie-watch-ancestors($n) { - -pie-watch-ancestors: $n; -} \ No newline at end of file diff --git a/.metalsmith/sass/css3/_regions.scss b/.metalsmith/sass/css3/_regions.scss deleted file mode 100644 index 9b2f27cd1..000000000 --- a/.metalsmith/sass/css3/_regions.scss +++ /dev/null @@ -1,22 +0,0 @@ -@import "shared"; - -// Webkit, IE10 and future support for [CSS Regions](http://dev.w3.org/csswg/css3-regions/) -// -// $target is a value you use to link two regions of your css. Give the source of your content the flow-into property, and give your target container the flow-from property. -// -// For a visual explanation, see the diagrams at Chris Coyier's -// [CSS-Tricks](http://css-tricks.com/content-folding/) - -@mixin flow-into($target) { - $target: unquote($target); - @include experimental(flow-into, $target, - not -moz, -webkit, not -o, -ms, not -khtml, not official - ); -} - -@mixin flow-from($target) { - $target: unquote($target); - @include experimental(flow-from, $target, - not -moz, -webkit, not -o, -ms, not -khtml, not official - ); -} \ No newline at end of file diff --git a/.metalsmith/sass/css3/_shared.scss b/.metalsmith/sass/css3/_shared.scss deleted file mode 100644 index fc5adb6b8..000000000 --- a/.metalsmith/sass/css3/_shared.scss +++ /dev/null @@ -1,38 +0,0 @@ -@import "sass/support"; - -// This mixin provides basic support for CSS3 properties and -// their corresponding experimental CSS2 properties when -// the implementations are identical except for the property -// prefix. -@mixin experimental($property, $value, - $moz : $experimental-support-for-mozilla, - $webkit : $experimental-support-for-webkit, - $o : $experimental-support-for-opera, - $ms : $experimental-support-for-microsoft, - $khtml : $experimental-support-for-khtml, - $official : true -) { - @if $webkit and $experimental-support-for-webkit { -webkit-#{$property} : $value; } - @if $khtml and $experimental-support-for-khtml { -khtml-#{$property} : $value; } - @if $moz and $experimental-support-for-mozilla { -moz-#{$property} : $value; } - @if $ms and $experimental-support-for-microsoft { -ms-#{$property} : $value; } - @if $o and $experimental-support-for-opera { -o-#{$property} : $value; } - @if $official { #{$property} : $value; } -} - -// Same as experimental(), but for cases when the property is the same and the value is vendorized -@mixin experimental-value($property, $value, - $moz : $experimental-support-for-mozilla, - $webkit : $experimental-support-for-webkit, - $o : $experimental-support-for-opera, - $ms : $experimental-support-for-microsoft, - $khtml : $experimental-support-for-khtml, - $official : true -) { - @if $webkit and $experimental-support-for-webkit { #{$property} : -webkit-#{$value}; } - @if $khtml and $experimental-support-for-khtml { #{$property} : -khtml-#{$value}; } - @if $moz and $experimental-support-for-mozilla { #{$property} : -moz-#{$value}; } - @if $ms and $experimental-support-for-microsoft { #{$property} : -ms-#{$value}; } - @if $o and $experimental-support-for-opera { #{$property} : -o-#{$value}; } - @if $official { #{$property} : #{$value}; } -} diff --git a/.metalsmith/sass/css3/_text-shadow.scss b/.metalsmith/sass/css3/_text-shadow.scss deleted file mode 100644 index eab7636ae..000000000 --- a/.metalsmith/sass/css3/_text-shadow.scss +++ /dev/null @@ -1,87 +0,0 @@ -@import "shared"; - -// These defaults make the arguments optional for this mixin -// If you like, set different defaults in your project - -$default-text-shadow-color: #aaa !default; -$default-text-shadow-h-offset: 0px !default; -$default-text-shadow-v-offset: 0px !default; -$default-text-shadow-blur: 1px !default; -$default-text-shadow-spread: false !default; - -// Provides cross-browser text shadows when one or more shadows are needed. -// Each shadow argument should adhere to the standard css3 syntax for the -// text-shadow property. -// -// Note: if any shadow has a spread parameter, this will cause the mixin -// to emit the shadow declaration twice, first without the spread, -// then with the spread included. This allows you to progressively -// enhance the browsers that do support the spread parameter. -@mixin text-shadow( - $shadow-1 : default, - $shadow-2 : false, - $shadow-3 : false, - $shadow-4 : false, - $shadow-5 : false, - $shadow-6 : false, - $shadow-7 : false, - $shadow-8 : false, - $shadow-9 : false, - $shadow-10: false -) { - @if $shadow-1 == default { - $shadow-1: compact($default-text-shadow-h-offset $default-text-shadow-v-offset $default-text-shadow-blur $default-text-shadow-spread $default-text-shadow-color); - } - $shadows-without-spread: join((),(),comma); - $shadows: join((),(),comma); - $has-spread: false; - @each $shadow in compact($shadow-1, $shadow-2, $shadow-3, $shadow-4, $shadow-5, - $shadow-6, $shadow-7, $shadow-8, $shadow-9, $shadow-10) { - @if length($shadow) > 4 { - $has-spread: true; - $shadows-without-spread: append($shadows-without-spread, nth($shadow,1) nth($shadow,2) nth($shadow,3) nth($shadow,5)); - $shadows: append($shadows, $shadow); - } else { - $shadows-without-spread: append($shadows-without-spread, $shadow); - $shadows: append($shadows, $shadow); - } - } - @if $has-spread { - text-shadow: $shadows-without-spread; - } - text-shadow: $shadows; -} - -// Provides a single cross-browser CSS text shadow. -// -// Provides sensible defaults for the color, horizontal offset, vertical offset, blur, and spread -// according to the configuration defaults above. -@mixin single-text-shadow( - $hoff: false, - $voff: false, - $blur: false, - $spread: false, - $color: false -) { - // A lot of people think the color comes first. It doesn't. - @if type-of($hoff) == color { - $temp-color: $hoff; - $hoff: $voff; - $voff: $blur; - $blur: $spread; - $spread: $color; - $color: $temp-color; - } - // Can't rely on default assignment with multiple supported argument orders. - $hoff: if($hoff, $hoff, $default-text-shadow-h-offset); - $voff: if($voff, $voff, $default-text-shadow-v-offset); - $blur: if($blur, $blur, $default-text-shadow-blur ); - $spread: if($spread, $spread, $default-text-shadow-spread ); - $color: if($color, $color, $default-text-shadow-color ); - // We don't need experimental support for this property. - @if $color == none or $hoff == none { - @include text-shadow(none); - } @else { - @include text-shadow(compact($hoff $voff $blur $spread $color)); - } -} diff --git a/.metalsmith/sass/css3/_transform-legacy.scss b/.metalsmith/sass/css3/_transform-legacy.scss deleted file mode 100644 index ac661da80..000000000 --- a/.metalsmith/sass/css3/_transform-legacy.scss +++ /dev/null @@ -1,87 +0,0 @@ -@import "shared"; - -@warn "This version of the transform module has been deprecated and will be removed."; - -// CSS Transform and Transform-Origin - -// Apply a transform sent as a complete string. - -@mixin apply-transform($transform) { - @include experimental(transform, $transform, - -moz, -webkit, -o, not -ms, not -khtml, official - ); -} - -// Apply a transform-origin sent as a complete string. - -@mixin apply-origin($origin) { - @include experimental(transform-origin, $origin, - -moz, -webkit, -o, not -ms, not -khtml, official - ); -} - -// transform-origin requires x and y coordinates -// -// * only applies the coordinates if they are there so that it can be called by scale, rotate and skew safely - -@mixin transform-origin($originx: 50%, $originy: 50%) { - @if $originx or $originy { - @if $originy { - @include apply-origin($originx or 50% $originy); - } @else { - @include apply-origin($originx); - } - } -} - -// A full transform mixin with everything you could want -// -// * including origin adjustments if you want them -// * scale, rotate and skew require units of degrees(deg) -// * scale takes a multiplier, rotate and skew take degrees - -@mixin transform( - $scale: 1, - $rotate: 0deg, - $transx: 0, - $transy: 0, - $skewx: 0deg, - $skewy: 0deg, - $originx: false, - $originy: false -) { - $transform : scale($scale) rotate($rotate) translate($transx, $transy) skew($skewx, $skewy); - @include apply-transform($transform); - @include transform-origin($originx, $originy); -} - -// Transform Partials -// -// These work well on their own, but they don't add to each other, they override. -// Use them with extra origin args, or along side +transform-origin - -// Adjust only the scale, with optional origin coordinates - -@mixin scale($scale: 1.25, $originx: false, $originy: false) { - @include apply-transform(scale($scale)); - @include transform-origin($originx, $originy); -} - -// Adjust only the rotation, with optional origin coordinates - -@mixin rotate($rotate: 45deg, $originx: false, $originy: false) { - @include apply-transform(rotate($rotate)); - @include transform-origin($originx, $originy); -} - -// Adjust only the translation - -@mixin translate($transx: 0, $transy: 0) { - @include apply-transform(translate($transx, $transy)); -} - -// Adjust only the skew, with optional origin coordinates -@mixin skew($skewx: 0deg, $skewy: 0deg, $originx: false, $originy: false) { - @include apply-transform(skew($skewx, $skewy)); - @include transform-origin($originx, $originy); -} diff --git a/.metalsmith/sass/css3/_transform.scss b/.metalsmith/sass/css3/_transform.scss deleted file mode 100644 index ecd50b7d2..000000000 --- a/.metalsmith/sass/css3/_transform.scss +++ /dev/null @@ -1,598 +0,0 @@ -@import "shared"; - -// @doc off -// Note ---------------------------------------------------------------------- -// Safari, Chrome, and Firefox all support 3D transforms. However, -// only in the most recent builds. You should also provide fallback 2d support for -// Opera and IE. IE10 is slated to have 3d enabled, but is currently unreleased. -// To make that easy, all 2D transforms include an browser-targeting toggle ($only3d) -// to switch between the two support lists. The toggle defaults to 'false' (2D), -// and also accepts 'true' (3D). Currently the lists are as follows: -// 2D: Mozilla, Webkit, Opera, Official -// 3D: Webkit, Firefox. - -// Available Transforms ------------------------------------------------------ -// - Scale (2d and 3d) -// - Rotate (2d and 3d) -// - Translate (2d and 3d) -// - Skew (2d only) - -// Transform Parameters ------------------------------------------------------ -// - Transform Origin (2d and 3d) -// - Perspective (3d) -// - Perspective Origin (3d) -// - Transform Style (3d) -// - Backface Visibility (3d) - -// Mixins -------------------------------------------------------------------- -// transform-origin -// - shortcuts: transform-origin2d, transform-origin3d -// - helpers: apply-origin -// transform -// - shortcuts: transform2d, transform3d -// - helpers: simple-transform, create-transform -// perspective -// - helpers: perspective-origin -// transform-style -// backface-visibility -// scale -// - shortcuts: scaleX, scaleY, scaleZ, scale3d -// rotate -// - shortcuts: rotateX, rotateY, rotate3d -// translate -// - shortcuts: translateX, translateY, translateZ, translate3d -// skew -// - shortcuts: skewX, skewY - -// Defaults ------------------------------------------------------------------ -// @doc on - -// The default x-origin for transforms -$default-origin-x : 50% !default; -// The default y-origin for transforms -$default-origin-y : 50% !default; -// The default z-origin for transforms -$default-origin-z : 50% !default; - - -// The default x-multiplier for scaling -$default-scale-x : 1.25 !default; -// The default y-multiplier for scaling -$default-scale-y : $default-scale-x !default; -// The default z-multiplier for scaling -$default-scale-z : $default-scale-x !default; - - -// The default angle for rotations -$default-rotate : 45deg !default; - - -// The default x-vector for the axis of 3d rotations -$default-vector-x : 1 !default; -// The default y-vector for the axis of 3d rotations -$default-vector-y : 1 !default; -// The default z-vector for the axis of 3d rotations -$default-vector-z : 1 !default; - - -// The default x-length for translations -$default-translate-x : 1em !default; -// The default y-length for translations -$default-translate-y : $default-translate-x !default; -// The default z-length for translations -$default-translate-z : $default-translate-x !default; - - -// The default x-angle for skewing -$default-skew-x : 5deg !default; -// The default y-angle for skewing -$default-skew-y : 5deg !default; - - -// **Transform-origin** -// Transform-origin sent as a complete string -// -// @include apply-origin( origin [, 3D-only ] ) -// -// where 'origin' is a space separated list containing 1-3 (x/y/z) coordinates -// in percentages, absolute (px, cm, in, em etc..) or relative -// (left, top, right, bottom, center) units -// -// @param only3d Set this to true to only apply this -// mixin where browsers have 3D support. -@mixin apply-origin($origin, $only3d) { - $only3d: $only3d or -compass-list-size(-compass-list($origin)) > 2; - @if $only3d { - @include experimental(transform-origin, $origin, - -moz, -webkit, -o, -ms, not -khtml, official - ); - } @else { - @include experimental(transform-origin, $origin, - -moz, -webkit, -o, -ms, not -khtml, official - ); - } -} - -// Transform-origin sent as individual arguments: -// -// @include transform-origin( [ origin-x, origin-y, origin-z, 3D-only ] ) -// -// where the 3 'origin-' arguments represent x/y/z coordinates. -// -// **NOTE:** setting z coordinates triggers 3D support list, leave false for 2D support -@mixin transform-origin( - $origin-x: $default-origin-x, - $origin-y: $default-origin-y, - $origin-z: false, - $only3d: if($origin-z, true, false) -) { - $origin: unquote(''); - @if $origin-x or $origin-y or $origin-z { - @if $origin-x { $origin: $origin-x; } @else { $origin: 50%; } - @if $origin-y { $origin: $origin $origin-y; } @else { @if $origin-z { $origin: $origin 50%; }} - @if $origin-z { $origin: $origin $origin-z; } - @include apply-origin($origin, $only3d); - } -} - - -// Transform sent as a complete string: -// -// @include transform( transforms [, 3D-only ] ) -// -// where 'transforms' is a space separated list of all the transforms to be applied. -@mixin transform( - $transform, - $only3d: false -) { - @if $only3d { - @include experimental(transform, $transform, - -moz, -webkit, -o, -ms, not -khtml, official - ); - } @else { - @include experimental(transform, $transform, - -moz, -webkit, -o, -ms, not -khtml, official - ); - } -} - -// Shortcut to target all browsers with 2D transform support -@mixin transform2d($trans) { - @include transform($trans, false); -} - -// Shortcut to target only browsers with 3D transform support -@mixin transform3d($trans) { - @include transform($trans, true); -} - -// @doc off -// 3D Parameters ------------------------------------------------------------- -// @doc on - -// Set the perspective of 3D transforms on the children of an element: -// -// @include perspective( perspective ) -// -// where 'perspective' is a unitless number representing the depth of the -// z-axis. The higher the perspective, the more exaggerated the foreshortening. -// values from 500 to 1000 are more-or-less "normal" - a good starting-point. -@mixin perspective($p) { - @include experimental(perspective, $p, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Set the origin position for the perspective -// -// @include perspective-origin(origin-x [origin-y]) -// -// where the two arguments represent x/y coordinates -@mixin perspective-origin($origin: 50%) { - @include experimental(perspective-origin, $origin, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Determine whether a 3D objects children also live in the given 3D space -// -// @include transform-style( [ style ] ) -// -// where `style` can be either `flat` or `preserve-3d`. -// Browsers default to `flat`, mixin defaults to `preserve-3d`. -@mixin transform-style($style: preserve-3d) { - @include experimental(transform-style, $style, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// Determine the visibility of an element when it's back is turned -// -// @include backface-visibility( [ visibility ] ) -// -// where `visibility` can be either `visible` or `hidden`. -// Browsers default to visible, mixin defaults to hidden -@mixin backface-visibility($visibility: hidden) { - @include experimental(backface-visibility, $visibility, - -moz, -webkit, -o, -ms, not -khtml, official - ); -} - -// @doc off -// Transform Partials -------------------------------------------------------- -// These work well on their own, but they don't add to each other, they override. -// Use along with transform parameter mixins to adjust origin, perspective and style -// --------------------------------------------------------------------------- - - -// Scale --------------------------------------------------------------------- -// @doc on - -// Scale an object along the x and y axis: -// -// @include scale( [ scale-x, scale-y, perspective, 3D-only ] ) -// -// where the 'scale-' arguments are unitless multipliers of the x and y dimensions -// and perspective, which works the same as the stand-alone perspective property/mixin -// but applies to the individual element (multiplied with any parent perspective) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin scale( - $scale-x: $default-scale-x, - $scale-y: $scale-x, - $perspective: false, - $only3d: false -) { - $trans: scale($scale-x, $scale-y); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform($trans, $only3d); -} - -// Scale an object along the x axis -// @include scaleX( [ scale-x, perspective, 3D-only ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin scaleX( - $scale: $default-scale-x, - $perspective: false, - $only3d: false -) { - $trans: scaleX($scale); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform($trans, $only3d); -} - -// Scale an object along the y axis -// @include scaleY( [ scale-y, perspective, 3D-only ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin scaleY( - $scale: $default-scale-y, - $perspective: false, - $only3d: false -) { - $trans: scaleY($scale); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform($trans, $only3d); -} - -// Scale an object along the z axis -// @include scaleZ( [ scale-z, perspective ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin scaleZ( - $scale: $default-scale-z, - $perspective: false -) { - $trans: scaleZ($scale); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform3d($trans); -} - -// Scale and object along all three axis -// @include scale3d( [ scale-x, scale-y, scale-z, perspective ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin scale3d( - $scale-x: $default-scale-x, - $scale-y: $default-scale-y, - $scale-z: $default-scale-z, - $perspective: false -) { - $trans: scale3d($scale-x, $scale-y, $scale-z); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform3d($trans); -} - -// @doc off -// Rotate -------------------------------------------------------------------- -// @doc on - -// Rotate an object around the z axis (2D) -// @include rotate( [ rotation, perspective, 3D-only ] ) -// where 'rotation' is an angle set in degrees (deg) or radian (rad) units -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin rotate( - $rotate: $default-rotate, - $perspective: false, - $only3d: false -) { - $trans: rotate($rotate); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform($trans, $only3d); -} - -// A longcut for 'rotate' in case you forget that 'z' is implied -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin rotateZ( - $rotate: $default-rotate, - $perspective: false, - $only3d: false -) { - @include rotate($rotate, $perspective, $only3d); -} - -// Rotate an object around the x axis (3D) -// @include rotateX( [ rotation, perspective ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin rotateX( - $rotate: $default-rotate, - $perspective: false -) { - $trans: rotateX($rotate); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform3d($trans); -} - -// Rotate an object around the y axis (3D) -// @include rotate( [ rotation, perspective ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin rotateY( - $rotate: $default-rotate, - $perspective: false -) { - $trans: rotateY($rotate); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform3d($trans); -} - -// Rotate an object around an arbitrary axis (3D) -// @include rotate( [ vector-x, vector-y, vector-z, rotation, perspective ] ) -// where the 'vector-' arguments accept unitless numbers. -// These numbers are not important on their own, but in relation to one another -// creating an axis from your transform-origin, along the axis of Xx = Yy = Zz. -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin rotate3d( - $vector-x: $default-vector-x, - $vector-y: $default-vector-y, - $vector-z: $default-vector-z, - $rotate: $default-rotate, - $perspective: false -) { - $trans: rotate3d($vector-x, $vector-y, $vector-z, $rotate); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform3d($trans); -} - -// @doc off -// Translate ----------------------------------------------------------------- -// @doc on - -// Move an object along the x or y axis (2D) -// @include translate( [ translate-x, translate-y, perspective, 3D-only ] ) -// where the 'translate-' arguments accept any distance in percentages or absolute (px, cm, in, em etc..) units. -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin translate( - $translate-x: $default-translate-x, - $translate-y: $default-translate-y, - $perspective: false, - $only3d: false -) { - $trans: translate($translate-x, $translate-y); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform($trans, $only3d); -} - -// Move an object along the x axis (2D) -// @include translate( [ translate-x, perspective, 3D-only ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin translateX( - $trans-x: $default-translate-x, - $perspective: false, - $only3d: false -) { - $trans: translateX($trans-x); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform($trans, $only3d); -} - -// Move an object along the y axis (2D) -// @include translate( [ translate-y, perspective, 3D-only ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin translateY( - $trans-y: $default-translate-y, - $perspective: false, - $only3d: false -) { - $trans: translateY($trans-y); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform($trans, $only3d); -} - -// Move an object along the z axis (3D) -// @include translate( [ translate-z, perspective ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin translateZ( - $trans-z: $default-translate-z, - $perspective: false -) { - $trans: translateZ($trans-z); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform3d($trans); -} - -// Move an object along the x, y and z axis (3D) -// @include translate( [ translate-x, translate-y, translate-z, perspective ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin translate3d( - $translate-x: $default-translate-x, - $translate-y: $default-translate-y, - $translate-z: $default-translate-z, - $perspective: false -) { - $trans: translate3d($translate-x, $translate-y, $translate-z); - @if $perspective { $trans: perspective($perspective) $trans; } - @include transform3d($trans); -} - -// @doc off -// Skew ---------------------------------------------------------------------- -// @doc on - -// Skew an element: -// -// @include skew( [ skew-x, skew-y, 3D-only ] ) -// -// where the 'skew-' arguments accept css angles in degrees (deg) or radian (rad) units. -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin skew( - $skew-x: $default-skew-x, - $skew-y: $default-skew-y, - $only3d: false -) { - $trans: skew($skew-x, $skew-y); - @include transform($trans, $only3d); -} - -// Skew an element along the x axiz -// -// @include skew( [ skew-x, 3D-only ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin skewX( - $skew-x: $default-skew-x, - $only3d: false -) { - $trans: skewX($skew-x); - @include transform($trans, $only3d); -} - -// Skew an element along the y axis -// -// @include skew( [ skew-y, 3D-only ] ) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin skewY( - $skew-y: $default-skew-y, - $only3d: false -) { - $trans: skewY($skew-y); - @include transform($trans, $only3d); -} - - -// Full transform mixins -// For settings any combination of transforms as arguments -// These are complex and not highly recommended for daily use. They are mainly -// here for backward-compatibility purposes. -// -// * they include origin adjustments -// * scale takes a multiplier (unitless), rotate and skew take degrees (deg) -// -// **Note** This mixin cannot be combined with other transform mixins. -@mixin create-transform( - $perspective: false, - $scale-x: false, - $scale-y: false, - $scale-z: false, - $rotate-x: false, - $rotate-y: false, - $rotate-z: false, - $rotate3d: false, - $trans-x: false, - $trans-y: false, - $trans-z: false, - $skew-x: false, - $skew-y: false, - $origin-x: false, - $origin-y: false, - $origin-z: false, - $only3d: false -) { - $trans: unquote(""); - - // perspective - @if $perspective { $trans: perspective($perspective) ; } - - // scale - @if $scale-x and $scale-y { - @if $scale-z { $trans: $trans scale3d($scale-x, $scale-y, $scale-z); } - @else { $trans: $trans scale($scale-x, $scale-y); } - } @else { - @if $scale-x { $trans: $trans scaleX($scale-x); } - @if $scale-y { $trans: $trans scaleY($scale-y); } - @if $scale-z { $trans: $trans scaleZ($scale-z); } - } - - // rotate - @if $rotate-x { $trans: $trans rotateX($rotate-x); } - @if $rotate-y { $trans: $trans rotateY($rotate-y); } - @if $rotate-z { $trans: $trans rotateZ($rotate-z); } - @if $rotate3d { $trans: $trans rotate3d($rotate3d); } - - // translate - @if $trans-x and $trans-y { - @if $trans-z { $trans: $trans translate3d($trans-x, $trans-y, $trans-z); } - @else { $trans: $trans translate($trans-x, $trans-y); } - } @else { - @if $trans-x { $trans: $trans translateX($trans-x); } - @if $trans-y { $trans: $trans translateY($trans-y); } - @if $trans-z { $trans: $trans translateZ($trans-z); } - } - - // skew - @if $skew-x and $skew-y { $trans: $trans skew($skew-x, $skew-y); } - @else { - @if $skew-x { $trans: $trans skewX($skew-x); } - @if $skew-y { $trans: $trans skewY($skew-y); } - } - - // apply it! - @include transform($trans, $only3d); - @include transform-origin($origin-x, $origin-y, $origin-z, $only3d); -} - - -// A simplified set of options -// backwards-compatible with the previous version of the 'transform' mixin -@mixin simple-transform( - $scale: false, - $rotate: false, - $trans-x: false, - $trans-y: false, - $skew-x: false, - $skew-y: false, - $origin-x: false, - $origin-y: false -) { - @include create-transform( - false, - $scale, $scale, false, - false, false, $rotate, false, - $trans-x, $trans-y, false, - $skew-x, $skew-y, - $origin-x, $origin-y, false, - false - ); -} diff --git a/.metalsmith/sass/css3/_transition.scss b/.metalsmith/sass/css3/_transition.scss deleted file mode 100644 index 4c4cb8c69..000000000 --- a/.metalsmith/sass/css3/_transition.scss +++ /dev/null @@ -1,221 +0,0 @@ -@import "shared"; - -// CSS Transitions -// Currently only works in Webkit. -// -// * expected in CSS3, FireFox 3.6/7 and Opera Presto 2.3 -// * We'll be prepared. -// -// Including this submodule sets following defaults for the mixins: -// -// $default-transition-property : all -// $default-transition-duration : 1s -// $default-transition-function : false -// $default-transition-delay : false -// -// Override them if you like. Timing-function and delay are set to false for browser defaults (ease, 0s). - -$default-transition-property: all !default; - -$default-transition-duration: 1s !default; - -$default-transition-function: false !default; - -$default-transition-delay: false !default; - -$transitionable-prefixed-values: transform, transform-origin !default; - -// One or more properties to transition -// -// * for multiple, use a comma-delimited list -// * also accepts "all" or "none" - -@mixin transition-property($property-1: $default-transition-property, - $property-2 : false, - $property-3 : false, - $property-4 : false, - $property-5 : false, - $property-6 : false, - $property-7 : false, - $property-8 : false, - $property-9 : false, - $property-10: false -) { - @if type-of($property-1) == string { $property-1: unquote($property-1); } - $properties: compact($property-1, $property-2, $property-3, $property-4, $property-5, $property-6, $property-7, $property-8, $property-9, $property-10); - @if $experimental-support-for-webkit { -webkit-transition-property : prefixed-for-transition(-webkit, $properties); } - @if $experimental-support-for-mozilla { -moz-transition-property : prefixed-for-transition(-moz, $properties); } - @if $experimental-support-for-opera { -o-transition-property : prefixed-for-transition(-o, $properties); } - transition-property : $properties; -} - -// One or more durations in seconds -// -// * for multiple, use a comma-delimited list -// * these durations will affect the properties in the same list position - -@mixin transition-duration($duration-1: $default-transition-duration, - $duration-2 : false, - $duration-3 : false, - $duration-4 : false, - $duration-5 : false, - $duration-6 : false, - $duration-7 : false, - $duration-8 : false, - $duration-9 : false, - $duration-10: false -) { - @if type-of($duration-1) == string { $duration-1: unquote($duration-1); } - $durations: compact($duration-1, $duration-2, $duration-3, $duration-4, $duration-5, $duration-6, $duration-7, $duration-8, $duration-9, $duration-10); - @include experimental(transition-duration, $durations, - -moz, -webkit, -o, not -ms, not -khtml, official - ); -} - -// One or more timing functions -// -// * [ ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(x1, y1, x2, y2)] -// * For multiple, use a comma-delimited list -// * These functions will effect the properties in the same list position - -@mixin transition-timing-function($function-1: $default-transition-function, - $function-2 : false, - $function-3 : false, - $function-4 : false, - $function-5 : false, - $function-6 : false, - $function-7 : false, - $function-8 : false, - $function-9 : false, - $function-10: false -) { - $function-1: unquote($function-1); - $functions: compact($function-1, $function-2, $function-3, $function-4, $function-5, $function-6, $function-7, $function-8, $function-9, $function-10); - @include experimental(transition-timing-function, $functions, - -moz, -webkit, -o, not -ms, not -khtml, official - ); -} - -// One or more transition-delays in seconds -// -// * for multiple, use a comma-delimited list -// * these delays will effect the properties in the same list position - -@mixin transition-delay($delay-1: $default-transition-delay, - $delay-2 : false, - $delay-3 : false, - $delay-4 : false, - $delay-5 : false, - $delay-6 : false, - $delay-7 : false, - $delay-8 : false, - $delay-9 : false, - $delay-10: false -) { - @if type-of($delay-1) == string { $delay-1: unquote($delay-1); } - $delays: compact($delay-1, $delay-2, $delay-3, $delay-4, $delay-5, $delay-6, $delay-7, $delay-8, $delay-9, $delay-10); - @include experimental(transition-delay, $delays, - -moz, -webkit, -o, not -ms, not -khtml, official - ); -} - -// Transition all-in-one shorthand - -@mixin single-transition( - $property: $default-transition-property, - $duration: $default-transition-duration, - $function: $default-transition-function, - $delay: $default-transition-delay -) { - @include transition(compact($property $duration $function $delay)); -} - -@mixin transition( - $transition-1 : default, - $transition-2 : false, - $transition-3 : false, - $transition-4 : false, - $transition-5 : false, - $transition-6 : false, - $transition-7 : false, - $transition-8 : false, - $transition-9 : false, - $transition-10: false -) { - @if $transition-1 == default { - $transition-1 : compact($default-transition-property $default-transition-duration $default-transition-function $default-transition-delay); - } - $transitions: false; - @if type-of($transition-1) == list and type-of(nth($transition-1,1)) == list { - $transitions: join($transition-1, compact($transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10), comma); - } @else { - $transitions : compact($transition-1, $transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10); - } - $delays: comma-list(); - $has-delays: false; - $webkit-value: comma-list(); - $moz-value: comma-list(); - $o-value: comma-list(); - - // This block can be made considerably simpler at the point in time that - // we no longer need to deal with the differences in how delays are treated. - @each $transition in $transitions { - // Extract the values from the list - // (this would be cleaner if nth took a 3rd argument to provide a default value). - $property: nth($transition, 1); - $duration: false; - $timing-function: false; - $delay: false; - @if length($transition) > 1 { $duration: nth($transition, 2); } - @if length($transition) > 2 { $timing-function: nth($transition, 3); } - @if length($transition) > 3 { $delay: nth($transition, 4); $has-delays: true; } - - // If a delay is provided without a timing function - @if is-time($timing-function) and not $delay { $delay: $timing-function; $timing-function: false; $has-delays: true; } - - // Keep a list of delays in case one is specified - $delays: append($delays, if($delay, $delay, 0s)); - - $webkit-value: append($webkit-value, compact(prefixed-for-transition(-webkit, $property) $duration $timing-function)); - $moz-value: append( $moz-value, compact(prefixed-for-transition( -moz, $property) $duration $timing-function $delay)); - $o-value: append( $o-value, compact(prefixed-for-transition( -o, $property) $duration $timing-function $delay)); - } - - @if $experimental-support-for-webkit { -webkit-transition : $webkit-value; - // old webkit doesn't support the delay parameter in the shorthand so we progressively enhance it. - @if $has-delays { -webkit-transition-delay : $delays; } } - @if $experimental-support-for-mozilla { -moz-transition : $moz-value; } - @if $experimental-support-for-opera { -o-transition : $o-value; } - transition : $transitions; -} - -// coerce a list to be comma delimited or make a new, empty comma delimited list. -@function comma-list($list: ()) { - @return join((), $list, comma); -} - -// Returns `$property` with the given prefix if it is found in `$transitionable-prefixed-values`. -@function prefixed-for-transition($prefix, $property) { - @if type-of($property) == list { - $new-list: comma-list(); - @each $v in $property { - $new-list: append($new-list, prefixed-for-transition($prefix, $v)); - } - @return $new-list; - } @else { - @if index($transitionable-prefixed-values, $property) { - @return #{$prefix}-#{$property}; - } @else { - @return $property; - } - } -} - -// Checks if the value given is a unit of time. -@function is-time($value) { - @if type-of($value) == number { - @return not not index(s ms, unit($value)); - } @else { - @return false; - } -} diff --git a/.metalsmith/sass/css3/_user-interface.scss b/.metalsmith/sass/css3/_user-interface.scss deleted file mode 100644 index e78b2fe04..000000000 --- a/.metalsmith/sass/css3/_user-interface.scss +++ /dev/null @@ -1,17 +0,0 @@ -// User Interface ------------------------------------------------------------ -// This file can be expanded to handle all the user interface properties as -// they become available in browsers: -// http://www.w3.org/TR/2000/WD-css3-userint-20000216 -@import "shared"; - - -// This property controls the selection model and granularity of an element. -// -// @param $select -// [ none | text | toggle | element | elements | all | inherit ] -@mixin user-select($select) { - $select: unquote($select); - @include experimental(user-select, $select, - -moz, -webkit, not -o, not -ms, -khtml, official - ); -} diff --git a/.metalsmith/sass/main.scss b/.metalsmith/sass/main.scss deleted file mode 100644 index e28f627cc..000000000 --- a/.metalsmith/sass/main.scss +++ /dev/null @@ -1,1981 +0,0 @@ -@import "css3"; - -//------------------------- -// $color_0: #444; -// $color_1: #fff; -// $color_2: #eee; -// $color_3: #ccc; -// $color_4: #00BA65; -// $color_5: #47b5e2; -$color_6: #999; -$color_7: #27637e; -$color_8: #222; -$color_9: #007eb2; -$color_10: #f5f5f5; - - -$color_0: #2c3134; -$color_1: #b3b3b3; -$color_2: #858585; -$color_3: #c5c5c5; -$color_4: #838485; -$color_5: #525658; - -$white: #fff; -$light-black: #2c3134; -$dark-grey: #5c656d; -$grey: #555; -$light-grey: #eee; -$light-grey2: #838485; -$green: #27ae61; -$kd-green: #00B057; - -//colors footer -$color_gallery_approx: #f0f0f0; -$color_gray_nurse_approx: #e8e8e8; -$color_tapa_approx: #747474; -$color_pumice_approx: #cacaca; -$color_picton_blue_approx: #55acee; -$color_azure_approx: #3b5998; - -$normal_font: 15px; -//-------------------------- - -%extend_3 { - margin: 0; - padding: 0; - list-style: none; -} -%extend_4 { - font-family: "Ubuntu", Helvetica, Arial, "Lucida Grande", sans-serif; - font-weight: 300; -} - -@font-face { - font-family: "Open Sans"; - font-weight: 300; - font-style: normal; - src: url("../fonts/OpenSans-Light.woff") -} -@font-face { - font-family: "Open Sans"; - font-weight: 400; - font-style: normal; - src: url("../fonts/OpenSans-Regular.woff") -} -@font-face { - font-family: "Open Sans"; - font-weight: 600; - font-style: normal; - src: url("../fonts/OpenSans-Semibold.woff") -} - -body { - margin: 0; - padding: 0; - font-family: 'Open Sans', 'Proxima Nova', 'Helvetica Neue', Helvetica, Arial; - font-size: $normal_font; - text-rendering: optimizelegibility; - line-height: 2; - color: $grey; - background-image: url(../img/bg.png); - background-repeat: no-repeat; - background-position: top center; - background-size: 100%; -} -html { - margin: 0; - padding: 0; -} -input { - display: inline-block; - vertical-align: middle; - line-height: 30px; - margin: 0 auto; - width: 100%; - max-width: 400px; - @include box-sizing(border-box); - @include transition(all linear 0.2s); - /* (11) display was set before: old value: block - new value inline-block */; - &:focus { -// border-color: $color_9; - outline: 0; - } -} - -h1, h2, h3, h4, h5, h6 { - margin-top: 26px; - margin-bottom: 10px; - font-family: 'Open Sans', 'Proxima Nova', 'Helvetica Neue', Helvetica, Arial; - font-weight: bold; - text-rendering: optimizelegibility; -} -h1 { - font-size: 25px; -} -h2 { - font-size: 22px; - line-height: 28px; -} -h3 { - font-size: 22px; - line-height: 28px; - font-weight: normal; -} -h2,h3 { - margin-top: 26px; - margin-bottom: 26px; -} -h4 { - font-size: 18px; - line-height: 24px; - font-weight: normal; -} -h5, h6 { - font-size: 16px; - line-height: 22px; - font-weight: normal; -} -h6 { - margin-top: 10px; -} - -p { - margin: 12px 0; - line-height: 22px; -} - -img { - display: block; - height: auto; - margin: 0 auto; -} -.docs-content{ - img { - max-width: 600px; - max-height: 400px; - cursor: pointer; - } - a { - color: $grey; - border-bottom-style: dotted; - border-color: $grey; - border-width: 1px; - &:hover { - text-decoration: none; - } - } - .guide-button a { - border: none; - } - .tag-list { - a { - border: none; - &:hover { - border-bottom-style: dotted; - border-color: $grey; - border-width: 1px; - } - } - } -} -iframe { - max-width: 100%; - max-height: 100%; - border: 0 !important; -} -header { - width: 100%; - overflow: hidden; - padding: 0 0 222px 0; - text-align: center; - color: $color_1; - *zoom: 1; - /* (7) padding was set before: old value: 2em 0 2em 0 - new value 4em 0 4em 0 */; - h2 { - margin: 0 0 1em 0; - &.docs-header { - margin: 0; - } - } - &:before { - content: " "; - display: table; - } - &:after { - content: " "; - display: table; - clear: both; - } - nav { - background: none; - position: relative; - text-align: left; - .topSearchBox { - position: absolute; - top: 70px; - left: 50%; - width: 1090px; - margin-left: -645px; - padding: 0; - } - } -} -.container { - width: 95%; - max-width: 1090px; - margin: 0 auto; - position: relative; - padding: 0 20px; - /* (8) max-width was set before: old value: 650px - new value 1000px */; -} -section:not(.page) .container { - min-height: 500px; -} -strong { - font-weight: 700; -} -dt { - font-weight: 700; -} -hr { - background: $color_2; - border: 0; - height: 1px; - margin: 40px 0 40px; -} -blockquote { - margin: 1em 0; - border-left: 3px solid $color_3; - padding-left: 20px; - text-align: left; -} -.tip, -.alert { - display: block; - border-radius: 3px; - border: 1px solid #ededed; - border-left-width: 10px; - position: relative; - &:before { - position: absolute; - top: 17px; - left: 13px; - } - p { - display: inline-block; - padding: 0 15px; - margin: 12px 0 !important; - word-break: break-word; - width: 93%; - vertical-align: middle; - font-family: 'Open Sans','Proxima Nova','Helvetica Neue',Helvetica,Arial; - .label { - text-transform: uppercase; - display: block; - font-size: 12px; - font-weight: bold; - margin: 2px 0 0; - } - } -} -.tip { - background-color: #f3f8f3; - border-left-color: #50af51; - .label { color: #4D844D; } -} -.alert { - background-color: #fdf7f7; - border-left-color: #d9534f; - .label { color: #CF3F3F; } -} -dd { - padding: 0; - margin: 0 0 25px 0; -} -a { - @include transition(all ease 150ms); - text-decoration: none; - color: $color_4; - &:hover { - text-decoration: underline; - } - &:active { - color: $color_5; - } -} -footer.main-footer { - padding: 56px 0; - font-family: Open Sans, Proxima Nova, Helvetica Neue, Helvetica, Arial; - font-weight: 400; - background: $color_gallery_approx; - border-top: 1px solid $color_gray_nurse_approx; - height: auto; - .inner-container { - max-width: 1090px; - padding: 0 45px; - margin: 0 auto; - display: block; - position: relative; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - nav { - background-color: transparent; - } - } - .footer-block { - width: 50%; - font-size: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: block; - float: left; - &:last-child { - text-align: right; - } - a { - vertical-align: middle; - font-size: 14px; - line-height: 22px; - color: $color_tapa_approx; - display: inline; - margin-right: 12px; - text-decoration: none; - &:hover { - text-decoration: none; - } - } - } - a.social { - display: inline-block; - margin-right: 8px; - width: 32px; - height: 32px; - background: $color_pumice_approx; - -webkit-border-radius: 50%; - -moz-border-radius: 50%; - border-radius: 50%; - text-align: center; - padding: 8px 0 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - &:after { - content: ''; - display: inline-block; - width: 16px; - height: 16px; - } - &.tw { - &:hover { - background: $color_picton_blue_approx; - } - &:after { - background: url(../img/app.sprite.png) 0 -2934px; - width: 16px; - height: 16px; - } - } - &.fb { - &:hover { - background: $color_azure_approx; - } - &:after { - background: url(../img/app.sprite.png) 0 -2908px; - width: 16px; - height: 16px; - } - } - } -} -h1#logo { - margin: 10px 0; -} -// .hasHeader { -// #logo { -// span.img { -// width: 185px; -// } -// } -// } -.noHeader { - #logo { - span.img { - // width: 185px; - margin-left: 15px; - } - } - .hiring { - left: 220px; - } -} -#logo { - span.img { - display: inline-block; - background-image: url(../img/logo.header.png); - background-size: 185px; - background-position: 0; - background-repeat: no-repeat; - width: 185px; - height: 23px; - vertical-align: middle; - margin-bottom: 10px; - } - - a, a:hover { - text-decoration: none; - } -} -.hiring { - background-color: #F7E747 !important; - border-radius: 3px; - // text-transform: uppercase; - position: absolute; - top: 36px; - left: 205px; - &:before { - content: ''; - top: 6px; - left: -5px; - position: absolute; - width: 0; - height: 0; - border-style: solid; - border-width: 8px 8px 8px 0; - border-color: transparent #f7e847 transparent transparent; - } - a { - color: #535353 !important; - font-size: 12px; - padding: 0 10px; - &:hover { - text-decoration: none; - } - } -} -nav { - background: $dark-grey; - - #menu { - float: right; - a { - color: $light-grey; - &:hover { - text-decoration: none; - } - } - > .toplinks { - > li { - display: inline-block; - margin-right: 10px; - padding: 1px 10px; - position: relative; - cursor: pointer; - &:hover { - border-radius: 4px; - background: rgba(0,0,0,.2); - .submenu { display: block; } - } - .icon { - vertical-align: middle; - font-size: 1.2em; - color: $light-grey; - padding-left: 7px; - } - .submenu { - display: none; - position: absolute; - width: 740px; - background: $white; - color: $grey; - box-shadow: 0px 0px 0px 5px rgba(0,0,0,0.2); - border-radius: 4px; - top: 45px; - left: -355px; - z-index: 30; - cursor: initial; - &:before { - content: ""; - display: block; - height: 20px; - width: 740px; - position: absolute; - top: -20px; - left: 0; - } - a { - width: 95%; - color: $grey; - display: inline-block; - vertical-align: middle; - &:hover { - text-decoration: underline; - cursor: pointer; - } - } - .column { - display: inline-block; - vertical-align: top; - padding: 0 0 0 10px; - margin: 10px 0; - border-right: 1px solid $light-grey; - min-height: 110px; - } - .col-2 { width: 31.5%; } - .col-2:first-child, - .col-2:last-child { border: none; } - .col-2:last-child { padding: 0 0 0 10px; } - .submenu-header { - font-weight: bold; - font-size: 14px; - line-height: 16px; - display: block; - position: relative; - overflow: hidden; - text-transform: uppercase; - } - .submenu-item { - font-size: 12px; - line-height: 20px; - padding-left: 10px; - display: block; - position: relative; - overflow: hidden; - &:hover .sub-icon { display: block; } - + .submenu-header { margin-top: 20px; } - } - .submenu-desc { - font-size: 12px; - line-height: 19px; - display: none; - padding-right: 10px; - } - .sub-icon { - display: none; - font-size: 22px; - position: absolute; - top: 2px; - left: 0; - color: $kd-green; - } - .sub-desc-icon { - font-size: 8em; - display: block; - text-align: center; - color: $light-grey; - margin-bottom: 18px; - } - } - } - } - - #mobile-menu { - display: none; - position: absolute; - padding-left: 1.25em; - font-size: 1.6em; - border: 1px solid #ccc; - border-radius: 4px; - height: 30px; - top: 1.45em; - right: .6em; - &:before { - content: ""; - position: absolute; - top: .3em; - left: .24em; - width: .8em; - height: .125em; - border-top: 0.375em double $light-grey; - border-bottom: 0.135em solid $light-grey; - } - } - } - .container { - padding: 20px 0; - - &:after { - content: " "; - display: table; - clear: both; - } - .topSearchButton { - float: right; - cursor: pointer; - padding: 5px 15px; - border: 1px solid #ccc; - border-radius: 4px; - margin: 14px 0; - .searchIcon { - // background-image: url(../img/sprite.png); - // background-position: -6px -2px; - // background-repeat: no-repeat; - height: 20px; - width: 20px; - display: block; - font-size: 18px; - text-align: center; - color: $white; - } - } - } - .topSearchBox { - display: none; - max-width: 1090px; - padding: 0 0 20px 0; - margin: 0 auto; - position: relative; - input { - width: 100%; - display: block; - max-width: 100%; - padding: 15px 10px; - background: 0; - border: 0; - border-bottom: 1px solid $color_3; - color: $color_1; - font-size: 18px; - line-height: 18px; - } - } -} -section { - padding: 3em 0; - text-align: left; - background-color: $white; - *zoom: 1; - /* (9) padding was set before: old value: 1em 0 3em - new value 3em 0 */; - /* (10) text-align was set before: old value: center - new value left */; - &.vibrant { - background: $color_8; - color: $color_1; - } - &:before { - content: " "; - display: table; - } - &:after { - content: " "; - display: table; - clear: both; - } - &.centered { - text-align: center; - } -} -#left-nav { - background-color: $white; - list-style: none; - margin: 0 50px 120px 15px; - padding: 0; - font-size: 15px; - float: left; - width: 240px; - a { - // display: block; - // margin: 0 -20px; - // padding: 0 20px; - text-decoration: none; - // border-right: 2px solid transparent; - color: #818181; - line-height: 18px; - } - h5 { - line-height: 20px; - text-transform: uppercase; - a { - color: $grey; - text-transform: uppercase; - } - } - .active { - //background: $color_2; - //border-right: 2px solid $color_3; - } - li { - list-style: none; - - &.zactive { - h5 { - margin-left: -14px; - padding-left: 10px; - border-left: 4px $dark-grey solid; - } - li.zactive a { - border-bottom-style: dotted; - border-width: 1px; - border-color: $grey; - // background-color: $light-grey; - } - - } - - ul { - padding: 0; - font-size: 14px; - } - h5 { - margin: 10px 0; - font-size: 16px; - font-weight: 600; - } - li { - padding: 3px 0 3px 10px; - line-height: 14px; - margin-bottom: 4px; - &:hover a { - border-bottom-style: dotted; - border-width: 1px; - border-color: $grey; - // background-color: $light-grey; - } - } - } -} -#left-nav + .docs-content { - position: relative; - margin-left: 310px; - min-height: 500px; - h1 { - color: $color_0; - float: none; - } -} - -//-------------------------- -%extend_5 { - margin-bottom: 50px; -} -%extend_6 { - list-style-type: none; - padding: 0; - margin: 0; -} -%extend_7 { - vertical-align: top; -} -%extend_8 { - text-decoration: none; - text-transform: capitalize; - color: $color_0; -} -%extend_9 { - position: absolute; - right: 40%; - top: 34%; - font-size: 48px; - color: $green; - height: 40px; - line-height: 42px; - border: 2px $white solid; - background-color: darken($green, 10%); - @include border-radius(50px); - @include transition(all ease 150ms); -} -%extend_10 { - display: inline-block; - padding: 10px 10px 30px 10px; -} -.main-icons { - @extend %extend_5; - padding-bottom: 50px; - border-bottom: 1px solid $color_3; - h1 { - color: $color_0; - font-weight: normal; - text-transform: capitalize; - text-align: center; - float: none; - margin: 50px 0; - } - .icons { - display: inline-block; - width: 33%; - text-align: center; - span { - font-size: 5em; - padding-bottom: 30px; - } - h2 { - margin: 0; - font-size: 1.7em; - } - p { - width: 285px; - margin: 0 auto; - } - } -} -.search-box { - position: relative; - margin-top: -90px; - margin-bottom: 50px; - text-align: center; - #search { - max-width: 80%; - padding: 20px !important; - @include border-radius(0); - } - #search-icon { - width: 28px; - height: 28px; - position: absolute; - top: 14px; - right: 120px; - font-size: 28px; - line-height: 45px; - text-align: center; - cursor: pointer; - } -} -.listing { - @extend %extend_5; - .latest-guides { - @extend %extend_7; - display: inline-block; - width: 49%; - margin-right: 1.3%; - ul { - @extend %extend_6; - li { - border-bottom: 1px solid $color_3; - padding: 10px 10px 30px 10px; - &:hover { - background: $color_2; - } - .title { - display: block; - } - a { - @extend %extend_8; - } - .meta { - font-style: italic; - font-size: 12px; - .author { - font-weight: bold; - } - .date { - font-weight: bold; - } - } - } - } - } - .latest-videos { - @extend %extend_7; - display: inline-block; - width: 49%; - ul { - @extend %extend_6; - li { - @extend %extend_10; - width: 45%; - .title { - display: block; - text-align: center; - min-height: 75px; - } - a { - @extend %extend_8; - position: relative; - display: block; - overflow: hidden; - height: 125px; - border: 1px solid $color_0; - } - img { - width: 300px; - height: 170px; - margin-top: -22px; - } - .youtube-play { - @extend %extend_9; - &:hover { - color: $color_0; - } - } - } - } - } - #page-videos { - @extend %extend_7; - h2 { - color: $green; - font-size: 26px; - padding-left: 56px; - margin-bottom: 50px; - - span { - display: inline-block; - background: url(/img/sprite.png) -2px -62px; - background-size: 47px 100px; - width: 44px; - height: 36px; - position: absolute; - left: 20px; - top: -2px; - } - } - - ul { - @extend %extend_6; - &:after { - content: " "; - display: table; - clear: both; - } - li:nth-child(4n) { - padding-right: 0; - } - li { - display: inline-block; - padding: 10px 40px 30px 0; - width: 22%; - height: 160px; - float: left; - - .title { - display: block; - margin-top: 8px; - } - a { - @extend %extend_8; - color: $grey; - position: relative; - // display: block; - border-bottom-style: dotted; - border-color: $grey; - border-width: 1px; - } - img { - width: 300px; - height: 169px; - } - .youtube-play { - @extend %extend_9; - &:hover { - color: $color_0; - } - } - } - } - } -} -.video { - margin-bottom: 50px; - a { - @extend %extend_8; - position: relative; - display: block; - } - img { - width: 460px; - height: 340px; - margin: 0 auto; - display: block; - } - .youtube-play { - top: 40%; - right: 45%; - @extend %extend_9; - &:hover { - color: $color_0; - } - } -} -#page-search { - #search-results .result { - padding-bottom: 30px; - margin-bottom: 20px; - border-bottom: solid 1px #ccc; - h3 { - margin: 0; - } - p { - margin: 0; - font-size: 13px; - } - } - #search-results .result:last-child { - padding: 0; - margin: 0; - border: none; - } -} - - -#page-404 h2, -#page-404 p { - text-align: center; -} - -#page-faq { - > ul { - list-style-type: none; - padding: 0; - margin: 0; - > li:last-child { - border-bottom: none; - } - > li { - border-bottom: 1px solid #e4e4e4; - @include transition(all ease 150ms); - &:hover .readmore a { - padding-left: 20px; - } - .title { - display: block; - } - a { - color: $grey; - border-bottom-style: dotted; - border-color: $grey; - border-width: 1px; - text-decoration: none; - } - .meta { - font-style: italic; - font-size: 12px; - .author, - .date { - font-weight: bold; - } - } - } - } - .pagination { - li { - display: inline-block; - margin: 10px; - padding: 0; - border: 0; - cursor: pointer; - a { - padding: 5px; - } - .currentPage { - background: $color_4; - color: $color_1; - } - } - } - .excerpt { - font-size: 16px; - p { - width: 85%; - float: left; - } - .readmore { - float: left; - width: 8%; - text-align: center; - padding: 20px 0; - margin-left: 7%; - a { - color: $color_4; - font-size: 2em; - } - } - overflow: hidden; - } - > ul > li:last-child { - margin-bottom: 0; - padding-bottom: 0; - } - > ul > li { - margin-bottom: 30px; - padding-bottom: 36px; - } - .question { - line-height: 30px; - margin-top: 0; - margin-bottom: 10px; - a { - color: $grey; - font-weight: 600; - font-size: 18px; - text-transform: capitalize; - } - } - .answer { - line-height: 22px; - } - .answer p:last-child { - margin-bottom: 0; - } -} - -// -// ## Sane Section -// The following section is considered "sane". Above is converted -// CSS->SCSS, below is hand written. -// - -body > header { - color: $white; - h2 { - line-height: 64px; - margin-top: 10px; - margin-bottom: 10px; - font-size: 32px; - } -} -body > header > .container { - font-size: 16px; -} - -body > header h1, -body > nav h1 { - float: left; -} - -body > .page { - padding-top: 60px; -} - -.docs-content > h1:first-of-type { - text-align: center; - margin: 0; -} - -// ## Guides Page -#page-guides { - > ul { - margin-top: -6px; - padding: 0; - - -webkit-column-count: 2; - -moz-column-count: 2; - column-count: 2; - } - > ul > li { - display: inline-block; - min-width: 250px; - list-style: none; - } -} -#page-category { - h1 { - margin-bottom: 20px; - } - .verbose-guide-list { - padding: 0; - margin: 0 0 0 15px; - } -} - - -.fancy-youtube-highlight { - //margin: 100px auto 60px; - // Experimenting with the video overlapping header - margin: -275px auto 55px; - - .video-shadow { - margin: 80px 54px 50px; - height: 300px; - // background-color: darken($light-grey, 10%); - border-radius: 10px; - position: relative; - #shadow-left { - position: absolute; - left: 0; - top: 0; - z-index: 10; - height: 300px; - @include border-radius(10px); - } - #shadow-right { - position: absolute; - top: 0; - right: 0; - z-index: 10; - height: 300px; - @include border-radius(10px); - } - } - - .main { - position: relative; - top: -50px; - margin: 0 auto; - width: 700px; - height: 390px; - @include border-radius(10px); - background-color: $light-black; - z-index: 20; - -webkit-box-shadow: 0px 0px 10px 0px rgba(50, 50, 50, 1); - -moz-box-shadow: 0px 0px 10px 0px rgba(50, 50, 50, 1); - box-shadow: 0px 0px 10px 0px rgba(50, 50, 50, 1); - .youtube-mini { - border: none; - height: 100%; - - img { - margin-top: 0; - height: 100%; - width: 100%; - } - - .youtube-play { - top: 40%; - right: 44%; - font-size: 94px; - height: 80px; - line-height: 82px; - } - } - - .title { - display: block; - padding: 16px 10px 10px; - color: $white; - font-size: 16px; - text-align: center; - - a { - border-bottom: none; - color: inherit; - } - } - } - - > .title { - margin-bottom: 15px; - font-size: 18px; - text-align: center; - } - - ul { - width: 700px; - margin: 0 auto; - padding: 0; - - &:after { - content: " "; - display: table; - clear: both; - } - } - li { - list-style: none; - width: 22%; - margin-left: 4%; - float: left; - } - li:first-child { - margin-left: 0; - } - li .youtube-mini { - height: 86px; - } - li .title { - display: block; - color: lighten($grey, 5%); - font-size: 13px; - line-height: 16px; - vertical-align: top; - text-align: center; - } -} - -a.youtube-mini { - position: relative; - display: block; - overflow: hidden; - height: 125px; - border: 1px solid $dark-grey; - border-radius: 6px; - - img { - width: 300px; - height: 170px; - margin-top: -22px; - } - - .youtube-play { - top: 25%; - right: 35%; - @extend %extend_9; - &:hover { - color: $color_0; - } - // This rule lost the battle to %extend_9, so for now i'm just editing - // extend_9 manually, until we refactor the wtf-ness. - } -} - -// # Large videos -.video .youtube-mini { - height: auto; - border-radius: 0; -} -.video .youtube-mini img { - width: auto; - height: auto; - max-width: inherit; - margin: 0; -} -.video .youtube-mini .youtube-play { - top: 36%; - right: 40%; - font-size: 94px; - height: 80px; - line-height: 82px; -} - -.content-previews { - margin-top: 60px; - padding: 0; - - &:after { - content: " "; - display: table; - clear: both; - } -} -.content-previews li { - float: left; - width: 47%; - height: 200px; - font-size: 16px; - padding: 10px; - list-style: none; -} -.content-preview { - a { - border-bottom: 1px $grey solid; - } - a:hover { - text-decoration: none; - } - - h4 { - font-size: 16px; - } - - p { - font-size: 14px; - margin-top: 0; - } -} -.content-preview.custom { - text-align: center; - h4 { - font-size: 26px; - font-weight: normal; - } - p { - font-size: 16px; - } -} - - -.series-nav { - margin-top: 40px; - padding: 0; - li { - width: 85px; - list-style: none; - text-align: center; - line-height: 28px; - font-size: 12px; - color: #000; - background-color: $light-grey; - border: 1px $light-grey solid; - border-radius: 4px; - } - a { - display: block; - border: none; - } - a:hover { - text-decoration: none; - } - li:hover { - border: 1px $green solid; - } - &:after { - content: " "; - display: table; - clear: both; - } -} -// ORDER IS IMPORTANT -// If there is only one child, it is set to float right first, and then left. -// which is what we want. -.series-nav li:last-child { - float: right; -} -.series-nav li:first-child { - float: left; -} - -.pagination { - margin-top: 40px; - padding-left: 15px; - li { - display: inline-block; - width: 28px; - list-style: none; - text-align: center; - line-height: 28px; - font-size: 12px; - color: #000; - background-color: $light-grey; - border: 1px $light-grey solid; - border-radius: 4px; - margin-right: 5px; - } - .previous, - .next { - width: 85px; - } - .currentPage { - background-color: $green; - a { color: $white; } - } - a { - display: block; - border: none; - } - a:hover { - text-decoration: none; - } - li:hover { - border: 1px $green solid; - } -} - - -.koding-linkback { - margin-top: 30px; - padding-left: 0; - text-align: center; - - li { - display: inline-block; - width: 110px; - padding: 1px; - margin-right: 2px; - list-style: none; - - background-color: $green; - border-radius: 4px; - text-transform: capitalize; - - color: $white; - font-weight: bold; - font-size: 11px; - line-height: 28px; - - a, a:hover { - display: block; - color: inherit; - text-decoration: none; - } - - &:hover { - color: $light-grey; - background-color: $dark-grey; - border-radius: 4px; - } - } - - li:last-child { - margin-right: 0; - } -} - -.koding-linkback .signup { } -.koding-linkback .signin { - background-color: $white; - color: $green; - padding: 0; - &:hover a { - border-color: $dark-grey; - } - a { - border: 1px $green solid; - border-radius: 4px; - } -} -.koding-linkback .large { - width: auto; - padding-left: 8px; - padding-right: 8px; - text-transform: none; -} -.koding-linkback .discuss { - color: $dark-grey; - background-color: $light-grey; -} - - -.guides-intro { - margin-bottom: 60px; - - h1, p { - text-align: center; - } - h1 { - margin-bottom: 0px; - } - h2 { - margin-left: 0; - font-weight: normal; - } - p { - margin: 0 auto; - width: 550px; - line-height: 21px; - } - ul { - padding: 0; - } - li { - list-style: none; - } - &:after { - content: " "; - display: table; - clear: both; - } -} -.guides-intro .favorites, -.guides-intro .recent { - margin: 60px 5%; - width: 40% -} -.guides-intro .favorites { - float: left; -} -.guides-intro .recent { - float: right; -} -.guides-intro .tags { - text-align: center; - li { - display: inline-block; - margin-right: 6px; - text-transform: capitalize; - &:after { - content: "," - } - } - li:last-child { - margin-right: 0; - &:after { - content: "" - } - } -} - - -// ## TAGLIST -.tag-list { - padding: 6px; -// font-size: 14px; - ul { - padding: 0; - } - li { - line-height: 16px; - list-style: none; - margin-bottom: 10px; - } - li:last-child { - margin-bottom: 0; - } -} -.tag-list .tag-name { - margin: 0; - font-size: 15px; - font-weight: bold; - - &:before { - content: "#"; - } -} -.tag-list .view-all { - font-size: 12px; - margin-top: 6px; -} - - -// # PAGE-VIDEOS -#page-videos > .category { - border-bottom: 2px solid $light-grey; - padding-bottom: 10px; - margin-bottom: 40px; -} -#page-videos > .category:last-child { - border-bottom: none; - padding-bottom: 0; - margin-bottom: 0; -} -#page-videos > .category .title { - display: block; - color: lighten($grey, 5%); - font-size: 13px; - line-height: 16px; - vertical-align: top; - text-align: center; -} -#page-videos > .category > .title { - margin-left: 0; - font-size: 18px; - font-weight: bold; - line-height: inherit; - vertical-align: inherit; - text-align: inherit; -} - - -// ## SHARE BUTTONS -#share-buttons { -} -.rrssb-buttons { - height: 30px; - width: 600px; - margin: 0 auto; -} -.rrssb-buttons li a { - padding-top: 8px; -} -.rrssb-buttons li a .icon { - padding-top: 6px; -} -// The svg items -.rrssb-buttons li a .icon svg path, -.rrssb-buttons li a .icon svg polygon { - fill: #777; -} -.rrssb-buttons li a .text { - color: $dark-grey; - text-transform: capitalize; -} -.rrssb-buttons li.email a, -.rrssb-buttons li.facebook a, -.rrssb-buttons li.linkedin a, -.rrssb-buttons li.twitter a, -.rrssb-buttons li.reddit a, -.rrssb-buttons li.googleplus a { - background-color: white; - border: 1px solid $light-grey; - border-radius: 3px; - box-shadow: 0 1px 0 rgba(0,0,0, 0.08); - - &:hover { - background-color: inherit; - border-color: lighten($grey, 25%); - } -} - -// ## Page/Series Content Meta -.guide-content .meta { - margin: 0 0 12px; - padding: 0; - width: 100%; - text-align: center; -} -.guide-content .meta li { - display: inline-block; - padding: 0; - color: #afb1b2; -} -.guide-content .meta li a, -.guide-content .meta li a:hover { - color: #afb1b2; -} -.guide-content .meta li:before { - content: "\2022"; - margin: 0 10px 0 6px; -} -.guide-content .meta li:first-child:before { - content: none; -} - - -code { - padding: 1px 6px; - border-radius: 3px; - background-color: $light-grey; - font-size: 13px; -} -pre { - max-height: 1000px; - padding: 6px 12px; - border-radius: 3px; - background-color: $light-grey; - overflow: scroll; - line-height: 1.5; -} -pre code { - padding: 0; - border-radius: 0; - background: none; -} - -table { - width: 100%; - padding: 6px 12px; - border-radius: 3px; - background-color: $light-grey; -} - -.two-pane-list { - -webkit-column-count: 2; - -moz-column-count: 2; - column-count: 2; -} -.two-pane-list > li { - display: inline-block; - min-width: 250px; - margin-bottom: 16px; -} - - -#authors-page ul { - padding: 0; -} -#authors-page ul ul { - padding-left: 6px; -} -#authors-page li { - list-style: none; -} -#authors-page li li { - font-size: 14px; - line-height: 16px; - margin-bottom: 8px; -} -#authors-page li li:last-child { - margin-bottom: 0; -} -#authors-page h2 { - margin: 0; - font-size: 15px; - font-weight: 600; - line-height: 20px; -} -#authors-page span { - display: inline-block; - margin-bottom: 6px; -} -#authors-page h2 a, -#authors-page h2 a:hover, -#authors-page h2 a:visited { - color: inherit; -} -#authors-page .view-all { - font-size: 12px; -} - - -#author-page h1, -#authors-page h1 { - margin-bottom: 20px; -} - - -// Verbose Guide list. Ie, many guides with meta and possible description -.verbose-guide-list ul { - padding: 0; -} -.verbose-guide-list li { - list-style: none; - margin-bottom: 12px; - border-bottom: 1px solid $light-grey; -} -.verbose-guide-list li:last-child { - margin-bottom: 0px; -} -.verbose-guide-list .title { - font-size: 16px; - color: $light-black; - a { border-bottom: none; } - a:hover { - border-bottom: 1px dotted $grey; - } -} -.verbose-guide-list .meta { - line-height: 18px; - font-size: 13px; - font-style: italic; - color: $light-grey2; - a { color: $color_4; } -} -.verbose-guide-list .title { - margin: 0; - color: $light-black; - a { color: inherit } -} -.verbose-guide-list .meta ul { - display: inline-block; -} -.verbose-guide-list .meta li { - display: inline-block; - padding-right: 5px; - margin-bottom: 12px; -} -.verbose-guide-list .meta li:after { - content: ","; -} -.verbose-guide-list .meta li:last-child:after { - content: ""; -} - - -// Anchor Links -.heading { - position: relative; - margin-left: -20px; - padding-left: 20px; -} -.heading:hover .anchor:before { - content: '#'; - position: absolute; - left: 0px; -} - - -// Edit on Github Button -.editongithub { - display: inline-block; - position: absolute; - top: -32px; - right: 0; - - border: 1px solid $light-grey; - border-radius: 3px; - box-shadow: 0 1px 0 rgba(0,0,0, 0.08); - - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-size: 11px; - font-weight: bold; - - cursor: pointer; -} -.editongithub a { - display: block; - padding: 4px 10px; -} -.editongithub:hover { - border-color: $grey; -} -.editongithub a:hover { - text-decoration: none; -} - -// Guide Footer -.guide-footer { - margin-top: 30px; -// margin-bottom: 60px; - height: 80px; - padding: 0; - text-align: center; -} -.guide-footer ul { - padding-left: 0; -} - -// Guide buttons - -.guide-button { - display: inline-block; - min-width: 106px; - - margin: 0 2px; - - border: 1px solid $light-grey; - border-radius: 3px; - box-shadow: 0 1px 0 rgba(0,0,0, 0.08); - - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-size: 11px; - font-weight: bold; - color: $dark-grey; - text-align: center; - - cursor: pointer; -} -.guide-button a { - display: block; - padding: 4px 10px; - color: inherit; -} -.guide-button:hover { - border-color: $grey; -} -.guide-button a:hover { - text-decoration: none; -} - -.guide-button.github { - padding-left: 20px; - background-image: url("/img/github-32.png"); - background-repeat: no-repeat; - background-position: 8px 7px; - background-size: 16px; -} - - -// CREATIVE COMMONS - -footer.main-footer a.cclicense { - margin-right: 0px; -} -footer.main-footer .cclicense img { - display: inline-block; - margin-bottom: -3px; -} - - -//-------------------------- - -#disqus_thread { - position: relative; - &:after { - content: ""; - display: block; - height: 55px; - width: 100%; - position: absolute; - bottom: 0; - background: white; - } -} - -//-------------------------- - -.back-to-top { - margin: 0; - position: fixed; - bottom: 135px; - right: 0; - width: 70px; - height: 70px; - z-index: 100; - display: none; - text-decoration: none; - text-align: center; - color: #434343; - i { - font-size: 50px; - } - &:hover { - text-decoration: none; - color: #a2a2a2; - } -} - -.tip:before { - color: #50af51; -} - -.alert:before { - color: #d9534f; -} diff --git a/.metalsmith/sass/rwd.scss b/.metalsmith/sass/rwd.scss deleted file mode 100644 index 293bdc31c..000000000 --- a/.metalsmith/sass/rwd.scss +++ /dev/null @@ -1,332 +0,0 @@ -/* Landscape phones and down */ -@media only screen and (max-width: 480px) { - body { - background-color: #5c656d !important; - background-image: none !important; - } - nav { - .container { - .topSearchButton { - margin-right: 55px; - padding: 5px; - } - .toplinks { - margin: 0; - padding: 0 12px; - display: none; - } - #menu { - padding-top: 20px; - li { - width: 55%; - display: inline-block; - margin-right: 0; - padding-bottom: 10px; - .icon { - float: right; - margin-top: 7px; - } - } - #mobile-menu { - display: block; - } - > .toplinks { - > li { - .submenu { - width: 280px; - left: -10px; - .column { - width: 100% !important; - min-height: auto; - display: block; - } - } - } - } - } - } - .topSearchBox { - position: absolute; - top: 70px; - left: 50%; - width: 280px; - margin-left: -140px; - z-index: 10; - input { - padding: 5px 10px; - } - } - } - header { - nav { - .topSearchBox { - width: 280px; - margin-left: -140px; - z-index: 10; - input { - padding: 5px 10px; - } - } - } - >.container { - width: 280px; - } - } - .noHeader #logo span.img { - margin-left: 0; - } - .hiring { - display: none; - } - .container { - max-width: 280px; - } - .page { - >.container { - width: 280px; - .video-shadow { - margin: 80px 0 50px; - height: 120px; - #shadow-right, - #shadow-left { - display: none; - } - .main { - width: 280px; - height: 167px; - .youtube-mini .youtube-play { - top: 30%; - right: 35%; - } - } - } - } - } - section { - padding: 1em 0; - >.container { - width: 280px; - #left-nav { - width: 100%; - margin: 0; - float: none; - +.docs-content { - margin-top: 20px; - margin-left: 0; - } - a { - font-size: 1.2em; - } - } - .docs-content { - img { - max-width: 240px; - } - .tag-list { - li { - margin-bottom: 20px; - } - } - } - } - } - .guides-intro { - margin-bottom: 30px; - p { - width: 280px; - } - } - #page-guides, - #authors-page { - >ul { - -webkit-column-count: 1; - -moz-column-count: 1; - column-count: 1; - margin-top: 0; - font-size: 1em; - } - } - .listing #page-videos ul li { - display: block; - width: 240px; - padding: 10px 0 30px 0; - margin: 0 20px; - } - .guide-footer { - height: auto !important; - } - .guide-button { - display: block; - margin-bottom: 10px; - font-size: 1em; - } - .rrssb-buttons { - width: 280px; - height: auto; - } - #disqus_thread { - margin-bottom: -205px; - &:after { - height: 230px !important; - } - } - footer.main-footer { - z-index: 20; - position: relative; - } -} - -/* Landscape phone to portrait tablet */ -@media (min-width: 480px) and (max-width: 768px) { - body { - background-color: #5c656d !important; - background-image: none !important; - } - nav { - .container { - .topSearchButton { - margin-right: 55px; - padding: 5px; - } - .toplinks { - margin: 0; - padding: 0 12px; - display: none; - } - #menu { - padding-top: 20px; - width: 100%; - li { - width: 50%; - display: inline-block; - margin-right: 0; - padding-bottom: 10px; - } - #mobile-menu { - display: block; - } - } - } - .topSearchBox { - position: absolute; - top: 70px; - left: 50%; - width: 440px; - margin-left: -220px; - z-index: 10; - input { - padding: 5px 10px; - } - } - } - header { - nav { - .topSearchBox { - width: 440px; - margin-left: -220px; - z-index: 10; - input { - padding: 5px 10px; - } - } - } - >.container { - width: 400px; - } - } - .hiring { - display: none; - } - .page { - >.container { - width: 400px; - .video-shadow { - margin: 80px 0 50px; - height: 200px; - #shadow-right, - #shadow-left { - display: none; - } - .main { - width: 400px; - height: 239px; - .youtube-mini .youtube-play { - top: 30%; - right: 35%; - } - } - } - } - } - section { - padding: 1em 0; - >.container { - width: 400px; - #left-nav { - width: 100%; - margin: 0; - float: none; - +.docs-content { - margin-top: 20px; - margin-left: 0; - } - a { - font-size: 1.2em; - } - } - .docs-content { - img { - max-width: 240px; - } - .tag-list { - li { - margin-bottom: 20px; - } - } - } - } - } - .guides-intro { - margin-bottom: 30px; - p { - width: 400px; - } - } - #page-guides, - #authors-page { - >ul { - -webkit-column-count: 1; - -moz-column-count: 1; - column-count: 1; - margin-top: 0; - font-size: 1em; - } - } - .listing #page-videos ul li { - width: 190px; - padding: 10px 0 30px; - margin: 0 5px; - } - .guide-footer { - height: auto !important; - } - .guide-button { - display: block; - margin-bottom: 10px; - font-size: 1em; - } - .rrssb-buttons { - width: 400px; - height: auto; - } - #disqus_thread { - margin-bottom: -180px; - &:after { - height: 230px !important; - } - } - footer.main-footer { - z-index: 20; - position: relative; - } -} diff --git a/.metalsmith/templates/404-tag.toffee b/.metalsmith/templates/404-tag.toffee deleted file mode 100644 index 1166e5f06..000000000 --- a/.metalsmith/templates/404-tag.toffee +++ /dev/null @@ -1,18 +0,0 @@ -#{partial 'head.toffee'} -#{partial 'topnav.toffee'} - -

- -#{partial 'sidebar.toffee'} - -
-

No guides for this category yet!

-

- Sorry, no guides have been created for this categoy yet. If you think there's a specific guide you would want to see under this - section then you can always request a new guide by contacting us or checkout how you can contribute one on your own! -

-
- -
-#{partial 'footer.toffee'} - diff --git a/.metalsmith/templates/404.toffee b/.metalsmith/templates/404.toffee deleted file mode 100644 index 829ccaba8..000000000 --- a/.metalsmith/templates/404.toffee +++ /dev/null @@ -1,18 +0,0 @@ -#{partial 'head.toffee'} -#{partial 'topnav.toffee'} - -
- -#{partial 'sidebar.toffee'} - -
-

Page Not Found

-

- The page you requested cannot be found. If you think this is in - error, please Contact Us. -

-
- -
-#{partial 'footer.toffee'} - diff --git a/.metalsmith/templates/author.toffee b/.metalsmith/templates/author.toffee deleted file mode 100644 index 71df46c05..000000000 --- a/.metalsmith/templates/author.toffee +++ /dev/null @@ -1,50 +0,0 @@ -{# -findTagName = (key) -> - if tagNames[key]? - name = tagNames[key] - else - name = key.charAt(0).toUpperCase() + key.slice(1) -#} - - -#{partial 'head.toffee', title: "Guides by #{author.name}"} -#{partial 'topnav.toffee'} -
- -#{print partial 'sidebar.toffee'} -
-

Latest guides by #{author.name}

- {### Not Implemented, Currently. - - ###} -
    - {# for guide in author.guides {: -
  • -

    #{print guide.title}

    -
    - about #{print moment(guide.date).fromNow()} - - {# if guide.categories? {: - • in categories - - :} #} -
    -
  • - :} #} -
-
- -
-#{partial 'footer.toffee'} - diff --git a/.metalsmith/templates/authors.toffee b/.metalsmith/templates/authors.toffee deleted file mode 100644 index 999856bb5..000000000 --- a/.metalsmith/templates/authors.toffee +++ /dev/null @@ -1,40 +0,0 @@ -#{partial 'head.toffee', title: 'Authors'} -#{partial 'topnav.toffee'} -
- -#{print partial 'sidebar.toffee'} -
-

Koding University Authors

-
    - {# for authorSlug, author of authors {: -
  • -

    - {# - if author.username? - {: #{author.name} :} - else - {: #{author.name} :} - #} -

    - - Latest guides - -
      - {# for guide in author.guides[..5] {: -
    • - #{guide.title} -
    • - :} #} -
    - - {# if author.guides.length > 5 {: - see more - :} #} -
  • - :} #} -
-
- -
-#{partial 'footer.toffee'} - diff --git a/.metalsmith/templates/faq.toffee b/.metalsmith/templates/faq.toffee deleted file mode 100644 index 1988b01a8..000000000 --- a/.metalsmith/templates/faq.toffee +++ /dev/null @@ -1,25 +0,0 @@ -#{partial 'head.toffee'} -#{partial 'topnav.toffee'} -
- -#{partial 'sidebar.toffee'} -
-

#{title}

- -
- #{print contents} -
- - #{partial 'guidefooter.toffee'} -
- -
-#{partial 'footer.toffee'} - diff --git a/.metalsmith/templates/faqs.toffee b/.metalsmith/templates/faqs.toffee deleted file mode 100644 index 0b49dcbc1..000000000 --- a/.metalsmith/templates/faqs.toffee +++ /dev/null @@ -1,47 +0,0 @@ -#{partial 'head.toffee', title: 'Commonly Asked Questions'} -#{partial 'topnav.toffee'} -
- - - -
-
    - {# for faq in collections.faq {: -
  • - -

    - #{faq.title} -

    -
    - #{print faq.snapshot} -
    -
  • - :} #} -
-
- -
-#{partial 'footer.toffee'} diff --git a/.metalsmith/templates/feed.toffee b/.metalsmith/templates/feed.toffee deleted file mode 100644 index 528af5b36..000000000 --- a/.metalsmith/templates/feed.toffee +++ /dev/null @@ -1,30 +0,0 @@ - - - - Koding University - - //learn.koding.com - - An education center focused around the online development environment - Koding. - - en - {# for item in items {: - - #{item.title} - //learn.koding.com#{item.link} - #{item.pubDate} - //learn.koding.com#{item.guid} - #{item.author.name} - #{item.description} - - :} #} - - diff --git a/.metalsmith/templates/footer.toffee b/.metalsmith/templates/footer.toffee deleted file mode 100644 index f2ca52c92..000000000 --- a/.metalsmith/templates/footer.toffee +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - -{# -# Add any scripts defined in other templates. -print script for script in scripts -#} - - - diff --git a/.metalsmith/templates/guidefooter.toffee b/.metalsmith/templates/guidefooter.toffee deleted file mode 100644 index de038411e..000000000 --- a/.metalsmith/templates/guidefooter.toffee +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/.metalsmith/templates/guides.toffee b/.metalsmith/templates/guides.toffee deleted file mode 100644 index dd52b1f1e..000000000 --- a/.metalsmith/templates/guides.toffee +++ /dev/null @@ -1,27 +0,0 @@ -#{partial 'head.toffee', title: 'Guides'} -#{partial 'topnav.toffee'} -
- -
-

Guides

-

- Guides are written to help you look at the step wise process for installing, - configuring or updating software packages and application in your Koding VM. -

-
- -#{partial 'sidebar.toffee'} - -
-
    - {# - for tagKey, t of tagsByUnique - continue if t.length is 0 - {: -
  • #{partial 'taglist.toffee', tags: tagsByUnique, tagKey: tagKey}
  • - :} - #} -
-
-
-#{partial 'footer.toffee'} diff --git a/.metalsmith/templates/head.toffee b/.metalsmith/templates/head.toffee deleted file mode 100644 index 58198813e..000000000 --- a/.metalsmith/templates/head.toffee +++ /dev/null @@ -1,73 +0,0 @@ - - - - {# - if title? - {: #{title} | Koding University :} - else - {: Koding University :} - #} - - {# if categories? {: - - :} #} - - - {# if redirect? {: - - :} #} - - - {# - if title? - {: :} - else - {: :} - #} - - - - - - - - - - - - - {# - if title? - {: :} - else - {: :} - #} - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.metalsmith/templates/header.toffee b/.metalsmith/templates/header.toffee deleted file mode 100644 index e318b52fd..000000000 --- a/.metalsmith/templates/header.toffee +++ /dev/null @@ -1,10 +0,0 @@ -
- #{partial 'topnav.toffee', nav: 'hasHeader'} -
-

What is Koding University?

-

- Koding University will get you acquainted with Koding as well as some of the popular technologies that are prevelant today and how you can get up and running with them in no time. - Start with the video below for an overview of Koding or use the links above to dig into other topics. Let the learning begin! -

-
-
diff --git a/.metalsmith/templates/index.toffee b/.metalsmith/templates/index.toffee deleted file mode 100644 index e924d301b..000000000 --- a/.metalsmith/templates/index.toffee +++ /dev/null @@ -1,62 +0,0 @@ -#{partial 'head.toffee'} -#{partial 'header.toffee'} - -{# -printVideo = (filename) -> - if typeof filename is 'string' - file = files[filename] - else - file = filename - - if not file? - return console.log "In func `printVideo(filename)`, - '#{filename}' does not exist." - if not file.videoId? - throw new Error 'Video ID Required for func `printVideo()`' - # Reference name for sanity sake - video = file - {: -
  • - - - - - - #{video.title} - -
  • - :} -#} - -
    - -
    -
    - - - -
    -
    - Koding Introduction -
    -
      - {## printVideo 'guides/social/index.html' ##} - {## printVideo 'guides/your-first-file/index.html' ##} - {## printVideo 'guides/the-terminal/index.html' ##} - {## printVideo 'guides/get-help-with-teamwork/index.html' ##} -
    -
    - - - -
    -#{partial 'footer.toffee'} diff --git a/.metalsmith/templates/linkback.toffee b/.metalsmith/templates/linkback.toffee deleted file mode 100644 index e786f50f1..000000000 --- a/.metalsmith/templates/linkback.toffee +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/.metalsmith/templates/page.toffee b/.metalsmith/templates/page.toffee deleted file mode 100644 index 18a857546..000000000 --- a/.metalsmith/templates/page.toffee +++ /dev/null @@ -1,67 +0,0 @@ -#{partial 'head.toffee'} -{# - if hideSidebar? and hideSidebar is true {: - #{partial 'topnav.toffee', nav: 'hasHeader'} - :} - else {: - #{partial 'topnav.toffee'} - :} -#} -
    - -{# if not hideSidebar? then print partial 'sidebar.toffee' #} - -
    -

    #{title}

    -
      -
    • - {# - if author.username? - {: by :} - else - {: by :} - #} -
    • -
    • Updated #{moment(date).fromNow()}
    • -
    - - - {# if videoId? {: - - :} #} - -
    - #{print contents} -
    - - #{partial 'guidefooter.toffee'} - -
    - - -
    - -
    -#{partial 'footer.toffee'} diff --git a/.metalsmith/templates/redirect.toffee b/.metalsmith/templates/redirect.toffee deleted file mode 100644 index 048f652ca..000000000 --- a/.metalsmith/templates/redirect.toffee +++ /dev/null @@ -1,14 +0,0 @@ -#{partial 'head.toffee', redirect: destination} -#{partial 'topnav.toffee'} -
    - -
    -

    Redirecting

    -

    - The page you requested has been moved. If you think this is in - error, please Contact Us. -

    -
    - -
    -#{partial 'footer.toffee'} diff --git a/.metalsmith/templates/search.toffee b/.metalsmith/templates/search.toffee deleted file mode 100644 index bd11c60c1..000000000 --- a/.metalsmith/templates/search.toffee +++ /dev/null @@ -1,17 +0,0 @@ -#{partial 'head.toffee'} -#{partial 'topnav.toffee', nav: 'hasHeader'} -
    - -
    -#{partial 'footer.toffee'} diff --git a/.metalsmith/templates/series.toffee b/.metalsmith/templates/series.toffee deleted file mode 100644 index 9b464f020..000000000 --- a/.metalsmith/templates/series.toffee +++ /dev/null @@ -1,95 +0,0 @@ -#{partial 'head.toffee'} -{# - if hideSidebar? and hideSidebar is true {: - #{partial 'topnav.toffee', nav: 'hasHeader'} - :} - else {: - #{partial 'topnav.toffee'} - :} -#} - -
    - -{# if not hideSidebar? then print partial 'sidebar.toffee' #} - -
    -

    #{title}

    - - {# if series.prev? {: -
      -
    • - {# - if author.username? - {: by :} - else - {: by :} - #} -
    • -
    • Updated #{moment(date).fromNow()}
    • -
    - :} #} - - {# if videoId? {: - - :} #} - -
    - #{print contents} -
    - - {## If prev does not exist, this is the "root" guide - add the index ##} - {# if not series.prev? {: -

    Series Index

    -
      - {# for page, i in series.pages[1..] {: - {## We use replace to remove the series title from all of the page titles ##} -
    1. #{page.title.replace title+': ', ''}
    2. - :} #} -
    - :} #} - - {# - if series.name is 'contribute' - if series.prev? {: - - :} - #} - - #{partial 'guidefooter.toffee'} - -
    - - -
    - -
    -#{partial 'footer.toffee'} diff --git a/.metalsmith/templates/sharrebtns.toffee b/.metalsmith/templates/sharrebtns.toffee deleted file mode 100644 index b88b1861f..000000000 --- a/.metalsmith/templates/sharrebtns.toffee +++ /dev/null @@ -1,90 +0,0 @@ - - - diff --git a/.metalsmith/templates/sidebar.toffee b/.metalsmith/templates/sidebar.toffee deleted file mode 100644 index 443e5a0f2..000000000 --- a/.metalsmith/templates/sidebar.toffee +++ /dev/null @@ -1,51 +0,0 @@ -{# -checkActive = (item) -> - if item.httplink is httplink then 'zactive' - else '' - -checkActiveItems = (items) -> - for item in items - if item.httplink is httplink then return 'zactive' - '' -#} - - - diff --git a/.metalsmith/templates/sitemap.toffee b/.metalsmith/templates/sitemap.toffee deleted file mode 100644 index 221af7cf1..000000000 --- a/.metalsmith/templates/sitemap.toffee +++ /dev/null @@ -1,10 +0,0 @@ - - - {# for item in items {: - - http://learn.koding.com#{item.link} - #{moment(item.pubDate).format 'YYYY-MM-DD'} - monthly - - :} #} - diff --git a/.metalsmith/templates/tag.toffee b/.metalsmith/templates/tag.toffee deleted file mode 100644 index a5b142496..000000000 --- a/.metalsmith/templates/tag.toffee +++ /dev/null @@ -1,76 +0,0 @@ -{# -findTagName = (key) -> - if tagNames[key]? - name = tagNames[key] - else - name = key.charAt(0).toUpperCase() + key.slice(1) - name = name.replace(/-/g, " ") -#} - - -#{partial 'head.toffee', title: "#{findTagName tagKey} guides"} -#{partial 'topnav.toffee'} -
    - -#{partial 'sidebar.toffee'} - -
    -

    #{findTagName tagKey} guides

    - -
    - #{print contents} -
    - - - -
      - {# if paginate.prev? {: - - :} #} - {# if paginate.total != 1 {: - {# for page, _ in paginate.pages {: -
    • #{page.paginate.index}
    • - :} #} - :} - #} - {# if paginate.next? {: - - :} #} -
    -
    - -
    -#{partial 'footer.toffee'} diff --git a/.metalsmith/templates/taglist.toffee b/.metalsmith/templates/taglist.toffee deleted file mode 100644 index 7144404b4..000000000 --- a/.metalsmith/templates/taglist.toffee +++ /dev/null @@ -1,22 +0,0 @@ - -{# -if tagNames[tagKey]? - tagName = tagNames[tagKey] -else - tagName = tagKey.charAt(0).toUpperCase() + tagKey.slice(1) - tagName = tagName.replace(/-/g, " ") -#} - -
    -

    #{tagName}

    - - - View all #{tagName} guides. - -
    diff --git a/.metalsmith/templates/topnav.toffee b/.metalsmith/templates/topnav.toffee deleted file mode 100644 index 21fe21885..000000000 --- a/.metalsmith/templates/topnav.toffee +++ /dev/null @@ -1,169 +0,0 @@ -{# -if nav? - {: