diff --git a/.assemblerc b/.assemblerc deleted file mode 100644 index e413e99..0000000 --- a/.assemblerc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "marked": { - "sanitize": false - }, - "prettify": { - "indent": 2, - "condense": true, - "padcomments": true - }, - "production": true -} \ No newline at end of file diff --git a/.assemblerc.yml b/.assemblerc.yml new file mode 100644 index 0000000..fc0624a --- /dev/null +++ b/.assemblerc.yml @@ -0,0 +1,213 @@ +# ============================================= +# SITE STATUS +# ============================================= + +# Site status is set via the command line using +# the `-m` or --mode` flag. Run `-h` or `--help` +# to see all available command line flags. + +# status: <% if(site.mode) { %><%= site.mode %><% } else { %>dev<% } %> + + +# ============================================= +# DEST CONFIG +# ============================================= + +root: _gh_pages +dest: <%= site.root %> + +# Dest assets +public: <%= site.dest %>/public + + +# ============================================= +# SOURCE CONFIG +# ============================================= + +# Data +data: data +utils: <%= site.data %>/_utils +mixins: <%= site.data %>/_utils +date: <%= new Date() %> + +# Assets > fonts, icons, images etc. +assets: assets +images: <%= site.assets %>/images +fonts: <%= site.assets %>/fonts + +# Styles +styles: styles + +# Scripts +scripts: scripts + +# Content +content: content + + +# ============================================= +# TEMPLATES +# ============================================= + +templates: structure + +# pages +pages: <%= site.templates %>/pages + +# partials +components: <%= site.templates %>/components +includes: <%= site.templates %>/includes +snippets: <%= site.templates %>/snippets + +# layouts +layouts: <%= site.templates %>/layouts +layoutext: .hbs +layout: two-col-sidebar-left + + +# ============================================= +# EXTENSIONS +# ============================================= + +# Handlebars helpers +helpers: <%= site.templates %>/_helpers + +# Assemble middleware +middleware: <%= site.templates %>/_middleware + + +# ============================================= +# WEBFONTS +# ============================================= + +webfonts: + - 'Open+Sans+Condensed:300,700:latin' # Headings + - 'Open+Sans:400,300,600,700:latin' # Body text + - 'Lora:400,700,400italic,700italic' # Blog + + +# ============================================= +# SITE METADATA +# ============================================= + +version: <%= pkg.version %> +current_version: <%= site.version %> + +name: <%= pkg.name %> +title: <%= pkg.name %> +brand: ASSEMBLE + +lead: Static site generator for Node.js, Grunt, gulp and Yeoman. +description: <%= pkg.description %> + +author: Jon Schlinkert, Brian Woodward, contributors + + +# ============================================= +# GITHUB +# ============================================= + +username: <%= _.username() %> +homepage: <%= _.repo_url() %> +repo: <%= _.repo_url() %> +issues: <%= pkg.bugs.url %>?state=open + + +# ============================================= +# URLs +# ============================================= + +domain: assemble.io +url: + + # Repo + homepage: <%= pkg.homepage %> + repo: <%= _.stripGit(pkg.repository.url) %> + issues: <%= pkg.bugs.url %>?state=open + + # Site + public: http://<%= site.domain %> + about: <%= site.url.public %>/about/ + blog: <%= site.url.public %>/blog/ + + # _.hostname mixin. See './data/utils/mixins.js' + domain: <%= _.hostname(site.url.public) %> + +license: + source: + type: MIT + url: https://github.com/sellside/assemble-book/blob/master/LICENSE-MIT + docs: + type: CC BY 3.0 + url: http://creativecommons.org/licenses/by/3.0/ + + +# ============================================= +# SEO / SEM +# ============================================= + +# Most of these are not enabled. You will need +# to setup accounts with the services you want +# to use and add the templates. + +analytics: + alexa: false + + # Google Analytics + google: + enabled: false + id: UA-XXXXXXXX-YY + siteid: false + domain: <%= site.domain %> + + # Google Tags (see: https://www.google.com/tagmanager/) + tags: FOO-012345 + + +# ============================================= +# SOCIAL / SHARING +# ============================================= + +# Like SEO/SEM, Most of these are not enabled. +# You will need to setup accounts with the +# services you want to use and add the templates. + +# Comments +disqus: + enabled: false + shortname: <%= pkg.name %> + +# Social +social: + enabled: false #<%= site.status %> + twitter: + via: jonschlinkert + username: assemblejs + related: jonschlinkert:Assemble core team. + facebook: false + linkedin: false + gplus: false + hn: false + google: false + +# Sharing +sharing: + enabled: false #<%= site.status %> + twitter: false + facebook: false + gplus: false + hn: false + google: false + + + +# ============================================= +# HTML VALIDATION ERROR CODES +# ============================================= + +html: + errorcodes: + - 'Bad value X-UA-Compatible for attribute http-equiv on element meta.' + - 'Element img is missing required attribute src.' + - 'The name attribute is obsolete. Consider putting an id attribute on the nearest container instead.' + - 'The element button must not appear as a descendant of the a element.' \ No newline at end of file diff --git a/.bowerrc b/.bowerrc index 8f98a03..4dece5f 100644 --- a/.bowerrc +++ b/.bowerrc @@ -1,3 +1,3 @@ { - "directory": "vendor" -} + "directory": "vendor" +} \ No newline at end of file diff --git a/.gitattributes b/.gitattributes index 2a02103..3aa3622 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,6 +1,6 @@ -# Set default behaviour, in case users don't have core.autocrlf set. -* text=lf -* text eol=lf +# Enforce Unix newlines, in case users don't have core.autocrlf set. +*.* text=lf +*.* text eol=lf *.* eol=lf *.jpg binary diff --git a/.gitignore b/.gitignore index 076d07c..42598a7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,67 @@ -# Always-ignore files -npm-debug.log -*.sublime-* -*.zip +# Numerous always-ignore extensions +*.csv +*.dat +*.diff +*.err +*.gz +*.log +*.orig +*.out +*.pid *.rar -TODO.md +*.rej +*.seed +*.swo +*.swp +*.vi +*.yo-rc.json +*.zip +*~ +.ruby-version +lib-cov + +# OS or Editor folders +*.esproj +*.komodoproject +*.sublime-project +*.sublime-workspace +._* +.cache +.DS_Store +.idea +.komodotools +.project +.settings +.tmproj +nbproject +Thumbs.db + +# logs +pids +logs +results -# Always-ignore folders -/docs +# grunt-html-validation +validation-status.json +validation-report.json + +# Folders to ignore _gh_pages +bower_components node_modules -src/generate -src/templates/pages/docs/drafts -tasks +npm-debug.log temp tmp -vendor \ No newline at end of file + +# Only ignore the root vendor +vendor +!styles/vendor + +# Planned +_draft +content/blog +content/boilerplates +content/examples +content/tutorials +build-chain.fw.png +TODO.md \ No newline at end of file diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a5c1b7d..0000000 --- a/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -node_js: - - "0.8" -before_script: - - npm install -g grunt-cli - - npm install grunt diff --git a/.verbrc.md b/.verbrc.md new file mode 100644 index 0000000..9ac053a --- /dev/null +++ b/.verbrc.md @@ -0,0 +1,11 @@ +# {%= name %} {%= badge('fury') %} + +> {%= description %} + +## License +{%= copyright() %} +{%= license() %} + +*** + +{%= include("footer") %} diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..5d410be --- /dev/null +++ b/AUTHORS @@ -0,0 +1,2 @@ +Jon Schlinkert (https://github.com/jonschlinkert/) +Brian Woodward (https://github.com/doowb/) \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js index ebc27ba..0e7b6fe 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,226 +1,437 @@ /* - * Documentation for Assemble: the static site generator and - * component builder for Node.js, Grunt.js and Yeoman. - * https://github.com/assemble/assemble-docs/ + * assemble.io * - * Copyright (c) 2013, Upstage + * Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors. * Licensed under the MIT license. */ 'use strict'; -module.exports = function (grunt) { +var resolve = require('resolve-dep'); +var argv = require('minimist')(process.argv.slice(2)); +var modeFlag = argv.m || argv.mode; +var deployFlag = argv.deploy; - // Mix local utilities into grunt instance. - grunt.util._.mixin(require('./src/extensions/mixins')); +module.exports = function(grunt) { - // Report elapsed execution time of grunt tasks. - require('time-grunt')(grunt); + + grunt.util.linefeed = '\n'; // Force unix-style newlines + grunt.util._.mixin(require('./data/_utils/utils')); // Mix utils into Lo-Dash - var prettify = function(src) { - return require('js-prettify').html(src, { - indent_size: 2, - indent_inner_html: true - }).replace(/(\r\n|\n\r|\n|\r){2,}/g, '\n'); - }; + require('time-grunt')(grunt); // Report the execution time of each task. - // Project configuration. + // Initialize Grunt configuration grunt.initConfig({ - /** - * Metadata for templates + /** + * Project Metadata: + * + * .assemblerc.yml: all Assemble.js confifguration */ + site : grunt.file.readYAML('.assemblerc.yml'), pkg : grunt.file.readJSON('package.json'), - bootstrap: grunt.file.readYAML('src/less/bootstrap.yml'), - ghpages : grunt.file.readYAML('src/less/ghpages.yml'), - site : grunt.file.readYAML('src/data/site.yml'), - helpers : grunt.file.readJSON('templates/pages/helpers.json'), // config for "helpers" docs + vendor : grunt.file.readJSON('.bowerrc').directory, + _assemble: grunt.file.readJSON('data/_assemble.json'), - /** - * Process LESS files - */ - less: { - options: { - imports: {reference: '<%= ghpages.globals %>'} - }, - main: { - src: ['<%= bootstrap.bundle.docs %>', '<%= ghpages.bundle.docs %>'], - dest: '<%= site.destination %>/assets/css/assemble.css' - }, - gist: { - src: ['src/less/docs/gist-overrides.less'], - dest: '<%= site.destination %>/assets/css/gist.css' - }, - markdown: { - src: ['src/less/components/markdown.less'], - dest: '<%= site.destination %>/assets/css/markdown.css' - } + load: { + helpers: resolve('handlebars-helper-*'), + middleware: resolve('assemble-middleware-*'), }, - /** - * Generate up-to-date list of Assemble's GitHub repos - */ - github: { - repos: { - options: {filters: {type: 'public'}}, - src: '/orgs/assemble/repos?page=1&per_page=100', - dest: 'src/data/repos.json' - } + metadata: { + year: '<%= grunt.template.today("yyyy") %>', + banner: [ + '/*!', + ' * <%= site.brand %> v<%= _assemble.version %> <<%= _assemble.homepage %>>', + ' * Copyright 2014-<%= metadata.year %>, <%= site.authors %>.', + ' * Source code licensed under the <%= site.license.source.type %> license.', + ' * Documentation licensed under <%= site.license.docs.type %>.', + ' */\n\n' + ].join('\n') + }, + + // Alias for Bootstrap's javascripts + bootstrap: { + js: '<%= vendor %>/bootstrap/dist/js', }, /** - * Generate the site. + * 1.0 HTML compilation tasks: + * + * 1.1 _Assemble_ task will take Markdown, YAML, and JSON content + * and compile HTML files. + * + * 1.2 _Validation_ task will validate compiled HTML. + * + * 1.3 _Prettify_ task will take compiled HTML and remove extra lines + * and spaces, fix indention, etc. */ assemble: { options: { - today: '<%= grunt.template.today() %>', - production: true, flatten: true, - // plugins: ['assemble-contrib-contextual'], - contextual: { - dest: './temp' + assets: '<%= site.public %>', + css: '<%= less.docs.dest %>', + pkg: '<%= pkg %>', + site: '<%= site %>', + _assemble: '<%= _assemble %>', + + data: [ + { + name: ':basename', + src: ['<%= site.data %>/{,*/}*.{json,yml}'] + } + ], + + partials: [ + '<%= site.components %>/{,*/}*.hbs', + '<%= site.includes %>/{,*/}*.hbs', + '<%= site.snippets %>/*.hbs', + '<%= site.content %>/**/*.md' + ], + + layoutdir: '<%= site.layouts %>', + layoutext: '<%= site.layoutext %>', + layout: '<%= site.layout %>', + + mixins: ['<%= site.mixins %>/utils.js'], + helpers: ['<%= load.helpers %>', '<%= site.helpers %>/*.js'], + middleware: ['<%= load.middleware %>'], + + // permalinks middleware options + permalinks: { + preset: 'pretty' }, - data: ['src/data/*.{json,yml}', 'package.json'], - assets: '<%= site.destination %>/assets', - helpers: ['src/extensions/*.js', 'helper-prettify'], - partials: ['templates/includes/**/*.{hbs,md}'], - layoutdir: 'templates/layouts', - layout: 'default.hbs', - marked: {sanitize: false }, - // postprocess: prettify, - prettify: { - indent: 2, - condense: true, - padcomments: true + + // `markdown` and `md` helper options (for marked-extras) + marked: { + process: true, + heading: '<%= site.snippets %>/heading.tmpl', + prefix: 'lang-' + }, + + // `inline` helper options + inline: { + origin: true, + prepend: 'popover-source-link' + } + }, + site: { + options: {theme: 'docs'}, + files: { + '<%= site.dest %>/': [ + '<%= site.pages %>/helpers.hbs', + '<%= site.content %>/*.hbs' + ] } }, + // Temporary task for homepage dev + homepage: { + files: { + '<%= site.dest %>/': ['<%= site.content %>/index.hbs'] + } + } + }, - /** - * Generate markdown navigation links - */ - links: { - options: { - postprocess: false, - flatten: true, - ext: '.hbs' - }, - src: 'templates/includes/snippets/links-template.md.hbs', - dest: 'templates/includes/snippets/generated-links.md.hbs' + validation: { + options: { + reset: true, + failHard: true, + charset: 'utf-8', + doctype: 'HTML5', + path: 'tmp/validation-status.json', + reportpath: 'tmp/validation-report.json', + relaxerror: '<%= site.html.errorcodes %>' }, + site: { + files: { + src: '<%= site.dest %>/{,*/}*.html' + } + } + }, - /** - * Build the main docs. - */ - docs: { + prettify: { + options: { + indent_scripts: 'keep' + }, + site: { files: [ { - expand: true, - cwd: 'templates/pages', - src: ['*.hbs'], - dest: '<%= site.destination %>/' - }, - { - expand: true, - cwd: 'templates/pages/docs', - src: ['*.hbs'], - dest: '<%= site.destination %>/docs/', - ext: '.html' - }, - { - expand: true, - cwd: 'templates/pages/contributing', - src: ['*.hbs'], - dest: '<%= site.destination %>/contributing/', + expand: true, + cwd: '<%= site.dest %>', + src: '{,*/}*.html', + dest: '<%= site.dest %>/', ext: '.html' } ] + } + }, + + /** + * 2.0 Stylesheet tasks: + * + * 2.1 _less_ task will compile CSS stylesheets + * from LESS source code. + * + * 2.2 _autoprefixer_ task will make sure compiled + * stylesheet supports the following browsers: + * - Last 2 versions of all major browsers + * - Internet Explorer 9 + * - Internet Explorer 8 + * + * 2.3 _csslint_ + */ + less: { + options: { + paths: [ + '<%= site.styles %>', + '<%= site.styles %>/vendor/bootstrap', + '<%= site.styles %>/components' + ] }, - - /** - * "Blog" section. - */ - blog: { - options: {layout: 'blog.hbs'}, - files: { - '<%= site.destination %>/blog/': ['templates/pages/blog/*.hbs'] - } - }, - - /** - * "Helpers" section. - * Uses: templates/pages/helpers.json - */ - helpers: { + docs: { options: { - ext: '.html', - flatten: true, - engine: 'handlebars', - pages: '<%= helpers.pages %>' + globalVars: { + theme: 'docs' + } }, - src: ['templates/pages/helpers/index.hbs'], - dest: '<%= site.destination %>/helpers/' + src: ['<%= site.styles %>/index.less'], + dest: '<%= site.public %>/css/docs.css' + }, + homepage: { + src: ['<%= site.styles %>/module/page-home.less'], + dest: '<%= site.public %>/css/home.css' + } + }, + + autoprefixer: { + options: { + browsers: ['last 2 version', 'ie 8', 'ie 9'] }, + styles: { + expand: true, + flatten: true, + src: '<%= site.public %>/css/*.css', + dest: '<%= site.public %>/css/' + }, + }, - /** - * "Plugins" section. - * Uses: templates/pages/helpers.json - */ - plugins: { + csslint: { + strict: { options: { - ext: '.html', - flatten: true, - engine: 'handlebars' + csslintrc: '<%= site.styles %>/.csslintrc' }, - src: ['templates/pages/plugins/index.hbs'], - dest: '<%= site.destination %>/plugins/' + src: ['<%= less.site.dest %>'] + } + }, + + csscomb: { + options: { + config: 'styles/.csscomb.json' }, + site: { + src: ['<%= less.docs.dest %>'], + dest: '<%= less.docs.dest %>' + } + }, + + uncss: { + options: { + ignore: ['#webfonts', '.active'] + }, + site: { + src: ['<%= site.dest %>/{,*/}*.html'], + dest: '<%= less.docs.dest %>' + } + }, + + /** + * 3.0 JavaScript tasks: + * + * 3.1 _jslint_ task will lint all scripts against + * the rules in ".jshintrc". + * + * 3.2 _uglify_ task will concatentate scripts + * 3.2.1 docs.js - primary scripts for /docs + 3.2.1 ie.js - provides IE8 support + */ + jshint: { + options: { + jshintrc: '<%= site.scripts %>/.jshintrc' + }, + all: [ + 'Gruntfile.js', + '<%= site.helpers.path %>/*.js' + // '<%= site.plugins.path %>/*.js', + // '<%= site.scripts %>/{,*/}*.js', + // '<%= site.utils %>/{,*/}*.js', + ] + }, + + uglify: { + options: { + banner: '<%= metadata.banner %>' + }, + + /** + * 3.2.1 "docs.js" + */ + docs: { + src: ['<%= site.scripts %>/{,*/}*.js'], + dest: '<%= site.public %>/js/docs.min.js' + }, + /** - * "Boilerplates" section. + * 3.2.2 "ie.js" + * Provides support in older versions of IE. + * Source scripts are installed via Bower. */ - boilerplates: { + ie: { + src: [ + './vendor/html5shiv/dist/html5shiv.js', + './vendor/respond/dest/respond.min.js' + ], + dest: '<%= site.public %>/js/ie.min.js' + } + }, + + + /** + * 4.0 intial project tasks + * + * 4.1 _copy_ task + * 4.1.1 vendor - Copy Bootstrap's js to local scripts + * 4.1.2 assets - Copy local fonts and images to `public` directory + * + * 4.2 _clean_ task will clean files from previous build. + */ + copy: { + vendor: { + src: '<%= bootstrap.js %>/bootstrap.js', + dest: '<%= site.scripts %>/vendor/bootstrap.js' + }, + assets: { files: [ { - expand: true, - cwd: 'templates/pages/boilerplates/', - src: ['*.hbs'], - dest: '<%= site.destination %>/boilerplates/', - ext: '.html' + expand: true, + cwd: '<%= site.assets %>', + src: '**', + dest: '<%= site.public %>/' } ] } }, + + clean: { + example: ['<%= site.dest %>/{,*/}*.{html,css,js}'] + }, - copy: { - docs: { + /** + * 5.0 Assemble Developer tasks + * + * 5.1 _connect_ task runs a local server at port 9000 + * + * 5.2 _watch_ task watched source files for changes + * 5.2.1 content - watch Markdown, Handlebars and source data files and run `assemble` task on change. + * 5.2.2 styles - watch LESS source code and run `less` task on change. + */ + connect: { + options: { + port: 9000, + livereload: 35729, + hostname: 'localhost' + }, + livereload: { + options: { + open: true, + base: ['<%= site.dest %>'] + } + } + }, + + watch: { + options: { + livereload: true + }, + content: { + tasks: ['assemble'], files: [ - {expand: true, cwd: 'contributing', src: ['**'], dest: '<%= site.destination %>/contributing'}, - {expand: true, cwd: 'docs', src: ['**'], dest: '<%= site.destination %>/docs'}, - {expand: true, cwd: './', src: ['*.html'], dest: '<%= site.destination %>/'} + '<%= site.templates %>/{,*/}*.hbs', + '<%= site.content %>/{,*/}*.md', + '<%= site.data %>/{,*/}*.{yml,json}' + ] + }, + styles: { + tasks: ['less'], + files: [ + '<%= site.styles %>/{,*/}*.less' + ] + }, + livereload: { + options: { + livereload: '<%= connect.options.livereload %>' + }, + files: [ + '<%= site.dest %>/{,*/}*.html', + '<%= site.assets %>/{,*/}*.css', + '<%= site.assets %>/{,*/}*.js', + '<%= site.assets %>/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' + ] + }, + // Temporary task for homepage dev + homepage: { + tasks: ['assemble:homepage','less:homepage'], + files: [ + '<%= site.content %>/index.hbs', + '<%= site.styles %>/module/page-home.less' ] } - }, - - // Before generating new files, clean out files from previous build. - clean: { - ghpages: ['<%= site.destination %>/**/*.html'] } }); - // Set the base path for Bootstrap LESS library. - grunt.config.set('vendor.base', 'vendor'); + /** + * Check for a command line option to deploy + * + * deployFlag - + * modeFlag - + */ + if (deployFlag) { + grunt.config.set('site.root', '_deploy'); + } + if (modeFlag) { + grunt.config.set('site.mode', modeFlag); + } - // Load npm and local plugins. - grunt.loadNpmTasks('assemble'); - grunt.loadNpmTasks('assemble-less'); - require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); + /* Load all modules listed in package.json Plugins with load-grunt-tasks */ + require('load-grunt-tasks')(grunt); - // Default task to be run. + /** + * 6.0 Primary tasks + * + */ + grunt.registerTask('prep', ['clean','copy']); // Clean dest folder + grunt.registerTask('compile', ['less','assemble']); // Compile CSS, HTML, etc. + grunt.registerTask('lint', ['jshint',]); // Lint and runt tests. + grunt.registerTask('prod', ['uglify']); + grunt.registerTask('document', ['verb']); // Compile README.md + + /** + * 7.0 Secondary tasks + * + * Use `grunt design` for development of the site. + * Use `grunt` to compile a production ready version of the site. + */ + grunt.registerTask('design', [ + 'default', + 'connect', + 'watch:design' + ]); grunt.registerTask('default', [ - 'clean:ghpages', - 'assemble:helpers', - 'assemble', - 'newer:less', - 'sync' + 'prep', + 'lint', + 'compile', + 'prettify', + 'uglify', + 'document' ]); }; diff --git a/LICENSE-CC b/LICENSE-CC new file mode 100644 index 0000000..1d658d6 --- /dev/null +++ b/LICENSE-CC @@ -0,0 +1,319 @@ +Creative Commons Legal Code + +Attribution 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY +BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined above) for the purposes of this + License. + c. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + d. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + e. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + f. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + g. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + h. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + i. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor waives the + exclusive right to collect such royalties for any exercise by You + of the rights granted under this License; and, + iii. Voluntary License Schemes. The Licensor waives the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(b), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(b), as requested. + b. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and (iv) , consistent with Section 3(b), in the case of an Adaptation, + a credit identifying the use of the Work in the Adaptation (e.g., + "French translation of the Work by Original Author," or "Screenplay + based on original Work by Original Author"). The credit required by + this Section 4 (b) may be implemented in any reasonable manner; + provided, however, that in the case of a Adaptation or Collection, at + a minimum such credit will appear, if a credit for all contributing + authors of the Adaptation or Collection appears, then as part of these + credits and in a manner at least as prominent as the credits for the + other contributing authors. For the avoidance of doubt, You may only + use the credit required by this Section for the purpose of attribution + in the manner set out above and, by exercising Your rights under this + License, You may not implicitly or explicitly assert or imply any + connection with, sponsorship or endorsement by the Original Author, + Licensor and/or Attribution Parties, as appropriate, of You or Your + use of the Work, without the separate, express prior written + permission of the Original Author, Licensor and/or Attribution + Parties. + c. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of this License. + + Creative Commons may be contacted at http://creativecommons.org/. diff --git a/LICENSE-MIT b/LICENSE-MIT index 7151ac2..96798e5 100644 --- a/LICENSE-MIT +++ b/LICENSE-MIT @@ -1,22 +1,21 @@ -Copyright (c) 2013 Assemble +The MIT License (MIT) -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: +Copyright (c) 2013-2014 Jon Schlinkert, Brian Woodward, Contributors. -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md index 21d81d7..6df1632 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,11 @@ -# [Assemble Documentation](http://assemble.io/) +# assemble.io [![NPM version](https://badge.fury.io/js/assemble.io.png)](http://badge.fury.io/js/assemble.io) -> Assemble is a component and static site generator that makes it dead simple to build modular sites, documentation and components from reusable templates and data. +> Documentation for Assemble. +## License +Copyright (c) 2014 Jon Schlinkert, contributors. +Released under the MIT, Creative Commons Attribution 3.0 Unported License licenses -#### [Visit the docs →](http://assemble.io/) +*** -#### [Get boilerplates →](https://github.com/assemble/assemble-boilerplates/) - - - -## Contributing -All contributions are welcome! The simplest way to show your support for this project is to **"star" it**. Please see [Contributing to Assemble](http://assemble.io/contributing) for more information. - - - -## Authors - -**Jon Schlinkert** - -+ [http://twitter.com/jonschlinkert](http://twitter.com/jonschlinkert) -+ [http://github.com/jonschlinkert](http://github.com/jonschlinkert) - -**Brian Woodward** - -+ [http://twitter.com/doowb](http://twitter.com/doowb) -+ [http://github.com/doowb](http://github.com/doowb) - - - -## Copyright and license -Copyright (c) 2013 Assemble -Released under the [MIT License](LICENSE-MIT). \ No newline at end of file +_This file was generated by [grunt-verb](https://github.com/assemble/grunt-verb) on May 15, 2014._ diff --git a/assets/fonts/glyphicons-halflings-regular.eot b/assets/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..4a4ca86 Binary files /dev/null and b/assets/fonts/glyphicons-halflings-regular.eot differ diff --git a/assets/fonts/glyphicons-halflings-regular.svg b/assets/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..e3e2dc7 --- /dev/null +++ b/assets/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/fonts/glyphicons-halflings-regular.ttf b/assets/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..67fa00b Binary files /dev/null and b/assets/fonts/glyphicons-halflings-regular.ttf differ diff --git a/assets/fonts/glyphicons-halflings-regular.woff b/assets/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..8c54182 Binary files /dev/null and b/assets/fonts/glyphicons-halflings-regular.woff differ diff --git a/assets/img/users/less.png b/assets/img/users/less.png new file mode 100644 index 0000000..1a739b3 Binary files /dev/null and b/assets/img/users/less.png differ diff --git a/assets/img/users/typeplate.png b/assets/img/users/typeplate.png new file mode 100644 index 0000000..4fb8866 Binary files /dev/null and b/assets/img/users/typeplate.png differ diff --git a/bower.json b/bower.json index 817816d..2f5ebd5 100644 --- a/bower.json +++ b/bower.json @@ -1,24 +1,14 @@ { - "name": "assemble-docs", - "version": "0.1.4", + "name": "assemble.io", + "version": "0.1.0", "main": [ - "Gruntfile.js" + "./" ], - "devDependencies": { - "assemble": "~0.4.3", - "assemble-less": "~0.5.3", - "grunt": "~0.4.1", - "grunt-contrib-clean": "~0.4.0", - "grunt-contrib-copy": "~0.4.1", - "grunt-contrib-jshint": "~0.6.0", - "grunt-github-api": "~0.1.2", - "highlight.js": "~7.3.0", - "js-beautify": "~1.4.0", - "lodash": "~1.3.1", - "matchdep": "~0.1.2", - "time-grunt": "~0.1.1", - "grunt-newer": "~0.5.1", - "grunt-sync-pkg": "~0.1.0", - "helper-prettify": "~0.1.3" + "dependencies": { + "bootstrap": "~3.1.1", + "html5shiv": "~3.7.2", + "respond": "~1.4.2", + "flare": "~1.0.0", + "jquery": "~2.1.1" } -} \ No newline at end of file +} diff --git a/content/docs/api/config.md b/content/docs/api/config.md new file mode 100644 index 0000000..798da77 --- /dev/null +++ b/content/docs/api/config.md @@ -0,0 +1,54 @@ +--- +title: Config +collection: docs +category: api +--- + +The purpose of the config API is to set and get general configuration values that can be used by any method. In other words, these methods are generically, and globally usable. + +## .option + +The .option() method sets values on the assemble.options object. + +``` +// set +assemble.option('abc', true); + +// get +assemble.option('abc')); //=> true +assemble.options.abc; //=> true +``` + +In addition to .option(), the following methods may be used as convenience methods for getting and setting Boolean values on the options object: + +``` +assemble.enable('xyz'); +//=> assemble.options.xyz = true; +``` + +Is xyz enabled? + +``` +assemble.enabled('xyz'); // 'true' +``` + +Is xyz disabled? + +``` +assemble.disabled('xyz'); // 'false' +``` + +Then let's disable it! + +``` +assemble.disable('xyz'); +``` + +## .set / .get + +The .set() method sets values on the assemble.cache object. This object is reserved just for you. Whatever the use case, feel free to set() to your heart's content. + +``` +assemble.set('level', 'admin'); +assemble.get('level'); //=> 'admin' +```` diff --git a/content/docs/api/data.md b/content/docs/api/data.md new file mode 100644 index 0000000..b225a08 --- /dev/null +++ b/content/docs/api/data.md @@ -0,0 +1,34 @@ +--- +title: Config +collection: docs +category: api +--- + +Load data that will ultimately be passed to templates as context at runtime. + +## .data + +Used for setting data to be used in templates. + +The method takes a string or array of glob patterns or file paths, or an object of data can be passed directly. + +### Example + +``` +assemble.data({title: 'Blog'}); +assemble.data('data/*.{json,yml}'); +assemble.data(['config/*.yml', 'data/*.json']); +``` + +### .transform + +Good for updating global data and options. Transforms are executed immediately and passed the current assemble upon initialization, so data and options can be updated. + +### Example + +``` +// loads package.json data onto `assemble.cache.data` +assemble.transform('load-package-data', function(app) { + app.data('package.json'); +}); +``` diff --git a/content/docs/api/helpers.md b/content/docs/api/helpers.md new file mode 100644 index 0000000..84e4dd2 --- /dev/null +++ b/content/docs/api/helpers.md @@ -0,0 +1,6 @@ +--- +title: Helpers +collection: docs +category: api +--- + diff --git a/content/docs/api/middleware.md b/content/docs/api/middleware.md new file mode 100644 index 0000000..10715eb --- /dev/null +++ b/content/docs/api/middleware.md @@ -0,0 +1,5 @@ +--- +title: Middleware +collection: docs +category: api +--- diff --git a/content/docs/api/overview.md b/content/docs/api/overview.md new file mode 100644 index 0000000..e2722d9 --- /dev/null +++ b/content/docs/api/overview.md @@ -0,0 +1,27 @@ +--- +title: Overview +collection: docs +category: api +--- + +The API consists of several concepts. + +### Config API + +The config API exposes methods for setting general configuation values that may be used by any other method, plugin or extension. + +### Data API + +The data API exposes methods for loading, transforming and processing data that will ultimately be passed as context to templates at runtime. + +### Template API + +The template API exposes methods for loading templates and for creating custom template types or collections. + +### Middleware API + +The middlweare API exposes methods for extending Assemble and individual template objects during specific stages at runtime. + +###Task API + +The task API exposes methods for actually building your projects, and for moving files from point A to point B. diff --git a/content/docs/build-systems/grunt.md b/content/docs/build-systems/grunt.md new file mode 100644 index 0000000..e69de29 diff --git a/content/docs/build-systems/gulp.md b/content/docs/build-systems/gulp.md new file mode 100644 index 0000000..d1fa669 --- /dev/null +++ b/content/docs/build-systems/gulp.md @@ -0,0 +1,5 @@ +--- +title: Gulp +published: false +--- + diff --git a/templates/pages/docs/Collections.md.hbs b/content/docs/collections/Collections.md similarity index 100% rename from templates/pages/docs/Collections.md.hbs rename to content/docs/collections/Collections.md diff --git a/templates/pages/docs/Content.md.hbs b/content/docs/content/Content.md similarity index 100% rename from templates/pages/docs/Content.md.hbs rename to content/docs/content/Content.md diff --git a/templates/pages/docs/Markdown-Styling.md.hbs b/content/docs/content/Markdown-Styling.md similarity index 99% rename from templates/pages/docs/Markdown-Styling.md.hbs rename to content/docs/content/Markdown-Styling.md index 99044d1..0091ee4 100644 --- a/templates/pages/docs/Markdown-Styling.md.hbs +++ b/content/docs/content/Markdown-Styling.md @@ -47,4 +47,3 @@ _**[Click here](http://assemble.io)**_ [_**Click here**_](http://assemble.io) [**_Click here_**](http://assemble.io) - diff --git a/content/docs/content/Markdown.md b/content/docs/content/Markdown.md new file mode 100644 index 0000000..0b2db39 --- /dev/null +++ b/content/docs/content/Markdown.md @@ -0,0 +1,79 @@ +--- +title: Markdown + +area: docs +section: content + +categories: +- content +- markdown +tags: +- content +- converters +- markdown +- HTML +--- + +> With Assemble you can use markdown however you want, wherever you want + +An advantage of writing content with markdown is that it is free from the angle brackets and tags used in HTML, so it feels and looks more like "content" than "code". + +With Assemble you can write: entire documents in markdown, and choose where and when to compile them to HTML; document fragments in markdown, which can be "included" or used as partials within other larger documents; and/or, sections of markdown directly inside HTML documents (referred to as "inline markdown"). + +### Markdown expression + +Use the markdown expression, `\{{md}}`, to enable importing of external markdown content. + +```handlebars +\{{md "../path/to/content.md"}} +``` + +Alternatively, you can add the content variable to the [YAML Front Matter][options#yaml-font-matter-options] (YFM) of a page. + +```yaml +--- +page: + title: Home +content: ../path/to/content.md +--- +``` + +This will allow you to just use just `content` in the markdown expression, the path will be pulled from YFM. + +```handlebars +\{{md content}} +``` + +### Markdown block expression + +The `\{{#markdown}}...\{{/markdown}}` block expression is used to "wrap" markdown content that is written "inline" directly inside HTML documents: + +```markdown +
+ +\{{#markdown}} +## But Inline Markdown is awesome + +> This is markdown content + +* Useful for simple content +* Great for blog posts +* Easier on the eyes than angle brackets +* Even links look prettier +* Such wow + +### Pretty links + +[Visit Assemble](http://github.com/assemble/assemble) + +\{{/markdown}} + +``` + +In a layout, can also wrap the `\{{> body }}` tag with the `\{{#markdown}}...\{{/markdown}}` block helper to convert any HTML pages that use that layout to markdown: + +```handlebars +\{{#markdown}} + \{{> body }} +\{{/markdown}} +``` diff --git a/content/docs/content/blog-posts.md b/content/docs/content/blog-posts.md new file mode 100644 index 0000000..30404ce --- /dev/null +++ b/content/docs/content/blog-posts.md @@ -0,0 +1 @@ +TODO \ No newline at end of file diff --git a/templates/pages/docs/Built-in-Variables.md.hbs b/content/docs/data/Built-in-Variables.md similarity index 56% rename from templates/pages/docs/Built-in-Variables.md.hbs rename to content/docs/data/Built-in-Variables.md index 753d81d..7e8d99a 100644 --- a/templates/pages/docs/Built-in-Variables.md.hbs +++ b/content/docs/data/Built-in-Variables.md @@ -5,8 +5,6 @@ area: docs section: configuration --- -### Also see [Avoiding Collisions][errors] → - ## "[Page][pages]" Variables The following variables are defined on the `page` object, which exposes data for the "current page" at build time: @@ -41,87 +39,3 @@ published: false --- ``` -### Collections -Collections can also be defined in YAML front matter: - -* `pages` : list of pages in a target. -* `categories` : lists of all the category objects -* `tags` : lists of all tag objects -* `paginate` (planned) - -> [Learn more][options-collections] about collections → - - - - -## Custom variables -You may add any custom variable you require to the `assemble` task or target options. Custom variables are added to the _root of the data context_ and be available in any templates. - -For example, given that the custom variable `production` is set to `false` : - -``` js -assemble: { - options: { - production: false - }, - ... -} -``` -This template: - -``` html -\{{#if production}} - -\{{else}} - -\{{/if}} -``` -Will render the HTML for the _non-minified_   script tag: - -``` html - -``` - -## Helpers - -Variables can be modified using using special tags called [helpers][helpers]. Helpers may also accept parameters, each of which is a [Handlebars expression](http://handlebarsjs.com/expressions.html). - -### See [Helpers][helpers] and [Custom Helpers][custom-helpers] → - - -{{#draft}} -### Contexts (? @doowb, how should this be described?) - -* `this` : example: `this.title` -* `page` : example: `page.title` -* `root` : example: `title` - -* `options.page` : exposes data for the "current" page at build time -* `options.pages` : -* `options.dest` : -* `options.src` : - - -### Example usage - -``` js -assemble: { - // Task options - options: { - data: ['src/one/*.json'] - }, - ghpages: { - // Target options - options: { - data: ['src/two/*.{yml,json}'] - } - files: { 'docs/': ['src/templates/*.hbs'] } - } -} -``` -{{/draft}} - -## Related info - -* [Options][options] -* [Helpers][helpers] diff --git a/templates/pages/docs/Context.md.hbs b/content/docs/data/Context.md similarity index 97% rename from templates/pages/docs/Context.md.hbs rename to content/docs/data/Context.md index c6c4f9e..5c8b856 100644 --- a/templates/pages/docs/Context.md.hbs +++ b/content/docs/data/Context.md @@ -10,7 +10,6 @@ section: data If you are unfamiliar with how Handlebar templates work, please visit the [Handlebar documentation](http://handlebarsjs.com/) for more information. Also see Assemble's documentation for [templates][templates-overview] and [Data][data]. - ## Context in Handlebars In Handlebars, every template has a context. Blocks such as `\{{#if}}` create "inline" templates, and the `\{{#if}}` helper then determines the context in which to render the template. @@ -28,7 +27,6 @@ The `../` path means "look this up on the context of the parent template". In ca _The information in this section was mostly taken from [this conversation](https://github.com/wycats/handlebars.js/issues/196#issuecomment-8581551), and edited to make sense for Assemble._ - ## The "context" object The context object is just a [JSON data][JSON] object that when passed to the compiled template function becomes the value of this inside your template. You must use the name of the associated [data file][Data] to access properties and call helper methods on the context object. @@ -53,7 +51,6 @@ Which renders to:

Heads up!

``` - ## Root context In Assemble, the root of the context is where the data object starts. Everything under the root is a child property. Also, when a variable is at "the root of the context" the variable may be used as-is, or "raw", enabling you to look up properties _for the "current" object_ without nesting the context _within_ the current object. In other words, the "path" of the current object does not need to be appended to the variable, so instead of `about_us.title`, you may simply use `title`. @@ -87,7 +84,6 @@ for the following , `assemble` provides additional contexts for , {{/draft}} - ## The "data" object When data is added directly to a file named `data.json` (or `data.yml`) it will be loaded _directly into the root of the context_ by Assemble. Note that your templates will need to be namespaced differently than if you put data into a file called `myData.json`. @@ -122,7 +118,6 @@ Out template, `myTemplate.hbs`, would have: TODO: describe how `\{{data.title}}` can be used in templates to get data from the current partial {{/draft}} - ## "this" expression You can use the `this` expression in any context to refer to the current context. @@ -154,4 +149,4 @@ will result in: ``` -[templates-overview]: https://github.com/assemble/assemble/wiki/Templates \ No newline at end of file +[templates-overview]: https://github.com/assemble/assemble/wiki/Templates diff --git a/templates/pages/docs/Data.md.hbs b/content/docs/data/Data.md similarity index 100% rename from templates/pages/docs/Data.md.hbs rename to content/docs/data/Data.md diff --git a/templates/pages/docs/Idiomatic-Data.md.hbs b/content/docs/data/Idiomatic-Data.md similarity index 99% rename from templates/pages/docs/Idiomatic-Data.md.hbs rename to content/docs/data/Idiomatic-Data.md index d54807b..78b40f9 100644 --- a/templates/pages/docs/Idiomatic-Data.md.hbs +++ b/content/docs/data/Idiomatic-Data.md @@ -266,4 +266,4 @@ The `\{{> body }}` template is where the content for the post will be rendered. * Learn more about [Supported file types][], including `.mustache`, `.md`, `.hbs`, `.html` and others. * Get components from [Toolkit](toolkit) -[toolkit]: https://github.com/assemble/toolkit "Visit Toolkit's Repo on GitHub" \ No newline at end of file +[toolkit]: https://github.com/assemble/toolkit "Visit Toolkit's Repo on GitHub" diff --git a/templates/pages/docs/JSON.md.hbs b/content/docs/data/JSON.md similarity index 96% rename from templates/pages/docs/JSON.md.hbs rename to content/docs/data/JSON.md index ac53856..fdaf743 100644 --- a/templates/pages/docs/JSON.md.hbs +++ b/content/docs/data/JSON.md @@ -14,4 +14,4 @@ Topics * when your data needs outgrow YAML front-matter, or * when you need data for partials * Templates -{{/draft}} \ No newline at end of file +{{/draft}} diff --git a/templates/pages/docs/Metadata.md.hbs b/content/docs/data/Metadata.md similarity index 81% rename from templates/pages/docs/Metadata.md.hbs rename to content/docs/data/Metadata.md index 83e0115..af1fb76 100644 --- a/templates/pages/docs/Metadata.md.hbs +++ b/content/docs/data/Metadata.md @@ -7,4 +7,4 @@ section: data published: false --- -{{! metadata }} \ No newline at end of file +{{! metadata }} diff --git a/templates/pages/docs/YAML-front-matter.md.hbs b/content/docs/data/YAML-front-matter.md similarity index 99% rename from templates/pages/docs/YAML-front-matter.md.hbs rename to content/docs/data/YAML-front-matter.md index 9caeccc..919d42f 100644 --- a/templates/pages/docs/YAML-front-matter.md.hbs +++ b/content/docs/data/YAML-front-matter.md @@ -148,7 +148,7 @@ people: ```yaml --- -layout: default.hbs +layout: default title: Early humans discovered... description: Lots of things, because they were early humans. date: 2013-07-04 @@ -338,4 +338,3 @@ See some great usage examples in assemble's [YAML test files](https://github.com * [YAML specification](http://www.yaml.org/spec/1.2/spec.html) * [http://www.yaml.org/](http://www.yaml.org/) * [wikipedia page about YAML](http://en.wikipedia.org/wiki/YAML) - diff --git a/templates/pages/docs/YAML.md.hbs b/content/docs/data/YAML.md similarity index 100% rename from templates/pages/docs/YAML.md.hbs rename to content/docs/data/YAML.md diff --git a/content/docs/data/config-data.md b/content/docs/data/config-data.md new file mode 100644 index 0000000..8e6d4f0 --- /dev/null +++ b/content/docs/data/config-data.md @@ -0,0 +1,48 @@ +# Config + +> Learn how to work with config data in your Assemble projects + +When we refer to `config`, we're describing the actual "build" configuration that is being passed to Assemble. A complete build configuration would: + +* tell Assemble where to find data files and templates to render +* register plugins, to add features or functionality to Assemble that doesn't exist natively +* register helpers with Assemble, which are essentially JavaScript functions that can be used anywhere in your templates +* + +## Config data + +The following examples will assume that: + +1. You have a `_config.yml` file in the root of your project, and +2. That you are passing that into the assemble `options`, like this: + +```js +options: { + config: file.readYAMLSync('_config.yml') +} +``` + +Since any property on the `options` object will be added to the context, you can now use any property on the `config` object, anywhere in your templates. + + +## Underscore Templates + +One of the many advantages of using templates in config data is that you don't need to repeat the same values over and over again. For example, in your `_config.yml` file, you can change this: + +```yaml +# Templates +templates: structure +pages: templates/pages +includes: templates/includes +layouts: templates/layouts +``` + + + +```yaml +# Templates +templates: structure +pages: <%= config.templates %>/pages +includes: <%= config.templates %>/includes +layouts: <%= config.templates %>/layouts +``` diff --git a/templates/pages/docs/Custom-Helpers.md.hbs b/content/docs/helpers/Custom-Helpers.md similarity index 91% rename from templates/pages/docs/Custom-Helpers.md.hbs rename to content/docs/helpers/Custom-Helpers.md index 5ba0098..42c140d 100644 --- a/templates/pages/docs/Custom-Helpers.md.hbs +++ b/content/docs/helpers/Custom-Helpers.md @@ -5,13 +5,17 @@ area: docs section: templates --- -> Custom helpers and [Lo-Dash mixins](./External-Libraries.html) are so easy to use with Assemble, the possibilities are truly limitless. +> Custom helpers and [Lo-Dash mixins](./External-Libraries.html) are so easy to use with Assemble, the possibilities are truly limitless. Contributors welcome! Please consider adding your helpers to this library! -To make it easier for Assemble users to consume custom helpers created by other users, we offer the following conventions and recommendations for your consideration. +To make it easier for Assemble users to consume custom helpers created by other users, we recommend the following conventions. ### Also see [Helpers](./Helpers.html) | [options.helpers](./options-helpers.html) → -## Registering custom helpers +## Adding Custom Helpers + +Handlebars makes it really easy to add custom helpers. Just register your function into Handlebars with the `Handlebars.registerHelper` method and that helper will be available to any template you compile afterwards. + +## Registering custom Handlebars helpers Helpers can either be an object or a single `register` function. If `register` is on the object, then it calls the `register` function, passing in the engine. Otherwise each method is registered as a helper. For example, the following will result in two helpers being registered: @@ -32,7 +36,6 @@ module.exports.register = function(Handlebars, options) { The `Handlebars.registerHelper` method takes the name of the helper and the helper function as arguments. Handlebars.js then takes whatever is returned from the helper function and writes it out to the template, _so be sure to always return a string from your custom helpers_. - ## Loading Helpers Minimatch patterns can be used in the `helpers` option, and they'll look inside your devDependencies for any node modules that it finds. If it finds modules, it will attempt to load those as helpers. @@ -40,15 +43,14 @@ Minimatch patterns can be used in the `helpers` option, and they'll look inside Requirements for use: - Install the module and save to devDependencies - - `npm install my-custom-helper-module --save-dev` + - `npm install my-custom-helper --save-dev` - Add a pattern (or the entire name) to use that module in the options - - `options: { helpers: ['*-helper-module'] } }` + - `options: { helpers: ['*-helper-module-name'] } }` - Enjoy ## Developing Custom Helpers - ### Passing `assemble.options` into helpers Any value from `assemble.options` may be passed to helpers when the helper defines the `register` method. For example: diff --git a/templates/pages/docs/Embedding-Code.md.hbs b/content/docs/helpers/Embedding-Code.md similarity index 100% rename from templates/pages/docs/Embedding-Code.md.hbs rename to content/docs/helpers/Embedding-Code.md diff --git a/templates/pages/extensions/index.md.hbs b/content/docs/helpers/Extensions.md similarity index 83% rename from templates/pages/extensions/index.md.hbs rename to content/docs/helpers/Extensions.md index 23f2839..e650a19 100644 --- a/templates/pages/extensions/index.md.hbs +++ b/content/docs/helpers/Extensions.md @@ -1,5 +1,6 @@ --- title: Extensions +published: false --- diff --git a/content/docs/helpers/Helpers.md b/content/docs/helpers/Helpers.md new file mode 100644 index 0000000..335913c --- /dev/null +++ b/content/docs/helpers/Helpers.md @@ -0,0 +1,97 @@ +--- +title: Helpers +description: Handlebars Helpers + +area: docs +section: templates +--- + +> Documentation for the helpers in the [handlebars-helpers][handlebars-helpers] library. If you find any errors or have suggestions for improvement [please let us know](https://github.com/assemble/assemble/issues). **Contributions are encouraged!** + +Get Assemble's [helper generator →](https://github.com/assemble/generator-helper) + +## What is Handlebars.js? + +[Handlebars.js](https://github.com/wycats/handlebars.js) is currently Assemble's default template engine. In [their own words](http://handlebarsjs.com/), "Handlebars provides the power necessary to let you build semantic templates effectively with no frustration. Mustache templates are compatible with Handlebars, so you can take a Mustache template, import it into Handlebars, and start taking advantage of the extra Handlebars features." + +### Handlebars Helpers Basics +Handlebars.js ships with some built-in helpers, such as `\{{#each}}`, `\{{#if}}` and `\{{#unless}}`. Here is how helpers work: + +* A Handlebars helper call is a simple identifier, followed by zero or more parameters (separated by space). +* Each parameter is a Handlebars expression. +* Handlebars helpers can be accessed from any context in a template. + +## Handlebars Helpers + +Helpers are essentially custom JavaScript functions that can be used in your templates. This means that, for the most part, helpers can do just about anything that can be accomplished with JavaScript. But handlebars helpers provide more than just raw power, their are three different types of helpers that make accomplishing certain tasks easier depending on the need: + +* **Expression helpers**: These are just regular functions that take the name of the helper and the helper function as arguments. Once an expression helper is registered, it can be called anywhere in your templates, then Handlebars takes the expression's return value and writes it into the template. For example, `\{{titleize basename}}` would write out the `basename` of the "current" file in title case. +* **Block helpers**: Block expressions allow you to define helpers that will invoke a section of your template with a different context than the current. Block helpers are registered the same way as expression helpers, with the difference being that Handlebars will pass the contents of the block compiled into a function to the helper. There are a number of block helpers included by default with Handlebars, `\{{#each}}...\{{/each}}`, `\{{#if}}...\{{/if}}` and `\{{#unless}}...\{{/unless}}`. +* **Subexpressions**: with subexpressions, you may invoke multiple helpers _within a single mustache_, and pass in the results of inner helper invocations as arguments to outer helpers. Subexpressions are delimited by parentheses. For example, the `default` helper takes two values, the first being the "desired" value and the second being a default or fallback value if the first value doesn't exist, e.g. `\{{default title basename}}`. So if the `title` value doesn't exist, the helper will use the `basename` of the file instead. This means our value won't be title case, as a "real" title is expected to be. Howver, using subexpressions we can spice things up a bit and transform the basename to meet our needs: `\{{default title (titleize basename)}}`. + +## Assemble's Built-in Helpers + +Assemble includes the [handlebars-helpers][handlebars-helpers] library as a dependency, so all **110+ Handlebars helpers** from that library can be used anywhere in your templates! + +### Helper features unique to Assemble + +* File globbing using [minimatch](https://github.com/isaacs/minimatch) patterns. See the [`\{{glob}}` helper](https://github.com/assemble/handlebars-helpers/blob/master/lib/helpers/helpers-files.js#L20-L49) for an example. +* Access to all [Assemble](https://github.com/assemble/assemble) options and config data, as well as custom variables defined in the options and config. +* Ability to render either markdown or HTML conditionally, based on the file extension of the generated file. + +#### Features for Grunt.js users + +If you use Grunt.js, Helper options can be defined in the Assemble task or target options in your project's Gruntfile. For instance, you could define the indentation level for the [\{{prettify}}](https://github.com/helpers/helper-prettify) helper like this: `assemble: { options: { prettify: { indent: 2 }}}` + +{{#todo}} +### Helpers created for Assemble + +Most helpers from [handlebars-helpers][] can be used with any Handlebars project, but a handful of helpers were created specifically for Assemble, including: + +* **dirname**: Returns the absolute path to the given file/directory. Would return: `path/to/variables.md`. Usage: `\{{dirname path}}` +* **pagename**: Returns the full-name of a given file. Would return: `variables.md`. Usage: `\{{filename "docs/toc.md"}}` +* **filename**: Can be used as an alternate for `pagename`. +* **basename**: Returns the basename of a given file. Would return: `variables` Usage: `\{{base "docs/toc.md"}}` +* **extension**: Returns the extension of a given file. Would return: `.md` Usage: `\{{extension "docs/toc.md"}}` +* **ext**: Can be used as an alternate for`extension`. +* **relative**: Returns the derived relative path from file A to file B. Usage: `\{{relative from to}}`. This can also be used with `page` and `pages`. +* **markdown**: Markdown block helper enables writing markdown inside HTML and then renders the markdown as HTML inline with the rest of the page. Usage: `\{{#markdown}}\{{/markdown}}` +* **md**: Markdown helper used to read in a file and inject the rendered markdown into the HTML. Usage: `\{{md path}}` +* **embed**: Embeds code from an external file as preformatted text. The first parameter requires a path to the file you want to embed. The second optional parameter allows forcing syntax highlighting for a specific language. Usage: `\{{embed 'path/to/file.js'}}` or `\{{embed 'path/to/file.hbs' 'html'}}` +* **jsFiddle**: Embed a jsFiddle, second parameter sets the desired tabs. Usage: `\{{jsfiddle id tabs}}` +* **gist**: Downloads and embeds public GitHub Gists by adding only the id of the Gist. Usage: `\{{gist id file}}` +{{/todo}} + +Visit the [helpers section](http://assemble.io/helpers/) of the docs to see all of the available helpers. Or learn more about [adding custom helpers](http://assemble.io/docs/Custom-Helpers.html) to Assemble. + +## Learn more about Handlebars.js + +There are a number of great resources on the web for learning how to work with Handlebars templates. Here are a few that we hand-picked to help get you started: + +* [Handlebars.js Tutorial: Learn Everything About Handlebars.js JavaScript Templating](http://javascriptissexy.com/handlebars-js-tutorial-learn-everything-about-handlebars-js-javascript-templating/ "Handlebar.js Tutorial") +* [Treehouse Blog, Getting Started with Handlebars.js](http://blog.teamtreehouse.com/getting-started-with-handlebars-js) +* [Treehouse Blog, Handlebars.js Part 2: Partials and Helpers](http://blog.teamtreehouse.com/handlebars-js-part-2-partials-and-helpers "Handlebars.js Partials and Helpers") +* [Treehouse Blog, Handlebars.js Part 3: Tips and Tricks](http://blog.teamtreehouse.com/handlebars-js-part-3-tips-and-tricks "Handlebars.js Tips and Tricks") +* [NetTuts+: An Introduction to Handlebars](http://net.tutsplus.com/tutorials/javascript-ajax/introduction-to-handlebars/) +* [Handlebarsjs.com](http://handlebarsjs.com/) + +Another great resource is [stackoverflow.com](http://stackoverflow.com/questions/tagged/handlebars.js). To date, approximately 2,000 questions about Handlebars.js have been asked and answered there! + +## Related Docs + +* [generator-helper](https://github.com/assemble/generator-helper) +* [Custom Helpers][custom-helpers] +* [Templates][templates-overview] +* [handlebars-helpers Github repo][handlebars-helpers] + +## Special Thanks + +We'd like to express our gratitude to Dan Harper, Elving Rodriquez! A number of these helpers originated in the following repos: + +* [Handlebars Helpers, by Dan Harper](http://github.com/danharper) +* [Swag v0.2.1, by Elving Rodriguez](http://elving.github.com/swag/) + +We'd also like to say thanks to [Kevin Decker](https://github.com/kpdecker) and other contributors to the Handlebars project. We really appreciate the hard work that has gone into making Handlebars so powerful and easy to use! + + +[handlebars-helpers]: http://github.com/assemble/handlebars-helpers "Extensive collection of Handlebars helpers" diff --git a/templates/pages/docs/Underscore-Mixins.md.hbs b/content/docs/helpers/Underscore-Mixins.md similarity index 100% rename from templates/pages/docs/Underscore-Mixins.md.hbs rename to content/docs/helpers/Underscore-Mixins.md diff --git a/src/content/helpers/code/helper-embed.md b/content/docs/helpers/code/helper-embed.md similarity index 90% rename from src/content/helpers/code/helper-embed.md rename to content/docs/helpers/code/helper-embed.md index d7a0d1e..f05fdfd 100644 --- a/src/content/helpers/code/helper-embed.md +++ b/content/docs/helpers/code/helper-embed.md @@ -1,5 +1,6 @@ -#### \{{embed}} -_Embed code from specified file(s)_ +## \{{embed}} + +> Embed code from specified file(s) Parameters: * `String|File` : path to the file you want to embed @@ -9,13 +10,13 @@ Unless overridden by a given extension, the helper will automatically use the ex For example, here we will force highlighting as `javascript` instead of `json` -```html +```handlebars \{{ embed 'src/example.json' 'js' }} ``` When embedding a markdown snippet (`.md|markdown|markd`), the helper automatically converts any code fences inside the snippet (`` ``` ``) to their Unicode equivalent ("`````") -```html +```handlebars \{{embed 'src/example.md'}} ``` @@ -23,8 +24,8 @@ When embedding a markdown snippet (`.md|markdown|markd`), the helper automatical The `embed` helper also accepts globbing patterns: -```html -\{{embed 'src/code-examples/*.*'}} +```handlebars +\{{embed 'src/code-examples/*.*'}} ``` When globbing file is used, the code from each file will be embedded separately, and the file extension of each file will be used to identify the language to use for syntax highlighting. You may of course override the language, but whatever language you use will be applied to every embedded file. diff --git a/content/docs/helpers/code/helper-gist.md b/content/docs/helpers/code/helper-gist.md new file mode 100644 index 0000000..7eafa1a --- /dev/null +++ b/content/docs/helpers/code/helper-gist.md @@ -0,0 +1,18 @@ +## \{{gist}} + +> Embed public GitHub Gists by adding only the Id of the Gist. The helper also accepts an optional second parameter for targeting a specific file on the Gist. + +Parameters: `String` +Default: `undefined` +Usage: `\{{ gist [id] }}` + +Example: + +```handlebars +\{{gist '5193239'}} +``` +Output: + +```html + +``` diff --git a/src/content/helpers/code/helper-jsfiddle.md b/content/docs/helpers/code/helper-jsfiddle.md similarity index 57% rename from src/content/helpers/code/helper-jsfiddle.md rename to content/docs/helpers/code/helper-jsfiddle.md index f9ca219..68099fe 100644 --- a/src/content/helpers/code/helper-jsfiddle.md +++ b/content/docs/helpers/code/helper-jsfiddle.md @@ -1,22 +1,26 @@ -#### \{{jsfiddle}} -_Easily embed a [jsFiddle](http://jsfiddle.net) in a page, requiring only the ID of the fiddle._ +## \{{jsfiddle}} + +> Easily embed a [jsFiddle](http://jsfiddle.net) in a page, requiring only the ID of the fiddle Credit: [octopress](http://octopress.org/docs/plugins/jsfiddle-tag/) -Parameters: `\{{ jsfiddle "id" "tabs" "skin" "height" "width" }}` - * `id`: full URL to the fiddle excluding `http://jsfiddle.net` - * `tabs`: tabs to be displayed, and the order specified - * `skin`: the skin to be used, `light` or `presentation` are the only options available. - * `height`: the height of the rendered `` +* `width` : (optional) the width of the rendered `` + +Example: -```html -\{{ jsfiddle 'ccWP7' }} +```handlebars +\{{jsfiddle id="ccWP7" tabs="css,js"}} ``` -##### Fiddle tabs +### Fiddle tabs You may also adjust the tabs shown and/or the order in which tabs are displayed. Default tabs and display order: `js,resources,html,css,result` @@ -28,13 +32,13 @@ Options: Template: -```html -\{{jsfiddle 'ccWP7' 'result,js,html,css'}} +```handlebars +\{{jsfiddle id="ccWP7" tabs="result,js,html,css"}} ``` Renders to: -```html +```handlebars ``` -#### Fiddle skins +### Fiddle skins A third _optional_ parameter may be used to specify the "skin" for the fiddle. At time of writing, the only skins available are `light` and `presentation`. However as [jsFiddle](http://jsfiddle.net) announces new skins they may be used immediately. @@ -65,13 +69,13 @@ Default: `light` Template: -```html -\{{jsfiddle 'ccWP7' 'result,js,html,css' 'presentation'}} +```handlebars +\{{jsfiddle id='ccWP7' tabs="result,js,html,css" skin="presentation"}} ``` Renders to: -```html +```handlebars diff --git a/src/content/helpers/collections/helper-after.md b/content/docs/helpers/collections/helper-after.md similarity index 50% rename from src/content/helpers/collections/helper-after.md rename to content/docs/helpers/collections/helper-after.md index 31e80d4..27179d7 100644 --- a/src/content/helpers/collections/helper-after.md +++ b/content/docs/helpers/collections/helper-after.md @@ -1,11 +1,13 @@ -#### \{{after}} -_Returns all of the items in the collection after the specified count._ -
Parameters: count `int` - How many items to omit from the beginning. (Required) +## \{{after}} + +> Returns all of the items in the collection after the specified count. + +Parameters: count `int` - How many items to omit from the beginning. (Required) Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", @@ -18,12 +20,12 @@ Data: ``` Template: -```html +```handlebars \{{after collection 5}} ``` Renders to: -```html +```handlebars Leela, Professor Farnsworth, Scruffy ``` diff --git a/content/docs/helpers/collections/helper-any.md b/content/docs/helpers/collections/helper-any.md new file mode 100644 index 0000000..473699b --- /dev/null +++ b/content/docs/helpers/collections/helper-any.md @@ -0,0 +1,26 @@ +## \{{any}} + +> Conditionally render a block if the collection isn't empty. Opposite of `empty` + +Parameters: `none` + +Data: + +```js +var collection = ["Professor Farnswor"]; +``` +Templates: + +```handlebars +\{{#any collection}} + Good news everyone! +\{{else}} + Bad news everyone! +\{{/any}} +``` + +Renders to: + +``` +Good news everyone! +``` \ No newline at end of file diff --git a/content/docs/helpers/collections/helper-before.md b/content/docs/helpers/collections/helper-before.md new file mode 100644 index 0000000..e29dc3b --- /dev/null +++ b/content/docs/helpers/collections/helper-before.md @@ -0,0 +1,32 @@ +## \{{before}} + +> Returns all of the items in the collection before the specified count. Opposite of `after`. + +Parameters: count `int` - How many items to omit from the end. (Required) + +Data: + +```js +var collection = [ + "Amy Wong", + "Bender", + "Dr. Zoidberg", + "Fry", + "Hermes Conrad", + "Leela", + "Professor Farnsworth", + "Scruffy" +] +``` +Template: + +```handlebars +\{{before collection 5}} + +``` + +Renders to: + +```handlebars +Amy Wong, Bender, Dr. Zoidberg +``` diff --git a/content/docs/helpers/collections/helper-eachIndex.md b/content/docs/helpers/collections/helper-eachIndex.md new file mode 100644 index 0000000..e80f8f2 --- /dev/null +++ b/content/docs/helpers/collections/helper-eachIndex.md @@ -0,0 +1,24 @@ +## \{{eachIndex}} + +> Current implementation of the default Handlebars loop helper \{{#each}} adding index (0-based index) to the loop context. + +Parameters: `none` + +Data: + +```js +var collection = ["Professor Farnsworth", "Fry", "Bend"] +``` +Template: + +```handlebars +\{{#eachIndex collection}} + \{{this}} is \{{index}} +\{{/eachIndex}} +``` + +Renders to: + +``` +Professor Farnsworth is 0, Fry is 1, Bender is 2 +``` \ No newline at end of file diff --git a/src/content/helpers/collections/helper-eachProperty.md b/content/docs/helpers/collections/helper-eachProperty.md similarity index 51% rename from src/content/helpers/collections/helper-eachProperty.md rename to content/docs/helpers/collections/helper-eachProperty.md index 6ce388c..6933e7a 100644 --- a/src/content/helpers/collections/helper-eachProperty.md +++ b/content/docs/helpers/collections/helper-eachProperty.md @@ -1,18 +1,20 @@ -#### \{{eachProperty}} -_Uses the key and value of each property in an object to render a block._ -
Parameters: `none` +## \{{eachProperty}} + +> Uses the key and value of each property in an object to render a block. + +Parameters: `none` Data: -```json -"collection": { +```js +var collection = { "one": 1, "two": 2 } ``` Template: -```html +```handlebars \{{#eachProperty object}} \{{key}} - \{{value}}
\{{/eachProperty }} diff --git a/src/content/helpers/collections/helper-empty.md b/content/docs/helpers/collections/helper-empty.md similarity index 54% rename from src/content/helpers/collections/helper-empty.md rename to content/docs/helpers/collections/helper-empty.md index 33a6ac3..28b296a 100644 --- a/src/content/helpers/collections/helper-empty.md +++ b/content/docs/helpers/collections/helper-empty.md @@ -1,15 +1,17 @@ -#### \{{empty}} -_Conditionally render a block if the collection is empty._ -
Parameters: `none` +## \{{empty}} + +> Conditionally render a block if the collection is empty. + +Parameters: `none` Data: -```json -"collection": [] +```js +var collection = [] ``` Template: -```html +```handlebars \{{#empty collection}} Good news everyone! \{{else}} diff --git a/src/content/helpers/collections/helper-first.md b/content/docs/helpers/collections/helper-first.md similarity index 60% rename from src/content/helpers/collections/helper-first.md rename to content/docs/helpers/collections/helper-first.md index 893a4b1..088dc12 100644 --- a/src/content/helpers/collections/helper-first.md +++ b/content/docs/helpers/collections/helper-first.md @@ -1,11 +1,13 @@ -#### \{{first}} -_Returns the first item in a collection._ -
Parameters: `none` +## \{{first}} + +> Returns the first item in a collection. + +Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", @@ -19,12 +21,12 @@ Data: Template: -```html +```handlebars \{{first collection}} ``` Renders to: -```html +```handlebars Amy Wong ``` \ No newline at end of file diff --git a/content/docs/helpers/collections/helper-inArray.md b/content/docs/helpers/collections/helper-inArray.md new file mode 100644 index 0000000..20b63f2 --- /dev/null +++ b/content/docs/helpers/collections/helper-inArray.md @@ -0,0 +1,27 @@ +## \{{inArray}} + +> Conditionally render a block if a specified value is in the collection. + +Parameters: value `string|int` - A value to test against. (Required) + +Data: + +```js +var collection = ["Professor Farnsworth", "Fry", "Bend"] +``` +Template: + +```handlebars +\{{#inArray collection "Fry"}} + I'm walking on sunshine! +\{{else}} + I'm walking on darkness. +\{{/inArray}} +``` + +Renders to: + +```handlebars +I'm walking on sunshine! +``` + diff --git a/src/content/helpers/collections/helper-join.md b/content/docs/helpers/collections/helper-join.md similarity index 55% rename from src/content/helpers/collections/helper-join.md rename to content/docs/helpers/collections/helper-join.md index 230447a..2332b4f 100644 --- a/src/content/helpers/collections/helper-join.md +++ b/content/docs/helpers/collections/helper-join.md @@ -1,11 +1,13 @@ -#### \{{join}} -_Joins all elements of a collection into a string using a separator if specified._ -
Parameters: separator `string` - A string to use as a separator between the items. (Optional) +## \{{join}} + +> Joins all elements of a collection into a string using a separator if specified. + +Parameters: separator `string` - A string to use as a separator between the items. (Optional) Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", @@ -14,11 +16,11 @@ Data: "Leela", "Professor Farnsworth", "Scruffy" -] +]; ``` Template: -```html +```handlebars \{{join collection " & "}} ``` diff --git a/src/content/helpers/collections/helper-last.md b/content/docs/helpers/collections/helper-last.md similarity index 59% rename from src/content/helpers/collections/helper-last.md rename to content/docs/helpers/collections/helper-last.md index 362cdee..73abbfc 100644 --- a/src/content/helpers/collections/helper-last.md +++ b/content/docs/helpers/collections/helper-last.md @@ -1,11 +1,13 @@ -#### \{{last}} -_Returns the last item in a collection. Opposite of `first`._ -
Parameters: `none` +## \{{last}} + +> Returns the last item in a collection. Opposite of `first`. + +Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", @@ -18,7 +20,7 @@ Data: ``` Template: -```html +```handlebars \{{last collection}} ``` diff --git a/src/content/helpers/collections/helper-length.md b/content/docs/helpers/collections/helper-length.md similarity index 59% rename from src/content/helpers/collections/helper-length.md rename to content/docs/helpers/collections/helper-length.md index b1dc740..13fd08a 100644 --- a/src/content/helpers/collections/helper-length.md +++ b/content/docs/helpers/collections/helper-length.md @@ -1,11 +1,13 @@ -#### \{{length}} -_Returns the length of the collection._ -
Parameters: `none` +## \{{length}} + +> Returns the length of the collection. + +Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", @@ -19,12 +21,12 @@ Data: Template: -```html +```handlebars \{{length collection}} ``` Renders to: -```html +```handlebars 8 ``` \ No newline at end of file diff --git a/src/content/helpers/collections/helper-lengthEqual.md b/content/docs/helpers/collections/helper-lengthEqual.md similarity index 65% rename from src/content/helpers/collections/helper-lengthEqual.md rename to content/docs/helpers/collections/helper-lengthEqual.md index bcb2435..0a0aa6d 100644 --- a/src/content/helpers/collections/helper-lengthEqual.md +++ b/content/docs/helpers/collections/helper-lengthEqual.md @@ -1,11 +1,13 @@ -#### \{{lengthEqual}} -_Conditionally render a block based on the length of a collection._ -
Parameters: length `int` - The value to test against. (Required) +## \{{lengthEqual}} + +> Conditionally render a block based on the length of a collection. + +Parameters: length `int` - The value to test against. (Required) Data: -```json -"collection": [ +```js +var collection = [ { "name": "Leela", "deliveries": 8021 @@ -22,7 +24,7 @@ Data: ``` Template: -```html +```handlebars \{{#lengthEqual collection 3}} There are 3 people in Planet Express. \{{else}} diff --git a/src/content/helpers/collections/helper-sort.md b/content/docs/helpers/collections/helper-sort.md similarity index 77% rename from src/content/helpers/collections/helper-sort.md rename to content/docs/helpers/collections/helper-sort.md index 2e7585b..47d9ba8 100644 --- a/src/content/helpers/collections/helper-sort.md +++ b/content/docs/helpers/collections/helper-sort.md @@ -1,11 +1,13 @@ -#### \{{sort}} -_Returns the collection sorted._ +## \{{sort}} + +> Returns the collection sorted. + Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", @@ -18,7 +20,7 @@ Data: ``` Template: -```html +```handlebars \{{sort collection}} ``` diff --git a/src/content/helpers/collections/helper-withAfter.md b/content/docs/helpers/collections/helper-withAfter.md similarity index 53% rename from src/content/helpers/collections/helper-withAfter.md rename to content/docs/helpers/collections/helper-withAfter.md index c59863a..acce4dc 100644 --- a/src/content/helpers/collections/helper-withAfter.md +++ b/content/docs/helpers/collections/helper-withAfter.md @@ -1,11 +1,13 @@ -#### \{{withAfter}} -_Use all of the items in the collection after the specified count inside a block._ -
Parameters: count `int` - How many items to omit from the beginning. (Required) +## \{{withAfter}} + +> Use all of the items in the collection after the specified count inside a block. + +Parameters: count `int` - How many items to omit from the beginning. (Required) Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", @@ -18,7 +20,7 @@ Data: ``` Template: -```html +```handlebars \{{#withAfter collection 5}} \{{titleize this}} \{{/withAfter}} @@ -27,6 +29,6 @@ Template: Renders to: -```html +```handlebars Leela Professor Farnsworth Scruffy ``` diff --git a/src/content/helpers/collections/helper-withBefore.md b/content/docs/helpers/collections/helper-withBefore.md similarity index 50% rename from src/content/helpers/collections/helper-withBefore.md rename to content/docs/helpers/collections/helper-withBefore.md index fd3a7a2..0b41678 100644 --- a/src/content/helpers/collections/helper-withBefore.md +++ b/content/docs/helpers/collections/helper-withBefore.md @@ -1,11 +1,13 @@ -#### \{{withBefore}} -_Use all of the items in the collection before the specified count inside a block. Opposite of `withAfter`._ -
Parameters: count `int` - How many items to omit from the end. (Required) +## \{{withBefore}} + +> Use all of the items in the collection before the specified count inside a block. Opposite of `withAfter`. + +Parameters: count `int` - How many items to omit from the end. (Required) Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", @@ -18,7 +20,7 @@ Data: ``` Template: -```html +```handlebars \{{#withBefore collection 5}} \{{reverse this}} \{{/withBefore}} @@ -26,6 +28,6 @@ Template: Renders to: -```html +```handlebars gnoW ymA redneB grebdioZ .rD ``` diff --git a/src/content/helpers/collections/helper-withFirst.md b/content/docs/helpers/collections/helper-withFirst.md similarity index 64% rename from src/content/helpers/collections/helper-withFirst.md rename to content/docs/helpers/collections/helper-withFirst.md index 9ef45cf..d5cbc08 100644 --- a/src/content/helpers/collections/helper-withFirst.md +++ b/content/docs/helpers/collections/helper-withFirst.md @@ -1,11 +1,13 @@ -#### \{{withFirst}} -_Use the first item in a collection inside a block._ -
Parameters: `none` +## \{{withFirst}} + +> Use the first item in a collection inside a block. + +Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", @@ -18,7 +20,7 @@ Data: ``` Template: -```html +```handlebars \{{#withFirst collection}}

\{{this}} is smart.

\{{/withFirst}} @@ -26,6 +28,6 @@ Template: Renders to: -```html +```handlebars

Amy Wong is smart.

``` \ No newline at end of file diff --git a/src/content/helpers/collections/helper-withLast.md b/content/docs/helpers/collections/helper-withLast.md similarity index 60% rename from src/content/helpers/collections/helper-withLast.md rename to content/docs/helpers/collections/helper-withLast.md index 6404c88..25f62fc 100644 --- a/src/content/helpers/collections/helper-withLast.md +++ b/content/docs/helpers/collections/helper-withLast.md @@ -1,11 +1,13 @@ -#### \{{withLast}} -_Use the last item in a collection inside a block. Opposite of `withFirst`._ -
Parameters: `none` +## \{{withLast}} + +> Use the last item in a collection inside a block. Opposite of `withFirst`. + +Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", @@ -18,7 +20,7 @@ Data: ``` Template: -```html +```handlebars \{{#withLast collection}}

\{{this}} is lazy.

\{{/withLast}} @@ -26,6 +28,6 @@ Template: Renders to: -```html +```handlebars

Scruffy is lazy.

``` diff --git a/src/content/helpers/collections/helper-withSort.md b/content/docs/helpers/collections/helper-withSort.md similarity index 75% rename from src/content/helpers/collections/helper-withSort.md rename to content/docs/helpers/collections/helper-withSort.md index 33e0f79..587c98d 100644 --- a/src/content/helpers/collections/helper-withSort.md +++ b/content/docs/helpers/collections/helper-withSort.md @@ -1,11 +1,13 @@ -#### \{{withSort}} -_Uses the sorted collection inside the block._ -
Parameters: field `string` - String name of the field or property to sort by. (Optional) +## \{{withSort}} + +> Uses the sorted collection inside the block. + +Parameters: field `string` - String name of the field or property to sort by. (Optional) Data: -```json -"collection": [ +```js +var collection = [ { "name": "Leela", "deliveries": 8021 @@ -22,7 +24,7 @@ Data: ``` Template: -```html +```handlebars \{{#withSort collection "deliveries"}} \{{name}}: \{{deliveries}}
\{{/withSort}} @@ -30,7 +32,7 @@ Template: Renders to: -```html +```handlebars Fry: -12 Bender: 239 Leela: 8021 @@ -61,7 +63,7 @@ Data: Template: -```html +```handlebars \{{#withSort collection "deliveries.value"}} \{{name}}: \{{deliveries.value}}
\{{/withSort}} diff --git a/src/content/helpers/comparison/helper-and.md b/content/docs/helpers/comparison/helper-and.md similarity index 63% rename from src/content/helpers/comparison/helper-and.md rename to content/docs/helpers/comparison/helper-and.md index 67593c5..78b3ac7 100644 --- a/src/content/helpers/comparison/helper-and.md +++ b/content/docs/helpers/comparison/helper-and.md @@ -1,18 +1,19 @@ -#### \{{and}} -_Conditionally render a block if both values are truthy._ +## \{{and}} + +> Conditionally render a block if both values are truthy. Parameters: values `string|int` - the values to test against. Data: -```javascript -great = true -magnificent = true +```js +var great = true +var magnificent = true ``` Template: -```html +```handlebars \{{#and great magnificent}} Kiss my shiny metal ass! \{{else}} @@ -21,6 +22,7 @@ Template: ``` Renders to: + ``` Kiss my shiny metal ass! ``` \ No newline at end of file diff --git a/src/content/helpers/comparison/helper-compare.md b/content/docs/helpers/comparison/helper-compare.md similarity index 72% rename from src/content/helpers/comparison/helper-compare.md rename to content/docs/helpers/comparison/helper-compare.md index 2349df9..fa1a7ca 100644 --- a/src/content/helpers/comparison/helper-compare.md +++ b/content/docs/helpers/comparison/helper-compare.md @@ -1,9 +1,8 @@ -#### \{{#compare}}...\{{/compare}} -Credit: [OOCSS](https://github.com/stubbornella/oocss) +## \{{compare}} -Compare the "left value" to the "right value" using any of the allowed operators. +> Compare the "left value" to the "right value" using any of the allowed operators. -##### Allowed operators +### Allowed operators * `==` * `===` @@ -15,7 +14,7 @@ Compare the "left value" to the "right value" using any of the allowed operators * `>=` * `typeof` -##### Parameters: +### Parameters: 1. `Left`: value to compare against 1. `Operator`: The operator to use for the comparison. Must be between quotes `">"`, `"="`, `"<="` and so on. @@ -23,7 +22,7 @@ Compare the "left value" to the "right value" using any of the allowed operators 1. `Options`: Options object for Handlebars. -##### Syntax: +### Syntax: ```handlebars \{{#compare [leftvalue] [operator] [rightvalue]}} @@ -33,14 +32,13 @@ Compare the "left value" to the "right value" using any of the allowed operators \{{/compare}} ``` -##### Examples: +### Examples: ```handlebars \{{#compare unicorns "<" ponies}} I knew it, unicorns are just low-quality ponies! \{{/compare}} - \{{#compare value ">=" 10}} The value is greater or equal than 10 \{{else}} diff --git a/src/content/helpers/comparison/helper-contains.md b/content/docs/helpers/comparison/helper-contains.md similarity index 67% rename from src/content/helpers/comparison/helper-contains.md rename to content/docs/helpers/comparison/helper-contains.md index 61bd6a8..132e202 100644 --- a/src/content/helpers/comparison/helper-contains.md +++ b/content/docs/helpers/comparison/helper-contains.md @@ -1,5 +1,6 @@ -#### \{{contains}} -_Searches a string for the given value, and conditionally renders one block of content or another based on the result._ +## \{{contains}} + +> Searches a string for the given value, and conditionally renders one block of content or another based on the result. Parameters: `String` (the value to test against) Default: `undefined` @@ -14,7 +15,7 @@ truth: Assemble is the best static site generator for node.js! Template: -```html +```handlebars \{{#contains truth "best"}} Absolutely true. \{{else}} diff --git a/src/content/helpers/comparison/helper-gt.md b/content/docs/helpers/comparison/helper-gt.md similarity index 51% rename from src/content/helpers/comparison/helper-gt.md rename to content/docs/helpers/comparison/helper-gt.md index ffdcec0..af3e916 100644 --- a/src/content/helpers/comparison/helper-gt.md +++ b/content/docs/helpers/comparison/helper-gt.md @@ -1,16 +1,18 @@ -#### \{{gt}} -_Conditionally render a block if the value is greater than a given number (If x > y)._ -
Parameters: value `string|int` - the value to test against. +## \{{gt}} + +> Conditionally render a block if the value is greater than a given number (If x > y). + +Parameters: value `string|int` - the value to test against. Data: -```javascript -number = 5 +```js +var number = 5 ``` Template: -```html +```handlebars \{{#gt number 8}} Kiss my shiny metal ass! \{{else}} diff --git a/src/content/helpers/comparison/helper-gte.md b/content/docs/helpers/comparison/helper-gte.md similarity index 50% rename from src/content/helpers/comparison/helper-gte.md rename to content/docs/helpers/comparison/helper-gte.md index 3c65583..6fe78c3 100644 --- a/src/content/helpers/comparison/helper-gte.md +++ b/content/docs/helpers/comparison/helper-gte.md @@ -1,14 +1,16 @@ -#### \{{gte}} -_Conditionally render a block if the value is greater or equal than a given number (If x >= y)_. -
Parameters: value `string|int` - the value to test against. +## \{{gte}} -```javascript -number = 5 +> Conditionally render a block if the value is greater or equal than a given number (If x >= y) + +Parameters: value `string|int` - the value to test against. + +```js +var number = 5 ``` Template: -```html +```handlebars \{{#gte number 5}} Kiss my shiny metal ass! \{{else}} diff --git a/content/docs/helpers/comparison/helper-if_gt.md b/content/docs/helpers/comparison/helper-if_gt.md new file mode 100644 index 0000000..a2ad73b --- /dev/null +++ b/content/docs/helpers/comparison/helper-if_gt.md @@ -0,0 +1,13 @@ +## \{{if_gt}} + +> Conditionally render a block if the value is greater than a given number (If x > y). + +Parameters: `none` + +```handlebars +\{{#if_gt x compare=y}} ... \{{/if_gt}} +``` + +#### Author + ++ [@danharper](http://github.com/danharper) diff --git a/content/docs/helpers/comparison/helper-if_gteq.md b/content/docs/helpers/comparison/helper-if_gteq.md new file mode 100644 index 0000000..9fbb1cb --- /dev/null +++ b/content/docs/helpers/comparison/helper-if_gteq.md @@ -0,0 +1,12 @@ +## \{{if_gteq}} + +> Conditionally render a block if the value is greater or equal than a given number (If x >= y). +Parameters: `none` + +```handlebars +\{{#if_gteq x compare=y}} ... \{{/if_gteq}} +``` + +#### Author + ++ [@danharper](http://github.com/danharper) \ No newline at end of file diff --git a/content/docs/helpers/comparison/helper-ifeq.md b/content/docs/helpers/comparison/helper-ifeq.md new file mode 100644 index 0000000..634e686 --- /dev/null +++ b/content/docs/helpers/comparison/helper-ifeq.md @@ -0,0 +1,13 @@ +## \{{ifeq}} + +> Alias for `is`. + +_Conditionally render a block if the condition is true (If x = y)._ + +Parameters: `none` + +```handlebars +\{{#ifeq x compare=y}} ... \{{/ifeq}} +``` + +_(Considering deprecating in favor of \{{is}} helper)_ \ No newline at end of file diff --git a/src/content/helpers/comparison/helper-is.md b/content/docs/helpers/comparison/helper-is.md similarity index 66% rename from src/content/helpers/comparison/helper-is.md rename to content/docs/helpers/comparison/helper-is.md index 8580a1d..d01c2a7 100644 --- a/src/content/helpers/comparison/helper-is.md +++ b/content/docs/helpers/comparison/helper-is.md @@ -1,5 +1,6 @@ -#### \{{is}} -_Conditionally render a block if the condition is true (if x = y)._ +## \{{is}} + +> Conditionally render a block if the condition is true (if x = y). Parameters: `string|int` (the value to test against) Default: `undefined` @@ -8,7 +9,7 @@ Default: `undefined` Data: -```javascript +```js --- number = 5 --- @@ -16,7 +17,7 @@ number = 5 Template: -```html +```handlebars \{{#is number 5}} Kiss my shiny metal ass! \{{else}} @@ -36,7 +37,7 @@ If you are using data from _YAML front matter_ or any specified `JSON` and/or `Y Data and Templates: -```html +```handlebars --- page: title: About Us @@ -51,17 +52,6 @@ page: Renders to: -```html +```handlebars

About Us

-``` - -#### \{{ifeq}} -**Alias for `is`. Considering consolidating** - -_Conditionally render a block if the condition is true (If x = y)._ - -Parameters: `none` - -```html -\{{#ifeq x compare=y}} ... \{{/ifeq}} ``` \ No newline at end of file diff --git a/content/docs/helpers/comparison/helper-isnt.md b/content/docs/helpers/comparison/helper-isnt.md new file mode 100644 index 0000000..297f686 --- /dev/null +++ b/content/docs/helpers/comparison/helper-isnt.md @@ -0,0 +1,24 @@ +## \{{isnt}} + +> Conditionally render a block if the condition is false. Opposite of `is`. + +Parameters: value `string|int` - the value to test against. + +Data: +```js +number = 5 +``` + +Template: +```handlebars +\{{#isnt number 5}} + Kiss my shiny metal ass! +\{{else}} + Never mind :( +\{{/isnt}} +``` + +Renders to: +``` +Never mind :( +``` \ No newline at end of file diff --git a/content/docs/helpers/comparison/helper-lt.md b/content/docs/helpers/comparison/helper-lt.md new file mode 100644 index 0000000..46ef209 --- /dev/null +++ b/content/docs/helpers/comparison/helper-lt.md @@ -0,0 +1,26 @@ +## \{{lt}} + +> Conditionally render a block if the value is less than a given number. Opposite of `gt`. + +Parameters: value `string|int` - the value to test against. + +Data: + +```js +number = 5 +``` + +Template: + +```handlebars +\{{#lt number 3}} + Kiss my shiny metal ass! +\{{else}} + Never mind :( +\{{/lt}} +``` +Renders to: + +``` +Never mind :( +``` diff --git a/content/docs/helpers/comparison/helper-lte.md b/content/docs/helpers/comparison/helper-lte.md new file mode 100644 index 0000000..564c600 --- /dev/null +++ b/content/docs/helpers/comparison/helper-lte.md @@ -0,0 +1,27 @@ +## \{{lte}} + +> Conditionally render a block if the value is less or equal than a given number. Opposite of `gte`. + +Parameters: value `string|int` - the value to test against. + +Data: + +```js +number = 5 +``` + +Template: + +```handlebars +\{{#lte number 5}} + Kiss my shiny metal ass! +\{{else}} + Never mind :( +\{{/lte}} +``` + +Renders to: + +``` +Kiss my shiny metal ass! +``` \ No newline at end of file diff --git a/src/content/helpers/comparison/helper-or.md b/content/docs/helpers/comparison/helper-or.md similarity index 72% rename from src/content/helpers/comparison/helper-or.md rename to content/docs/helpers/comparison/helper-or.md index 69e06cd..0fc0e3a 100644 --- a/src/content/helpers/comparison/helper-or.md +++ b/content/docs/helpers/comparison/helper-or.md @@ -1,18 +1,19 @@ -#### \{{or}} -_Conditionally render a block if one of the values is truthy._ +## \{{or}} + +> Conditionally render a block if one of the values is truthy. Parameters: values `string|int` - the values to test against. Data: -```javascript +```js great = no magnificent = true ``` Template: -```html +```handlebars \{{#or great magnificent}} Kiss my shiny metal ass! \{{else}} diff --git a/src/content/helpers/comparison/helper-unless_eq.md b/content/docs/helpers/comparison/helper-unless_eq.md similarity index 68% rename from src/content/helpers/comparison/helper-unless_eq.md rename to content/docs/helpers/comparison/helper-unless_eq.md index 0da0dbb..b446951 100644 --- a/src/content/helpers/comparison/helper-unless_eq.md +++ b/content/docs/helpers/comparison/helper-unless_eq.md @@ -1,4 +1,4 @@ -#### \{{unless_eq}} +## \{{unless_eq}} **Alias for `isnt`** @@ -6,7 +6,9 @@ _Conditionally render a block if the condition is false (Unless x = y). Opposite Parameters: `none` -```html +```handlebars \{{#unless_eq x compare=y}} ... \{{/unless_eq}} ``` -Author: Dan Harper \ No newline at end of file +#### Author + ++ [@danharper](http://github.com/danharper) \ No newline at end of file diff --git a/content/docs/helpers/comparison/helper-unless_gt.md b/content/docs/helpers/comparison/helper-unless_gt.md new file mode 100644 index 0000000..5314cd0 --- /dev/null +++ b/content/docs/helpers/comparison/helper-unless_gt.md @@ -0,0 +1,11 @@ +## \{{unless_gt}} + +> Unless greater than (Unless x > y) +Parameters: `none` + +```handlebars +\{{#unless_gt x compare=y}} ... \{{/unless_gt}} +``` +#### Author + ++ [@danharper](http://github.com/danharper) \ No newline at end of file diff --git a/content/docs/helpers/comparison/helper-unless_gteq.md b/content/docs/helpers/comparison/helper-unless_gteq.md new file mode 100644 index 0000000..bd87044 --- /dev/null +++ b/content/docs/helpers/comparison/helper-unless_gteq.md @@ -0,0 +1,12 @@ +## \{{unless_gteq}} + +> "Unless x >= y". Render block, unless given value is greater than or equal to. + +Parameters: `none` + +```handlebars +\{{#unless_gteq x compare=y}} ... \{{/unless_gteq}} +``` +#### Author + ++ [@danharper](http://github.com/danharper) \ No newline at end of file diff --git a/content/docs/helpers/comparison/helper-unless_lt.md b/content/docs/helpers/comparison/helper-unless_lt.md new file mode 100644 index 0000000..2352e32 --- /dev/null +++ b/content/docs/helpers/comparison/helper-unless_lt.md @@ -0,0 +1,12 @@ +## \{{unless_lt}} + +> Render block, unless value is less than a given number (Unless x < y) + +Parameters: `none` + +```handlebars +\{{#unless_lt x compare=y}} ... \{{/unless_lt}} +``` +#### Author + ++ [@danharper](http://github.com/danharper) \ No newline at end of file diff --git a/content/docs/helpers/comparison/helper-unless_lteq.md b/content/docs/helpers/comparison/helper-unless_lteq.md new file mode 100644 index 0000000..3c24a20 --- /dev/null +++ b/content/docs/helpers/comparison/helper-unless_lteq.md @@ -0,0 +1,12 @@ +## \{{unless_lteq}} + +> Render block, unless value is less than or equal to a given number (Unless x <= y) + +Parameters: `none` + +```handlebars +\{{#unless_lteq x compare=y}} ... \{{/unless_lteq}} +``` +#### Author + ++ [@danharper](http://github.com/danharper) \ No newline at end of file diff --git a/content/docs/helpers/content/helper-copy.md b/content/docs/helpers/content/helper-copy.md new file mode 100644 index 0000000..c29b951 --- /dev/null +++ b/content/docs/helpers/content/helper-copy.md @@ -0,0 +1,14 @@ +## \{{copy}} + +> Example helper, copies file A to path B. + +**example helpers, use at your own risk!** + +Parameters: `String` +
Default: `undefined` + +Example: + +```handlebars +\{{copy "a.html" "../dir/b.txt"}} +``` \ No newline at end of file diff --git a/src/content/helpers/content/helper-glob.md b/content/docs/helpers/content/helper-glob.md similarity index 61% rename from src/content/helpers/content/helper-glob.md rename to content/docs/helpers/content/helper-glob.md index 8cdc268..d4c83ba 100644 --- a/src/content/helpers/content/helper-glob.md +++ b/content/docs/helpers/content/helper-glob.md @@ -1,23 +1,26 @@ -#### \{{glob}} -**example helper**: This helper is intended to be instructive, to help with creating new helpers that use these features. +## \{{glob}} + +> **example helper**: This helper is intended to be instructive, to help with creating new helpers that use these features. -_Use minimatch patterns to include content from specified file or files._ -
Parameters: `String` +Use minimatch patterns to include content from specified file or files. + +Parameters: `String`
Default: `undefined` Examples: ```handlebars -\{{glob 'src/files/*.md'}} -\{{glob 'src/files/*.{txt,md}'}} +\{{glob "src/files/*.md"}} +\{{glob "src/files/*.{txt,md}"}} ``` {{#draft}} -#### \{{globWithContext}} +## \{{globWithContext}} **example helper**: This helper is intended to be instructive, to help with creating new helpers that use these features. -_Use minimatch patterns to include content from specified file or files._ -
Parameters: `String` +_Use minimatch patterns to include content from specified file or files. + +Parameters: `String`
Default: `undefined` Content: @@ -42,7 +45,7 @@ href: The ```handlebars -\{{globWithContext './src/**/test.md' href}} +\{{globWithContext "src/**/test.md" href}} ``` Data (context): @@ -56,7 +59,7 @@ link: ``` ```handlebars -\{{globWithContext './src/**/test.md' this}} -\{{globWithContext './src/**/test.md' this}} +\{{globWithContext "src/**/test.md" this}} +\{{globWithContext "src/**/test.md" this}} ``` {{/draft}} \ No newline at end of file diff --git a/src/content/helpers/content/helper-include.md b/content/docs/helpers/content/helper-include.md similarity index 85% rename from src/content/helpers/content/helper-include.md rename to content/docs/helpers/content/helper-include.md index 7af7d8c..d6aca1a 100644 --- a/src/content/helpers/content/helper-include.md +++ b/content/docs/helpers/content/helper-include.md @@ -1,5 +1,6 @@ -#### \{{include}} -_Include external files._ +## \{{include}} + +> Include external files.
Pattern: `\{{include [name] [data]}}`
Parameters: @@ -9,7 +10,7 @@ _Include external files._ Data (collection): `planet-express.json` -```javascript +```js [ "Professor Farnsworth", "Fry", @@ -19,18 +20,18 @@ Data (collection): `planet-express.json` Include (partial to be "included"): `planet-express.hbs` -```html +```handlebars \{{sort this}} ``` Template: -```html +```handlebars

\{{include "planet-express.hbs" data}}

``` Renders to: -```html +```handlebars

Bender, Fry, Professor Farnsworth

``` \ No newline at end of file diff --git a/src/content/helpers/data/helper-parseJSON.md b/content/docs/helpers/data/helper-parseJSON.md similarity index 96% rename from src/content/helpers/data/helper-parseJSON.md rename to content/docs/helpers/data/helper-parseJSON.md index 563645c..9765290 100644 --- a/src/content/helpers/data/helper-parseJSON.md +++ b/content/docs/helpers/data/helper-parseJSON.md @@ -1,4 +1,4 @@ -#### \{{parseJSON}} +## \{{parseJSON}} > This block helper parses "inline" JSON and passes it into the templates or partial contained therein. @@ -14,7 +14,7 @@ parseJSON = function(data, options) { Templates (here we are using a partial, `input.hbs`): -```html +```handlebars
@@ -23,7 +23,7 @@ Templates (here we are using a partial, `input.hbs`): And we include our partial like this: -```html +```handlebars \{{#parseJSON '{"id": "firstname", "label": "First name"}'}} \{{> input }} \{{/parseJSON}} diff --git a/src/content/helpers/dates/helper-formatdate.md b/content/docs/helpers/dates/helper-formatdate.md similarity index 59% rename from src/content/helpers/dates/helper-formatdate.md rename to content/docs/helpers/dates/helper-formatdate.md index 6680f3f..817ce1d 100644 --- a/src/content/helpers/dates/helper-formatdate.md +++ b/content/docs/helpers/dates/helper-formatdate.md @@ -1,5 +1,6 @@ -#### \{{formatDate}} -_Formats a date into a string given a format. Accepts any value that can be passed to `new Date()`. This helper is a port of the [formatDate-js](http://https://github.com/michaelbaldry/formatDate-js) library by [Michael Baldry](https://github.com/michaelbaldry)._ +## \{{formatDate}} + +> Formats a date into a string given a format. Accepts any value that can be passed to `new Date()`. This helper is a port of the [formatDate-js](http://https://github.com/michaelbaldry/formatDate-js) library by [Michael Baldry](https://github.com/michaelbaldry).
Parameters: format `String`, `required` @@ -7,13 +8,13 @@ The format string, according to these tokens: [strftime](http://www.ruby-doc.org Given this data: -```javascript +```js date = new Date() ``` And these templates: -```html +```handlebars \{{formatDate date "%m/%d/%Y"}} \{{formatDate date "%I:%M%p"}} \{{formatDate date "%F"}} diff --git a/src/content/helpers/dates/helper-moment.md b/content/docs/helpers/dates/helper-moment.md similarity index 85% rename from src/content/helpers/dates/helper-moment.md rename to content/docs/helpers/dates/helper-moment.md index 203a91d..647cd99 100644 --- a/src/content/helpers/dates/helper-moment.md +++ b/content/docs/helpers/dates/helper-moment.md @@ -1,8 +1,8 @@ -# \{{moment}} [![NPM version](https://badge.fury.io/js/handlebars-helper-momentjs.png)](http://badge.fury.io/js/handlebars-helper-momentjs) +## \{{moment}} > A helper to master time! Combining the powers of Assemble, Handlebars.js and Moment.js. This helper leverages Moment.js to provide ultimate control over manipulating time and dates in your templates. -## Quickstart +### Quickstart Install the helper: ```bash @@ -15,29 +15,28 @@ Now add the helper to Assemble's options: assemble: { options: { // Assemble will automatically resolve the path - helpers: ['helper-moment', 'foo/*.js'] + helpers: ['helper-moment', 'foo/*.js'] } } ``` -## Options +### Options The moment.js lib has plenty of features and options, these examples are just the tip of the iceberg of what [moment.js][moment] can do. #### Tips Remember that: -* `\{{moment method=null}}` means `moment().method()`, and -* `\{{moment somedate method="something"}}` means `moment(somedate).method("something")`. +* `\{{moment method=null}}` means `moment().method()`, and +* `\{{moment somedate method="something"}}` means `moment(somedate).method("something")`. Also, the handlebars syntax does not allow you pass certain values (like arrays and objects) directly from the tag, so you may need to use YAML frontmatter or supply JSON/YAML data to run those. -## Usage Examples -### Optional YAML Front Matter +### Usage Examples -> YAML front matter is not required, but we'll use it hear to supply our example data for purposes of demonstration: +> YAML front matter is not required, we're using it here just for the purposes of demonstration: ```handlebars --- @@ -55,9 +54,9 @@ duration: minutes: 33} --- -Unix timestamp of now +

Unix timestamp of now

-\{{moment}} +\{{moment}} ``` Results in: @@ -207,7 +206,6 @@ Results in: Sunday-Friday ``` - #### subtract years ```handlebars @@ -307,19 +305,6 @@ This month has 30 days ``` -#### Days in Month - -```handlebars -This month has \{{moment daysInMonth=null}} days -``` - -Results in: - -``` -This month has 30 days -``` - - #### Duration, with humanization ```handlebars @@ -333,22 +318,18 @@ The event will last 3 hours ``` -## Contributing +### Contributing In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [grunt][]. -## Author - -**Mikko Tapionlinna** -+ [github.com/Arkkimaagi](https://github.com/Arkkimaagi) +### Author -## License -Copyright (c) 2013 Mikko Tapionlinna, contributors. -Released under the MIT license ++ [@Arkkimaagi](https://github.com/Arkkimaagi) -*** -_This file was generated on Sunday, October 13, 2013._ +### License +Copyright (c) 2013-2014 Mikko Tapionlinna, contributors. +Released under the MIT license [moment]: http://momentjs.com/docs/ "Moment.js" [grunt]: http://gruntjs.com "Grunt.js" \ No newline at end of file diff --git a/src/content/helpers/dates/helper-now.md b/content/docs/helpers/dates/helper-now.md similarity index 83% rename from src/content/helpers/dates/helper-now.md rename to content/docs/helpers/dates/helper-now.md index c9a452b..67f95ca 100644 --- a/src/content/helpers/dates/helper-now.md +++ b/content/docs/helpers/dates/helper-now.md @@ -1,10 +1,12 @@ -#### \{{now}} -_Returns the current date._ +## \{{now}} + +> Returns the current date. +
Parameters: format `String` - The format string, according to these tokens: [http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime]() (Optional) Template: -```html +```handlebars \{{now}} \{{now "%m/%d/%Y"}} ``` diff --git a/src/content/helpers/dates/helper-timeago.md b/content/docs/helpers/dates/helper-timeago.md similarity index 60% rename from src/content/helpers/dates/helper-timeago.md rename to content/docs/helpers/dates/helper-timeago.md index b1329dd..851799c 100644 --- a/src/content/helpers/dates/helper-timeago.md +++ b/content/docs/helpers/dates/helper-timeago.md @@ -1,15 +1,17 @@ -#### \{{timeago}} -_Returns a human-readable time phrase from the given date._ +## \{{timeago}} + +> Returns a human-readable time phrase from the given date. +
Parameters: `none` Data: -```javascript +```js date = 'Thu Jul 22 2012 23:41:02 GMT-0400 (AST)' ``` Template: -```html +```handlebars \{{timeago date}} ``` diff --git a/content/docs/helpers/html/helper-br.md b/content/docs/helpers/html/helper-br.md new file mode 100644 index 0000000..41e483f --- /dev/null +++ b/content/docs/helpers/html/helper-br.md @@ -0,0 +1,19 @@ +## \{{br}} + +> Renders `
` elements in the output, based on the number given as a parameter. Not really recommended for general use, but it's here if you need it. + +Parameters: `Integer|Count`, `Optional` + +The number of `br` elements to render. + +`template.hbs` + +```handlebars +\{{br 5}} +``` + +renders to: + +```handlebars +`




` +``` diff --git a/content/docs/helpers/html/helper-doctype.md b/content/docs/helpers/html/helper-doctype.md new file mode 100644 index 0000000..01b9823 --- /dev/null +++ b/content/docs/helpers/html/helper-doctype.md @@ -0,0 +1,48 @@ +## \{{doctype}} + +> Easy way to add an uncommonly used doctype. + +Default is HTML 5 (``) although this is probably only useful on projects that use anything besides HTML 5. + +Template: + +```handlebars +\{{DOCTYPE 'svg 1.1'}} +``` + +Renders to: + +```handlebars + +``` + +Available doctypes: + +### HTML 5 (default) + +* `\{{doctype '5'}}` | aliases: `html`, `html5` + +### XML + +* `` +* `\{{doctype 'xml'}}` + +### XHTML + +* `\{{doctype 'basic'}}` +* `\{{doctype 'strict'}}` +* `\{{doctype 'transitional'}}` +* `\{{doctype 'frameset'}}` +* `\{{doctype '1.1'}}` | aliases: `1.1`, `xhtml 1.1` +* `\{{doctype 'mobile'}}` + +### HTML 4.01 + +* `\{{doctype '4'}}` | aliases: `4.01`, `4.01 strict` +* `\{{doctype '4.01 trans'}}` +* `\{{doctype '4.01 frameset'}}` + +### SVG + +* `\{{doctype 'svg'}}` | aliases: `svg`, `svg 1.1`, `svg1.1` +* `\{{doctype 'svg 1.0'}}` | aliases: `svg 1.0`, `svg1.0`, `svg1` diff --git a/src/content/helpers/html/helper-exticon.md b/content/docs/helpers/html/helper-exticon.md similarity index 84% rename from src/content/helpers/html/helper-exticon.md rename to content/docs/helpers/html/helper-exticon.md index 5be8286..10d52fb 100644 --- a/src/content/helpers/html/helper-exticon.md +++ b/content/docs/helpers/html/helper-exticon.md @@ -1,11 +1,12 @@ -#### \{{exticon}} -_Generate the appropriate icon based on the extension of the given file._ +## \{{exticon}} + +> Generate the appropriate icon based on the extension of the given file. Since this helper generates classes that are very specific, feel free to copy the code and use it as inspiration for your a helper that works for you. Usage: -```html +```handlebars \{{exticon 'file.png'}} \{{exticon 'file.pdf'}} \{{exticon 'file.doc'}} diff --git a/src/content/helpers/html/helper-ol.md b/content/docs/helpers/html/helper-ol.md similarity index 77% rename from src/content/helpers/html/helper-ol.md rename to content/docs/helpers/html/helper-ol.md index f2fb0c9..67591a7 100644 --- a/src/content/helpers/html/helper-ol.md +++ b/content/docs/helpers/html/helper-ol.md @@ -1,5 +1,6 @@ -#### \{{ol}} -_Same as the `ul` helper but creates and ordered list. Returns `
` tags based on a count._ +## \{{ol}} + +> Same as the `ul` helper but creates and ordered list. Returns `
` tags based on a count. Parameters: `Hash`, `HTML attributes`, `Optional` @@ -7,20 +8,20 @@ HTML attributes to use on the `ol` element. Data: -```javascript -collection = [ +```js +var collection = [ name: 'Leela' deliveries: 8021, name: 'Bender' deliveries: 239, name: 'Fry' deliveries: 1 -] +]; ``` Template: -```html +```handlebars \{{#ol collection class="deliveries-list"}} \{{name}} - \{{inflect deliveries "delivery" "deliveries" true}} \{{/ol}} diff --git a/src/content/helpers/html/helper-ul.md b/content/docs/helpers/html/helper-ul.md similarity index 85% rename from src/content/helpers/html/helper-ul.md rename to content/docs/helpers/html/helper-ul.md index a928160..f7c6b1e 100644 --- a/src/content/helpers/html/helper-ul.md +++ b/content/docs/helpers/html/helper-ul.md @@ -1,5 +1,6 @@ -#### \{{ul}} -_Creates an unordered list._ +## \{{ul}} + +> Creates an unordered list. Parameters: `Hash|HTML attributes`, `Optional` @@ -7,20 +8,20 @@ HTML attributes to use on the `ul` element. Data: -```javascript -collection = [ +```js +var collection = [ name: 'Leela' deliveries: 8021, name: 'Bender' deliveries: 239, name: 'Fry' deliveries: 1 -] +]; ``` Template: -```html +```handlebars \{{#ul collection class="deliveries-list"}} \{{name}} - \{{inflect deliveries "delivery" "deliveries" true}} \{{/ul}} diff --git a/src/content/helpers/inflections/helper-inflect.md b/content/docs/helpers/inflections/helper-inflect.md similarity index 78% rename from src/content/helpers/inflections/helper-inflect.md rename to content/docs/helpers/inflections/helper-inflect.md index 0112c2f..9829e54 100644 --- a/src/content/helpers/inflections/helper-inflect.md +++ b/content/docs/helpers/inflections/helper-inflect.md @@ -1,5 +1,6 @@ -#### \{{inflect}} -_Returns the plural or singular form of a word based on a count._ +## \{{inflect}} + +> Returns the plural or singular form of a word based on a count. Parameters: * singular `string` - The singular form of the word. (Required) @@ -8,14 +9,14 @@ Parameters: Data: -```javascript +```js enemies = 0 friends = 1 ``` Template: -```html +```handlebars \{{inflect enemies "enemy" "enemies"}} \{{inflect friends "friend" "friends" true}} ``` diff --git a/content/docs/helpers/inflections/helper-ordinalize.md b/content/docs/helpers/inflections/helper-ordinalize.md new file mode 100644 index 0000000..78e6225 --- /dev/null +++ b/content/docs/helpers/inflections/helper-ordinalize.md @@ -0,0 +1,20 @@ +## \{{ordinalize}} + +> Turns a number into an ordinal string. Taken from the templating library [Walrus](https://github.com/jeremyruppel/walrus) by [Jeremy Ruppel](https://github.com/jeremyruppel). + +Parameters: `none` + +Template: + +```handlebars +\{{ordinalize 3}} +\{{ordinalize 1}} +\{{ordinalize 22}} +``` +Renders to: + +``` +3rd +1st +22nd +``` diff --git a/content/docs/helpers/layout/helper-block.md b/content/docs/helpers/layout/helper-block.md new file mode 100644 index 0000000..ea86e68 --- /dev/null +++ b/content/docs/helpers/layout/helper-block.md @@ -0,0 +1,25 @@ +## \{{block}} + +> Defines a chunk of a template that can be modified by an extending template. If the block is not altered by an extending template, then the block's contents remain unchanged. + +### Parameters + +* name `string` The name of the block. Default: `undefined`. + +Blocks may be used as standalone helper calls to create placeholders, or wrap default content to be altered or replaced. + +### Examples: + +```handlebars +{{{block "mainContent"}}} +``` + +Note the triple brackets, needed to keep the new content from being escaped. + +```handlebars +{{#block}} +

Default Content

+{{/block}} +``` + +See `{{extend}}` for more examples. diff --git a/content/docs/helpers/layout/helper-content.md b/content/docs/helpers/layout/helper-content.md new file mode 100644 index 0000000..6856f9b --- /dev/null +++ b/content/docs/helpers/layout/helper-content.md @@ -0,0 +1,27 @@ +## \{{content}} + +> Imports a partial into the current template. If that partial contains `{{block}}` sections, they can be altered by `{{content}}` blocks inside the extend._ + +### Parameters: + +* name `string`: The name of the `{{block}}` to target with the new content. Default: `undefined`. + +### Attributes: + +* mode `append|prepend|replace`: How the contents of this `{{content}}` block should be applied to the `{{block}}`. Default: `append`. + +### Examples: + +```handlebars +{{#content "mainContent"}} +

New Content To Replace Old

+{{/content}} +``` + +```handlebars +{{#content "mainContent" mode="append"}} +

New Content To Append To Old

+{{/content}} +``` + +See `{{extend}}` for examples. diff --git a/content/docs/helpers/layout/helper-extend.md b/content/docs/helpers/layout/helper-extend.md new file mode 100644 index 0000000..9ad9d1c --- /dev/null +++ b/content/docs/helpers/layout/helper-extend.md @@ -0,0 +1,150 @@ +## \{{extend}} + +> Imports a partial into the current template. If that partial contains `{{block}}` sections, they can be altered by `{{content}}` blocks inside the extend. + +### Parameters + +* Partial `string` The name of the partial to import. Default: `undefined`. + + +### Example #1: + +A partial named `panel` contains the following: + +```handlebars +
+
+ {{#block "panel-heading"}}

{{block "panel-title"}}

{{/block}} +
+
+ {{block "panel-body"}} +
+
+``` + +This would be used in a template like so: + +```handlebars +{{#extend "panel"}} + {{#content "panel-title"}}This is my panel title{{/content}} + {{#content "panel-body"}} +

This is some panel content

+ {{/content}} +{{/extend}} +``` + +and results in: + +```handlebars +
+
+

This is my panel title

+
+
+

This is some panel content

+
+
+``` + +_Note that content was only defined for `panel-title`, not `panel-heading`, so the h3 was not replaced. Blocks are only altered if content is defined for that block._ + +### Example #2: + +Partial template `base`: + +```handlebars + + + + {{#block "head"}} + {{title}} + {{/block}} + + +
+
+ {{#block "header"}} +

{{title}}

+ {{/block}} +
+
+ {{{block "body"}}} +
+
+ {{#block "footer"}} + © 2014 + {{/block}} +
+
+ {{{block "foot"}}} + + +``` + +Extending template: + +```handlebars +{{#extend "base"}} + {{#content "head" mode="append"}} + + {{/content}} + + {{#content "body"}} +

Welcome Home

+ +
    + {{#items}} +
  • {{.}}
  • + {{/items}} +
+ {{/content}} + + {{#content "foot" mode="prepend"}} + + {{/content}} +{{/extend}} +``` + +When given the data: + +```js +{ + title: 'Layout Test', + items: [ + 'apple', + 'orange', + 'banana' + ] +} +``` + +Produces: + +```html + + + + Layout Test + + + +
+
+

Layout Test

+
+
+

Welcome Home

+
    +
  • apple
  • +
  • orange
  • +
  • banana
  • +
+
+
+ © 2014 +
+
+ + + +``` \ No newline at end of file diff --git a/content/docs/helpers/lodash/lodash.md b/content/docs/helpers/lodash/lodash.md new file mode 100644 index 0000000..fa39dde --- /dev/null +++ b/content/docs/helpers/lodash/lodash.md @@ -0,0 +1,26 @@ +## Lo-Dash + +> Use Lo-Dash methods as Handlebars helpers + +All enumerable properties on the Lo-Dash object are exposed as Handlebars helpers and may be used anywhere in your templates. + +Lo-Dash helpers have the same name as their Lo-Dash equivalent, except helper names are prefixed with a hard-coded `_`. + +For example + +* `\{{_keys}}` => `_.keys` +* `\{{_isObject}}` => `_.isObject` + +And so on. + +### Pro tip + +These Lo-Dash methods come in super handy when used as subexpressions: + +```html +{{#foo (_isObject val)}} +Do something +{{/foo}} +``` + +Consult the [Lo-Dash API documentation](http://lodash.com/docs) for help with usage and to see all of the available methods and options. \ No newline at end of file diff --git a/src/content/helpers/logging/helper-debug.md b/content/docs/helpers/logging/helper-debug.md similarity index 77% rename from src/content/helpers/logging/helper-debug.md rename to content/docs/helpers/logging/helper-debug.md index daaf75b..e593d78 100644 --- a/src/content/helpers/logging/helper-debug.md +++ b/content/docs/helpers/logging/helper-debug.md @@ -1,11 +1,12 @@ -#### \{{debug}} -_Simple `console.debug()` that shows the current context._ +## \{{debug}} + +> Simple `console.debug()` that shows the current context. Parameters: `none` Data: -```javascript +```js { "collection": [ { @@ -26,7 +27,7 @@ Data: Template: -```html +```handlebars \{{#withFirst collection}} \{{debug name}} \{{/withFirst}} @@ -34,7 +35,7 @@ Template: Renders to: -```javascript +```js Context: { deliveries: 8021, name: "Leela" } Value: Leela ``` diff --git a/src/content/helpers/logging/helper-expandJSON.md b/content/docs/helpers/logging/helper-expandJSON.md similarity index 77% rename from src/content/helpers/logging/helper-expandJSON.md rename to content/docs/helpers/logging/helper-expandJSON.md index c71f635..375fce2 100644 --- a/src/content/helpers/logging/helper-expandJSON.md +++ b/content/docs/helpers/logging/helper-expandJSON.md @@ -1,18 +1,19 @@ -#### \{{expandJSON}} -_Return a stringified array of the expanded file paths that match the given globbing pattern(s)_ +## \{{expandJSON}} + +> Return a stringified array of the expanded file paths that match the given globbing pattern(s) Parameters: `String` Default: `undefined` Template: -```html -\{{expandJSON 'src/**/*.md'}} +```handlebars +\{{expandJSON 'src/**/*.md'}} ``` Renders to: -```javascript +```js [ "src/content/blockquotes.md", "src/content/chapters/01-getting-started.md", diff --git a/src/content/helpers/logging/helper-expandYAML.md b/content/docs/helpers/logging/helper-expandYAML.md similarity index 76% rename from src/content/helpers/logging/helper-expandYAML.md rename to content/docs/helpers/logging/helper-expandYAML.md index 9d5f628..7164575 100644 --- a/src/content/helpers/logging/helper-expandYAML.md +++ b/content/docs/helpers/logging/helper-expandYAML.md @@ -1,13 +1,14 @@ -#### \{{expandYAML}} -_Return a unique, YAML-formatted array of all file or directory paths that match the given globbing pattern(s)_ +## \{{expandYAML}} + +> Return a unique, YAML-formatted array of all file or directory paths that match the given globbing pattern(s) * Parameters: `String` * Default: `undefined` Template: -```html -\{{expandYAML 'src/**/*.md'}} +```handlebars +\{{expandYAML 'src/**/*.md'}} ``` Renders to: diff --git a/src/content/helpers/logging/helper-log.md b/content/docs/helpers/logging/helper-log.md similarity index 65% rename from src/content/helpers/logging/helper-log.md rename to content/docs/helpers/logging/helper-log.md index 828f3c7..e5e6a5e 100644 --- a/src/content/helpers/logging/helper-log.md +++ b/content/docs/helpers/logging/helper-log.md @@ -1,11 +1,12 @@ -#### \{{log}} -_Simple `console.log()`_ +## \{{log}} + +> Simple `console.log()` Parameters: `none` Template -```html +```handlebars \{{log "Hi console :)"}} ``` diff --git a/src/content/helpers/markdown/helper-markdown.md b/content/docs/helpers/markdown/helper-markdown.md similarity index 82% rename from src/content/helpers/markdown/helper-markdown.md rename to content/docs/helpers/markdown/helper-markdown.md index 09d873a..31026f6 100644 --- a/src/content/helpers/markdown/helper-markdown.md +++ b/content/docs/helpers/markdown/helper-markdown.md @@ -1,9 +1,10 @@ -#### \{{markdown}} -_Block helper for embedding markdown content inside HTML, and rendering it to HTML at build time._ +## \{{markdown}} + +> Block helper for embedding markdown content inside HTML, and rendering it to HTML at build time. Template: -```html +```handlebars

My Blog

\{{#markdown}} @@ -22,7 +23,7 @@ In hac habitasse platea dictumst. Morbi non rutrum risus. Renders to: -```html +```handlebars

My Blog

Post of the day

diff --git a/src/content/helpers/markdown/helper-md.md b/content/docs/helpers/markdown/helper-md.md similarity index 58% rename from src/content/helpers/markdown/helper-md.md rename to content/docs/helpers/markdown/helper-md.md index a7c4db9..1126603 100644 --- a/src/content/helpers/markdown/helper-md.md +++ b/content/docs/helpers/markdown/helper-md.md @@ -1,9 +1,10 @@ -#### \{{md}} -_Include markdown from specified file(s), and render it to HTML_ +## \{{md}} + +> Include markdown from specified file(s), and render it to HTML Template: -```html +```handlebars \{{md "file/to/include/post.md"}} ``` Any content inside the "included" markdown file will be rendered as HTML. diff --git a/content/docs/helpers/math/helper-add.md b/content/docs/helpers/math/helper-add.md new file mode 100644 index 0000000..a9799bf --- /dev/null +++ b/content/docs/helpers/math/helper-add.md @@ -0,0 +1,21 @@ +## \{{add}} + +> Returns the sum of two numbers. + +Parameters: value `int` - The number to add to the expression. (Required) + +Data: + +```js +value = 5 +``` +Template: + +```handlebars +\{{add value 5}} +``` +Renders to: + +``` +10 +``` diff --git a/content/docs/helpers/math/helper-ceil.md b/content/docs/helpers/math/helper-ceil.md new file mode 100644 index 0000000..cf2790d --- /dev/null +++ b/content/docs/helpers/math/helper-ceil.md @@ -0,0 +1,21 @@ +## \{{ceil}} + +> Returns the value rounded up to the nearest integer. + +Parameters: `none` + +Data: + +```js +value = 5.6 +``` +Template: + +```handlebars +\{{ceil value}} +``` +Renders to: + +``` +6 +``` diff --git a/content/docs/helpers/math/helper-divide.md b/content/docs/helpers/math/helper-divide.md new file mode 100644 index 0000000..c60f134 --- /dev/null +++ b/content/docs/helpers/math/helper-divide.md @@ -0,0 +1,21 @@ +## \{{divide}} + +> Returns the division of two numbers. + +Parameters: value `int` - The number to divide the expression. (Required) + +Data: + +```js +value = 5 +``` +Template: + +```handlebars +\{{divide value 5}} +``` +Renders to: + +``` +1 +``` diff --git a/content/docs/helpers/math/helper-floor.md b/content/docs/helpers/math/helper-floor.md new file mode 100644 index 0000000..20548b4 --- /dev/null +++ b/content/docs/helpers/math/helper-floor.md @@ -0,0 +1,21 @@ +## \{{floor}} + +> Returns the value rounded down to the nearest integer. + +Parameters: `none` + +Data: + +```js +value = 5.6 +``` +Template: + +```handlebars +\{{floor value}} +``` +Renders to: + +``` +5 +``` diff --git a/content/docs/helpers/math/helper-multiply.md b/content/docs/helpers/math/helper-multiply.md new file mode 100644 index 0000000..c8fc7e6 --- /dev/null +++ b/content/docs/helpers/math/helper-multiply.md @@ -0,0 +1,22 @@ +## \{{multiply}} + +> Returns the multiplication of two numbers. + +Parameters: value `int` - The number to multiply the expression. (Required) + +Data: + +```js +value = 5 + +``` +Template: + +```handlebars +\{{multiply value 5}} +``` +Renders to: + +``` +25 +``` diff --git a/content/docs/helpers/math/helper-round.md b/content/docs/helpers/math/helper-round.md new file mode 100644 index 0000000..2670f7a --- /dev/null +++ b/content/docs/helpers/math/helper-round.md @@ -0,0 +1,21 @@ +## \{{round}} + +> Returns the value rounded to the nearest integer. + +Parameters: `none` + +Data: + +```js +value = 5.69 +``` +Template: + +```handlebars +\{{round value}} +``` +Renders to: + +``` +6 +``` diff --git a/content/docs/helpers/math/helper-subtract.md b/content/docs/helpers/math/helper-subtract.md new file mode 100644 index 0000000..6a764dd --- /dev/null +++ b/content/docs/helpers/math/helper-subtract.md @@ -0,0 +1,21 @@ +## \{{subtract}} + +> Returns the difference of two numbers. Opposite of `add` + +Parameters: value `int` - The number to subtract from the expression. (Required) + +Data: + +```js +value = 5 +``` +Template: + +```handlebars +\{{subtract value 5}} +``` +Renders to: + +``` +0 +``` diff --git a/content/docs/helpers/math/helper-sum.md b/content/docs/helpers/math/helper-sum.md new file mode 100644 index 0000000..a0e9d35 --- /dev/null +++ b/content/docs/helpers/math/helper-sum.md @@ -0,0 +1,25 @@ +## \{{sum}} + +> Returns the sum of multiple numbers. Similar to `\{{#add}}` block helper but accepts multiple arguments. + +Parameters: `none` + +Data: + +```js +value = { + a: 1, + b: 2, + c: 3 +} +``` +Template: + +```handlebars +\{{sum value.a value.b value.c}} +``` +Renders to: + +``` +6 +``` diff --git a/content/docs/helpers/misc/helper-default.md b/content/docs/helpers/misc/helper-default.md new file mode 100644 index 0000000..7a6884a --- /dev/null +++ b/content/docs/helpers/misc/helper-default.md @@ -0,0 +1,16 @@ +## \{{default}} + +> Provides a default or fallback value if a value doesn't exist. + +Parameters: defaultValue `string|int` - The default value to use. `title = ''` + +Template: + +```handlebars +\{{default title "No title available."}} +``` +Renders to: + +``` +No title available. +``` diff --git a/content/docs/helpers/misc/helper-noop.md b/content/docs/helpers/misc/helper-noop.md new file mode 100644 index 0000000..c72e7b0 --- /dev/null +++ b/content/docs/helpers/misc/helper-noop.md @@ -0,0 +1,3 @@ +## \{{noop}} + +TODO... \ No newline at end of file diff --git a/src/content/helpers/numbers/helper-addCommas.md b/content/docs/helpers/numbers/helper-addCommas.md similarity index 62% rename from src/content/helpers/numbers/helper-addCommas.md rename to content/docs/helpers/numbers/helper-addCommas.md index b9cc123..42172df 100644 --- a/src/content/helpers/numbers/helper-addCommas.md +++ b/content/docs/helpers/numbers/helper-addCommas.md @@ -1,17 +1,18 @@ -#### \{{addCommas}} -_Adds commas to a number._ +## \{{addCommas}} + +> Adds commas to a number. Parameters: `none` Data: -```javascript +```js value = 2222222 ``` Template: -```html +```handlebars \{{addCommas value}} ``` Renders to: diff --git a/src/content/helpers/numbers/helper-toAbbr.md b/content/docs/helpers/numbers/helper-toAbbr.md similarity index 56% rename from src/content/helpers/numbers/helper-toAbbr.md rename to content/docs/helpers/numbers/helper-toAbbr.md index 448773d..761c564 100644 --- a/src/content/helpers/numbers/helper-toAbbr.md +++ b/content/docs/helpers/numbers/helper-toAbbr.md @@ -1,5 +1,6 @@ -#### \{{toAbbr}} -_Returns the number in abbreviation formats based on a value. The number is rounded to a particular decimal place._ +## \{{toAbbr}} + +> Returns the number in abbreviation formats based on a value. The number is rounded to a particular decimal place. Parameters: digits `int` - The number of digits to appear after the decimal point. (Optional) @@ -7,13 +8,13 @@ Default: `2` Data: -```javascript +```js value = 123456789 ``` Template: -```html +```handlebars \{{toAbbr value}} ``` diff --git a/src/content/helpers/numbers/helper-toExponential.md b/content/docs/helpers/numbers/helper-toExponential.md similarity index 52% rename from src/content/helpers/numbers/helper-toExponential.md rename to content/docs/helpers/numbers/helper-toExponential.md index e9568d8..ff1938d 100644 --- a/src/content/helpers/numbers/helper-toExponential.md +++ b/content/docs/helpers/numbers/helper-toExponential.md @@ -1,17 +1,18 @@ -#### \{{toExponential}} -_Returns the number in exponential notation with one digit before the decimal point, rounded to `fractions` digits after the decimal point._ +## \{{toExponential}} + +> Returns the number in exponential notation with one digit before the decimal point, rounded to `fractions` digits after the decimal point. Parameters: fractions `int` - An integer specifying the number of digits after the decimal point. (Optional) Data: -```javascript +```js value = 5 ``` Template: -```html +```handlebars \{{toExponential value 5}} ``` diff --git a/content/docs/helpers/numbers/helper-toFixed.md b/content/docs/helpers/numbers/helper-toFixed.md new file mode 100644 index 0000000..c7e4c75 --- /dev/null +++ b/content/docs/helpers/numbers/helper-toFixed.md @@ -0,0 +1,23 @@ +## \{{toFixed}} + +> Returns exactly `digits` after the decimal place. The number is rounded if necessary, and the fractional part is padded with zeros if necessary so that it has the specified length. + +Parameters: digits `int` - The number of digits to appear after the decimal point. (Optional) + +Data: + +```js +value = 5.53231 +``` + +Template: + +```handlebars +\{{toFixed value 3}} +``` + +Renders to: + +``` +5.532 +``` diff --git a/src/content/helpers/numbers/helper-toFloat.md b/content/docs/helpers/numbers/helper-toFloat.md similarity index 59% rename from src/content/helpers/numbers/helper-toFloat.md rename to content/docs/helpers/numbers/helper-toFloat.md index b68f2cb..fd5b1ed 100644 --- a/src/content/helpers/numbers/helper-toFloat.md +++ b/content/docs/helpers/numbers/helper-toFloat.md @@ -1,17 +1,18 @@ -#### \{{toFloat}} -_Returns a floating point number._ +## \{{toFloat}} + +> Returns a floating point number. Parameters: `none` Data: -```javascript +```js value = '22.2abc' ``` Template: -```html +```handlebars \{{toFloat value}} ``` diff --git a/src/content/helpers/numbers/helper-toInt.md b/content/docs/helpers/numbers/helper-toInt.md similarity index 64% rename from src/content/helpers/numbers/helper-toInt.md rename to content/docs/helpers/numbers/helper-toInt.md index 8e349f3..5e412fa 100644 --- a/src/content/helpers/numbers/helper-toInt.md +++ b/content/docs/helpers/numbers/helper-toInt.md @@ -1,17 +1,18 @@ -#### \{{toInt}} -_Returns an integer._ +## \{{toInt}} + +> Returns an integer. Parameters: `none` Data: -```javascript +```js value = '22.2abc' ``` Template: -```html +```handlebars \{{toInt value}} ``` diff --git a/src/content/helpers/numbers/helper-toPrecision.md b/content/docs/helpers/numbers/helper-toPrecision.md similarity index 60% rename from src/content/helpers/numbers/helper-toPrecision.md rename to content/docs/helpers/numbers/helper-toPrecision.md index 297d21f..bc0a3da 100644 --- a/src/content/helpers/numbers/helper-toPrecision.md +++ b/content/docs/helpers/numbers/helper-toPrecision.md @@ -1,17 +1,18 @@ -#### \{{toPrecision}} -_Returns the number in fixed-point or exponential notation rounded to `precision` significant digits._ +## \{{toPrecision}} + +> Returns the number in fixed-point or exponential notation rounded to `precision` significant digits. Parameters: precision `int` - The number of digits. If omitted, it returns the entire number (without any formatting). (Optional) Data: -```javascript +```js value = 555.322 ``` Template: -```html +```handlebars \{{toPrecision value 4}} ``` diff --git a/content/docs/helpers/path/helper-dirname.md b/content/docs/helpers/path/helper-dirname.md new file mode 100644 index 0000000..86e95d7 --- /dev/null +++ b/content/docs/helpers/path/helper-dirname.md @@ -0,0 +1,15 @@ +## \{{dirname}} + +> Return the directory name of a path. Similar to the Unix dirname command. + +Template: + +```handlebars +\{{dirname '/foo/bar/baz/asdf/quux'}} +``` + +Renders to: + +``` +'/foo/bar/baz/asdf' +``` diff --git a/content/docs/helpers/path/helper-extname.md b/content/docs/helpers/path/helper-extname.md new file mode 100644 index 0000000..25b8281 --- /dev/null +++ b/content/docs/helpers/path/helper-extname.md @@ -0,0 +1,38 @@ +## \{{extname}} + +> "Return the extension of the path, from the last '.' to end of string in the last portion of the path. If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string." + +Parameters: `string` (the value to test against). +Default: `none` + +Template: + +```handlebars +\{{extname 'index.html'}} +``` + +Renders to: + +``` +.html +``` + +Template: + +```handlebars +\{{extname 'index.'}} +``` + +Renders to: + +``` +. +``` + +Template: + +```handlebars +\{{extname 'index'}} +``` + +Returns nothing. diff --git a/content/docs/helpers/path/helper-relative.md b/content/docs/helpers/path/helper-relative.md new file mode 100644 index 0000000..60d7258 --- /dev/null +++ b/content/docs/helpers/path/helper-relative.md @@ -0,0 +1,23 @@ +## \{{relative}} + +> Calculate the relative path from one **absolute path** to another (e.g from path A, to path B). + +
Parameters: `string` (the value to test against) +
Default: `none` + +Example: + +```handlebars +\{{relative "from" "to"}} +``` +Template: + +```handlebars + +``` + +Renders to: + +```handlebars + +``` \ No newline at end of file diff --git a/src/content/helpers/readme/helper-authors.md b/content/docs/helpers/readme/helper-authors.md similarity index 97% rename from src/content/helpers/readme/helper-authors.md rename to content/docs/helpers/readme/helper-authors.md index f56549f..6a55f49 100644 --- a/src/content/helpers/readme/helper-authors.md +++ b/content/docs/helpers/readme/helper-authors.md @@ -1,4 +1,4 @@ -#### \{{authors}} +## \{{authors}} Generates a list of markdown-formatted project authors from the AUTHORS file in the root of a project. Since Handlebars enforces case sensitivity with helper names, this helper comes in two different flavors: `\{{AUTHORS}}` or `\{{authors}}`. @@ -14,7 +14,7 @@ Jon Schlinkert (http://github.com/jonschlinkert) Template (lowercase version): -```html +```handlebars \{{authors}} ``` diff --git a/src/content/helpers/readme/helper-changelog.md b/content/docs/helpers/readme/helper-changelog.md similarity index 98% rename from src/content/helpers/readme/helper-changelog.md rename to content/docs/helpers/readme/helper-changelog.md index f7b40e9..8eeb897 100644 --- a/src/content/helpers/readme/helper-changelog.md +++ b/content/docs/helpers/readme/helper-changelog.md @@ -1,4 +1,4 @@ -#### \{{changelog}} +## \{{changelog}} A few convenience helpers that read data in YAML format, and do interesting things with the data. Well... they "do things" with the data. Anyway I guess only nerds like me find it interesting. **NOTE**: These helpers will throw an error if the source files are not valid YAML format, using the following conventions: diff --git a/src/content/helpers/readme/helper-travis.md b/content/docs/helpers/readme/helper-travis.md similarity index 80% rename from src/content/helpers/readme/helper-travis.md rename to content/docs/helpers/readme/helper-travis.md index aa8d3ab..159786c 100644 --- a/src/content/helpers/readme/helper-travis.md +++ b/content/docs/helpers/readme/helper-travis.md @@ -1,15 +1,16 @@ -### Travis CI +## \{{travis}} -#### \{{travis}} -_Creates a "full" Travis CI link in markdown format_. +> Creates a "full" Travis CI link in markdown format Params: `branch` + Type: `String` + Usage: `\{{travis [branch]}}` Template: -```html +```handlebars \{{travis}}` ``` @@ -21,7 +22,7 @@ Renders to: Template with branch: -```html +```handlebars \{{travis 'master'}} ``` @@ -31,15 +32,17 @@ Renders to: # [assemble v9.1.0](https://github.com/assemble/assemble)[![Build Status](https://travis-ci.org/assemble/assemble.png?branch=master)](https://travis-ci.org/assemble/assemble) ``` -#### \{{travis-badge}} -_Creates a Travis CI link in markdown format_. +## \{{travis-badge}} + +> Creates a Travis CI link in markdown format Params: `none` + Usage: `\{{travis-badge}}` Template -```html +```handlebars \{{travis}}` ``` diff --git a/src/content/helpers/special/helper-aggregate.md b/content/docs/helpers/special/helper-aggregate.md similarity index 93% rename from src/content/helpers/special/helper-aggregate.md rename to content/docs/helpers/special/helper-aggregate.md index 0a85435..4626715 100644 --- a/src/content/helpers/special/helper-aggregate.md +++ b/content/docs/helpers/special/helper-aggregate.md @@ -12,21 +12,23 @@ npm i helper-aggregate --save-dev ### Usage ```handlebars -\{{aggregate 'path/to/*.hbs'}} +\{{aggregate 'path/to/*.hbs'}} ``` #### Usage in Assemble In your Gruntfile, simply add `helper-aggregate` to the `helpers` property in the [Assemble](http://assemble.io) task or target options: -```javascript +```js grunt.initConfig({ assemble: { options: { // must be in devDependencies for assemble // to automatically resolve the helper helpers: ['helper-aggregate'] + }, + blog: { + files: {} } - ... } }); ``` @@ -54,15 +56,13 @@ Default value: `\n` The separator to append after each inlined file. - - -### Setting options +### Defining options #### hash options Set options as hash arguments. ```handlebars -\{{aggregate 'my/book/chapters/*.hbs' sep=""}} +\{{aggregate 'my/book/chapters/*.hbs' sep=""}} ``` @@ -71,7 +71,7 @@ Pass [Assemble](http://assemble.io) options into the helper. In your project's Gruntfile, options for the `\{{aggregate}}` helper can be defined in the Assemble task options: -```javascript +```js assemble: { options: { helpers: ['helper-aggregate'], @@ -81,8 +81,10 @@ assemble: { return a.index >= b.index ? 1 : -1; } } + }, + book: { + files: {} } - ... } ``` @@ -112,7 +114,7 @@ grunt.initConfig({ } }, book: { - src: ['chapters/*.hbs'], + src: ['chapters/*.hbs'], dest: 'book/' } } @@ -135,7 +137,7 @@ intro: Chapter <%= chapter %> would result in: -```html +```handlebars @@ -160,10 +162,8 @@ would result in:

Chapter: 3

- ``` - ### Author **Jon Schlinkert** @@ -174,4 +174,4 @@ would result in: ### License and Copyright Licensed under the [MIT License](./LICENSE-MIT) -Copyright (c) Jon Schlinkert, contributors. \ No newline at end of file +Copyright (c) 2014 Jon Schlinkert, contributors. \ No newline at end of file diff --git a/src/content/helpers/special/helper-compose.md b/content/docs/helpers/special/helper-compose.md similarity index 95% rename from src/content/helpers/special/helper-compose.md rename to content/docs/helpers/special/helper-compose.md index 121df23..c55e974 100644 --- a/src/content/helpers/special/helper-compose.md +++ b/content/docs/helpers/special/helper-compose.md @@ -11,7 +11,7 @@ npm i helper-compose --save-dev Next, in your Gruntfile, simply add `helper-compose` to the `helpers` property in the [Assemble](http://assemble.io) task or target options: -```javascript +```js grunt.initConfig({ assemble: { options: { @@ -27,7 +27,7 @@ grunt.initConfig({ With that completed, you may now use the `\{{compose}}` helper in your templates: ```handlebars -\{{compose 'path/to/files/*.hbs'}} +\{{compose 'path/to/files/*.hbs'}}

Title: \{{title}}

\{{{content}}}

\{{/compose}} @@ -83,10 +83,10 @@ Compare function for sorting the aggregated files. In your project's Gruntfile, options for the `\{{#compose}}...\{{/compose}}` helper can be defined in the Assemble task options: -```javascript +```js assemble: { options: { - helpers: ['helper-compose', 'other/helpers/*.js'], + helpers: ['helper-compose', 'other/helpers/*.js'], compose: { cwd: 'test/fixtures/includes', sep: '', @@ -138,7 +138,7 @@ assemble: { Instead of doing this: ```handlebars -\{{compose 'path/to/my/blog/posts/*.hbs'}} +\{{compose 'path/to/my/blog/posts/*.hbs'}}

\{{post.title}}

... \{{/compose}} @@ -146,7 +146,7 @@ Instead of doing this: You could define the `cwd` in the `compose` options in your project's Gruntfile: -```javascript +```js assemble: { options: { helpers: ['helper-compose'], @@ -159,7 +159,7 @@ assemble: { and then define paths in the templates like this: ```handlebars -\{{compose 'posts/*.hbs'}} +\{{compose 'posts/*.hbs'}}

\{{post.title}}

... \{{/compose}} @@ -197,7 +197,7 @@ Our `index.hbs` file contains the following: ```handlebars -\{{#compose 'posts/*.hbs'}} +\{{#compose 'posts/*.hbs'}}

\{{blog.title}}

Post title: \{{title}}

Post \{{{content}}}

@@ -217,7 +217,7 @@ This is the \{{title}}, which should be inserted in the composed result. The result, `blog/index.html` would contain something like: -```html +```handlebars diff --git a/src/content/helpers/strings/helper-capitalizeEach.md b/content/docs/helpers/strings/helper-capitalizeEach.md similarity index 56% rename from src/content/helpers/strings/helper-capitalizeEach.md rename to content/docs/helpers/strings/helper-capitalizeEach.md index 3c8dfbd..1da0c9c 100644 --- a/src/content/helpers/strings/helper-capitalizeEach.md +++ b/content/docs/helpers/strings/helper-capitalizeEach.md @@ -1,8 +1,10 @@ -#### \{{capitalizeEach}} -_Capitalizes each word in a string._ -
Parameters: `none` +## \{{capitalizeEach}} -```html +> Capitalizes each word in a string. + +Parameters: `none` + +```handlebars \{{capitalizeEach "capitalize EACH word in this sentence"}} ``` Renders to: diff --git a/src/content/helpers/strings/helper-capitalizeFirst.md b/content/docs/helpers/strings/helper-capitalizeFirst.md similarity index 55% rename from src/content/helpers/strings/helper-capitalizeFirst.md rename to content/docs/helpers/strings/helper-capitalizeFirst.md index 3a7f18f..91f9706 100644 --- a/src/content/helpers/strings/helper-capitalizeFirst.md +++ b/content/docs/helpers/strings/helper-capitalizeFirst.md @@ -1,8 +1,10 @@ -#### \{{capitalizeFirst}} -_Capitalizes the first word in a string._ -
Parameters: `none` +## \{{capitalizeFirst}} -```html +> Capitalizes the first word in a string. + +Parameters: `none` + +```handlebars \{{capitalizeFirst "capitalize first word in this sentence"}} ``` Renders to: diff --git a/src/content/helpers/strings/helper-center.md b/content/docs/helpers/strings/helper-center.md similarity index 51% rename from src/content/helpers/strings/helper-center.md rename to content/docs/helpers/strings/helper-center.md index 8b3a6dd..9e9a1d9 100644 --- a/src/content/helpers/strings/helper-center.md +++ b/content/docs/helpers/strings/helper-center.md @@ -1,8 +1,10 @@ -#### \{{center}} -_Centers a string using non-breaking spaces._ -
Parameters: spaces: `int` - The number of spaces. (Required) +## \{{center}} -```html +> Centers a string using non-breaking spaces. + +Parameters: spaces: `int`. The number of spaces. (Required) + +```handlebars \{{center "Bender should not be allowed on tv." 10}} ``` Renders to: diff --git a/content/docs/helpers/strings/helper-dashify.md b/content/docs/helpers/strings/helper-dashify.md new file mode 100644 index 0000000..ad542cb --- /dev/null +++ b/content/docs/helpers/strings/helper-dashify.md @@ -0,0 +1,13 @@ +## \{{dashify}} + +> Same as `hyphenate`, but replaces dots in string with hyphens. + +Parameters: `none` + +```handlebars +\{{dashify "make.this.all.hyphenated"}} +``` +Renders to: +``` +make-this-all-hyphenated +``` \ No newline at end of file diff --git a/src/content/helpers/strings/helper-formatPhoneNumber.md b/content/docs/helpers/strings/helper-formatPhoneNumber.md similarity index 71% rename from src/content/helpers/strings/helper-formatPhoneNumber.md rename to content/docs/helpers/strings/helper-formatPhoneNumber.md index f34f933..e3116a4 100644 --- a/src/content/helpers/strings/helper-formatPhoneNumber.md +++ b/content/docs/helpers/strings/helper-formatPhoneNumber.md @@ -1,16 +1,17 @@ -#### \{{formatPhoneNumber}} -_Output a formatted phone number_ +## \{{formatPhoneNumber}} + +> Output a formatted phone number Credit: [Treehouse Blog](http://blog.teamtreehouse.com/handlebars-js-part-2-partials-and-helpers) Data: -```javascript +```js number: 4444444444 ``` Template: -```html +```handlebars \{{formatPhoneNumber number}} ``` Renders to: diff --git a/content/docs/helpers/strings/helper-hyphenate.md b/content/docs/helpers/strings/helper-hyphenate.md new file mode 100644 index 0000000..d8ff42f --- /dev/null +++ b/content/docs/helpers/strings/helper-hyphenate.md @@ -0,0 +1,14 @@ +## \{{hyphenate}} + +> Replace spaces in string with hyphens. + +Parameters: `none` + +```handlebars +\{{hyphenate "make this all hyphenated"}} +``` +Result: + +``` +make-this-all-hyphenated +``` \ No newline at end of file diff --git a/src/content/helpers/strings/helper-lowercase.md b/content/docs/helpers/strings/helper-lowercase.md similarity index 51% rename from src/content/helpers/strings/helper-lowercase.md rename to content/docs/helpers/strings/helper-lowercase.md index 9977c4f..7a380ce 100644 --- a/src/content/helpers/strings/helper-lowercase.md +++ b/content/docs/helpers/strings/helper-lowercase.md @@ -1,8 +1,10 @@ -#### \{{lowercase}} -_Turns a string to lowercase._ -
Parameters: `none` +## \{{lowercase}} -```html +> Turns a string to lowercase. + +Parameters: `none` + +```handlebars \{{lowercase "MAKE THIS ALL LOWERCASE"}} ``` Renders to: diff --git a/src/content/helpers/strings/helper-occurances.md b/content/docs/helpers/strings/helper-occurances.md similarity index 60% rename from src/content/helpers/strings/helper-occurances.md rename to content/docs/helpers/strings/helper-occurances.md index 9ae5f55..a155737 100644 --- a/src/content/helpers/strings/helper-occurances.md +++ b/content/docs/helpers/strings/helper-occurances.md @@ -1,12 +1,14 @@ -#### \{{occurrences}} -_Evaluate string A, and count the occurrences of string B within string A_ -
Default: `undefined` +## \{{occurrences}} + +> Evaluate string A, and count the occurrences of string B within string A + +Default: `undefined`
Parameters: * `String A` (required): The string to evaluate * `String B` (required): The string to look for and count in "string A" -```html +```handlebars \{{occurrences "evaluate this string" "i"}} ``` Result: diff --git a/src/content/helpers/strings/helper-reverse.md b/content/docs/helpers/strings/helper-reverse.md similarity index 61% rename from src/content/helpers/strings/helper-reverse.md rename to content/docs/helpers/strings/helper-reverse.md index 7a27a58..1490361 100644 --- a/src/content/helpers/strings/helper-reverse.md +++ b/content/docs/helpers/strings/helper-reverse.md @@ -1,8 +1,10 @@ -#### \{{reverse}} -_Reverses a string._ -
Parameters: `none` +## \{{reverse}} -```html +> Reverses a string. + +Parameters: `none` + +```handlebars \{{reverse "bender should NOT be allowed on TV."}} ``` Renders to: diff --git a/src/content/helpers/strings/helper-sentence.md b/content/docs/helpers/strings/helper-sentence.md similarity index 60% rename from src/content/helpers/strings/helper-sentence.md rename to content/docs/helpers/strings/helper-sentence.md index dfd053a..6971e1b 100644 --- a/src/content/helpers/strings/helper-sentence.md +++ b/content/docs/helpers/strings/helper-sentence.md @@ -1,8 +1,10 @@ -#### \{{sentence}} -_Capitalizes the first word of each sentence in a string and converts the rest of the sentence to lowercase._ +## \{{sentence}} + +> Capitalizes the first word of each sentence in a string and converts the rest of the sentence to lowercase. + Parameters: `none` -```html +```handlebars \{{sentence "capitalize the FIRST word in each sentence. but make the OTHER words lowercase."}} ``` Renders to: diff --git a/content/docs/helpers/strings/helper-titleize.md b/content/docs/helpers/strings/helper-titleize.md new file mode 100644 index 0000000..5109fb3 --- /dev/null +++ b/content/docs/helpers/strings/helper-titleize.md @@ -0,0 +1,14 @@ +## \{{titleize}} + +> Capitalizes all words within a string. Taken from the templating library [Walrus](https://github.com/jeremyruppel/walrus) by [Jeremy Ruppel](https://github.com/jeremyruppel). + +Parameters: `none` + +```handlebars +\{{titleize "capitalize EACH word in this sentence"}} +``` +Renders to: + +``` +Capitalize Each Word In This Sentence. +``` \ No newline at end of file diff --git a/src/content/helpers/strings/helper-truncate.md b/content/docs/helpers/strings/helper-truncate.md similarity index 63% rename from src/content/helpers/strings/helper-truncate.md rename to content/docs/helpers/strings/helper-truncate.md index 9e007bd..8235ba5 100644 --- a/src/content/helpers/strings/helper-truncate.md +++ b/content/docs/helpers/strings/helper-truncate.md @@ -1,11 +1,13 @@ -#### \{{truncate}} -_Truncates a string given a specified `length`, providing a custom string to denote an `omission`._ -
Parameters: +## \{{truncate}} + +> Truncates a string given a specified `length`, providing a custom string to denote an `omission`. + +Parameters: * length: `int`- The number of characters to keep (Required). * omission: `string` - A string to denote an omission (Optional). -```html +```handlebars \{{truncate "Bender should not be allowed on tv." 31 "..."}} ``` Renders to: diff --git a/content/docs/helpers/strings/helper-uppercase.md b/content/docs/helpers/strings/helper-uppercase.md new file mode 100644 index 0000000..0960978 --- /dev/null +++ b/content/docs/helpers/strings/helper-uppercase.md @@ -0,0 +1,14 @@ +## \{{uppercase}} + +> Turns a string to uppercase. Opposite of `\{{lowercase}}`. + +Parameters: `none` + +```handlebars + \{{uppercase "make this all uppercase"}} +``` +Renders to: + +``` +MAKE THIS ALL UPPERCASE +``` \ No newline at end of file diff --git a/src/content/helpers/url/helper-urlParse.md b/content/docs/helpers/url/helper-urlParse.md similarity index 90% rename from src/content/helpers/url/helper-urlParse.md rename to content/docs/helpers/url/helper-urlParse.md index e13d654..3637531 100644 --- a/src/content/helpers/url/helper-urlParse.md +++ b/content/docs/helpers/url/helper-urlParse.md @@ -1,13 +1,15 @@ -#### \{{urlParse}} -_Take a URL string, and return an object._ +## \{{urlParse}} + +> Take a URL string, and return an object. Params: + * `url` * Output format: `yaml` or `json`. Default: `json` Template: -```html +```handlebars \{{urlParse "http://example.com/one"}} ``` @@ -32,7 +34,7 @@ Renders to: Or with `yaml` as the second param: -```html +```handlebars \{{urlParse "http://foo.com/bar/baz?key=value" "yaml"}} ``` diff --git a/src/content/helpers/url/helper-urlResolve.md b/content/docs/helpers/url/helper-urlResolve.md similarity index 50% rename from src/content/helpers/url/helper-urlResolve.md rename to content/docs/helpers/url/helper-urlResolve.md index e29465d..6b13ab5 100644 --- a/src/content/helpers/url/helper-urlResolve.md +++ b/content/docs/helpers/url/helper-urlResolve.md @@ -1,19 +1,20 @@ -#### \{{urlResolve}} -_Take a base URL, and a href URL, and resolve them as a browser would for an anchor tag._ +## \{{urlResolve}} -
Template: +> Take a base URL, and a href URL, and resolve them as a browser would for an anchor tag. -```html +Template: + +```handlebars \{{urlResolve url href}} ``` Example: -```html +```handlebars ``` Renders to: -```html +```handlebars ``` diff --git a/content/docs/middleware/index.md b/content/docs/middleware/index.md new file mode 100644 index 0000000..d65cedc --- /dev/null +++ b/content/docs/middleware/index.md @@ -0,0 +1,48 @@ +--- +area: plugins +title: Overview +section: plugins +--- + +> Plugins extend the core functionality of Assemble. + +Plugins are a new feature, but we know they'll play a big part in Assemble's future. We're looking for great plugins to add to our documentation and "contrib" collection, so please [let us know](https://github.com/assemble/assemble/issues/new) if you have something in mind! + +If you authored an Assemble plugin, please submit a pull request to add it to this page! + +## Contrib Plugins + +{{! TODO: get from src/data/repos.json#filter=assemble-contrib}} ++ [assemble-contrib-anchors](https://github.com/assemble/assemble-contrib-anchors): Assemble plugin for creating anchor tags from generated html. ++ [assemble-contrib-contextual](https://github.com/assemble/assemble-contrib-contextual): Generates a JSON file containing the context of each page. Basic plugin to help see what's happening in the build. ++ [assemble-contrib-decompress](https://github.com/assemble/assemble-contrib-decompress): Assemble plugin for extracting zip, tar and tar.gz archives. ++ [assemble-contrib-download](https://github.com/assemble/assemble-contrib-download): Assemble plugin for downloading files from GitHub. ++ [assemble-contrib-lunr](https://github.com/assemble/assemble-contrib-lunr): Assemble plugin for creating a search engine within your static site using lunr.js. ++ [assemble-contrib-markdown](https://github.com/assemble/assemble-contrib-markdown): Convert markdown files to HTML using marked.js. This plugin is an alternative to Assemble's markdown Handlebars helpers. Both are useful in different scenarios. ++ [assemble-contrib-permalinks](https://github.com/assemble/assemble-contrib-permalinks): Permalinks plugin for Assemble, the static site generator for Grunt.js and Yeoman. This plugin enables powerful and configurable URI replacement patterns, presets, uses Moment.js for parsing dates, and much more. ++ [assemble-contrib-sitemap](https://github.com/assemble/assemble-contrib-sitemap): Sitemap generator plugin for Assemble ++ [assemble-contrib-toc](https://github.com/assemble/assemble-contrib-toc): Create a table of contents in the generated HTML, using Cheerio.js ++ [assemble-contrib-wordcount](https://github.com/assemble/assemble-contrib-wordcount): Assemble plugin for displaying a word-count on blog posts or pages. + +## Community Plugins + +* [sirlantis/assemble-image-resizer](https://github.com/sirlantis/assemble-image-resizer): Assemble plugin for resizing images found in your templates. +* [adjohnson916/assemble-markdown-data](https://github.com/adjohnson916/assemble-markdown-data): An Assemble plugin for automatic parsing of markdown in data. +* [adjohnson916/assemble-related-pages](https://github.com/adjohnson916/assemble-related-pages): An Assemble plugin for generating lists of related pages. + +## Plugins we want + +Here are some plugins we'd like to see. ([let us know](https://github.com/assemble/assemble/issues/new) if you build one and want to make it a contrib plugin): + +* navigation +* indexing +* component-builders for YUI, OOCSS (make sure you talk to us about these if you're interested!) +* theme generators + +## Things we're working on or need help with + +* yeoman plugin generator +* grunt init template +* documentation +* best practices for creating plugins + diff --git a/templates/pages/docs/Options.md.hbs b/content/docs/options/_overview.md similarity index 81% rename from templates/pages/docs/Options.md.hbs rename to content/docs/options/_overview.md index 9c43a30..5338bfb 100644 --- a/templates/pages/docs/Options.md.hbs +++ b/content/docs/options/_overview.md @@ -57,34 +57,32 @@ Default: `undefined` Layouts are optional and may be defined at the task and/or [target][tasks-and-targets] level. _Unlike Jekyll_, Assemble requires a file extension since you are not limited to using a single file type. - ``` js options: { layout: 'src/layouts/default.hbs' } ``` > Learn more about [layouts][layouts] → - ### [options.layoutdir][options-layoutdir] Type: `String`|`False`|`None` (optional) Default: `undefined` -Path to the directory that is to be used as the "cwd" for layouts. +Path to the directory that is to be used as the "cwd", or home directory, for layouts. ``` js options: { layoutdir: 'src/layouts' } ``` -When `layoutdir` is defined, then a `layout` may defined without the path: +When `layoutdir` is defined, then a `layout` may defined without the path, both in `gruntfile.js`, ``` js -options: { layout: 'default.hbs' } +options: { layout: 'blog-layout.hbs' } ``` -or +and in YAML front matter. ```yaml --- -layout: default.hbs +layout: blog-layout.hbs --- ``` @@ -107,6 +105,7 @@ Specifies the Handlebars partials files, or paths to the directories of files to ``` js options: { partials: 'src/partials/**/*.hbs' } ``` + _**Note that `assemble` merges the task and target-level data for `options.partials`.**_ > Learn more about [partials][partials] → @@ -116,7 +115,7 @@ _**Note that `assemble` merges the task and target-level data for `options.parti Type: `String` (optional) Default: `.html` -Specify the file extension to be used for destination files. For example: +Specify the file extension to be used for destination files. ``` js assemble: { @@ -161,71 +160,79 @@ If you wish for Assemble to use custom helpers with Handlebars or any specified options: { helpers: 'your/custom/helpers' } ``` -### options.removeHbsWhitespace -Type: `Boolean` -Default: `false` - -Remove extraneous whitespace added by Handlebars in rendered files. _Use at your own risk, this is an experimental option and may be removed._ - +## YAML Front-Matter Options +These options are defined in the [YAML front matter][yaml-front-matter], usually shortened to simply just "YFM", of a page. YFM allows you to have more control over defining specific data and custom options for each page. - -## [YAML Front-Matter Options][yaml-front-matter] -These options are defined in the [YAML front matter][yaml-front-matter] of a page. +```yaml +--- +title: YAML Front Matter Rocks +--- +``` ### [options.layout][options-layout] type: `string` default: `undefined` -Specifies the [layout][Layouts] file to be used. Layouts defined in [YFM][yaml-front-matter] will override layouts defined in the Gruntfile. +Specifies the [layout][Layouts] file to be used. Layouts defined in YFM will override layouts defined in `gruntfile.js`. + +```yaml +--- +title: ... +layout: blog-layout.hbs +--- +``` ### options.published type: `boolean` default: true -Defining `published: false` in the [YAML front matter][yaml-front-matter] of a page will: - -* Prevent the page from rendering -* Omit the page from the `pages` collection. +Defining `published: false` in the YAML front matter of a page will both prevent that page from rendering and omit the page from the `pages` collection. +```yaml +--- +title: ... +published: false +--- +``` -## Custom Options +### Custom Options Custom, user-defined variables may be specified in the [Options][options-overview] of the assemble task or target. Any variables defined in the options will be added to the _root of the data context_ and thus they will also be available in any templates. -### Example usage -A common use case for defining custom variables in the options is for easily including or excluding content based on current "development status". - -For example, assuming we have defined a custom option, `production`: +A common use case for defining custom variables in the options is for easily including or excluding content based on current "development status". For example, assuming we have defined a custom option, `production`. -``` js +```js assemble: { options: { - production: false - }, - files: { - 'site/': ['src/pages/*.hbs'] + production: true | false } + ... } ``` -And we add the `production` variable to our templates: -``` html +We have also added the `production` variable to our templates. + +```html \{{#if production}} - + \{{else}} - + \{{/if}} ``` -Since `production: false` is defined in the Assemble [task options][options], the following HTML will be rendered with the _non-minified_ version of the script: -``` html - +If `production: false` is defined, the HTML document would be rendered with the `development.js` script. + +```html + ``` +If `production: true` is defined, the other script would be used. -## [Grunt.js][tasks-and-targets] Options -The following is just a handful of options that can be used in your Gruntfile. Please visit the [Grunt documentation](http://gruntjs.com/api/grunt.file) to learn more. +```html + +``` -* `expand` Set to `true` to enable the following options: +## [Grunt.js][tasks-and-targets] Options +{{#todo}}* `expand` Set to `true` to enable the following options:{{/todo}} * `cwd` All `src` matches are relative to (but don't include) this path. * `src` Pattern(s) to match, relative to the `cwd`. * `dest` Destination path prefix. @@ -233,14 +240,10 @@ The following is just a handful of options that can be used in your Gruntfile. P * `flatten` Remove all path parts from generated `dest` paths. * `rename` This function is called for each matched `src` file, (after extension renaming and flattening). The `dest` and matched `src` path are passed in, and this function must return a new `dest` value. If the same `dest` is returned more than once, each `src` which used it will be added to an array of sources for it. - - - +Please visit the [Grunt documentation](http://gruntjs.com/api/grunt.file) to learn more. ## Related info: - * [Variables][built-in-variables] {{#draft}}* [Markdown Options][Markdown]{{/draft}} * [YAML Options][YAML] - -[tasks-and-targets]: http://gruntjs.com/configuring-tasks#task-configuration-and-targets +* [tasks-and-targets]: http://gruntjs.com/configuring-tasks#task-configuration-and-targets diff --git a/templates/pages/docs/options-assets.md.hbs b/content/docs/options/assets.md similarity index 98% rename from templates/pages/docs/options-assets.md.hbs rename to content/docs/options/assets.md index c9db3fc..f6aaa0a 100644 --- a/templates/pages/docs/options-assets.md.hbs +++ b/content/docs/options/assets.md @@ -84,4 +84,4 @@ For the `assemble.main` target ## More information * [Options][] -* [variables][built-in-variables] \ No newline at end of file +* [variables][built-in-variables] diff --git a/templates/pages/docs/options-collections.md.hbs b/content/docs/options/collections.md similarity index 100% rename from templates/pages/docs/options-collections.md.hbs rename to content/docs/options/collections.md diff --git a/templates/pages/docs/options-data.md.hbs b/content/docs/options/data.md similarity index 100% rename from templates/pages/docs/options-data.md.hbs rename to content/docs/options/data.md diff --git a/templates/pages/docs/options-engine.md.hbs b/content/docs/options/engine.md similarity index 100% rename from templates/pages/docs/options-engine.md.hbs rename to content/docs/options/engine.md diff --git a/templates/pages/docs/options-ext.md.hbs b/content/docs/options/ext.md similarity index 92% rename from templates/pages/docs/options-ext.md.hbs rename to content/docs/options/ext.md index 6537b80..2b36e24 100644 --- a/templates/pages/docs/options-ext.md.hbs +++ b/content/docs/options/ext.md @@ -113,7 +113,7 @@ assemble: { }, readme: { files: { - './': ['src/templates/README.md.hbs'] + './': ['src/templates/README.md'] } } } @@ -123,7 +123,7 @@ Our goal here is to tell the `assemble` task to treat the `src` markdown files a Our goal here is to tell the `assemble` task. -Here, we tell the `assemble` task not to use an extension on `dest` files by leaving `ext: ''` blank. We do this because our templates have the extenions `.md.hbs` and assemble only slices off the last extension at build time. So by 1) telling assemble not to add another extension to the rendered templates, and 2) by naming our template files with the `.md.hbs` extension, we +Here, we tell the `assemble` task not to use an extension on `dest` files by leaving `ext: ''` blank. We do this because our templates have the extenions `.md` and assemble only slices off the last extension at build time. So by 1) telling assemble not to add another extension to the rendered templates, and 2) by naming our template files with the `.md` extension, we ### markdown-to-HTML @@ -139,7 +139,7 @@ assemble: { engine: "Handlebars" // case insensitive }, files: { - 'dist/': ['src/pages/*.md.hbs'] + 'dist/': ['src/pages/*.md'] } } ``` @@ -147,4 +147,4 @@ Rendered pages will have the `.html` extension by default. -[extensions.yml]: https://github.com/assemble/assemble/blob/master/lib/engine/extensions.yml "Valid extensions in Assemble" \ No newline at end of file +[extensions.yml]: https://github.com/assemble/assemble/blob/master/lib/engine/extensions.yml "Valid extensions in Assemble" diff --git a/templates/pages/docs/options-helpers.md.hbs b/content/docs/options/helpers.md similarity index 100% rename from templates/pages/docs/options-helpers.md.hbs rename to content/docs/options/helpers.md diff --git a/templates/pages/docs/options-layout.md.hbs b/content/docs/options/layout.md similarity index 100% rename from templates/pages/docs/options-layout.md.hbs rename to content/docs/options/layout.md diff --git a/templates/pages/docs/options-layoutdir.md.hbs b/content/docs/options/layoutdir.md similarity index 53% rename from templates/pages/docs/options-layoutdir.md.hbs rename to content/docs/options/layoutdir.md index 3a84a12..f4560bf 100644 --- a/templates/pages/docs/options-layoutdir.md.hbs +++ b/content/docs/options/layoutdir.md @@ -22,12 +22,12 @@ tags: `layoutdir` makes maintaining [layouts][options-layout] a little easier on projects that require more than one layout. The primary advantage of using the feature is that you can change or rename the directory where your layouts are stored without having to update the path to each layout used throughout your project. It could also reduce some clutter in the [Gruntfile](http://gruntjs.com) and [YAML Front Matter][yaml-front-matter]. -Additionally, a `layoutdir` can be defined for each [targets](http://gruntjs.com/configuring-tasks), allowing for even greater control over how [layouts][] are used in your projects. +Additionally, a `layoutdir` can be defined for each [target](http://gruntjs.com/configuring-tasks), allowing for even greater control. ## Usage Examples ### Without `layoutdir` -When `layoutdir` _is not defined_, each layout must be defined using the _full path from the project root to the layout_: +When `layoutdir` _is not defined_, each layout must be defined using the _full path from the project root to the layout_. ```js assemble: { @@ -40,13 +40,6 @@ assemble: { }, ... }, - blog: { - options: { - layout: 'src/templates/layouts/blog-layout.hbs' - }, - ... - } - // etc. } ``` @@ -59,7 +52,6 @@ layout: src/templates/layouts/blog-layout.hbs --- ``` - ### With `layoutdir` When `layoutdir` is defined only require the name of the layout to be used (_must include the file extension_): @@ -82,87 +74,91 @@ assemble: { }, ... } - // etc. } ``` -And in [YAML front matter][yaml-front-matter]: +In [YAML front matter][yaml-front-matter]: ``` yaml --- -title: Blog +title: Layoutdir is Awesome layout: blog-layout.hbs --- ``` +## A Word of Caution: Use clear naming conventions +While `layoutdir` can make your project a little easier to manage, it is strongly recommended that you **establish clear and consistent naming conventions for your layouts, and follow them**. Otherwise, this feature might end up causing more problems than it solves, e.g., use unique names such as `layouts/default-layout.hbs` and `layouts/blog-layout.hbs` instead of `layouts/site/default.hbs` and `layouts/blog/default.hbs`. -## A Word of Caution -While `layoutdir` can make your project a little easier to manage, it is strongly recommended that you **establish clear and consistent conventions for your layouts, and follow them**. Otherwise, this feature might end up causing more problems than it solves. - -Here are some recommendations. - -* Use names such as `default-layout.hbs` versus simply `default.hbs`, and -* Use a unique name for each layout used throughout a project. - -### Why clear naming conventions are important - -To understand why this is important, imagine that you're project has three "sub-projects", or [targets](http://gruntjs.com/configuring-tasks): `components`, `docs` and `blog`, and that each target has a different layout. This is a fairly basic, common scenario. But remember that each may also have its own `layoutdir` as well, which creates potential for conventions that lead to using the wrong layout accidentally, such as this: - -#### Not recommended +To understand why this is important, imagine that you're project has three sub-projects, each with their own layout: `components`, `docs` and `blog`. This is a fairly basic, common scenario. However, remember that each may also have its own `layoutdir` as well, which creates potential for conventions that lead to using the wrong layout accidentally. ```js +// Bad Example: uses layouts all named `default.hbs` navbar }} \{{> body }} ``` - - diff --git a/templates/pages/docs/options-pagination.md.hbs b/content/docs/options/pagination.md similarity index 100% rename from templates/pages/docs/options-pagination.md.hbs rename to content/docs/options/pagination.md diff --git a/templates/pages/docs/options-partials.md.hbs b/content/docs/options/partials.md similarity index 91% rename from templates/pages/docs/options-partials.md.hbs rename to content/docs/options/partials.md index e681ae5..f0cb81f 100644 --- a/templates/pages/docs/options-partials.md.hbs +++ b/content/docs/options/partials.md @@ -27,6 +27,8 @@ Examples * Build docs pages and components at once {{/draft}} +> Partials are snippets of code that are included into a layout. Usually section of your site appear are on each page, like the header, footer, and navigation, are broken into partials. + ## Registering Partials Assemble automatically registers any partial or array of partials supplied to `options.partials`, at the task or target level. diff --git a/templates/pages/docs/options-permalinks.md.hbs b/content/docs/options/permalinks.md similarity index 100% rename from templates/pages/docs/options-permalinks.md.hbs rename to content/docs/options/permalinks.md diff --git a/templates/pages/docs/Layouts.md.hbs b/content/docs/templates/Layouts.md similarity index 95% rename from templates/pages/docs/Layouts.md.hbs rename to content/docs/templates/Layouts.md index 87d9398..75f311f 100644 --- a/templates/pages/docs/Layouts.md.hbs +++ b/content/docs/templates/Layouts.md @@ -5,7 +5,7 @@ area: docs section: templates --- -> Layouts are used for "wrapping" the content of individual pages with common elements, such as the `` and footer sections, which usually contain necessities such as `` and `` tags. ## Basic Layout @@ -173,25 +173,31 @@ Continuing with the example from the previous section, the flattened layout for * Layouts are optional. If you don't need one, don't define one. * At build time, nested layouts are "flattened" before content is passed in from pages (child layouts are progressively "merged" into their respective parent layouts until there are no parent layouts left in the stack.) +* Layouts "inherit" the context of pages that use the layout. * Layouts can be defined at the **task-level**, **target-level**, in the **YAML front-matter** of a page, or in the `data.layout` property for pages defined in an `options.pages` collection. {{! TODO link to info about options.pages }} -**Layout Specificity** -As with CSS, the more specific layout wins: +### Layout Granularity -| Level | Description | | +> As with CSS, the more specific layout wins + +1. **Task options**: Great for defining a "project-wide" default. +2. **Target options**: Override the "project default" in the `options` for each target. Offers greater control over which "types" of pages get which `layout`. +3. **Each page**: If you require more granularity you can define a layout in the [YFM][yaml-front-matter] of a page, or in the `data: {}` object for a page in a `pages` collection. +4. **Sub-pages**: Since pages/layouts can be nested you could specify a different layout for multiple parts of a page. +{{#draft}5. **`.json` or `.yml` files**: THIS HASN'T BEEN IMPLEMENTED{{/draft}} + +### Layout Specificity + +| Level | Description | | | --------------------------- | --------------------------------------------------------- | -------------------------- | -| **none** | Layouts are optional. | | +| **none** | Layouts are optional and don't need to be used. | | | **Task** | Defined at the task-level of the assemble task. | Project level | | **Target** | Defined at the target-level in the assemble task. | Sub-project level | | **Layout property** (data) | Defined in the `data: {}` object in a `pages` collection. | Page and/or sub-page level | | **Layout property** (YFM) | Defined in the YAML front matter of a page. | Page and/or sub-page level | - - - - {{#draft}} * `default.hbs`: the default layout for the project, and it's the only layout that would really be "needed" in an actual project, since it wraps the demo pages * `component.hbs`: a child layout that inherits the default layout, this is a specialized "inner layout" for wrapping components with certain details about the "current demo". @@ -213,8 +219,6 @@ Introduce: - - ## Layout example Layouts are optional, but the `\{{> body }}` tag is required for content to be pulled into a layout. @@ -232,14 +236,6 @@ Layouts are optional, but the `\{{> body }}` tag is required for content to be p ``` -## Granular control - -1. **Task options**: Great for defining a "project-wide" default. -2. **Target options**: Override the "project default" in the `options` for each target. Offers greater control over which "types" of pages get which `layout`. -3. **Page-by-page**: If you require more granularity you can define a layout in the [YFM][yaml-front-matter] of a page -{{#draft}}4. **`.json` or `.yml` files**: THIS HASN'T BEEN IMPLEMENTED{{/draft}} - - ### Multiple layouts @@ -640,4 +636,4 @@ You can also specify the default homepage layout. If you add a layout variable n * Partial layouts -{{/draft}} \ No newline at end of file +{{/draft}} diff --git a/templates/pages/docs/Pages-Arrays.md.hbs b/content/docs/templates/Pages-Arrays.md similarity index 100% rename from templates/pages/docs/Pages-Arrays.md.hbs rename to content/docs/templates/Pages-Arrays.md diff --git a/templates/pages/docs/Pages.md.hbs b/content/docs/templates/Pages.md similarity index 100% rename from templates/pages/docs/Pages.md.hbs rename to content/docs/templates/Pages.md diff --git a/templates/pages/docs/Partials.md.hbs b/content/docs/templates/Partials.md similarity index 98% rename from templates/pages/docs/Partials.md.hbs rename to content/docs/templates/Partials.md index 0a6f45c..8f2bdff 100644 --- a/templates/pages/docs/Partials.md.hbs +++ b/content/docs/templates/Partials.md @@ -10,15 +10,6 @@ tags: - includes - partials -logo: - URL: media/images/logo.png - classes: - - logo - - main - width: 80 - height: 40 - title: Assemble This! - hide-partial-YFM: class: "" --- diff --git a/templates/pages/docs/Snippets.md.hbs b/content/docs/templates/Snippets.md similarity index 95% rename from templates/pages/docs/Snippets.md.hbs rename to content/docs/templates/Snippets.md index cdb021c..33372a0 100644 --- a/templates/pages/docs/Snippets.md.hbs +++ b/content/docs/templates/Snippets.md @@ -9,4 +9,4 @@ published: false --- -{{!}} \ No newline at end of file +{{!}} diff --git a/templates/pages/docs/Templates-Overview.md.hbs b/content/docs/templates/_overview.md similarity index 99% rename from templates/pages/docs/Templates-Overview.md.hbs rename to content/docs/templates/_overview.md index 5338ae5..ce566e7 100644 --- a/templates/pages/docs/Templates-Overview.md.hbs +++ b/content/docs/templates/_overview.md @@ -1,6 +1,5 @@ --- -title: Templates Overview - +title: Overview area: docs section: templates --- @@ -474,4 +473,3 @@ reusable blocks of code which are not * [Partials][partials] * [Layouts][layouts] * [Helpers][helpers] - diff --git a/templates/pages/docs/Pages-Collections.md.hbs b/content/docs/templates/collections.md similarity index 100% rename from templates/pages/docs/Pages-Collections.md.hbs rename to content/docs/templates/collections.md diff --git a/content/pages/about.md b/content/pages/about.md new file mode 100644 index 0000000..5c58179 --- /dev/null +++ b/content/pages/about.md @@ -0,0 +1,69 @@ +--- +title: About + +area: docs +section: getting started +--- + +> Assemble is a dead-simple static site and component generator for Node.js. + +Assemble makes it easy to combine templates, data and content to produce any kind of resulting documents, such as HTML web pages, UI components, styleguides, blog posts, and so on. Assemble was created by [@jonschlinkert](https://github.com/jonschlinkert) and [@doowb](https://github.com/doowb) to get designers and developers on the same page. + +## What you won't find in Assemble + +### "Blog awareness" + +Which really means "if you put your posts in a specific folder, and you name it exactly as required, then the parser will find your posts and render them into a blog". But Assemble isn't worried about what you put where, or where you go and how late you'll be out. You're a semi-responsible very bearded adult, you should be able to make your own decisions. Bottom line: Assemble is "beard aware". Wait... Assemble helps you make choices about your beard. Nevermind... + +### Special required _folders + +You won't find a requirement for directories like `_layouts`, `_posts` or `_anything-else`. Assemble is a Grunt.js plugin, so you have as much flexibility as you would with any other Grunt.js plugin. Your project structure is whatever you want it to be. You can put your [layouts][layouts], [pages][pages], posts, [partials][options-partials] or any other files wherever you want them to be. You can use an `includes` directory instead of `partials`. In fact, you could add hundreds of [targets](http://gruntjs.com/configuring-tasks) in the assemble task in your Gruntfile, and use a different convention for each one if you had a reason. + +### _config.yml + +A requirement to use `_config.yml`, or `config.json`, or `config` anything. Instead, Assemble provides [options.data][options-data] which enables you to use your own conventions for configuration. You can name your files however you want, or put them in whatever directory you want. It's up to you. + + +## Building blocks + +* Data +* Content +* Structure +* Behavior +* Styles + +## Terminology + +### Data +Data is pieces of information. Assemble accepts two types of data: [JSON][JSON] (JavaScript Object Notation) and [YAML][YAML]. + +[JSON]: http://json.org "JSON Homepage" +[YAML]: http://yaml.org "YAML Hompage" + +### Content +Content is information made available through a website or some other medium. Assemble accepts both HTML and [Markdown][1]. See the [Markdown guide][docs/markdown] for documentation. + +[1]: http:// "" + +#### Configuration +The configuration sets the rules for how Assemble will operate. In the case that Assemble is used as a task runner plugin, this will be in either the `gruntfile.js` or `gulpfile.js`. Basic configuration, such as layouts and custom options can also exist in the [YAML Front Matter][] of a page. + +You can learn more about configuration in the [Options][docs/options] documentation. + +#### Plugin + +#### Template +> ...a pre-developed page layout in electronic or paper media used to make new pages with a similar design, pattern, or style. +> Wikipedia:Template + +Templates in Assemble are populated with whatever *content* or *data* you give it. In the case of a blog you might have a template titled `blog-layout.hbs` and the Markdown files that you write the blog posts in will be used to create the final HTML document. + +Assemble uses the Handlebars (*.hbs) language in templates and you can find more information on layouts, Handlebars, and other options in the [docs][docs]. + +#### Scaffold +A [scaffold](http://en.wikipedia.org/wiki/Scaffolding) is a temporary structure used to support people and material in the construction or repair of buildings and other large structures. It is usually a modular system of metal pipes or tubes, although it can be from other materials. Use a scaffold to begin your projects. + +#### Boilerplate +*Boilerplate code* refers to sections of code that have to be included in many places with little or no alteration. If you are familiar with [Twitter Bootstrap]() and/or [Zurb Foundation](), both could be considered boilerplates. + +Historically, a bolier plate was the label used to identify the builder of steam boilers. You may have also heard of *Boilerplate text*: any text that is used, or can be reused, in new contexts or applications without being changed much from the original. diff --git a/templates/pages/docs/Comparison.md.hbs b/content/pages/about/Comparison.md similarity index 99% rename from templates/pages/docs/Comparison.md.hbs rename to content/pages/about/Comparison.md index 6f7bae1..abb276c 100644 --- a/templates/pages/docs/Comparison.md.hbs +++ b/content/pages/about/Comparison.md @@ -62,4 +62,4 @@ Developers like Jekyll because we can write content like we write code: * Ability to publish via git. * Ability to host your blog on a static web-server. * Ability to host freely on GitHub Pages. -* No database required. \ No newline at end of file +* No database required. diff --git a/templates/pages/docs/Contributors.md.hbs b/content/pages/about/Contributors.md similarity index 67% rename from templates/pages/docs/Contributors.md.hbs rename to content/pages/about/Contributors.md index 41d10dc..d3c4314 100644 --- a/templates/pages/docs/Contributors.md.hbs +++ b/content/pages/about/Contributors.md @@ -3,4 +3,4 @@ title: Contributors area: docs --- -{{#todo}}{{/todo}} \ No newline at end of file +{{#todo}}{{/todo}} diff --git a/templates/pages/docs/External-Libraries.md.hbs b/content/pages/about/External-Libraries.md similarity index 100% rename from templates/pages/docs/External-Libraries.md.hbs rename to content/pages/about/External-Libraries.md diff --git a/templates/pages/docs/Grapevine.md.hbs b/content/pages/about/Grapevine.md similarity index 100% rename from templates/pages/docs/Grapevine.md.hbs rename to content/pages/about/Grapevine.md diff --git a/templates/pages/docs/Support.md.hbs b/content/pages/about/Support.md similarity index 94% rename from templates/pages/docs/Support.md.hbs rename to content/pages/about/Support.md index 7e12fd9..d36fc03 100644 --- a/templates/pages/docs/Support.md.hbs +++ b/content/pages/about/Support.md @@ -17,4 +17,4 @@ See http://yeoman.io/support.html, they do a great job of outlining support issu ## Boilerplate Issues -## Other Issues \ No newline at end of file +## Other Issues diff --git a/templates/pages/docs/Announcements.md.hbs b/content/pages/announcements/Announcements.md similarity index 92% rename from templates/pages/docs/Announcements.md.hbs rename to content/pages/announcements/Announcements.md index 534afc4..3d11b1d 100644 --- a/templates/pages/docs/Announcements.md.hbs +++ b/content/pages/announcements/Announcements.md @@ -23,4 +23,4 @@ published: false TODO: -* Add labels to new \ No newline at end of file +* Add labels to new diff --git a/content/pages/announcements/upgrading/v0.5/helpers.md b/content/pages/announcements/upgrading/v0.5/helpers.md new file mode 100644 index 0000000..1a604c7 --- /dev/null +++ b/content/pages/announcements/upgrading/v0.5/helpers.md @@ -0,0 +1,108 @@ +--- +title: Migrating Helpers from Assemble v0.4 to Assemble v0.5 +author: Brian Woodward +--- + +The following is a short guide to migrating existing helpers to be compatible with Assemble v0.5. + +## Pre-v0.5 Helpers + +Helpers were required to export a `register` function that manually register helper functions with Handlebars: + +```js +module.exports.register = function (Handlebars, options, params) { + Handlebars.registerHelper('foo', function () { + return 'bar'; + }); +}; +``` + +## Helpers in v0.5 + +> The signature for registering helpers has been simplified in Assemble v0.5 to a format that allows helpers to be used in both Assemble and non-Assemble applications. + +Assemble now uses [boson](https://github.com/jonschlinkert/boson) internally to register helpers, so you only need to export a function that optionally takes a `config` object. In order for Assemble to register helpers with Handlebars, the only requirement is that _this function must return an object hash of helpers_. + +Examples: + +```js +module.exports = function (config) { + return { + 'foo': function () { + return 'bar'; + } + }; +}; +``` + +Or + +```js +module.exports = function (config) { + + var foo = function () { + return 'bar'; + }; + + return { + 'foo': foo + }; +}; +``` + +Or + + +```js +module.exports = function (config) { + + var helpers = { + 'foo': function () { + return 'bar'; + }, + 'baz': function () { + return 'quux'; + } + }; + + return helpers; +}; +``` + + +### config object + +The `config` object is the current instance of `assemble`, so helpers can use the Assemble API to: + +* Get the current `context` +* Expose `Handlebars` to the helper + + +#### Example usage + +In this example, the helper merges the current Assemble `context` with the context passed into the helper: + +```js +var _ = require('lodash'); +module.exports = function (config) { + var Handlebars = config.Handlebars; + + /** + * withContext helper + * + * @param {Object} ctx [description] + * @param {Object} options [description] + * @return {String} [description] + */ + + function withContext (ctx, options) { + var context = _.extend({}, config.context(), ctx); + context = Handlebars.createFrame(context); + return options.fn(this, { data: context }); + }; + + return { + 'withContext': withContext + }; +}; +``` diff --git a/content/pages/announcements/upgrading/v0.5/intro.md b/content/pages/announcements/upgrading/v0.5/intro.md new file mode 100644 index 0000000..2a319ab --- /dev/null +++ b/content/pages/announcements/upgrading/v0.5/intro.md @@ -0,0 +1,3 @@ +> Basic guide for upgrading plugins and helpers to work with Assemble v0.5. + +[Assemble v0.5.0](https://github.com/assemble/assemble/tree/v0.5.0) uses [boson](https://github.com/jonschlinkert/boson) for loading helpers and plugins. Please see that project's documentation for more information and the complete list of available options. diff --git a/content/pages/announcements/upgrading/v0.5/plugins.md b/content/pages/announcements/upgrading/v0.5/plugins.md new file mode 100644 index 0000000..f14e868 --- /dev/null +++ b/content/pages/announcements/upgrading/v0.5/plugins.md @@ -0,0 +1,19 @@ +--- +title: Migrating Plugins from Assemble v0.4.0 to Assemble v0.5.0 +author: Brian Woodward +--- + +> Basic steps for migrating plugins from Assemble v0.4 to v0.5 + +[Assemble v0.5.0](https://github.com/assemble/assemble/tree/v0.5.0) uses [boson](https://github.com/jonschlinkert/boson) for loading helpers and plugins. + +The following is a short guide on some of the changes needed to migrate existing plugins to be used with v0.5.0. + + +## Pre-v0.5 Plugins + +> TODO + +## Plugins in v0.5 + +> TODO \ No newline at end of file diff --git a/templates/pages/docs/Cheatsheet-Handlebars.md.hbs b/content/pages/cheatsheets/Cheatsheet-Handlebars.md similarity index 99% rename from templates/pages/docs/Cheatsheet-Handlebars.md.hbs rename to content/pages/cheatsheets/Cheatsheet-Handlebars.md index a7de8e2..4cdc674 100644 --- a/templates/pages/docs/Cheatsheet-Handlebars.md.hbs +++ b/content/pages/cheatsheets/Cheatsheet-Handlebars.md @@ -311,5 +311,3 @@ TODO: My name is \{{name}}. ``` - - diff --git a/templates/pages/docs/Cheatsheet-Lo-Dash.md.hbs b/content/pages/cheatsheets/Cheatsheet-Lo-Dash.md similarity index 75% rename from templates/pages/docs/Cheatsheet-Lo-Dash.md.hbs rename to content/pages/cheatsheets/Cheatsheet-Lo-Dash.md index 3f4eebc..40de0da 100644 --- a/templates/pages/docs/Cheatsheet-Lo-Dash.md.hbs +++ b/content/pages/cheatsheets/Cheatsheet-Lo-Dash.md @@ -8,60 +8,62 @@ published: false --- ## Syntax -In this cheatsheet, to simplify, models are represented as JSON. - +In this cheatsheet, to keep it simple models are represented as JSON. * `<% %>`: to execute some code * `<%= %>`: to print some value in template * `<%- %>`: to print some values with HTML escaped - - `_.template(templateString, [data], [settings])` Compiles JavaScript templates into functions that can be evaluated for rendering. Useful for rendering complicated bits of HTML from JSON data sources. Template functions can both interpolate variables, using `<%= … %>`, as well as execute arbitrary JavaScript code, with `<% … %>`. If you wish to interpolate a value, and have it be HTML-escaped, use `<%- … %>` When you evaluate a template function, pass in a **data** object that has properties corresponding to the template's free variables. If you're writing a one-off, you can pass the **data** object as the second parameter to **template** in order to render immediately instead of returning a template function. The **settings** argument should be a hash containing any `_.templateSettings` that should be overridden. +```js +var compiled = _.template("hello: "); +compiled({name : 'moe'}); +=> "hello: moe" - var compiled = _.template("hello: "); - compiled({name : 'moe'}); - => "hello: moe" - - var list = " "; - _.template(list, {people : ['moe', 'curly', 'larry']}); - => "moecurlylarry" +var list = " "; +_.template(list, {people : ['moe', 'curly', 'larry']}); +=> "moecurlylarry" - var template = _.template(""); - template({value : ''}); - => "<script>" +var template = _.template(""); +template({value : ''}); +=> "<script>" +``` You can also use `print` from within JavaScript code. This is sometimes more convenient than using ``. - - var compiled = _.template(""); - compiled({epithet: "stooge"}); - => "Hello stooge." +```js +var compiled = _.template(""); +compiled({epithet: "stooge"}); +=> "Hello stooge." +``` If ERB-style delimiters aren't your cup of tea, you can change Underscore's template settings to use different symbols to set off interpolated code. Define an **interpolate** regex to match expressions that should be interpolated verbatim, an **escape** regex to match expressions that should be inserted after being HTML escaped, and an **evaluate** regex to match expressions that should be evaluated without insertion into the resulting string. You may define or omit any combination of the three. For example, to perform [Mustache.js][13] style templating: +```js +_.templateSettings = { + interpolate : /\{\{(.%2B?)\}\}/g +}; - _.templateSettings = { - interpolate : /\{\{(.%2B?)\}\}/g - }; - - var template = _.template("Hello \{{ name }}!"); - template({name : "Mustache"}); - => "Hello Mustache!" +var template = _.template("Hello \{{ name }}!"); +template({name : "Mustache"}); +=> "Hello Mustache!" +``` By default, **template** places the values from your data in the local scope via the `with` statement. However, you can specify a single variable name with the **variable** setting. This can significantly improve the speed at which a template is able to render. - - _.template("Using 'with': ", {answer: 'no'}, {variable: 'data'}); - => "Using 'with': no" +```js +_.template("Using 'with': ", {answer: 'no'}, {variable: 'data'}); +=> "Using 'with': no" +``` Precompiling your templates can be a big help when debugging errors you can't reproduce. This is because precompiled templates can provide line numbers and a stack trace, something that is not possible when compiling templates on the client. The **source** property is available on the compiled template function for easy precompilation. - - JST.project = ; +```js +JST.project = ; +``` diff --git a/templates/pages/docs/Cheatsheet-Markdown.md.hbs b/content/pages/cheatsheets/Cheatsheet-Markdown.md similarity index 92% rename from templates/pages/docs/Cheatsheet-Markdown.md.hbs rename to content/pages/cheatsheets/Cheatsheet-Markdown.md index 0e5325f..0486065 100644 --- a/templates/pages/docs/Cheatsheet-Markdown.md.hbs +++ b/content/pages/cheatsheets/Cheatsheet-Markdown.md @@ -5,7 +5,7 @@ area: docs section: content --- -> This cheatsheet is rendered from [a Gist](https://gist.github.com/jonschlinkert/5854601) using the [\{{gist}} helper](https://github.com/assemble/handlebars-helpers#gist). +> This cheatsheet is rendered from [a Gist](https://gist.github.com/jonschlinkert/5854601) using the [\{{gist}} helper](https://github.com/assemble/handlebars-helpers#gist). If you find any issues or have a suggestion for something we can add, please [create an issue](https://github.com/assemble/assemble-docs/issues), or just make a comment on [the Gist](https://gist.github.com/jonschlinkert/5854601). Thanks! @@ -14,7 +14,7 @@ or just make a comment on [the Gist](https://gist.github.com/jonschlinkert/58546 * [Download the cheatsheet](https://gist.github.com/jonschlinkert/5854601/download) * Copy this Embed it on your own site: `` -* See the [template for this page](https://github.com/assemble/assemble-docs/blob/master/src/templates/pages/docs/Cheatsheet-Markdown.md.hbs). +* See the [template for this page](https://github.com/assemble/assemble-docs/blob/master/src/templates/pages/docs/Cheatsheet-Markdown.md).
@@ -22,5 +22,3 @@ or just make a comment on [the Gist](https://gist.github.com/jonschlinkert/58546 {{gist "5854601"}} - - diff --git a/templates/pages/helpers/Cheatsheet.md.hbs b/content/pages/cheatsheets/cheatsheet.md similarity index 91% rename from templates/pages/helpers/Cheatsheet.md.hbs rename to content/pages/cheatsheets/cheatsheet.md index 4f70920..068a9c9 100644 --- a/templates/pages/helpers/Cheatsheet.md.hbs +++ b/content/pages/cheatsheets/cheatsheet.md @@ -4,4 +4,4 @@ title: Helpers Cheatsheet published: true --- -{{!}} \ No newline at end of file +{{!}} diff --git a/templates/pages/docs/Why-Assemble.md.hbs b/content/pages/concepts.md similarity index 64% rename from templates/pages/docs/Why-Assemble.md.hbs rename to content/pages/concepts.md index 980cf84..a71e38f 100644 --- a/templates/pages/docs/Why-Assemble.md.hbs +++ b/content/pages/concepts.md @@ -53,4 +53,92 @@ A few reasons to try assemble: [1]: http://github.com/assemble/assemble [2]: https://github.com/assemble/assemble-examples [3]: https://github.com/assemble/assemble/blob/master/docs/docs-methods.md -[4]: https://github.com/assemble/handlebars-helpers \ No newline at end of file +[4]: https://github.com/assemble/handlebars-helpers + + +* Configuration + +* Data + +* Layouts +* Pages +* Includes + +* Content + + +* Content +* Structure +* Logic +* Styling + +## Notes on terminology + +* UI is the cause. UX is the effect. +* Logic is the cause. Behavior is the effect. +* Styling is the cause. Appearance is the effect. + + +# Assemble + +> Assemble makes it easy to combine templates, data and content to produce any kind of resulting documents, including HTML web pages, web components, blog posts, and so on. + +## Why use Assemble? + +Assemble's point of differentiation from all of the other [static site generators](http://staticsitegenerators.net/) out there, is its focus on + +* Assemble is much more than a static site generator. You can use Assemble for... +* Assemble is hands down the best tool available for rapid prototyping and mocking up HTML/CSS projects (sites, components, styleguides and so on) + + +## Versus other Site Generators + +* Ease of use +* Modularity +* More configurable, flexible and powerful than any other static site generator. + +## Core Concepts + +* Templates + - Layouts + - Pages + - Includes +* Data +* Content + +## Templates + +### What is a "template"? + +A template is a document or document fragment that contains variables that will be replaced by actual data, content or other documents by Assemble. + +> A template is a document or document fragment that contains variables that will be replaced (by the template engine) with actual data, content or other documents. + +Using templates is a great way of keeping your code modular and easy to maintain. Templates help you separate the logic, data and markup in views, resulting in code that is more modular and reusable and projects that are organized and easier to maintain. + +## Why use templating? + +In general, leveraging templates is a great way to separate markup and logic in views, and to maximize code reusability and maintainability. With a syntax close to the desired output (i.e. HTML), you have a clear and fast way to get things done. Although templates can be used to output any kind of text, in this article we provide examples using HTML, since that is what we want in client-side development. + +In today’s dynamic applications, the client frequently needs to update the user interface (UI). This might be done by fetching an HTML fragment from the server that can be readily inserted into the document. Yet this requires the server to support delivering such fragments (as opposed to complete pages). Moreover, as a client-side developer who is responsible for the markup, you want to have full control over your templates. No need to know anything about Smarty, Velocity, ASP, some other obscure server-side syntax or even worse: dealing with spaghetti code such as HTML containing those infamous ` Layouts are used for "wrapping" the content of individual pages with common elements, such as the `` and footer sections, which usually contain necessities such as `` and `` tags. + +A basic layout might look something like this: + +```handlebars + + + + + \{{title}} + + + \{{> body }} + + diff --git a/templates/pages/contributing/index.md.hbs b/content/pages/contributing.md similarity index 64% rename from templates/pages/contributing/index.md.hbs rename to content/pages/contributing.md index 982c43d..d4085a8 100644 --- a/templates/pages/contributing/index.md.hbs +++ b/content/pages/contributing.md @@ -1,15 +1,7 @@ --- title: Contributing to Assemble - -area: docs -section: development --- -> With some differences, this guide is based on the excellent Twitter Bootstrap's CONTRIBUTING.md - - -Looking to contribute something to Assemble? **Here's how you can help.** - ## Questions We love questions, and we love knowing how you're using Assemble. Before you create a new issue on one of Assemble's repos, please consider asking on [StackOverflow.com](http://stackoverflow.com/questions/tagged/assemble). This is entirely up to you, but your question and any answers to it are more likely to help other users in the future than a closed issue on GitHub. Also remember to add the assemble tag to your question! @@ -20,38 +12,29 @@ Please read the following guidelines before opening any issue. 1. **Search for existing issues.** To avoid duplicate issues, it would help us out if you could please check first to see if someone else has reported the same issue. Moreover, the issue may have already been resolved with a fix available. 2. **Create an isolated and reproducible test case.** Be sure the problem exists in Assemble's code with a [reduced test case](http://css-tricks.com/reduced-test-cases/) that should be included in each bug report. Check to see if there is an existing issue over on the [Handlebars.js repo](https://github.com/wycats/handlebars.js/issues). -3. **Include clear examples.** Make use of jsFiddle or jsBin to share your isolated test cases. +3. **Include clear examples.** Please be specific and complete as possible with your examples, and be sure to always wrap your code with fences, along with the appropriate language after the first fence: e.g. ```js 4. **Share as much information as possible.** Include version of Assemble, customized or vanilla build, etc. where appropriate. Also include steps to reproduce the bug. - -## Notes on the repo - -Assemble's documentation is maintained at [assemble-docs](https://github.com/assemble/assemble-docs) and is built with Assemble. Any edits to the docs should be first done in the templates and then recompiled into the HTML. - - ## Pull requests -* Any changes to the docs must be made to the Handlebars templates, not just the compiled HTML pages +* Any edits to the docs should be first done in the related templates or markdown content files first, then recompiled into the HTML * CSS changes must be done in `.less` files first, never just the compiled files * Try not to pollute your pull request with unintended changes--keep them simple and small +Assemble's documentation is maintained at [assemble-docs](https://github.com/assemble/assemble-docs) and is built using Assemble. by running the `grunt` command. ## Code Examples -**Please use correct language definitions** next to the markdown backticks in code examples, _even if the language is not supported by GitHub Flavored Markdown_. This is important because we want to ensure that when a develper searches for "handlebars", Assemble's relevant documentation will show up in the results. B - -For example, the Handlebars is not supported as a "language", so you might be tempted to use ` ```html ` so that you can take advantage of code highlighting, but you should still do ` ```handlebars `. The same is true for the LESS language, please use ` ```less ` instead of ` ```css `. +**Please use correct language definitions** next to the markdown backticks in code examples, _even if the language is not supported by GitHub Flavored Markdown_. Since github's intelligent search takes note of these things, using the correct language after the first code fence will make issues and any related code examples easier to find in searches. - -## Coding standards: HTML +## Code standards: HTML * Always use proper indentation -* Two spaces for indentation, never tabs -* Double quotes only, never single quotes -* Use tags and elements appropriate for an HTML5 doctype (e.g., self-closing tags, and don't add the unnecessary closing forward slash.) - +* Two spaces for indentation, _never tabs_ +* Double quotes only, _never single quotes_ +* Use tags and elements appropriate for an HTML5 doctype (e.g., self-closing tags, _without the unnecessary closing forward slash!_) -## Coding standards: CSS +## Code standards: CSS * Adhere to the [Recess CSS property order](http://markdotto.com/2011/11/29/css-property-order/) * Multiple-line approach (one property and value per line) @@ -61,16 +44,10 @@ For example, the Handlebars is not supported as a "language", so you might be te * Attribute selectors, like `input[type="text"]` should always wrap the attribute's value in double quotes, for consistency and safety (see this [blog post on unquoted attribute values](http://mathiasbynens.be/notes/unquoted-attribute-values) that can lead to XSS attacks). -## Coding standards: JS +## Code standards: JS * Please use semicolons * Single quotes, except where double quotes are necessary * 2 spaces (no tabs) * strict mode -* Consistent formatting with the rest of the code - - -## Related Info - -* [Methods][] -* [External Libs][external-libraries] +* Use formatting that is consistent with the rest of the code diff --git a/templates/pages/docs/drafts/FAQ.hbs b/content/pages/faq.md similarity index 82% rename from templates/pages/docs/drafts/FAQ.hbs rename to content/pages/faq.md index 00f5cc0..afcfe7f 100644 --- a/templates/pages/docs/drafts/FAQ.hbs +++ b/content/pages/faq.md @@ -1,9 +1,34 @@ -{{#draft}} +# Helpers + +* Package.json deps + +# Draft & Unpublished + +* Code comments: HTML and Handlebars +* Block expressions +* `published` property in YAML front matter + + +# Navigation + +* Matching up Ids. +* Dynamic or static? -copied from an answer to an issue -> Can assemble be run without grunt though? +# Data -Currently no, but we're planning a refactor of assemble and anything is possible for the future. we would love for you and your team to participate in this planning process here: https://github.com/assemble/refactor-planning. Sincit it's new, currently it's just some notes and placeholder files, but we want to start adding issues and having discussions regarding goals for the next major version of assemble. +* When to use? + - lists + - repetitious code + + +# Context + +* data files, e.g. "functions.json" => {{#nav functions}} + +# Content + + +{{#draft}} > Shouldn't I aim to make autonomous? diff --git a/content/pages/introduction.md b/content/pages/introduction.md new file mode 100644 index 0000000..44c372b --- /dev/null +++ b/content/pages/introduction.md @@ -0,0 +1,308 @@ +Assemble makes it easy to combine templates, content, and data to produce any kind of static documents: web pages, web components, blog posts, and so on. This introduction guide covers where to find documentation on how to get started using Assemble and explains the terminology, building blocks, and core-concepts of a static site generator. + +--- +title: Why Assemble? + +area: docs +section: getting started + +published: false +--- + +> As a _site generator_, Assemble was designed to do orders of magnitude more than just "render templates". However, if all you need is to generated templates, it can't get much easier than Assemble. + + + +To demonstrate what assemble can do, take a look at some [examples][2]. + +A few reasons to try assemble: + +* Inits/generators and boilerplates to use +* Documentation and actively supported +* Node.js/JavaScript alternative to Jekyll +* Full-featured site generated based on Grunt.js +* Easily deploy static sites to gh-pages (link to init and boilerplates) +* Grunt.js based, so you can use Assemble to build your site, and fill in any gaps in your build process with other grunt plugins. +* `npm install assemble` and be running in a couple of minutes. +* Assemble let's you use any combination of the following as data sources for your templates: [JSON][json] files, [YAML][yaml] files, [YAML front-matter][yaml-front-matter], and even custom properties in the `assemble` task or target options. +* Methods to the [assemble object][3] can be used for creating custom **[build "steps"][methods]** +* Built-in [variables][built-in-variables] and [helpers][helpers] for generating [sitemaps][sitemap], collections of pages, categories, tags, archives, or even custom collections and collection items. +* Assemble's [helper library](https://github.com/assemble/handlebars-helpers) is pretty awesome, which we externalized and generalized to a project called [handlebars-helpers][4], which now includes somewhere around 100-110 helpers. You will get a better sense of the "unique" helpers we provide by checking out the code in handlebars-helpers (either the coffeescript source files or generated javascript in the lib folder), or the [helper examples](https://github.com/assemble/handlebars-helpers-examples). +* You can build or omit specific pages using the various [src-dest configurations](http://gruntjs.com/configuring-tasks#files) offered from Grunt.js, and use as many targets as you need to build your site. +* [Layouts][layouts] can optionally be used to "wrap" pages with common code, such as a ``, footer, scripts and stylesheets. +* [Partials][partials] can be used to include reusable code fragments. Useful for UI abstractions (e.g. "components" or "modules") or for snippets of code like the script for Google Analytics. +* The way assemble handles [templates-overview][templates-overview] and [data/metadata][data] is pretty powerful. You can, for instance, create a big library of partials, then create a bunch of `[name].json` or YAML data files that have the same names as the partials. Then just add the paths to the data files and partials in the assemble task and/or target options, and when you run `grunt assemble` any partials that are used anywhere in your pages will automatically be registered, and context will be appropriately applied. +* Let's say you're building a website/webapp that includes a bunch of UI components, like Bootstrap's LESS components. you could use assemble to not only build your pages, but also your documentation - and part of the live application - from the same source files. In a nutshell, in the assemble task you would set up one or more targets for building "static pages", then for your docs you could create another target where you could either build each partial (component) into a page of its own, or multiple partials per page, or both - or however you want to do it. +* Assemble wants to be the best task for generating pages from templates and data. Being based on Grunt.js means that Assemble is just another plugin. At the end of the day, pages are just a part of your project, so you can surround Assemble with any other plugins you need from the Grunt.js community, or custom plugins, to fill in whatever gaps still exist in your build process. In other words, we have no need or motivation to try to bundle in everything you can think of. So no need for this: "Assemble concats, minifies, shreds, dices, slices and does your taxes". You can use whatever plugin you think is best to accomplish each one of those tasks. +* Assemble is open source. We're just a couple of nerds that decided to do this on our own time, completely for fun, because we love doing it. Plus, we use Assemble on our own projects every day so we understand how it's being used and what could be done to improve it. + + +## Guiding philosophies + +1. Leverage native [Grunt.js](http://gruntjs.com) functionality wherever possible, whenever practical +2. Try to focus on generalizing utliity functionality. This makes Assemble more flexible and keeps us from being hard-coded to a specific use case as we found with other site builders. However, we need to have conventions for things that can be generalized, such as the various means of accessing data, exposing options and methods and so on. We're just not big fans of "you can use as many includes (partials) as you want, as long as they're all in a special folder called 'includes', and with an underscore in front of it just to make absolutely sure that we know it's for includes, so call it '_includes'".Being built on top of Grunt gets us around these kinds of silly restrictions pretty easily. You can stick partials in as many directories as you want, just tell Assemble where they are in the task or targets. Same goes for data, pages, layouts, and even custom helpers - which are just like the "filters" used in Jekyll. +3. We use it, use it, use it... a lot. We try to break it as often as possible. And we use it constantly on projects that matter to us, so we're always motivated to fix it. This works. + +{{#draft}} +## Use cases + +* "I just want to generate templates, I don't need a _site generator_" +* "I need a personal blog" +* "I need to build the gh-pages for my GitHub project" +{{/draft}} + +[sitemap]: https://github.com/assemble/assemble-boilerplate-sitemap +[1]: http://github.com/assemble/assemble +[2]: https://github.com/assemble/assemble-examples +[3]: https://github.com/assemble/assemble/blob/master/docs/docs-methods.md +[4]: https://github.com/assemble/handlebars-helpers + + +## Getting started + +If you can work with HTML, you will be able to use Assemble! If this kind of templating is completely new to you, don't worry if it doesn't make sense right away. Give it time. Once it "clicks", a whole new world of possibilities in front end development will open up for you! Your code will become more modular and reusable, and your projects will become richer, more organized and easier to maintain. + +## Getting Started with Grunt.js + Assemble +Glad to see you are interested in using Assemble! If you are developer and familiar with installing packages from npm, skip to the [Developer's Getting Started Guide](#developers). + +Before continuing, be sure to have [Yeoman][5], [Bower][3] and the [Grunt CLI][4] installed. If you do not, don't fret, this guide will show you how to install them! + +Throughout this process, we will use **Yeoman** as our "scaffolding tool". As explained in the introduction, the scaffold will be a base, foundational set of files that we can use to kickstart each project. **Bower** will be used as a packaged manager. If we need to use jQuery or Twitter Bootstrap, we can use Bower to install it. Lastly, the Grunt CLI is the interface will use to control Grunt from the command line. + +To get started with any new Assemble project, we recommend using the [Yeoman generator for Assemble](https://github.com/assemble/generator-assemble). + +After you're setup with Yeoman you may install the Assemble generator with: + +```bash +npm install -g generator-assemble +``` + +Next, create a new directory for your project, and in that directory run: + +```bash +mkdir /my-new-project +yo assemble +``` + +If all build success you're well on your way to successfully building your first Assemble project! + +## Issues +We're always willing to help new users, so please stop out to [Assemble's GitHub Issues][1] or ask a question on [StackOverflow][2] and someone from the core team or our super-supportive community will help you out! + +## Developers + +[1]: https://github.com/assemble/assemble/issues "Assemble Issue Tracker" +[2]: http://stackoverflow.com/questions/tagged/assemble "StackOverflow Assemble Tag" + +[3]: https://github.com/bower/bower +[4]: https://github.com/gruntjs/grunt-cli +[5]: http://yeoman.io/gettingstarted.html + +# Introduction to Assemble + +> Assemble makes it easy to combine templates, data and content to produce any kind of resulting documents, such as HTML web pages, UI components, styleguides, blog posts, and so on. + +_(WIP)_ + +## Getting Started + +* Installation (TODO) +* Brief Example (TODO) + + +```handlebars + + + + + + {{title}} + + + + {{> body }} + + +``` + +### Core Concepts + +* Templates + - Layouts + - Pages + - Partials (includes) +* Data +* Content + +## Templates + +> A template is a document or document fragment that contains variables that will be replaced (by the template engine) with actual data, content or other documents. + +Assemble has built-in support for the following template concepts: + +* **Layouts**: used to "wrap" pages with common elements, such as site-wide navigation, footers, the `` section and so on. +* **Pages**: typically have a 1-to-1 relationship with the actual generated HTML pages in a project, e.g. `about.hbs` => `about.html` or `about/index.html`. But pages can also be dynamically generated from config data. +* **Partials**: document fragments or snippets of code that will be included, inserted or embedded into other templates at build time. + +Let's walk through these in more detail. + +### Layouts + +Since layouts are used to "wrap" other pages with common elements, a basic layout might look something like this: + +```handlebars + + + + + + {{title}} + + + + {{> body }} + + +``` + +You can tell Assemble that you want to use a particular layout by defining it in the options: + +```js +options: { + layout: 'path/to/my-layout.hbs' +} +``` + +If you need more than one layout, no worries [we have you covered](#TODO: layouts introduction)! + + +### Pages + +> Pages, generally structural in nature, are optionally wrapped with layouts and contain _more HTML than textual content_. + +A basic page might look something like this: + +```handlebars + + +
+ + + {{md 'team'}} + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna aliqua. +
+ +
+ + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna aliqua. +
+``` + +### Partials + +> Partials allow you to define a chunk of code one time and use it in multiple places. + +Partials are often used for UI components such as buttons, navbars or modals. But they can also be used for any other snippets or sections of code that might be repeated across multiple pages, or for code that might otherwise be reusable in some way. Partials are easy to spot since they use a `>`, which is the special [Handlebars.js syntax](http://blog.teamtreehouse.com/handlebars-js-part-2-partials-and-helpers)) that is only used with partials: e.g. `{{> foo }}`. + +Continuing with the `layout` example from above, to use a partial for the `head` section simply create a new file, such as `head.hbs` or whatever you prefer, then extract the code from the head section and add it to the new file: + +```handlebars + + +{{title}} +``` + +Before continuing on, ensure that the filepath to your newly created partial, `head.hbs`, is specified in your project's configuration so Assemble can take note of it, ensuring that the partial can be used in your templates. + +Now, to actually use the partial, add the `{{> head }}` template to the `head` section of your layout where the code was removed. Assemble makes this simple by allowing you to use the name of the file you just created as the name of the partial: + +```handlebars + + + + + {{> head }} + + + {{> body }} + + +``` + +## Content + +> Content is usually written in an easy-to-read plain text format such as markdown, but Assemble can be extended to convert any format. + +Additionally, Assemble can convert your content to HTML according to your preferences: + +* Convert 1-to-1 into HTML pages, e.g. `about.md` converts to `about.html` (or `about/index.html` if you use [permalinks](#TODO)) +* Insert into other pages (as includes) +* Concatenate several content files together before converting to pages or being inserted into (template) pages. [assemble.io/helpers/](http://assemble.io/helpers/) is a good example of this. Each helper/section on this page is created from more than [100 individual markdown files][helpers]. + + +## Data + +> Data from specified JSON or YAML files is made available for use in your templates. + +This is best explained through examples, so given we have a partials for generating buttons, `button.hbs`: + +```handlebars + +``` + +And given we have a corresponding file, `button.json`, with the following data: + +```json +[ + { + "text": "Success!", + "modifier": "btn-success" + }, + { + "text": "Error!", + "modifier": "btn-error" + }, + { + "text": "Warning!", + "modifier": "btn-warning" + } +] +``` + +When used like this: + +```handlebars +{{#each button}} + {{> button }} +{{/each}} +``` +Which results in: + +```html + + + +``` + +Beyond using data files to pass to templates as context, they can also be used for global project configuration and setting options. See the [documentation for data](#TODO) to learn more. + + +## Extending Assemble + +_TODO_ + +* Plugins +* Helpers +* API + + +[permalinks]: https://github.com/assemble/assemble-contrib-permalinks +[helpers]: https://github.com/assemble/assemble-docs/tree/master/src/content/helpers diff --git a/content/pages/middleware.md b/content/pages/middleware.md new file mode 100644 index 0000000..d45356d --- /dev/null +++ b/content/pages/middleware.md @@ -0,0 +1,11 @@ +--- +title: Middleware +--- + +## Version 0.4.x + +- [assemble-mustache](https://github.com/tomsky/assemble-mustache) +- [assemble-middleware-styleguide](https://github.com/tomsky/assemble-middleware-styleguide) +- [assemble-markdown-pages](https://github.com/matthewfowles/assemble-markdown-pages): An Assemble plugin for generating pages directly from markdown files. + +## Version 0.6.x diff --git a/content/pages/news/Announcements.md b/content/pages/news/Announcements.md new file mode 100644 index 0000000..3d11b1d --- /dev/null +++ b/content/pages/news/Announcements.md @@ -0,0 +1,26 @@ +--- +title: Announcements + +area: docs +section: docs +categories: +- unpublished +tags: +- updates +- news +- changes +- changelog +- features +- announcements +- activity + +published: false +--- + +> The pages tracks changes, news and updates for Assemble. + + + + +TODO: +* Add labels to new diff --git a/content/pages/news/releases/v0.5.0/helpers.md b/content/pages/news/releases/v0.5.0/helpers.md new file mode 100644 index 0000000..1a604c7 --- /dev/null +++ b/content/pages/news/releases/v0.5.0/helpers.md @@ -0,0 +1,108 @@ +--- +title: Migrating Helpers from Assemble v0.4 to Assemble v0.5 +author: Brian Woodward +--- + +The following is a short guide to migrating existing helpers to be compatible with Assemble v0.5. + +## Pre-v0.5 Helpers + +Helpers were required to export a `register` function that manually register helper functions with Handlebars: + +```js +module.exports.register = function (Handlebars, options, params) { + Handlebars.registerHelper('foo', function () { + return 'bar'; + }); +}; +``` + +## Helpers in v0.5 + +> The signature for registering helpers has been simplified in Assemble v0.5 to a format that allows helpers to be used in both Assemble and non-Assemble applications. + +Assemble now uses [boson](https://github.com/jonschlinkert/boson) internally to register helpers, so you only need to export a function that optionally takes a `config` object. In order for Assemble to register helpers with Handlebars, the only requirement is that _this function must return an object hash of helpers_. + +Examples: + +```js +module.exports = function (config) { + return { + 'foo': function () { + return 'bar'; + } + }; +}; +``` + +Or + +```js +module.exports = function (config) { + + var foo = function () { + return 'bar'; + }; + + return { + 'foo': foo + }; +}; +``` + +Or + + +```js +module.exports = function (config) { + + var helpers = { + 'foo': function () { + return 'bar'; + }, + 'baz': function () { + return 'quux'; + } + }; + + return helpers; +}; +``` + + +### config object + +The `config` object is the current instance of `assemble`, so helpers can use the Assemble API to: + +* Get the current `context` +* Expose `Handlebars` to the helper + + +#### Example usage + +In this example, the helper merges the current Assemble `context` with the context passed into the helper: + +```js +var _ = require('lodash'); +module.exports = function (config) { + var Handlebars = config.Handlebars; + + /** + * withContext helper + * + * @param {Object} ctx [description] + * @param {Object} options [description] + * @return {String} [description] + */ + + function withContext (ctx, options) { + var context = _.extend({}, config.context(), ctx); + context = Handlebars.createFrame(context); + return options.fn(this, { data: context }); + }; + + return { + 'withContext': withContext + }; +}; +``` diff --git a/content/pages/news/releases/v0.5.0/intro.md b/content/pages/news/releases/v0.5.0/intro.md new file mode 100644 index 0000000..2a319ab --- /dev/null +++ b/content/pages/news/releases/v0.5.0/intro.md @@ -0,0 +1,3 @@ +> Basic guide for upgrading plugins and helpers to work with Assemble v0.5. + +[Assemble v0.5.0](https://github.com/assemble/assemble/tree/v0.5.0) uses [boson](https://github.com/jonschlinkert/boson) for loading helpers and plugins. Please see that project's documentation for more information and the complete list of available options. diff --git a/content/pages/news/releases/v0.5.0/plugins.md b/content/pages/news/releases/v0.5.0/plugins.md new file mode 100644 index 0000000..f14e868 --- /dev/null +++ b/content/pages/news/releases/v0.5.0/plugins.md @@ -0,0 +1,19 @@ +--- +title: Migrating Plugins from Assemble v0.4.0 to Assemble v0.5.0 +author: Brian Woodward +--- + +> Basic steps for migrating plugins from Assemble v0.4 to v0.5 + +[Assemble v0.5.0](https://github.com/assemble/assemble/tree/v0.5.0) uses [boson](https://github.com/jonschlinkert/boson) for loading helpers and plugins. + +The following is a short guide on some of the changes needed to migrate existing plugins to be used with v0.5.0. + + +## Pre-v0.5 Plugins + +> TODO + +## Plugins in v0.5 + +> TODO \ No newline at end of file diff --git a/templates/pages/docs/Resources.md.hbs b/content/pages/resources.md similarity index 100% rename from templates/pages/docs/Resources.md.hbs rename to content/pages/resources.md diff --git a/templates/pages/docs/Idiomatic-Templates.md.hbs b/content/posts/Idiomatic-Templates.md similarity index 100% rename from templates/pages/docs/Idiomatic-Templates.md.hbs rename to content/posts/Idiomatic-Templates.md diff --git a/content/posts/config-vs-content.md b/content/posts/config-vs-content.md new file mode 100644 index 0000000..e73cf2c --- /dev/null +++ b/content/posts/config-vs-content.md @@ -0,0 +1,100 @@ +--- +title: Config vs. Content +lead: Why does Assemble use two templates engines by default? +--- + +We've been asked this question a couple of times. But recently one of our users created an issue to discuss the matter, and the answer I gave seemed to only create more questions. So I decided to dedicate a post to the matter. + + +YAML + +Say, `foo.yml`: + +```yaml +title: <%= title %> +``` + +YAML front matter + +```yaml +--- +title: <%= title %> +--- +``` + +JSON + +```json +{ + "title": "<%= title %>" +} +``` + +But... where is this `title` coming from!? It's all variables and no values! + +The "correct" answer, since Assemble is more about configuration than convention, is that we need to decide where we want to store our variables and then stick to that as our convention. + +So for the purposes of this example, let's set the `title` variable in the Gruntfile (e.g our config): + +```js +assemble: { + foo: { + options: { + title: 'Assemble' + }, + files: { + '<%= site.dest %>/': ['<%= site.pages %>/*.hbs'] + } + } +} +``` + +Now, when we use the `<%= title %>` template, Assemble will assume that we are referring to the `title` variable defined in the options above. + +Let's try using this variable in a page, such as `index.hbs`: + +```handlebars +

{{title}}!

+``` +Okay, this seems pretty straightforward, right? It also seems reasonable to expect that once this page is rendered to `index.html` by Assemble we would see: + +```html +

Assemble!

+``` + +### Introducing YAML Front Matter + +Let's mix things up a bit and add some YAML front matter to see what happens when the `title` property is defined both "locally" and "globally". + +```handlebars +--- +title: Home +--- +

{{title}}!

+``` +Although `title` is already defined globally, Assemble gives precedence to the locally-defined, `title` variable, so the rendered result would be: + +```html +

Home!

+``` + +As in previous examples, if we try to use the `<%= title %>` variable to use the globally defined `title` (e.g. "Assemble"), we'll get a `Maximum call stack size exceeded` error. + +```handlebars +--- +# THIS WON'T WORK! +title: <%= title %> - Home +--- +

{{title}}!

+``` + +Or we could do something like this: + +```handlebars +--- +site_title: <%= title %> +title: Home +--- +

{{title}}!

+

{{site_title}}!

+``` diff --git a/content/posts/handlebars-subexpressions.md b/content/posts/handlebars-subexpressions.md new file mode 100644 index 0000000..4c36768 --- /dev/null +++ b/content/posts/handlebars-subexpressions.md @@ -0,0 +1,38 @@ +--- +title: Handlebars Subexpressions +published: false +--- + +Examples: + +Subexpressions in Expression Helpers + +* `\{{titleize basename}}` => `\{{default title basename}}` => `\{{default title (titleize basename)}}`. + +* `\{{rel (isPermalink '/#' 'index')}}` + +Subexpressions in Block Helpers + +```handlebars +{{#each (expand files)}} + {{md (basename .)}} +{{/each}} +``` + + +* **Expression helpers**: These are just regular functions that take the name of the helper and the helper function as arguments. Once an expression helper is registered, it can be called anywhere in your templates, then Handlebars takes the expression's return value and writes it into the template. For example, `\{{titleize basename}}` would write out the `basename` of the "current" file in title case. + +* **Subexpressions**: with subexpressions, you may invoke multiple helpers _within a single mustache_, and pass in the results of inner helper invocations as arguments to outer helpers. Subexpressions are delimited by parentheses. For example, the `default` helper takes two values, the first being the "desired" value and the second being a default or fallback value if the first value doesn't exist, e.g. `\{{default title basename}}`. So if the `title` value doesn't exist, the helper will use the `basename` of the file instead. This means our value won't be title case, as a "real" title is expected to be. Howver, using subexpressions we can spice things up a bit and transform the basename to meet our needs: `\{{default title (titleize basename)}}`. + + +The final block. + +```handlebars +{{#each section}} + {{#each (expand files)}} + {{#markdown}} + {{inline .}} + {{/markdown}} + {{/each}} +{{/each}} +``` \ No newline at end of file diff --git a/content/posts/handlebars-tips.md b/content/posts/handlebars-tips.md new file mode 100644 index 0000000..aa25b53 --- /dev/null +++ b/content/posts/handlebars-tips.md @@ -0,0 +1,21 @@ +# Get the most out of Handlebars + + +## Tips and Tricks + +### Strings as params + +For basic and straightforward use cases you can pass a string as a parameter to partial. + +```handlebars +{{> btn-github 'small' }} +``` + +Assuming all other parameters are static in the `btn-github.hbs` partial (abbreviated for clarity): + +```handlebars + +``` + +### Feature toggling + diff --git a/content/posts/why-two-kinds-of-templates.md b/content/posts/why-two-kinds-of-templates.md new file mode 100644 index 0000000..d0583d7 --- /dev/null +++ b/content/posts/why-two-kinds-of-templates.md @@ -0,0 +1,58 @@ +--- +published: false +--- +# Why does Assemble use two template engines!? + +> The goal of this post is to clear up the confusion and explain once and for all why, in Assemble, two template engines are definitely better than one. + +Sometimes it confuses newcomers that Assemble uses two template engines, and understandably so. But there are very good reasons for doing so, and I hope to convince you here that it's worth the effort to understand why. + +## Defining "templates" + +> Templates keep your code as organized, modular, and reusable as it can be. Which means projects will be easier to maintain as a result. + +Before we move on, perhaps we should establish a common definition for the term "template" so we have a foundation to build from throughout the rest of our time together. In the most generic of terms, let's agree that a template is a _**placeholder** that will be replaced at build time (by a template engine) with **an actual value**_. + +This definition shouldn't be very controversial. Afterall, + + +A template is a document or document fragment that contains variables that will be replaced (by the template engine) with actual data, content or other documents. Assemble uses Handlebars.js as its default template engine, so the syntax you see in the examples comes from that library. + +Handlebars is super powerful, giving you as much freedom and power as you need to arrange your templates the way you want them. Assemble adds to this by offering built-in support and conventions for the following template structures: + +We use Lo-Dash templates and mixins to expand config values, exactly how you would do in a Gruntfile, e.g.: + +```js +jshint: { + options: { + jshintrc: '.jshintrc' + }, + all: ['<%= site.scripts %>/*.js'] +} +``` + +Using your example from above, you would do something like this: + +```json +{ + "my": { + // note that `foo` is the name of the parent object, I'll explain below + "prop": "some value <%= foo.some.other-prop %>" + }, + "some": { + "other-prop": "Hello World" + } +} +``` + +Here are some examples of lodash templates being with an Assemble config: + +* This is where default values are defined: https://github.com/assemble/assemble.io/blob/v0.3.0/.assemblerc.yml#L6 +* This is where the `site` property is extened into the context: https://github.com/assemble/assemble.io/blob/master/Gruntfile.js#L36 + +if you want to go further than just passing a string from one place to another, you can use mixins. + + +Mixins are really just Actually the 18n plugin has a couple good examples of this. [This file](https://github.com/assemble/assemble-contrib-i18n/blob/master/test/fixtures/data/i18n-alt.json#L6) uses templates with a [basic `expand` mixin](https://github.com/assemble/assemble-contrib-i18n/blob/master/Gruntfile.js#L10-L15) that I created. + +When mixins are registered in the Gruntfile exactly as in the example they will be available to your templates. diff --git a/data/README.md b/data/README.md new file mode 100644 index 0000000..b301d74 --- /dev/null +++ b/data/README.md @@ -0,0 +1,15 @@ +# Data + +> Assemble automatically maps data in JSON or YAML files to custom variables used in templates. + + +TODO: + +* usage in components/includes +* pages +* context +* helpers +* plugins + + +Like all other file types, `data` files can be anywhere in your project, just tell Assemble where to find them. \ No newline at end of file diff --git a/data/_options/inline.yml b/data/_options/inline.yml new file mode 100644 index 0000000..f48c824 --- /dev/null +++ b/data/_options/inline.yml @@ -0,0 +1,18 @@ +# ============================================= +# Options for the {{inline}} helper +# ============================================= + +# Information about the source file? +origin: true + +# Partial to prepend to each markdown file after +# it is converted to HTML by the {{inline}} helper + +# This is the name of the partial used in the +# 'Edit this source' poposvers +prepend: popover-source-link + +# Partial to append to each markdown file after +# it is converted to HTML by the {{inline}} helper. +# Here, we're using this feature to append a +# link to the source file \ No newline at end of file diff --git a/data/_paginate.yml b/data/_paginate.yml new file mode 100644 index 0000000..b1ea841 --- /dev/null +++ b/data/_paginate.yml @@ -0,0 +1,15 @@ +#=========================================== +# PAGINATION METADATA +#=========================================== + +prev: + prev: true + text: Previous Section + modifier: paginate-prev stacked + icon: glyphicon-chevron-up + +next: + next: true + text: Next Section + modifier: paginate-next + icon: glyphicon-chevron-down \ No newline at end of file diff --git a/data/_repos.json b/data/_repos.json new file mode 100644 index 0000000..b8f40d6 --- /dev/null +++ b/data/_repos.json @@ -0,0 +1,8370 @@ +{ + "repos": [ + { + "id": 5916767, + "name": "assemble", + "full_name": "assemble/assemble", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble", + "description": "Static site generator for Node.js, Grunt.js, and Yeoman (and soon, Gulp). Used by Zurb Foundation, Zurb Ink, H5BP/Effeckt, Less.js / lesscss.org, Topcoat, Web Experience Toolkit, and hundreds of other projects to build sites, themes, components, documentation, blogs and gh-pages. Pull requests welcome, stars appreciated!", + "fork": false, + "url": "https://github.com/assemble/assemble", + "forks_url": "https://api.github.com/repos/assemble/assemble/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble/releases{/id}", + "created_at": "2012-09-22T20:50:23Z", + "updated_at": "2014-03-16T20:01:47Z", + "pushed_at": "2014-03-16T20:01:47Z", + "git_url": "git://github.com/assemble/assemble.git", + "ssh_url": "git@github.com:assemble/assemble.git", + "clone_url": "https://github.com/assemble/assemble.git", + "svn_url": "https://github.com/assemble/assemble", + "homepage": "http://assemble.io/", + "size": 12645, + "stargazers_count": 1205, + "watchers_count": 1205, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 61, + "mirror_url": null, + "open_issues_count": 72, + "forks": 61, + "open_issues": 72, + "watchers": 1205, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble", + "download": "https://github.com/assemble/assemble/archive/master.zip" + }, + { + "id": 14260127, + "name": "assemble-contrib-anchors", + "full_name": "assemble/assemble-contrib-anchors", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-anchors", + "description": "Assemble plugin for creating anchor tags from generated html.", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-anchors", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors/releases{/id}", + "created_at": "2013-11-09T16:13:03Z", + "updated_at": "2014-02-27T15:02:29Z", + "pushed_at": "2014-02-27T15:02:28Z", + "git_url": "git://github.com/assemble/assemble-contrib-anchors.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-anchors.git", + "clone_url": "https://github.com/assemble/assemble-contrib-anchors.git", + "svn_url": "https://github.com/assemble/assemble-contrib-anchors", + "homepage": "http://assemble.github.io/assemble-contrib-anchors-example/components.html", + "size": 160, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-anchors", + "download": "https://github.com/assemble/assemble-contrib-anchors/archive/master.zip" + }, + { + "id": 14289456, + "name": "assemble-contrib-anchors-example", + "full_name": "assemble/assemble-contrib-anchors-example", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-anchors-example", + "description": "Usage examples for assemble-contrib-anchors, an Assemble plugin for generating adding anchors to headings.", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-anchors-example", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-anchors-example/releases{/id}", + "created_at": "2013-11-11T02:18:08Z", + "updated_at": "2013-11-28T02:44:01Z", + "pushed_at": "2013-11-11T09:18:45Z", + "git_url": "git://github.com/assemble/assemble-contrib-anchors-example.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-anchors-example.git", + "clone_url": "https://github.com/assemble/assemble-contrib-anchors-example.git", + "svn_url": "https://github.com/assemble/assemble-contrib-anchors-example", + "homepage": "http://assemble.github.io/assemble-contrib-anchors-example/components.html", + "size": 1011, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-anchors-example", + "download": "https://github.com/assemble/assemble-contrib-anchors-example/archive/master.zip" + }, + { + "id": 13564327, + "name": "assemble-contrib-contextual", + "full_name": "assemble/assemble-contrib-contextual", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-contextual", + "description": "Generates a JSON file containing the context of each page. Basic plugin to help see what's happening in the build.", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-contextual", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-contextual/releases{/id}", + "created_at": "2013-10-14T14:58:28Z", + "updated_at": "2014-02-27T14:44:02Z", + "pushed_at": "2014-02-27T14:44:02Z", + "git_url": "git://github.com/assemble/assemble-contrib-contextual.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-contextual.git", + "clone_url": "https://github.com/assemble/assemble-contrib-contextual.git", + "svn_url": "https://github.com/assemble/assemble-contrib-contextual", + "homepage": null, + "size": 140, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 1, + "forks": 0, + "open_issues": 1, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-contextual", + "download": "https://github.com/assemble/assemble-contrib-contextual/archive/master.zip" + }, + { + "id": 14783295, + "name": "assemble-contrib-decompress", + "full_name": "assemble/assemble-contrib-decompress", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-decompress", + "description": "Assemble plugin for extracting zip, tar and tar.gz archives. ", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-decompress", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-decompress/releases{/id}", + "created_at": "2013-11-28T17:49:30Z", + "updated_at": "2014-02-27T19:56:19Z", + "pushed_at": "2014-02-27T19:56:19Z", + "git_url": "git://github.com/assemble/assemble-contrib-decompress.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-decompress.git", + "clone_url": "https://github.com/assemble/assemble-contrib-decompress.git", + "svn_url": "https://github.com/assemble/assemble-contrib-decompress", + "homepage": null, + "size": 160, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-decompress", + "download": "https://github.com/assemble/assemble-contrib-decompress/archive/master.zip" + }, + { + "id": 14784381, + "name": "assemble-contrib-download", + "full_name": "assemble/assemble-contrib-download", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-download", + "description": "Assemble plugin for downloading files from GitHub.", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-download", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-download/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-download/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-download/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-download/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-download/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-download/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-download/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-download/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-download/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-download/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-download/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-download/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-download/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-download/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-download/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-download/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-download/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-download/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-download/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-download/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-download/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-download/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-download/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-download/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-download/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-download/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-download/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-download/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-download/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-download/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-download/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-download/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-download/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-download/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-download/releases{/id}", + "created_at": "2013-11-28T18:54:29Z", + "updated_at": "2014-02-27T19:51:11Z", + "pushed_at": "2014-02-27T19:51:11Z", + "git_url": "git://github.com/assemble/assemble-contrib-download.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-download.git", + "clone_url": "https://github.com/assemble/assemble-contrib-download.git", + "svn_url": "https://github.com/assemble/assemble-contrib-download", + "homepage": null, + "size": 328, + "stargazers_count": 3, + "watchers_count": 3, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 3, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-download", + "download": "https://github.com/assemble/assemble-contrib-download/archive/master.zip" + }, + { + "id": 15349267, + "name": "assemble-contrib-i18n", + "full_name": "assemble/assemble-contrib-i18n", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-i18n", + "description": "Plugin for adding i18n support to Assemble projects.", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-i18n", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-i18n/releases{/id}", + "created_at": "2013-12-20T22:02:30Z", + "updated_at": "2014-03-24T15:34:39Z", + "pushed_at": "2014-03-24T15:34:39Z", + "git_url": "git://github.com/assemble/assemble-contrib-i18n.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-i18n.git", + "clone_url": "https://github.com/assemble/assemble-contrib-i18n.git", + "svn_url": "https://github.com/assemble/assemble-contrib-i18n", + "homepage": null, + "size": 399, + "stargazers_count": 6, + "watchers_count": 6, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": false, + "forks_count": 5, + "mirror_url": null, + "open_issues_count": 5, + "forks": 5, + "open_issues": 5, + "watchers": 6, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-i18n", + "download": "https://github.com/assemble/assemble-contrib-i18n/archive/master.zip" + }, + { + "id": 14482625, + "name": "assemble-contrib-lunr", + "full_name": "assemble/assemble-contrib-lunr", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-lunr", + "description": "Assemble plugin for creating a search engine within your static site using lunr.js.", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-lunr", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr/releases{/id}", + "created_at": "2013-11-18T04:25:33Z", + "updated_at": "2014-01-15T02:56:03Z", + "pushed_at": "2013-11-21T21:48:47Z", + "git_url": "git://github.com/assemble/assemble-contrib-lunr.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-lunr.git", + "clone_url": "https://github.com/assemble/assemble-contrib-lunr.git", + "svn_url": "https://github.com/assemble/assemble-contrib-lunr", + "homepage": "http://assemble.github.io/assemble-contrib-lunr-examples/", + "size": 100, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-lunr", + "download": "https://github.com/assemble/assemble-contrib-lunr/archive/master.zip" + }, + { + "id": 14482632, + "name": "assemble-contrib-lunr-examples", + "full_name": "assemble/assemble-contrib-lunr-examples", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-lunr-examples", + "description": "Usages examples for assemble-contrib-lunr, a search plugin for Assemble.", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-lunr-examples", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-lunr-examples/releases{/id}", + "created_at": "2013-11-18T04:26:10Z", + "updated_at": "2013-11-28T02:42:12Z", + "pushed_at": "2013-11-18T05:18:38Z", + "git_url": "git://github.com/assemble/assemble-contrib-lunr-examples.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-lunr-examples.git", + "clone_url": "https://github.com/assemble/assemble-contrib-lunr-examples.git", + "svn_url": "https://github.com/assemble/assemble-contrib-lunr-examples", + "homepage": "http://assemble.io/plugins/", + "size": 652, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 2, + "forks": 0, + "open_issues": 2, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-lunr-examples", + "download": "https://github.com/assemble/assemble-contrib-lunr-examples/archive/master.zip" + }, + { + "id": 14438639, + "name": "assemble-contrib-markdown", + "full_name": "assemble/assemble-contrib-markdown", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-markdown", + "description": "HEADS UP! This isn't ready for prime time! Convert markdown files to HTML using marked.js. This plugin is an alternative to Assemble's markdown Handlebars helpers. Both are useful in different scenarios.", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-markdown", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-markdown/releases{/id}", + "created_at": "2013-11-16T00:22:56Z", + "updated_at": "2014-01-21T13:48:02Z", + "pushed_at": "2013-11-16T00:51:33Z", + "git_url": "git://github.com/assemble/assemble-contrib-markdown.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-markdown.git", + "clone_url": "https://github.com/assemble/assemble-contrib-markdown.git", + "svn_url": "https://github.com/assemble/assemble-contrib-markdown", + "homepage": "", + "size": 116, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-markdown", + "download": "https://github.com/assemble/assemble-contrib-markdown/archive/master.zip" + }, + { + "id": 18134314, + "name": "assemble-contrib-navigation", + "full_name": "assemble/assemble-contrib-navigation", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-navigation", + "description": "Assemble plugin for automatically generating Bootstrap-style side navigation. ", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-navigation", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-navigation/releases{/id}", + "created_at": "2014-03-26T10:23:25Z", + "updated_at": "2014-03-26T10:23:25Z", + "pushed_at": "2014-03-26T10:23:25Z", + "git_url": "git://github.com/assemble/assemble-contrib-navigation.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-navigation.git", + "clone_url": "https://github.com/assemble/assemble-contrib-navigation.git", + "svn_url": "https://github.com/assemble/assemble-contrib-navigation", + "homepage": null, + "size": 0, + "stargazers_count": 0, + "watchers_count": 0, + "language": null, + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 1, + "forks": 0, + "open_issues": 1, + "watchers": 0, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-navigation", + "download": "https://github.com/assemble/assemble-contrib-navigation/archive/master.zip" + }, + { + "id": 17188849, + "name": "assemble-contrib-pagination", + "full_name": "assemble/assemble-contrib-pagination", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-pagination", + "description": "WIP this plugin isn't ready for use!", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-pagination", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-pagination/releases{/id}", + "created_at": "2014-02-25T21:29:19Z", + "updated_at": "2014-03-01T03:07:12Z", + "pushed_at": "2014-03-01T03:07:11Z", + "git_url": "git://github.com/assemble/assemble-contrib-pagination.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-pagination.git", + "clone_url": "https://github.com/assemble/assemble-contrib-pagination.git", + "svn_url": "https://github.com/assemble/assemble-contrib-pagination", + "homepage": "", + "size": 143, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 1, + "forks": 2, + "open_issues": 1, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-pagination", + "download": "https://github.com/assemble/assemble-contrib-pagination/archive/master.zip" + }, + { + "id": 13308551, + "name": "assemble-contrib-permalinks", + "full_name": "assemble/assemble-contrib-permalinks", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-permalinks", + "description": "Permalinks plugin for Assemble, the static site generator for Grunt.js and Yeoman. This plugin enables powerful and configurable URI replacement patterns, presets, uses Moment.js for parsing dates, and much more.", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-permalinks", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-permalinks/releases{/id}", + "created_at": "2013-10-03T20:10:32Z", + "updated_at": "2014-03-21T14:12:56Z", + "pushed_at": "2014-03-21T14:12:54Z", + "git_url": "git://github.com/assemble/assemble-contrib-permalinks.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-permalinks.git", + "clone_url": "https://github.com/assemble/assemble-contrib-permalinks.git", + "svn_url": "https://github.com/assemble/assemble-contrib-permalinks", + "homepage": "", + "size": 1104, + "stargazers_count": 24, + "watchers_count": 24, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 9, + "mirror_url": null, + "open_issues_count": 6, + "forks": 9, + "open_issues": 6, + "watchers": 24, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-permalinks", + "download": "https://github.com/assemble/assemble-contrib-permalinks/archive/master.zip" + }, + { + "id": 13553425, + "name": "assemble-contrib-rss", + "full_name": "assemble/assemble-contrib-rss", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-rss", + "description": "NOT Published yet! This plugin isn't ready for prime time! Plugin for creating RSS feeds with Assemble, the static site generator for Node.js, Grunt.js and Yeoman. ", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-rss", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-rss/releases{/id}", + "created_at": "2013-10-14T05:42:34Z", + "updated_at": "2014-01-13T22:32:19Z", + "pushed_at": "2013-10-14T05:45:49Z", + "git_url": "git://github.com/assemble/assemble-contrib-rss.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-rss.git", + "clone_url": "https://github.com/assemble/assemble-contrib-rss.git", + "svn_url": "https://github.com/assemble/assemble-contrib-rss", + "homepage": "", + "size": 124, + "stargazers_count": 6, + "watchers_count": 6, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 6, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-rss", + "download": "https://github.com/assemble/assemble-contrib-rss/archive/master.zip" + }, + { + "id": 13264451, + "name": "assemble-contrib-sitemap", + "full_name": "assemble/assemble-contrib-sitemap", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-sitemap", + "description": "Sitemap generator plugin for Assemble", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-sitemap", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-sitemap/releases{/id}", + "created_at": "2013-10-02T06:48:32Z", + "updated_at": "2014-03-25T20:20:43Z", + "pushed_at": "2014-03-25T20:20:45Z", + "git_url": "git://github.com/assemble/assemble-contrib-sitemap.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-sitemap.git", + "clone_url": "https://github.com/assemble/assemble-contrib-sitemap.git", + "svn_url": "https://github.com/assemble/assemble-contrib-sitemap", + "homepage": null, + "size": 467, + "stargazers_count": 10, + "watchers_count": 10, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 6, + "mirror_url": null, + "open_issues_count": 3, + "forks": 6, + "open_issues": 3, + "watchers": 10, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-sitemap", + "download": "https://github.com/assemble/assemble-contrib-sitemap/archive/master.zip" + }, + { + "id": 14290300, + "name": "assemble-contrib-toc", + "full_name": "assemble/assemble-contrib-toc", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-toc", + "description": "Create a table of contents in the generated HTML, using Cheerio.js", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-toc", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-toc/releases{/id}", + "created_at": "2013-11-11T03:11:58Z", + "updated_at": "2013-12-13T08:34:16Z", + "pushed_at": "2013-11-11T08:28:39Z", + "git_url": "git://github.com/assemble/assemble-contrib-toc.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-toc.git", + "clone_url": "https://github.com/assemble/assemble-contrib-toc.git", + "svn_url": "https://github.com/assemble/assemble-contrib-toc", + "homepage": "http://assemble.github.io/assemble-contrib-toc-example/components.html#table-of-contents", + "size": 110, + "stargazers_count": 5, + "watchers_count": 5, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 1, + "forks": 2, + "open_issues": 1, + "watchers": 5, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-toc", + "download": "https://github.com/assemble/assemble-contrib-toc/archive/master.zip" + }, + { + "id": 14290326, + "name": "assemble-contrib-toc-example", + "full_name": "assemble/assemble-contrib-toc-example", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-toc-example", + "description": "Example for generating a Table of Contents using Assemble.", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-toc-example", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-toc-example/releases{/id}", + "created_at": "2013-11-11T03:13:43Z", + "updated_at": "2013-12-13T08:15:04Z", + "pushed_at": "2013-11-12T02:23:19Z", + "git_url": "git://github.com/assemble/assemble-contrib-toc-example.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-toc-example.git", + "clone_url": "https://github.com/assemble/assemble-contrib-toc-example.git", + "svn_url": "https://github.com/assemble/assemble-contrib-toc-example", + "homepage": "http://assemble.github.io/assemble-contrib-toc-example/components.html#table-of-contents", + "size": 1035, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-toc-example", + "download": "https://github.com/assemble/assemble-contrib-toc-example/archive/master.zip" + }, + { + "id": 14482553, + "name": "assemble-contrib-wordcount", + "full_name": "assemble/assemble-contrib-wordcount", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-contrib-wordcount", + "description": "Assemble plugin for displaying a word-count on blog posts or pages.", + "fork": false, + "url": "https://github.com/assemble/assemble-contrib-wordcount", + "forks_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-contrib-wordcount/releases{/id}", + "created_at": "2013-11-18T04:20:49Z", + "updated_at": "2014-03-11T13:09:08Z", + "pushed_at": "2014-03-11T13:09:08Z", + "git_url": "git://github.com/assemble/assemble-contrib-wordcount.git", + "ssh_url": "git@github.com:assemble/assemble-contrib-wordcount.git", + "clone_url": "https://github.com/assemble/assemble-contrib-wordcount.git", + "svn_url": "https://github.com/assemble/assemble-contrib-wordcount", + "homepage": null, + "size": 168, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 1, + "forks": 0, + "open_issues": 1, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-contrib-wordcount", + "download": "https://github.com/assemble/assemble-contrib-wordcount/archive/master.zip" + }, + { + "id": 17631290, + "name": "assemble-example", + "full_name": "assemble/assemble-example", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-example", + "description": "This project will help you get started with Assemble. Just download, install the dependencies, and you're off and running!", + "fork": false, + "url": "https://github.com/assemble/assemble-example", + "forks_url": "https://api.github.com/repos/assemble/assemble-example/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-example/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-example/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-example/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-example/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-example/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-example/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-example/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-example/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-example/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-example/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-example/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-example/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-example/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-example/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-example/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-example/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-example/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-example/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-example/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-example/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-example/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-example/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-example/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-example/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-example/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-example/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-example/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-example/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-example/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-example/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-example/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-example/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-example/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-example/releases{/id}", + "created_at": "2014-03-11T13:27:51Z", + "updated_at": "2014-03-23T15:21:31Z", + "pushed_at": "2014-03-23T15:21:31Z", + "git_url": "git://github.com/assemble/assemble-example.git", + "ssh_url": "git@github.com:assemble/assemble-example.git", + "clone_url": "https://github.com/assemble/assemble-example.git", + "svn_url": "https://github.com/assemble/assemble-example", + "homepage": "", + "size": 157, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-example", + "download": "https://github.com/assemble/assemble-example/archive/master.zip" + }, + { + "id": 12046940, + "name": "assemble-front-matter", + "full_name": "assemble/assemble-front-matter", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-front-matter", + "description": "Utilities for extracting Front Matter from source files.", + "fork": false, + "url": "https://github.com/assemble/assemble-front-matter", + "forks_url": "https://api.github.com/repos/assemble/assemble-front-matter/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-front-matter/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-front-matter/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-front-matter/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-front-matter/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-front-matter/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-front-matter/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-front-matter/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-front-matter/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-front-matter/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-front-matter/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-front-matter/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-front-matter/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-front-matter/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-front-matter/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-front-matter/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-front-matter/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-front-matter/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-front-matter/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-front-matter/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-front-matter/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-front-matter/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-front-matter/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-front-matter/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-front-matter/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-front-matter/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-front-matter/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-front-matter/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-front-matter/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-front-matter/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-front-matter/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-front-matter/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-front-matter/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-front-matter/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-front-matter/releases{/id}", + "created_at": "2013-08-12T03:16:57Z", + "updated_at": "2014-01-07T01:06:56Z", + "pushed_at": "2013-09-28T04:07:49Z", + "git_url": "git://github.com/assemble/assemble-front-matter.git", + "ssh_url": "git@github.com:assemble/assemble-front-matter.git", + "clone_url": "https://github.com/assemble/assemble-front-matter.git", + "svn_url": "https://github.com/assemble/assemble-front-matter", + "homepage": "", + "size": 121, + "stargazers_count": 7, + "watchers_count": 7, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 7, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-front-matter", + "download": "https://github.com/assemble/assemble-front-matter/archive/master.zip" + }, + { + "id": 9875269, + "name": "assemble-handlebars", + "full_name": "assemble/assemble-handlebars", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-handlebars", + "description": "Assemble engine plugin for Handlebars templates", + "fork": false, + "url": "https://github.com/assemble/assemble-handlebars", + "forks_url": "https://api.github.com/repos/assemble/assemble-handlebars/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-handlebars/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-handlebars/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-handlebars/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-handlebars/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-handlebars/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-handlebars/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-handlebars/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-handlebars/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-handlebars/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-handlebars/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-handlebars/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-handlebars/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-handlebars/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-handlebars/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-handlebars/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-handlebars/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-handlebars/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-handlebars/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-handlebars/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-handlebars/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-handlebars/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-handlebars/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-handlebars/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-handlebars/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-handlebars/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-handlebars/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-handlebars/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-handlebars/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-handlebars/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-handlebars/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-handlebars/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-handlebars/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-handlebars/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-handlebars/releases{/id}", + "created_at": "2013-05-05T22:05:53Z", + "updated_at": "2014-01-18T19:32:10Z", + "pushed_at": "2014-01-18T19:32:10Z", + "git_url": "git://github.com/assemble/assemble-handlebars.git", + "ssh_url": "git@github.com:assemble/assemble-handlebars.git", + "clone_url": "https://github.com/assemble/assemble-handlebars.git", + "svn_url": "https://github.com/assemble/assemble-handlebars", + "homepage": "https://github.com/assemble/assemble", + "size": 274, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 9, + "mirror_url": null, + "open_issues_count": 1, + "forks": 9, + "open_issues": 1, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-handlebars", + "download": "https://github.com/assemble/assemble-handlebars/archive/master.zip" + }, + { + "id": 8470606, + "name": "assemble-less", + "full_name": "assemble/assemble-less", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-less", + "description": "Grunt task for compiling LESS to CSS. ", + "fork": false, + "url": "https://github.com/assemble/assemble-less", + "forks_url": "https://api.github.com/repos/assemble/assemble-less/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-less/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-less/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-less/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-less/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-less/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-less/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-less/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-less/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-less/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-less/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-less/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-less/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-less/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-less/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-less/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-less/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-less/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-less/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-less/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-less/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-less/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-less/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-less/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-less/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-less/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-less/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-less/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-less/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-less/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-less/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-less/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-less/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-less/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-less/releases{/id}", + "created_at": "2013-02-28T02:51:21Z", + "updated_at": "2014-03-03T11:24:28Z", + "pushed_at": "2014-03-03T11:24:28Z", + "git_url": "git://github.com/assemble/assemble-less.git", + "ssh_url": "git@github.com:assemble/assemble-less.git", + "clone_url": "https://github.com/assemble/assemble-less.git", + "svn_url": "https://github.com/assemble/assemble-less", + "homepage": "http://github.com/assemble/assemble-less/", + "size": 1587, + "stargazers_count": 54, + "watchers_count": 54, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 10, + "mirror_url": null, + "open_issues_count": 6, + "forks": 10, + "open_issues": 6, + "watchers": 54, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-less", + "download": "https://github.com/assemble/assemble-less/archive/master.zip" + }, + { + "id": 11677029, + "name": "assemble-liquid", + "full_name": "assemble/assemble-liquid", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-liquid", + "description": "Assemble engine plugin for LiquidNode templates http://assemble.io", + "fork": false, + "url": "https://github.com/assemble/assemble-liquid", + "forks_url": "https://api.github.com/repos/assemble/assemble-liquid/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-liquid/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-liquid/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-liquid/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-liquid/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-liquid/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-liquid/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-liquid/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-liquid/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-liquid/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-liquid/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-liquid/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-liquid/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-liquid/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-liquid/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-liquid/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-liquid/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-liquid/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-liquid/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-liquid/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-liquid/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-liquid/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-liquid/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-liquid/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-liquid/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-liquid/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-liquid/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-liquid/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-liquid/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-liquid/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-liquid/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-liquid/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-liquid/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-liquid/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-liquid/releases{/id}", + "created_at": "2013-07-26T03:42:45Z", + "updated_at": "2014-02-06T03:26:39Z", + "pushed_at": "2013-07-27T20:21:27Z", + "git_url": "git://github.com/assemble/assemble-liquid.git", + "ssh_url": "git@github.com:assemble/assemble-liquid.git", + "clone_url": "https://github.com/assemble/assemble-liquid.git", + "svn_url": "https://github.com/assemble/assemble-liquid", + "homepage": null, + "size": 67, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-liquid", + "download": "https://github.com/assemble/assemble-liquid/archive/master.zip" + }, + { + "id": 9702566, + "name": "assemble-manifest", + "full_name": "assemble/assemble-manifest", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-manifest", + "description": "Proof of concept to generate JSON and/or YAML manifest files from given source files or directories.", + "fork": false, + "url": "https://github.com/assemble/assemble-manifest", + "forks_url": "https://api.github.com/repos/assemble/assemble-manifest/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-manifest/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-manifest/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-manifest/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-manifest/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-manifest/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-manifest/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-manifest/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-manifest/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-manifest/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-manifest/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-manifest/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-manifest/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-manifest/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-manifest/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-manifest/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-manifest/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-manifest/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-manifest/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-manifest/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-manifest/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-manifest/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-manifest/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-manifest/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-manifest/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-manifest/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-manifest/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-manifest/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-manifest/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-manifest/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-manifest/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-manifest/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-manifest/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-manifest/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-manifest/releases{/id}", + "created_at": "2013-04-26T19:22:05Z", + "updated_at": "2014-03-06T17:10:02Z", + "pushed_at": "2013-07-16T12:37:22Z", + "git_url": "git://github.com/assemble/assemble-manifest.git", + "ssh_url": "git@github.com:assemble/assemble-manifest.git", + "clone_url": "https://github.com/assemble/assemble-manifest.git", + "svn_url": "https://github.com/assemble/assemble-manifest", + "homepage": "https://github.com/assemble/assemble-manifest", + "size": 1868, + "stargazers_count": 7, + "watchers_count": 7, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 3, + "mirror_url": null, + "open_issues_count": 5, + "forks": 3, + "open_issues": 5, + "watchers": 7, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-manifest", + "download": "https://github.com/assemble/assemble-manifest/archive/master.zip" + }, + { + "id": 17780577, + "name": "assemble-pattern-lab", + "full_name": "assemble/assemble-pattern-lab", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-pattern-lab", + "description": "An easier-to-use, cleaner and more extensible build system for pattern-lab.", + "fork": false, + "url": "https://github.com/assemble/assemble-pattern-lab", + "forks_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-pattern-lab/releases{/id}", + "created_at": "2014-03-15T17:04:59Z", + "updated_at": "2014-03-25T03:00:33Z", + "pushed_at": "2014-03-17T10:02:11Z", + "git_url": "git://github.com/assemble/assemble-pattern-lab.git", + "ssh_url": "git@github.com:assemble/assemble-pattern-lab.git", + "clone_url": "https://github.com/assemble/assemble-pattern-lab.git", + "svn_url": "https://github.com/assemble/assemble-pattern-lab", + "homepage": null, + "size": 1140, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-pattern-lab", + "download": "https://github.com/assemble/assemble-pattern-lab/archive/master.zip" + }, + { + "id": 9926406, + "name": "assemble-swig", + "full_name": "assemble/assemble-swig", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-swig", + "description": "Assemble engine plugin for swig templates.", + "fork": false, + "url": "https://github.com/assemble/assemble-swig", + "forks_url": "https://api.github.com/repos/assemble/assemble-swig/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-swig/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-swig/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-swig/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-swig/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-swig/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-swig/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-swig/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-swig/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-swig/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-swig/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-swig/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-swig/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-swig/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-swig/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-swig/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-swig/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-swig/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-swig/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-swig/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-swig/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-swig/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-swig/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-swig/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-swig/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-swig/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-swig/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-swig/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-swig/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-swig/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-swig/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-swig/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-swig/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-swig/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-swig/releases{/id}", + "created_at": "2013-05-08T02:11:34Z", + "updated_at": "2014-02-17T23:50:20Z", + "pushed_at": "2013-09-14T07:57:47Z", + "git_url": "git://github.com/assemble/assemble-swig.git", + "ssh_url": "git@github.com:assemble/assemble-swig.git", + "clone_url": "https://github.com/assemble/assemble-swig.git", + "svn_url": "https://github.com/assemble/assemble-swig", + "homepage": null, + "size": 137, + "stargazers_count": 6, + "watchers_count": 6, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 3, + "mirror_url": null, + "open_issues_count": 3, + "forks": 3, + "open_issues": 3, + "watchers": 6, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-swig", + "download": "https://github.com/assemble/assemble-swig/archive/master.zip" + }, + { + "id": 9612365, + "name": "assemble-utils", + "full_name": "assemble/assemble-utils", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-utils", + "description": "Assemble utilities", + "fork": false, + "url": "https://github.com/assemble/assemble-utils", + "forks_url": "https://api.github.com/repos/assemble/assemble-utils/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-utils/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-utils/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-utils/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-utils/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-utils/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-utils/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-utils/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-utils/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-utils/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-utils/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-utils/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-utils/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-utils/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-utils/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-utils/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-utils/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-utils/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-utils/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-utils/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-utils/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-utils/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-utils/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-utils/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-utils/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-utils/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-utils/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-utils/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-utils/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-utils/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-utils/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-utils/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-utils/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-utils/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-utils/releases{/id}", + "created_at": "2013-04-23T01:08:40Z", + "updated_at": "2013-11-17T19:59:18Z", + "pushed_at": "2013-08-11T07:59:06Z", + "git_url": "git://github.com/assemble/assemble-utils.git", + "ssh_url": "git@github.com:assemble/assemble-utils.git", + "clone_url": "https://github.com/assemble/assemble-utils.git", + "svn_url": "https://github.com/assemble/assemble-utils", + "homepage": null, + "size": 69, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-utils", + "download": "https://github.com/assemble/assemble-utils/archive/master.zip" + }, + { + "id": 12044759, + "name": "assemble-yaml", + "full_name": "assemble/assemble-yaml", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble-yaml", + "description": "Utility for extracting and converting YAML Front Matter from files.", + "fork": false, + "url": "https://github.com/assemble/assemble-yaml", + "forks_url": "https://api.github.com/repos/assemble/assemble-yaml/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble-yaml/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble-yaml/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble-yaml/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble-yaml/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble-yaml/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble-yaml/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble-yaml/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble-yaml/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble-yaml/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble-yaml/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble-yaml/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble-yaml/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble-yaml/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble-yaml/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble-yaml/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble-yaml/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble-yaml/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble-yaml/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble-yaml/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble-yaml/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble-yaml/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble-yaml/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble-yaml/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble-yaml/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble-yaml/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble-yaml/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble-yaml/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble-yaml/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble-yaml/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble-yaml/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble-yaml/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble-yaml/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble-yaml/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble-yaml/releases{/id}", + "created_at": "2013-08-12T00:23:32Z", + "updated_at": "2013-12-08T15:18:14Z", + "pushed_at": "2013-11-01T21:13:24Z", + "git_url": "git://github.com/assemble/assemble-yaml.git", + "ssh_url": "git@github.com:assemble/assemble-yaml.git", + "clone_url": "https://github.com/assemble/assemble-yaml.git", + "svn_url": "https://github.com/assemble/assemble-yaml", + "homepage": "", + "size": 153, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble-yaml", + "download": "https://github.com/assemble/assemble-yaml/archive/master.zip" + }, + { + "id": 10907540, + "name": "assemble.io", + "full_name": "assemble/assemble.io", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/assemble.io", + "description": "Website and documentation for Assemble.", + "fork": false, + "url": "https://github.com/assemble/assemble.io", + "forks_url": "https://api.github.com/repos/assemble/assemble.io/forks", + "keys_url": "https://api.github.com/repos/assemble/assemble.io/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/assemble.io/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/assemble.io/teams", + "hooks_url": "https://api.github.com/repos/assemble/assemble.io/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/assemble.io/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/assemble.io/events", + "assignees_url": "https://api.github.com/repos/assemble/assemble.io/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/assemble.io/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/assemble.io/tags", + "blobs_url": "https://api.github.com/repos/assemble/assemble.io/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/assemble.io/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/assemble.io/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/assemble.io/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/assemble.io/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/assemble.io/languages", + "stargazers_url": "https://api.github.com/repos/assemble/assemble.io/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/assemble.io/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/assemble.io/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/assemble.io/subscription", + "commits_url": "https://api.github.com/repos/assemble/assemble.io/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/assemble.io/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/assemble.io/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/assemble.io/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/assemble.io/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/assemble.io/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/assemble.io/merges", + "archive_url": "https://api.github.com/repos/assemble/assemble.io/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/assemble.io/downloads", + "issues_url": "https://api.github.com/repos/assemble/assemble.io/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/assemble.io/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/assemble.io/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/assemble.io/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/assemble.io/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/assemble.io/releases{/id}", + "created_at": "2013-06-24T12:27:47Z", + "updated_at": "2014-03-24T13:09:14Z", + "pushed_at": "2014-03-24T13:09:14Z", + "git_url": "git://github.com/assemble/assemble.io.git", + "ssh_url": "git@github.com:assemble/assemble.io.git", + "clone_url": "https://github.com/assemble/assemble.io.git", + "svn_url": "https://github.com/assemble/assemble.io", + "homepage": "http://assemble.io/", + "size": 7267, + "stargazers_count": 19, + "watchers_count": 19, + "language": "CSS", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 25, + "mirror_url": null, + "open_issues_count": 25, + "forks": 25, + "open_issues": 25, + "watchers": 19, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/assemble.io", + "download": "https://github.com/assemble/assemble.io/archive/master.zip" + }, + { + "id": 15350365, + "name": "boilerplate", + "full_name": "assemble/boilerplate", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/boilerplate", + "description": "Assemble boilerplate.", + "fork": false, + "url": "https://github.com/assemble/boilerplate", + "forks_url": "https://api.github.com/repos/assemble/boilerplate/forks", + "keys_url": "https://api.github.com/repos/assemble/boilerplate/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/boilerplate/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/boilerplate/teams", + "hooks_url": "https://api.github.com/repos/assemble/boilerplate/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/boilerplate/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/boilerplate/events", + "assignees_url": "https://api.github.com/repos/assemble/boilerplate/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/boilerplate/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/boilerplate/tags", + "blobs_url": "https://api.github.com/repos/assemble/boilerplate/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/boilerplate/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/boilerplate/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/boilerplate/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/boilerplate/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/boilerplate/languages", + "stargazers_url": "https://api.github.com/repos/assemble/boilerplate/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/boilerplate/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/boilerplate/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/boilerplate/subscription", + "commits_url": "https://api.github.com/repos/assemble/boilerplate/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/boilerplate/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/boilerplate/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/boilerplate/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/boilerplate/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/boilerplate/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/boilerplate/merges", + "archive_url": "https://api.github.com/repos/assemble/boilerplate/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/boilerplate/downloads", + "issues_url": "https://api.github.com/repos/assemble/boilerplate/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/boilerplate/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/boilerplate/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/boilerplate/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/boilerplate/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/boilerplate/releases{/id}", + "created_at": "2013-12-20T23:10:24Z", + "updated_at": "2013-12-22T05:56:54Z", + "pushed_at": "2013-12-22T05:56:53Z", + "git_url": "git://github.com/assemble/boilerplate.git", + "ssh_url": "git@github.com:assemble/boilerplate.git", + "clone_url": "https://github.com/assemble/boilerplate.git", + "svn_url": "https://github.com/assemble/boilerplate", + "homepage": "http://assemble.github.io/boilerplate", + "size": 444, + "stargazers_count": 2, + "watchers_count": 2, + "language": "CSS", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 1, + "forks": 0, + "open_issues": 1, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/boilerplate", + "download": "https://github.com/assemble/boilerplate/archive/master.zip" + }, + { + "id": 11885399, + "name": "boilerplate-bootstrap", + "full_name": "assemble/boilerplate-bootstrap", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/boilerplate-bootstrap", + "description": "Build Bootstrap with Assemble instead of Jekyll. ", + "fork": false, + "url": "https://github.com/assemble/boilerplate-bootstrap", + "forks_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/forks", + "keys_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/teams", + "hooks_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/events", + "assignees_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/tags", + "blobs_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/languages", + "stargazers_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/subscription", + "commits_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/merges", + "archive_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/downloads", + "issues_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/boilerplate-bootstrap/releases{/id}", + "created_at": "2013-08-04T21:34:16Z", + "updated_at": "2014-01-16T20:36:38Z", + "pushed_at": "2013-12-22T15:33:58Z", + "git_url": "git://github.com/assemble/boilerplate-bootstrap.git", + "ssh_url": "git@github.com:assemble/boilerplate-bootstrap.git", + "clone_url": "https://github.com/assemble/boilerplate-bootstrap.git", + "svn_url": "https://github.com/assemble/boilerplate-bootstrap", + "homepage": "http://assemble.github.io/boilerplate-bootstrap", + "size": 2880, + "stargazers_count": 33, + "watchers_count": 33, + "language": "CSS", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 10, + "mirror_url": null, + "open_issues_count": 1, + "forks": 10, + "open_issues": 1, + "watchers": 33, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/boilerplate-bootstrap", + "download": "https://github.com/assemble/boilerplate-bootstrap/archive/master.zip" + }, + { + "id": 11083034, + "name": "boilerplate-gist-blog", + "full_name": "assemble/boilerplate-gist-blog", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/boilerplate-gist-blog", + "description": "Use Assemble to create a blog from GitHub Gists.", + "fork": false, + "url": "https://github.com/assemble/boilerplate-gist-blog", + "forks_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/forks", + "keys_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/teams", + "hooks_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/events", + "assignees_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/tags", + "blobs_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/languages", + "stargazers_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/subscription", + "commits_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/merges", + "archive_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/downloads", + "issues_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/boilerplate-gist-blog/releases{/id}", + "created_at": "2013-07-01T03:01:08Z", + "updated_at": "2013-12-19T17:10:01Z", + "pushed_at": "2013-11-12T02:59:38Z", + "git_url": "git://github.com/assemble/boilerplate-gist-blog.git", + "ssh_url": "git@github.com:assemble/boilerplate-gist-blog.git", + "clone_url": "https://github.com/assemble/boilerplate-gist-blog.git", + "svn_url": "https://github.com/assemble/boilerplate-gist-blog", + "homepage": "http://assemble.github.io/boilerplate-gist-blog/", + "size": 206, + "stargazers_count": 6, + "watchers_count": 6, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 6, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/boilerplate-gist-blog", + "download": "https://github.com/assemble/boilerplate-gist-blog/archive/master.zip" + }, + { + "id": 11965412, + "name": "boilerplate-h5bp", + "full_name": "assemble/boilerplate-h5bp", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/boilerplate-h5bp", + "description": "Assemble boilerplate for launching projects with H5BP (https://github.com/h5bp/boilerplate-h5bp)", + "fork": false, + "url": "https://github.com/assemble/boilerplate-h5bp", + "forks_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/forks", + "keys_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/teams", + "hooks_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/events", + "assignees_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/tags", + "blobs_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/languages", + "stargazers_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/subscription", + "commits_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/merges", + "archive_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/downloads", + "issues_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/boilerplate-h5bp/releases{/id}", + "created_at": "2013-08-08T02:14:36Z", + "updated_at": "2014-03-08T16:20:31Z", + "pushed_at": "2014-03-08T16:20:31Z", + "git_url": "git://github.com/assemble/boilerplate-h5bp.git", + "ssh_url": "git@github.com:assemble/boilerplate-h5bp.git", + "clone_url": "https://github.com/assemble/boilerplate-h5bp.git", + "svn_url": "https://github.com/assemble/boilerplate-h5bp", + "homepage": "", + "size": 144, + "stargazers_count": 3, + "watchers_count": 3, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 3, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/boilerplate-h5bp", + "download": "https://github.com/assemble/boilerplate-h5bp/archive/master.zip" + }, + { + "id": 10885210, + "name": "boilerplate-markdown", + "full_name": "assemble/boilerplate-markdown", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/boilerplate-markdown", + "description": "Use Assemble to generate HTML pages from markdown content. Useful for wikis, gh-pages, documentation and blogs or sites with markdown posts.", + "fork": false, + "url": "https://github.com/assemble/boilerplate-markdown", + "forks_url": "https://api.github.com/repos/assemble/boilerplate-markdown/forks", + "keys_url": "https://api.github.com/repos/assemble/boilerplate-markdown/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/boilerplate-markdown/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/boilerplate-markdown/teams", + "hooks_url": "https://api.github.com/repos/assemble/boilerplate-markdown/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/boilerplate-markdown/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/boilerplate-markdown/events", + "assignees_url": "https://api.github.com/repos/assemble/boilerplate-markdown/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/boilerplate-markdown/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/boilerplate-markdown/tags", + "blobs_url": "https://api.github.com/repos/assemble/boilerplate-markdown/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/boilerplate-markdown/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/boilerplate-markdown/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/boilerplate-markdown/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/boilerplate-markdown/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/boilerplate-markdown/languages", + "stargazers_url": "https://api.github.com/repos/assemble/boilerplate-markdown/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/boilerplate-markdown/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/boilerplate-markdown/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/boilerplate-markdown/subscription", + "commits_url": "https://api.github.com/repos/assemble/boilerplate-markdown/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/boilerplate-markdown/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/boilerplate-markdown/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/boilerplate-markdown/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/boilerplate-markdown/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/boilerplate-markdown/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/boilerplate-markdown/merges", + "archive_url": "https://api.github.com/repos/assemble/boilerplate-markdown/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/boilerplate-markdown/downloads", + "issues_url": "https://api.github.com/repos/assemble/boilerplate-markdown/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/boilerplate-markdown/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/boilerplate-markdown/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/boilerplate-markdown/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/boilerplate-markdown/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/boilerplate-markdown/releases{/id}", + "created_at": "2013-06-23T13:47:16Z", + "updated_at": "2014-02-08T06:54:56Z", + "pushed_at": "2013-09-23T01:08:14Z", + "git_url": "git://github.com/assemble/boilerplate-markdown.git", + "ssh_url": "git@github.com:assemble/boilerplate-markdown.git", + "clone_url": "https://github.com/assemble/boilerplate-markdown.git", + "svn_url": "https://github.com/assemble/boilerplate-markdown", + "homepage": "http://assemble.github.io/boilerplate-markdown", + "size": 673, + "stargazers_count": 8, + "watchers_count": 8, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": false, + "forks_count": 5, + "mirror_url": null, + "open_issues_count": 1, + "forks": 5, + "open_issues": 1, + "watchers": 8, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/boilerplate-markdown", + "download": "https://github.com/assemble/boilerplate-markdown/archive/master.zip" + }, + { + "id": 9438253, + "name": "boilerplate-site", + "full_name": "assemble/boilerplate-site", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/boilerplate-site", + "description": "Demonstrates how to use Assemble to build a site. Includes layouts, pages, partials, and markdown content.", + "fork": false, + "url": "https://github.com/assemble/boilerplate-site", + "forks_url": "https://api.github.com/repos/assemble/boilerplate-site/forks", + "keys_url": "https://api.github.com/repos/assemble/boilerplate-site/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/boilerplate-site/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/boilerplate-site/teams", + "hooks_url": "https://api.github.com/repos/assemble/boilerplate-site/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/boilerplate-site/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/boilerplate-site/events", + "assignees_url": "https://api.github.com/repos/assemble/boilerplate-site/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/boilerplate-site/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/boilerplate-site/tags", + "blobs_url": "https://api.github.com/repos/assemble/boilerplate-site/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/boilerplate-site/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/boilerplate-site/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/boilerplate-site/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/boilerplate-site/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/boilerplate-site/languages", + "stargazers_url": "https://api.github.com/repos/assemble/boilerplate-site/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/boilerplate-site/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/boilerplate-site/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/boilerplate-site/subscription", + "commits_url": "https://api.github.com/repos/assemble/boilerplate-site/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/boilerplate-site/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/boilerplate-site/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/boilerplate-site/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/boilerplate-site/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/boilerplate-site/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/boilerplate-site/merges", + "archive_url": "https://api.github.com/repos/assemble/boilerplate-site/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/boilerplate-site/downloads", + "issues_url": "https://api.github.com/repos/assemble/boilerplate-site/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/boilerplate-site/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/boilerplate-site/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/boilerplate-site/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/boilerplate-site/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/boilerplate-site/releases{/id}", + "created_at": "2013-04-15T01:09:50Z", + "updated_at": "2013-12-12T22:57:14Z", + "pushed_at": "2013-08-17T20:14:55Z", + "git_url": "git://github.com/assemble/boilerplate-site.git", + "ssh_url": "git@github.com:assemble/boilerplate-site.git", + "clone_url": "https://github.com/assemble/boilerplate-site.git", + "svn_url": "https://github.com/assemble/boilerplate-site", + "homepage": "http://assemble.github.io/boilerplate-site/", + "size": 317, + "stargazers_count": 19, + "watchers_count": 19, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 11, + "mirror_url": null, + "open_issues_count": 2, + "forks": 11, + "open_issues": 2, + "watchers": 19, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/boilerplate-site", + "download": "https://github.com/assemble/boilerplate-site/archive/master.zip" + }, + { + "id": 9659057, + "name": "boilerplate-sitemap", + "full_name": "assemble/boilerplate-sitemap", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/boilerplate-sitemap", + "description": "Generate a sitemap with Assemble.", + "fork": false, + "url": "https://github.com/assemble/boilerplate-sitemap", + "forks_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/forks", + "keys_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/teams", + "hooks_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/events", + "assignees_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/tags", + "blobs_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/languages", + "stargazers_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/subscription", + "commits_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/merges", + "archive_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/downloads", + "issues_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/boilerplate-sitemap/releases{/id}", + "created_at": "2013-04-24T22:34:15Z", + "updated_at": "2013-11-23T06:17:25Z", + "pushed_at": "2013-08-18T14:37:03Z", + "git_url": "git://github.com/assemble/boilerplate-sitemap.git", + "ssh_url": "git@github.com:assemble/boilerplate-sitemap.git", + "clone_url": "https://github.com/assemble/boilerplate-sitemap.git", + "svn_url": "https://github.com/assemble/boilerplate-sitemap", + "homepage": "https://github.com/assemble/assemble", + "size": 89, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/boilerplate-sitemap", + "download": "https://github.com/assemble/boilerplate-sitemap/archive/master.zip" + }, + { + "id": 11967245, + "name": "boilerplate-swig", + "full_name": "assemble/boilerplate-swig", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/boilerplate-swig", + "description": "Example of using swig templates with Assemble.", + "fork": false, + "url": "https://github.com/assemble/boilerplate-swig", + "forks_url": "https://api.github.com/repos/assemble/boilerplate-swig/forks", + "keys_url": "https://api.github.com/repos/assemble/boilerplate-swig/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/boilerplate-swig/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/boilerplate-swig/teams", + "hooks_url": "https://api.github.com/repos/assemble/boilerplate-swig/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/boilerplate-swig/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/boilerplate-swig/events", + "assignees_url": "https://api.github.com/repos/assemble/boilerplate-swig/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/boilerplate-swig/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/boilerplate-swig/tags", + "blobs_url": "https://api.github.com/repos/assemble/boilerplate-swig/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/boilerplate-swig/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/boilerplate-swig/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/boilerplate-swig/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/boilerplate-swig/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/boilerplate-swig/languages", + "stargazers_url": "https://api.github.com/repos/assemble/boilerplate-swig/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/boilerplate-swig/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/boilerplate-swig/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/boilerplate-swig/subscription", + "commits_url": "https://api.github.com/repos/assemble/boilerplate-swig/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/boilerplate-swig/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/boilerplate-swig/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/boilerplate-swig/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/boilerplate-swig/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/boilerplate-swig/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/boilerplate-swig/merges", + "archive_url": "https://api.github.com/repos/assemble/boilerplate-swig/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/boilerplate-swig/downloads", + "issues_url": "https://api.github.com/repos/assemble/boilerplate-swig/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/boilerplate-swig/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/boilerplate-swig/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/boilerplate-swig/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/boilerplate-swig/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/boilerplate-swig/releases{/id}", + "created_at": "2013-08-08T04:03:39Z", + "updated_at": "2013-12-02T09:35:10Z", + "pushed_at": "2013-10-29T21:22:48Z", + "git_url": "git://github.com/assemble/boilerplate-swig.git", + "ssh_url": "git@github.com:assemble/boilerplate-swig.git", + "clone_url": "https://github.com/assemble/boilerplate-swig.git", + "svn_url": "https://github.com/assemble/boilerplate-swig", + "homepage": "", + "size": 586, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 2, + "forks": 2, + "open_issues": 2, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/boilerplate-swig", + "download": "https://github.com/assemble/boilerplate-swig/archive/master.zip" + }, + { + "id": 8697068, + "name": "boilerplates", + "full_name": "assemble/boilerplates", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/boilerplates", + "description": "Boilerplates for Assemble. Each boilerplate offers something different: static site generation, h5bp, Bootstrap, swig, markdown, blog generation, etc.", + "fork": false, + "url": "https://github.com/assemble/boilerplates", + "forks_url": "https://api.github.com/repos/assemble/boilerplates/forks", + "keys_url": "https://api.github.com/repos/assemble/boilerplates/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/boilerplates/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/boilerplates/teams", + "hooks_url": "https://api.github.com/repos/assemble/boilerplates/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/boilerplates/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/boilerplates/events", + "assignees_url": "https://api.github.com/repos/assemble/boilerplates/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/boilerplates/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/boilerplates/tags", + "blobs_url": "https://api.github.com/repos/assemble/boilerplates/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/boilerplates/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/boilerplates/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/boilerplates/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/boilerplates/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/boilerplates/languages", + "stargazers_url": "https://api.github.com/repos/assemble/boilerplates/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/boilerplates/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/boilerplates/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/boilerplates/subscription", + "commits_url": "https://api.github.com/repos/assemble/boilerplates/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/boilerplates/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/boilerplates/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/boilerplates/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/boilerplates/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/boilerplates/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/boilerplates/merges", + "archive_url": "https://api.github.com/repos/assemble/boilerplates/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/boilerplates/downloads", + "issues_url": "https://api.github.com/repos/assemble/boilerplates/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/boilerplates/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/boilerplates/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/boilerplates/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/boilerplates/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/boilerplates/releases{/id}", + "created_at": "2013-03-11T05:23:09Z", + "updated_at": "2014-01-08T13:12:52Z", + "pushed_at": "2013-10-29T18:23:33Z", + "git_url": "git://github.com/assemble/boilerplates.git", + "ssh_url": "git@github.com:assemble/boilerplates.git", + "clone_url": "https://github.com/assemble/boilerplates.git", + "svn_url": "https://github.com/assemble/boilerplates", + "homepage": "http://assemble.io/", + "size": 1757, + "stargazers_count": 28, + "watchers_count": 28, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 11, + "forks": 1, + "open_issues": 11, + "watchers": 28, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/boilerplates", + "download": "https://github.com/assemble/boilerplates/archive/master.zip" + }, + { + "id": 12112441, + "name": "buttons", + "full_name": "assemble/buttons", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/buttons", + "description": "Sooo many buttons... is this really necessary?! In reality this project has little to do with buttons. It's an exercise in separation of concerns regarding structure, style, content and data.", + "fork": false, + "url": "https://github.com/assemble/buttons", + "forks_url": "https://api.github.com/repos/assemble/buttons/forks", + "keys_url": "https://api.github.com/repos/assemble/buttons/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/buttons/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/buttons/teams", + "hooks_url": "https://api.github.com/repos/assemble/buttons/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/buttons/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/buttons/events", + "assignees_url": "https://api.github.com/repos/assemble/buttons/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/buttons/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/buttons/tags", + "blobs_url": "https://api.github.com/repos/assemble/buttons/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/buttons/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/buttons/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/buttons/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/buttons/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/buttons/languages", + "stargazers_url": "https://api.github.com/repos/assemble/buttons/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/buttons/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/buttons/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/buttons/subscription", + "commits_url": "https://api.github.com/repos/assemble/buttons/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/buttons/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/buttons/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/buttons/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/buttons/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/buttons/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/buttons/merges", + "archive_url": "https://api.github.com/repos/assemble/buttons/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/buttons/downloads", + "issues_url": "https://api.github.com/repos/assemble/buttons/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/buttons/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/buttons/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/buttons/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/buttons/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/buttons/releases{/id}", + "created_at": "2013-08-14T15:34:23Z", + "updated_at": "2014-01-08T17:08:50Z", + "pushed_at": "2013-09-17T20:40:48Z", + "git_url": "git://github.com/assemble/buttons.git", + "ssh_url": "git@github.com:assemble/buttons.git", + "clone_url": "https://github.com/assemble/buttons.git", + "svn_url": "https://github.com/assemble/buttons", + "homepage": "", + "size": 442, + "stargazers_count": 13, + "watchers_count": 13, + "language": "CSS", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 4, + "mirror_url": null, + "open_issues_count": 1, + "forks": 4, + "open_issues": 1, + "watchers": 13, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/buttons", + "download": "https://github.com/assemble/buttons/archive/master.zip" + }, + { + "id": 16200073, + "name": "config.yml", + "full_name": "assemble/config.yml", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/config.yml", + "description": "Boilerplate configs for Assemble projects.", + "fork": false, + "url": "https://github.com/assemble/config.yml", + "forks_url": "https://api.github.com/repos/assemble/config.yml/forks", + "keys_url": "https://api.github.com/repos/assemble/config.yml/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/config.yml/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/config.yml/teams", + "hooks_url": "https://api.github.com/repos/assemble/config.yml/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/config.yml/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/config.yml/events", + "assignees_url": "https://api.github.com/repos/assemble/config.yml/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/config.yml/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/config.yml/tags", + "blobs_url": "https://api.github.com/repos/assemble/config.yml/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/config.yml/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/config.yml/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/config.yml/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/config.yml/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/config.yml/languages", + "stargazers_url": "https://api.github.com/repos/assemble/config.yml/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/config.yml/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/config.yml/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/config.yml/subscription", + "commits_url": "https://api.github.com/repos/assemble/config.yml/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/config.yml/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/config.yml/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/config.yml/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/config.yml/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/config.yml/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/config.yml/merges", + "archive_url": "https://api.github.com/repos/assemble/config.yml/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/config.yml/downloads", + "issues_url": "https://api.github.com/repos/assemble/config.yml/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/config.yml/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/config.yml/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/config.yml/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/config.yml/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/config.yml/releases{/id}", + "created_at": "2014-01-24T09:21:17Z", + "updated_at": "2014-01-24T09:22:17Z", + "pushed_at": "2014-01-24T09:22:16Z", + "git_url": "git://github.com/assemble/config.yml.git", + "ssh_url": "git@github.com:assemble/config.yml.git", + "clone_url": "https://github.com/assemble/config.yml.git", + "svn_url": "https://github.com/assemble/config.yml", + "homepage": null, + "size": 104, + "stargazers_count": 2, + "watchers_count": 2, + "language": null, + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/config.yml", + "download": "https://github.com/assemble/config.yml/archive/master.zip" + }, + { + "id": 15384694, + "name": "converter", + "full_name": "assemble/converter", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/converter", + "description": "Library to convert to or from JSON, YAML, XML, PLIST or CSV.", + "fork": false, + "url": "https://github.com/assemble/converter", + "forks_url": "https://api.github.com/repos/assemble/converter/forks", + "keys_url": "https://api.github.com/repos/assemble/converter/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/converter/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/converter/teams", + "hooks_url": "https://api.github.com/repos/assemble/converter/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/converter/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/converter/events", + "assignees_url": "https://api.github.com/repos/assemble/converter/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/converter/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/converter/tags", + "blobs_url": "https://api.github.com/repos/assemble/converter/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/converter/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/converter/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/converter/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/converter/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/converter/languages", + "stargazers_url": "https://api.github.com/repos/assemble/converter/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/converter/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/converter/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/converter/subscription", + "commits_url": "https://api.github.com/repos/assemble/converter/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/converter/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/converter/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/converter/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/converter/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/converter/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/converter/merges", + "archive_url": "https://api.github.com/repos/assemble/converter/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/converter/downloads", + "issues_url": "https://api.github.com/repos/assemble/converter/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/converter/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/converter/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/converter/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/converter/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/converter/releases{/id}", + "created_at": "2013-12-23T00:42:47Z", + "updated_at": "2014-01-13T16:09:12Z", + "pushed_at": "2014-01-13T16:09:09Z", + "git_url": "git://github.com/assemble/converter.git", + "ssh_url": "git@github.com:assemble/converter.git", + "clone_url": "https://github.com/assemble/converter.git", + "svn_url": "https://github.com/assemble/converter", + "homepage": null, + "size": 219, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 2, + "forks": 1, + "open_issues": 2, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/converter", + "download": "https://github.com/assemble/converter/archive/master.zip" + }, + { + "id": 16592164, + "name": "dirname", + "full_name": "assemble/dirname", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/dirname", + "description": "Shortcut for making sure you're bound to the directory you want.", + "fork": false, + "url": "https://github.com/assemble/dirname", + "forks_url": "https://api.github.com/repos/assemble/dirname/forks", + "keys_url": "https://api.github.com/repos/assemble/dirname/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/dirname/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/dirname/teams", + "hooks_url": "https://api.github.com/repos/assemble/dirname/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/dirname/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/dirname/events", + "assignees_url": "https://api.github.com/repos/assemble/dirname/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/dirname/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/dirname/tags", + "blobs_url": "https://api.github.com/repos/assemble/dirname/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/dirname/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/dirname/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/dirname/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/dirname/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/dirname/languages", + "stargazers_url": "https://api.github.com/repos/assemble/dirname/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/dirname/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/dirname/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/dirname/subscription", + "commits_url": "https://api.github.com/repos/assemble/dirname/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/dirname/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/dirname/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/dirname/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/dirname/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/dirname/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/dirname/merges", + "archive_url": "https://api.github.com/repos/assemble/dirname/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/dirname/downloads", + "issues_url": "https://api.github.com/repos/assemble/dirname/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/dirname/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/dirname/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/dirname/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/dirname/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/dirname/releases{/id}", + "created_at": "2014-02-06T20:11:01Z", + "updated_at": "2014-02-06T23:08:05Z", + "pushed_at": "2014-02-06T23:08:05Z", + "git_url": "git://github.com/assemble/dirname.git", + "ssh_url": "git@github.com:assemble/dirname.git", + "clone_url": "https://github.com/assemble/dirname.git", + "svn_url": "https://github.com/assemble/dirname", + "homepage": null, + "size": 144, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/dirname", + "download": "https://github.com/assemble/dirname/archive/master.zip" + }, + { + "id": 15919870, + "name": "dovetail", + "full_name": "assemble/dovetail", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/dovetail", + "description": "Make your JavaScript application pluggable!", + "fork": false, + "url": "https://github.com/assemble/dovetail", + "forks_url": "https://api.github.com/repos/assemble/dovetail/forks", + "keys_url": "https://api.github.com/repos/assemble/dovetail/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/dovetail/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/dovetail/teams", + "hooks_url": "https://api.github.com/repos/assemble/dovetail/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/dovetail/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/dovetail/events", + "assignees_url": "https://api.github.com/repos/assemble/dovetail/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/dovetail/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/dovetail/tags", + "blobs_url": "https://api.github.com/repos/assemble/dovetail/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/dovetail/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/dovetail/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/dovetail/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/dovetail/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/dovetail/languages", + "stargazers_url": "https://api.github.com/repos/assemble/dovetail/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/dovetail/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/dovetail/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/dovetail/subscription", + "commits_url": "https://api.github.com/repos/assemble/dovetail/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/dovetail/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/dovetail/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/dovetail/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/dovetail/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/dovetail/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/dovetail/merges", + "archive_url": "https://api.github.com/repos/assemble/dovetail/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/dovetail/downloads", + "issues_url": "https://api.github.com/repos/assemble/dovetail/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/dovetail/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/dovetail/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/dovetail/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/dovetail/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/dovetail/releases{/id}", + "created_at": "2014-01-15T00:06:19Z", + "updated_at": "2014-03-13T03:52:32Z", + "pushed_at": "2014-03-13T03:52:31Z", + "git_url": "git://github.com/assemble/dovetail.git", + "ssh_url": "git@github.com:assemble/dovetail.git", + "clone_url": "https://github.com/assemble/dovetail.git", + "svn_url": "https://github.com/assemble/dovetail", + "homepage": null, + "size": 306, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/dovetail", + "download": "https://github.com/assemble/dovetail/archive/master.zip" + }, + { + "id": 13790386, + "name": "example-pagination", + "full_name": "assemble/example-pagination", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/example-pagination", + "description": "Nothing to see yet, this repo will eventually contain examples and boilerplate code for adding paging and pagination to your projects with Assemble.", + "fork": false, + "url": "https://github.com/assemble/example-pagination", + "forks_url": "https://api.github.com/repos/assemble/example-pagination/forks", + "keys_url": "https://api.github.com/repos/assemble/example-pagination/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/example-pagination/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/example-pagination/teams", + "hooks_url": "https://api.github.com/repos/assemble/example-pagination/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/example-pagination/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/example-pagination/events", + "assignees_url": "https://api.github.com/repos/assemble/example-pagination/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/example-pagination/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/example-pagination/tags", + "blobs_url": "https://api.github.com/repos/assemble/example-pagination/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/example-pagination/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/example-pagination/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/example-pagination/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/example-pagination/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/example-pagination/languages", + "stargazers_url": "https://api.github.com/repos/assemble/example-pagination/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/example-pagination/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/example-pagination/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/example-pagination/subscription", + "commits_url": "https://api.github.com/repos/assemble/example-pagination/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/example-pagination/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/example-pagination/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/example-pagination/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/example-pagination/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/example-pagination/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/example-pagination/merges", + "archive_url": "https://api.github.com/repos/assemble/example-pagination/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/example-pagination/downloads", + "issues_url": "https://api.github.com/repos/assemble/example-pagination/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/example-pagination/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/example-pagination/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/example-pagination/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/example-pagination/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/example-pagination/releases{/id}", + "created_at": "2013-10-23T01:16:52Z", + "updated_at": "2013-10-30T12:21:16Z", + "pushed_at": "2013-10-30T12:21:16Z", + "git_url": "git://github.com/assemble/example-pagination.git", + "ssh_url": "git@github.com:assemble/example-pagination.git", + "clone_url": "https://github.com/assemble/example-pagination.git", + "svn_url": "https://github.com/assemble/example-pagination", + "homepage": "http://assemble.github.io/example-pagination", + "size": 799, + "stargazers_count": 4, + "watchers_count": 4, + "language": "CSS", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/example-pagination", + "download": "https://github.com/assemble/example-pagination/archive/master.zip" + }, + { + "id": 15456211, + "name": "expand", + "full_name": "assemble/expand", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/expand", + "description": "Expand lodash templates into objects.", + "fork": false, + "url": "https://github.com/assemble/expand", + "forks_url": "https://api.github.com/repos/assemble/expand/forks", + "keys_url": "https://api.github.com/repos/assemble/expand/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/expand/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/expand/teams", + "hooks_url": "https://api.github.com/repos/assemble/expand/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/expand/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/expand/events", + "assignees_url": "https://api.github.com/repos/assemble/expand/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/expand/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/expand/tags", + "blobs_url": "https://api.github.com/repos/assemble/expand/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/expand/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/expand/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/expand/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/expand/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/expand/languages", + "stargazers_url": "https://api.github.com/repos/assemble/expand/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/expand/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/expand/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/expand/subscription", + "commits_url": "https://api.github.com/repos/assemble/expand/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/expand/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/expand/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/expand/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/expand/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/expand/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/expand/merges", + "archive_url": "https://api.github.com/repos/assemble/expand/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/expand/downloads", + "issues_url": "https://api.github.com/repos/assemble/expand/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/expand/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/expand/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/expand/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/expand/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/expand/releases{/id}", + "created_at": "2013-12-26T16:33:44Z", + "updated_at": "2013-12-27T02:33:27Z", + "pushed_at": "2013-12-26T16:34:23Z", + "git_url": "git://github.com/assemble/expand.git", + "ssh_url": "git@github.com:assemble/expand.git", + "clone_url": "https://github.com/assemble/expand.git", + "svn_url": "https://github.com/assemble/expand", + "homepage": "", + "size": 104, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/expand", + "download": "https://github.com/assemble/expand/archive/master.zip" + }, + { + "id": 15504402, + "name": "fixture", + "full_name": "assemble/fixture", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/fixture", + "description": "Fixtures. Cannon fodder for tests.", + "fork": false, + "url": "https://github.com/assemble/fixture", + "forks_url": "https://api.github.com/repos/assemble/fixture/forks", + "keys_url": "https://api.github.com/repos/assemble/fixture/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/fixture/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/fixture/teams", + "hooks_url": "https://api.github.com/repos/assemble/fixture/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/fixture/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/fixture/events", + "assignees_url": "https://api.github.com/repos/assemble/fixture/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/fixture/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/fixture/tags", + "blobs_url": "https://api.github.com/repos/assemble/fixture/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/fixture/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/fixture/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/fixture/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/fixture/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/fixture/languages", + "stargazers_url": "https://api.github.com/repos/assemble/fixture/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/fixture/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/fixture/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/fixture/subscription", + "commits_url": "https://api.github.com/repos/assemble/fixture/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/fixture/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/fixture/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/fixture/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/fixture/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/fixture/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/fixture/merges", + "archive_url": "https://api.github.com/repos/assemble/fixture/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/fixture/downloads", + "issues_url": "https://api.github.com/repos/assemble/fixture/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/fixture/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/fixture/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/fixture/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/fixture/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/fixture/releases{/id}", + "created_at": "2013-12-29T05:59:47Z", + "updated_at": "2014-01-25T18:19:34Z", + "pushed_at": "2013-12-29T06:00:08Z", + "git_url": "git://github.com/assemble/fixture.git", + "ssh_url": "git@github.com:assemble/fixture.git", + "clone_url": "https://github.com/assemble/fixture.git", + "svn_url": "https://github.com/assemble/fixture", + "homepage": null, + "size": 392, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/fixture", + "download": "https://github.com/assemble/fixture/archive/master.zip" + }, + { + "id": 15879668, + "name": "fs-utils", + "full_name": "assemble/fs-utils", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/fs-utils", + "description": "Generalized file and path utils for Node.js projects.", + "fork": false, + "url": "https://github.com/assemble/fs-utils", + "forks_url": "https://api.github.com/repos/assemble/fs-utils/forks", + "keys_url": "https://api.github.com/repos/assemble/fs-utils/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/fs-utils/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/fs-utils/teams", + "hooks_url": "https://api.github.com/repos/assemble/fs-utils/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/fs-utils/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/fs-utils/events", + "assignees_url": "https://api.github.com/repos/assemble/fs-utils/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/fs-utils/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/fs-utils/tags", + "blobs_url": "https://api.github.com/repos/assemble/fs-utils/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/fs-utils/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/fs-utils/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/fs-utils/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/fs-utils/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/fs-utils/languages", + "stargazers_url": "https://api.github.com/repos/assemble/fs-utils/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/fs-utils/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/fs-utils/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/fs-utils/subscription", + "commits_url": "https://api.github.com/repos/assemble/fs-utils/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/fs-utils/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/fs-utils/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/fs-utils/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/fs-utils/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/fs-utils/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/fs-utils/merges", + "archive_url": "https://api.github.com/repos/assemble/fs-utils/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/fs-utils/downloads", + "issues_url": "https://api.github.com/repos/assemble/fs-utils/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/fs-utils/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/fs-utils/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/fs-utils/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/fs-utils/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/fs-utils/releases{/id}", + "created_at": "2014-01-13T19:49:15Z", + "updated_at": "2014-03-25T07:39:36Z", + "pushed_at": "2014-03-25T07:39:38Z", + "git_url": "git://github.com/assemble/fs-utils.git", + "ssh_url": "git@github.com:assemble/fs-utils.git", + "clone_url": "https://github.com/assemble/fs-utils.git", + "svn_url": "https://github.com/assemble/fs-utils", + "homepage": "", + "size": 549, + "stargazers_count": 7, + "watchers_count": 7, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 7, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/fs-utils", + "download": "https://github.com/assemble/fs-utils/archive/master.zip" + }, + { + "id": 9589732, + "name": "generator-assemble", + "full_name": "assemble/generator-assemble", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/generator-assemble", + "description": "Yeoman generator for Assemble, the static site generator built on Grunt.js. Kickstart new Assemble projects in just a few seconds, including templates, data, layouts, and a theme.", + "fork": false, + "url": "https://github.com/assemble/generator-assemble", + "forks_url": "https://api.github.com/repos/assemble/generator-assemble/forks", + "keys_url": "https://api.github.com/repos/assemble/generator-assemble/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/generator-assemble/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/generator-assemble/teams", + "hooks_url": "https://api.github.com/repos/assemble/generator-assemble/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/generator-assemble/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/generator-assemble/events", + "assignees_url": "https://api.github.com/repos/assemble/generator-assemble/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/generator-assemble/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/generator-assemble/tags", + "blobs_url": "https://api.github.com/repos/assemble/generator-assemble/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/generator-assemble/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/generator-assemble/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/generator-assemble/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/generator-assemble/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/generator-assemble/languages", + "stargazers_url": "https://api.github.com/repos/assemble/generator-assemble/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/generator-assemble/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/generator-assemble/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/generator-assemble/subscription", + "commits_url": "https://api.github.com/repos/assemble/generator-assemble/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/generator-assemble/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/generator-assemble/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/generator-assemble/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/generator-assemble/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/generator-assemble/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/generator-assemble/merges", + "archive_url": "https://api.github.com/repos/assemble/generator-assemble/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/generator-assemble/downloads", + "issues_url": "https://api.github.com/repos/assemble/generator-assemble/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/generator-assemble/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/generator-assemble/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/generator-assemble/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/generator-assemble/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/generator-assemble/releases{/id}", + "created_at": "2013-04-22T02:56:41Z", + "updated_at": "2014-03-22T11:10:52Z", + "pushed_at": "2014-03-22T11:10:52Z", + "git_url": "git://github.com/assemble/generator-assemble.git", + "ssh_url": "git@github.com:assemble/generator-assemble.git", + "clone_url": "https://github.com/assemble/generator-assemble.git", + "svn_url": "https://github.com/assemble/generator-assemble", + "homepage": "http://assemble.io/docs/Resources.html", + "size": 1626, + "stargazers_count": 35, + "watchers_count": 35, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 14, + "mirror_url": null, + "open_issues_count": 3, + "forks": 14, + "open_issues": 3, + "watchers": 35, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/generator-assemble", + "download": "https://github.com/assemble/generator-assemble/archive/master.zip" + }, + { + "id": 15589367, + "name": "generator-helper", + "full_name": "assemble/generator-helper", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/generator-helper", + "description": "Use yeoman to generate a handlebars helper that can easily be used with Assemble.", + "fork": false, + "url": "https://github.com/assemble/generator-helper", + "forks_url": "https://api.github.com/repos/assemble/generator-helper/forks", + "keys_url": "https://api.github.com/repos/assemble/generator-helper/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/generator-helper/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/generator-helper/teams", + "hooks_url": "https://api.github.com/repos/assemble/generator-helper/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/generator-helper/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/generator-helper/events", + "assignees_url": "https://api.github.com/repos/assemble/generator-helper/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/generator-helper/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/generator-helper/tags", + "blobs_url": "https://api.github.com/repos/assemble/generator-helper/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/generator-helper/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/generator-helper/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/generator-helper/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/generator-helper/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/generator-helper/languages", + "stargazers_url": "https://api.github.com/repos/assemble/generator-helper/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/generator-helper/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/generator-helper/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/generator-helper/subscription", + "commits_url": "https://api.github.com/repos/assemble/generator-helper/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/generator-helper/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/generator-helper/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/generator-helper/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/generator-helper/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/generator-helper/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/generator-helper/merges", + "archive_url": "https://api.github.com/repos/assemble/generator-helper/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/generator-helper/downloads", + "issues_url": "https://api.github.com/repos/assemble/generator-helper/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/generator-helper/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/generator-helper/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/generator-helper/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/generator-helper/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/generator-helper/releases{/id}", + "created_at": "2014-01-02T17:27:49Z", + "updated_at": "2014-03-07T14:33:05Z", + "pushed_at": "2014-03-07T14:33:05Z", + "git_url": "git://github.com/assemble/generator-helper.git", + "ssh_url": "git@github.com:assemble/generator-helper.git", + "clone_url": "https://github.com/assemble/generator-helper.git", + "svn_url": "https://github.com/assemble/generator-helper", + "homepage": "", + "size": 297, + "stargazers_count": 3, + "watchers_count": 3, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 3, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/generator-helper", + "download": "https://github.com/assemble/generator-helper/archive/master.zip" + }, + { + "id": 15593296, + "name": "generator-plugin", + "full_name": "assemble/generator-plugin", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/generator-plugin", + "description": "Yeoman generator for Assemble plugins. ", + "fork": false, + "url": "https://github.com/assemble/generator-plugin", + "forks_url": "https://api.github.com/repos/assemble/generator-plugin/forks", + "keys_url": "https://api.github.com/repos/assemble/generator-plugin/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/generator-plugin/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/generator-plugin/teams", + "hooks_url": "https://api.github.com/repos/assemble/generator-plugin/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/generator-plugin/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/generator-plugin/events", + "assignees_url": "https://api.github.com/repos/assemble/generator-plugin/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/generator-plugin/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/generator-plugin/tags", + "blobs_url": "https://api.github.com/repos/assemble/generator-plugin/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/generator-plugin/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/generator-plugin/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/generator-plugin/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/generator-plugin/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/generator-plugin/languages", + "stargazers_url": "https://api.github.com/repos/assemble/generator-plugin/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/generator-plugin/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/generator-plugin/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/generator-plugin/subscription", + "commits_url": "https://api.github.com/repos/assemble/generator-plugin/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/generator-plugin/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/generator-plugin/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/generator-plugin/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/generator-plugin/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/generator-plugin/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/generator-plugin/merges", + "archive_url": "https://api.github.com/repos/assemble/generator-plugin/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/generator-plugin/downloads", + "issues_url": "https://api.github.com/repos/assemble/generator-plugin/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/generator-plugin/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/generator-plugin/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/generator-plugin/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/generator-plugin/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/generator-plugin/releases{/id}", + "created_at": "2014-01-02T20:42:10Z", + "updated_at": "2014-03-06T16:36:46Z", + "pushed_at": "2014-03-06T16:36:44Z", + "git_url": "git://github.com/assemble/generator-plugin.git", + "ssh_url": "git@github.com:assemble/generator-plugin.git", + "clone_url": "https://github.com/assemble/generator-plugin.git", + "svn_url": "https://github.com/assemble/generator-plugin", + "homepage": "http://assemble.io/", + "size": 280, + "stargazers_count": 3, + "watchers_count": 3, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 3, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/generator-plugin", + "download": "https://github.com/assemble/generator-plugin/archive/master.zip" + }, + { + "id": 17993126, + "name": "generator-verb", + "full_name": "assemble/generator-verb", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/generator-verb", + "description": "Kickstart documentation for any project! This is the official Yeoman generator for Verb, a zero-configuration markdown documentation generator that is extremely easy to use and extend.", + "fork": false, + "url": "https://github.com/assemble/generator-verb", + "forks_url": "https://api.github.com/repos/assemble/generator-verb/forks", + "keys_url": "https://api.github.com/repos/assemble/generator-verb/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/generator-verb/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/generator-verb/teams", + "hooks_url": "https://api.github.com/repos/assemble/generator-verb/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/generator-verb/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/generator-verb/events", + "assignees_url": "https://api.github.com/repos/assemble/generator-verb/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/generator-verb/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/generator-verb/tags", + "blobs_url": "https://api.github.com/repos/assemble/generator-verb/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/generator-verb/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/generator-verb/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/generator-verb/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/generator-verb/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/generator-verb/languages", + "stargazers_url": "https://api.github.com/repos/assemble/generator-verb/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/generator-verb/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/generator-verb/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/generator-verb/subscription", + "commits_url": "https://api.github.com/repos/assemble/generator-verb/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/generator-verb/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/generator-verb/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/generator-verb/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/generator-verb/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/generator-verb/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/generator-verb/merges", + "archive_url": "https://api.github.com/repos/assemble/generator-verb/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/generator-verb/downloads", + "issues_url": "https://api.github.com/repos/assemble/generator-verb/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/generator-verb/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/generator-verb/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/generator-verb/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/generator-verb/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/generator-verb/releases{/id}", + "created_at": "2014-03-21T20:19:15Z", + "updated_at": "2014-03-23T20:54:05Z", + "pushed_at": "2014-03-23T20:54:06Z", + "git_url": "git://github.com/assemble/generator-verb.git", + "ssh_url": "git@github.com:assemble/generator-verb.git", + "clone_url": "https://github.com/assemble/generator-verb.git", + "svn_url": "https://github.com/assemble/generator-verb", + "homepage": "", + "size": 0, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/generator-verb", + "download": "https://github.com/assemble/generator-verb/archive/master.zip" + }, + { + "id": 16299156, + "name": "gray-matter", + "full_name": "assemble/gray-matter", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/gray-matter", + "description": "A simple to use YAML, JSON or Coffee Front-Matter parsing and extraction library, with options to set custom delimiters.", + "fork": false, + "url": "https://github.com/assemble/gray-matter", + "forks_url": "https://api.github.com/repos/assemble/gray-matter/forks", + "keys_url": "https://api.github.com/repos/assemble/gray-matter/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/gray-matter/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/gray-matter/teams", + "hooks_url": "https://api.github.com/repos/assemble/gray-matter/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/gray-matter/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/gray-matter/events", + "assignees_url": "https://api.github.com/repos/assemble/gray-matter/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/gray-matter/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/gray-matter/tags", + "blobs_url": "https://api.github.com/repos/assemble/gray-matter/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/gray-matter/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/gray-matter/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/gray-matter/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/gray-matter/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/gray-matter/languages", + "stargazers_url": "https://api.github.com/repos/assemble/gray-matter/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/gray-matter/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/gray-matter/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/gray-matter/subscription", + "commits_url": "https://api.github.com/repos/assemble/gray-matter/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/gray-matter/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/gray-matter/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/gray-matter/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/gray-matter/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/gray-matter/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/gray-matter/merges", + "archive_url": "https://api.github.com/repos/assemble/gray-matter/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/gray-matter/downloads", + "issues_url": "https://api.github.com/repos/assemble/gray-matter/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/gray-matter/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/gray-matter/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/gray-matter/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/gray-matter/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/gray-matter/releases{/id}", + "created_at": "2014-01-28T01:45:48Z", + "updated_at": "2014-03-25T11:32:57Z", + "pushed_at": "2014-03-25T11:32:56Z", + "git_url": "git://github.com/assemble/gray-matter.git", + "ssh_url": "git@github.com:assemble/gray-matter.git", + "clone_url": "https://github.com/assemble/gray-matter.git", + "svn_url": "https://github.com/assemble/gray-matter", + "homepage": null, + "size": 339, + "stargazers_count": 7, + "watchers_count": 7, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 7, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/gray-matter", + "download": "https://github.com/assemble/gray-matter/archive/master.zip" + }, + { + "id": 10588651, + "name": "grunt-assemble", + "full_name": "assemble/grunt-assemble", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-assemble", + "description": "Not ready for use. See https://github.com/assemble/assemble for current version. Static site generator for Grunt.js, Yeoman and Node.js. Used by Zurb Foundation, Zurb Ink, H5BP/Effeckt, Topcoat, Web Experience Toolkit, and hundreds of other projects to build sites, themes, components, documentation, blogs and gh-pages. Pull requests welcome, stars appreciated!", + "fork": false, + "url": "https://github.com/assemble/grunt-assemble", + "forks_url": "https://api.github.com/repos/assemble/grunt-assemble/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-assemble/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-assemble/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-assemble/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-assemble/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-assemble/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-assemble/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-assemble/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-assemble/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-assemble/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-assemble/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-assemble/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-assemble/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-assemble/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-assemble/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-assemble/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-assemble/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-assemble/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-assemble/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-assemble/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-assemble/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-assemble/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-assemble/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-assemble/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-assemble/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-assemble/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-assemble/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-assemble/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-assemble/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-assemble/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-assemble/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-assemble/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-assemble/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-assemble/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-assemble/releases{/id}", + "created_at": "2013-06-09T20:23:09Z", + "updated_at": "2014-03-17T15:13:36Z", + "pushed_at": "2014-03-17T15:13:33Z", + "git_url": "git://github.com/assemble/grunt-assemble.git", + "ssh_url": "git@github.com:assemble/grunt-assemble.git", + "clone_url": "https://github.com/assemble/grunt-assemble.git", + "svn_url": "https://github.com/assemble/grunt-assemble", + "homepage": "https://assemble.io", + "size": 495, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-assemble", + "download": "https://github.com/assemble/grunt-assemble/archive/master.zip" + }, + { + "id": 11125522, + "name": "grunt-convert", + "full_name": "assemble/grunt-convert", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-convert", + "description": "Grunt task to convert to or from JSON, YAML, XML, PLIST or CSV.", + "fork": false, + "url": "https://github.com/assemble/grunt-convert", + "forks_url": "https://api.github.com/repos/assemble/grunt-convert/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-convert/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-convert/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-convert/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-convert/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-convert/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-convert/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-convert/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-convert/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-convert/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-convert/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-convert/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-convert/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-convert/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-convert/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-convert/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-convert/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-convert/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-convert/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-convert/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-convert/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-convert/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-convert/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-convert/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-convert/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-convert/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-convert/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-convert/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-convert/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-convert/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-convert/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-convert/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-convert/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-convert/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-convert/releases{/id}", + "created_at": "2013-07-02T13:34:35Z", + "updated_at": "2014-03-11T11:24:37Z", + "pushed_at": "2014-03-11T11:24:37Z", + "git_url": "git://github.com/assemble/grunt-convert.git", + "ssh_url": "git@github.com:assemble/grunt-convert.git", + "clone_url": "https://github.com/assemble/grunt-convert.git", + "svn_url": "https://github.com/assemble/grunt-convert", + "homepage": "", + "size": 281, + "stargazers_count": 38, + "watchers_count": 38, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 7, + "mirror_url": null, + "open_issues_count": 5, + "forks": 7, + "open_issues": 5, + "watchers": 38, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-convert", + "download": "https://github.com/assemble/grunt-convert/archive/master.zip" + }, + { + "id": 11438566, + "name": "grunt-data", + "full_name": "assemble/grunt-data", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-data", + "description": "Grunt plugin for manipulating data.", + "fork": false, + "url": "https://github.com/assemble/grunt-data", + "forks_url": "https://api.github.com/repos/assemble/grunt-data/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-data/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-data/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-data/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-data/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-data/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-data/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-data/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-data/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-data/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-data/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-data/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-data/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-data/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-data/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-data/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-data/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-data/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-data/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-data/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-data/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-data/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-data/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-data/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-data/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-data/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-data/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-data/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-data/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-data/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-data/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-data/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-data/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-data/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-data/releases{/id}", + "created_at": "2013-07-16T02:13:55Z", + "updated_at": "2013-10-21T14:36:07Z", + "pushed_at": "2013-08-24T17:44:20Z", + "git_url": "git://github.com/assemble/grunt-data.git", + "ssh_url": "git@github.com:assemble/grunt-data.git", + "clone_url": "https://github.com/assemble/grunt-data.git", + "svn_url": "https://github.com/assemble/grunt-data", + "homepage": null, + "size": 112, + "stargazers_count": 0, + "watchers_count": 0, + "language": null, + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-data", + "download": "https://github.com/assemble/grunt-data/archive/master.zip" + }, + { + "id": 11809010, + "name": "grunt-firebase", + "full_name": "assemble/grunt-firebase", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-firebase", + "description": "Grunt task for updating firebase data.", + "fork": false, + "url": "https://github.com/assemble/grunt-firebase", + "forks_url": "https://api.github.com/repos/assemble/grunt-firebase/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-firebase/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-firebase/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-firebase/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-firebase/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-firebase/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-firebase/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-firebase/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-firebase/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-firebase/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-firebase/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-firebase/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-firebase/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-firebase/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-firebase/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-firebase/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-firebase/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-firebase/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-firebase/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-firebase/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-firebase/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-firebase/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-firebase/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-firebase/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-firebase/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-firebase/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-firebase/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-firebase/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-firebase/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-firebase/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-firebase/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-firebase/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-firebase/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-firebase/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-firebase/releases{/id}", + "created_at": "2013-08-01T05:40:59Z", + "updated_at": "2014-01-06T20:49:51Z", + "pushed_at": "2013-09-03T04:05:18Z", + "git_url": "git://github.com/assemble/grunt-firebase.git", + "ssh_url": "git@github.com:assemble/grunt-firebase.git", + "clone_url": "https://github.com/assemble/grunt-firebase.git", + "svn_url": "https://github.com/assemble/grunt-firebase", + "homepage": "https://github.com/assemble/grunt-firebase", + "size": 116, + "stargazers_count": 15, + "watchers_count": 15, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 15, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-firebase", + "download": "https://github.com/assemble/grunt-firebase/archive/master.zip" + }, + { + "id": 9718601, + "name": "grunt-github-api", + "full_name": "assemble/grunt-github-api", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-github-api", + "description": "Grunt plugin used to query the Github API and save the returned JSON files locally.", + "fork": false, + "url": "https://github.com/assemble/grunt-github-api", + "forks_url": "https://api.github.com/repos/assemble/grunt-github-api/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-github-api/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-github-api/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-github-api/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-github-api/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-github-api/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-github-api/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-github-api/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-github-api/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-github-api/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-github-api/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-github-api/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-github-api/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-github-api/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-github-api/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-github-api/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-github-api/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-github-api/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-github-api/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-github-api/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-github-api/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-github-api/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-github-api/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-github-api/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-github-api/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-github-api/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-github-api/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-github-api/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-github-api/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-github-api/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-github-api/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-github-api/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-github-api/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-github-api/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-github-api/releases{/id}", + "created_at": "2013-04-27T17:40:03Z", + "updated_at": "2013-12-22T19:52:15Z", + "pushed_at": "2013-10-30T01:20:38Z", + "git_url": "git://github.com/assemble/grunt-github-api.git", + "ssh_url": "git@github.com:assemble/grunt-github-api.git", + "clone_url": "https://github.com/assemble/grunt-github-api.git", + "svn_url": "https://github.com/assemble/grunt-github-api", + "homepage": null, + "size": 287, + "stargazers_count": 13, + "watchers_count": 13, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 1, + "forks": 2, + "open_issues": 1, + "watchers": 13, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-github-api", + "download": "https://github.com/assemble/grunt-github-api/archive/master.zip" + }, + { + "id": 12446263, + "name": "grunt-github-api-example", + "full_name": "assemble/grunt-github-api-example", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-github-api-example", + "description": "This is an example repository for:", + "fork": false, + "url": "https://github.com/assemble/grunt-github-api-example", + "forks_url": "https://api.github.com/repos/assemble/grunt-github-api-example/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-github-api-example/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-github-api-example/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-github-api-example/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-github-api-example/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-github-api-example/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-github-api-example/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-github-api-example/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-github-api-example/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-github-api-example/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-github-api-example/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-github-api-example/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-github-api-example/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-github-api-example/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-github-api-example/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-github-api-example/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-github-api-example/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-github-api-example/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-github-api-example/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-github-api-example/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-github-api-example/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-github-api-example/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-github-api-example/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-github-api-example/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-github-api-example/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-github-api-example/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-github-api-example/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-github-api-example/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-github-api-example/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-github-api-example/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-github-api-example/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-github-api-example/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-github-api-example/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-github-api-example/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-github-api-example/releases{/id}", + "created_at": "2013-08-28T22:44:05Z", + "updated_at": "2014-01-31T12:27:40Z", + "pushed_at": "2013-09-22T20:10:50Z", + "git_url": "git://github.com/assemble/grunt-github-api-example.git", + "ssh_url": "git@github.com:assemble/grunt-github-api-example.git", + "clone_url": "https://github.com/assemble/grunt-github-api-example.git", + "svn_url": "https://github.com/assemble/grunt-github-api-example", + "homepage": null, + "size": 108, + "stargazers_count": 1, + "watchers_count": 1, + "language": null, + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 3, + "forks": 0, + "open_issues": 3, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-github-api-example", + "download": "https://github.com/assemble/grunt-github-api-example/archive/master.zip" + }, + { + "id": 9508441, + "name": "grunt-init-assemble", + "full_name": "assemble/grunt-init-assemble", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-init-assemble", + "description": "Grunt init template for Assemble, the static site generator built on Grunt.js. Kickstart new Assemble projects in just a few seconds, including templates, data, layouts, and a theme.", + "fork": false, + "url": "https://github.com/assemble/grunt-init-assemble", + "forks_url": "https://api.github.com/repos/assemble/grunt-init-assemble/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-init-assemble/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-init-assemble/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-init-assemble/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-init-assemble/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-init-assemble/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-init-assemble/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-init-assemble/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-init-assemble/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-init-assemble/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-init-assemble/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-init-assemble/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-init-assemble/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-init-assemble/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-init-assemble/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-init-assemble/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-init-assemble/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-init-assemble/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-init-assemble/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-init-assemble/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-init-assemble/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-init-assemble/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-init-assemble/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-init-assemble/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-init-assemble/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-init-assemble/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-init-assemble/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-init-assemble/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-init-assemble/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-init-assemble/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-init-assemble/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-init-assemble/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-init-assemble/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-init-assemble/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-init-assemble/releases{/id}", + "created_at": "2013-04-17T21:58:35Z", + "updated_at": "2014-01-17T08:27:10Z", + "pushed_at": "2014-01-14T07:33:35Z", + "git_url": "git://github.com/assemble/grunt-init-assemble.git", + "ssh_url": "git@github.com:assemble/grunt-init-assemble.git", + "clone_url": "https://github.com/assemble/grunt-init-assemble.git", + "svn_url": "https://github.com/assemble/grunt-init-assemble", + "homepage": "http://assemble.io/docs/Resources.html", + "size": 866, + "stargazers_count": 25, + "watchers_count": 25, + "language": "CSS", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 6, + "mirror_url": null, + "open_issues_count": 1, + "forks": 6, + "open_issues": 1, + "watchers": 25, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-init-assemble", + "download": "https://github.com/assemble/grunt-init-assemble/archive/master.zip" + }, + { + "id": 13550699, + "name": "grunt-init-assemble-plugin", + "full_name": "assemble/grunt-init-assemble-plugin", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-init-assemble-plugin", + "description": "Generate a plugin for Assemble.", + "fork": false, + "url": "https://github.com/assemble/grunt-init-assemble-plugin", + "forks_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-init-assemble-plugin/releases{/id}", + "created_at": "2013-10-14T02:16:33Z", + "updated_at": "2013-10-14T02:16:33Z", + "pushed_at": "2013-10-14T02:16:33Z", + "git_url": "git://github.com/assemble/grunt-init-assemble-plugin.git", + "ssh_url": "git@github.com:assemble/grunt-init-assemble-plugin.git", + "clone_url": "https://github.com/assemble/grunt-init-assemble-plugin.git", + "svn_url": "https://github.com/assemble/grunt-init-assemble-plugin", + "homepage": null, + "size": 56, + "stargazers_count": 0, + "watchers_count": 0, + "language": null, + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-init-assemble-plugin", + "download": "https://github.com/assemble/grunt-init-assemble-plugin/archive/master.zip" + }, + { + "id": 12430934, + "name": "grunt-init-basic", + "full_name": "assemble/grunt-init-basic", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-init-basic", + "description": "grunt-init template for a very basic project. includes nodeunit tests, jshint, watch, clean, and assemble for converting readme to a simple gh-pages index page.", + "fork": false, + "url": "https://github.com/assemble/grunt-init-basic", + "forks_url": "https://api.github.com/repos/assemble/grunt-init-basic/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-init-basic/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-init-basic/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-init-basic/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-init-basic/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-init-basic/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-init-basic/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-init-basic/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-init-basic/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-init-basic/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-init-basic/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-init-basic/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-init-basic/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-init-basic/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-init-basic/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-init-basic/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-init-basic/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-init-basic/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-init-basic/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-init-basic/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-init-basic/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-init-basic/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-init-basic/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-init-basic/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-init-basic/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-init-basic/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-init-basic/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-init-basic/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-init-basic/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-init-basic/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-init-basic/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-init-basic/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-init-basic/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-init-basic/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-init-basic/releases{/id}", + "created_at": "2013-08-28T10:31:36Z", + "updated_at": "2013-12-26T19:27:19Z", + "pushed_at": "2013-08-28T10:53:34Z", + "git_url": "git://github.com/assemble/grunt-init-basic.git", + "ssh_url": "git@github.com:assemble/grunt-init-basic.git", + "clone_url": "https://github.com/assemble/grunt-init-basic.git", + "svn_url": "https://github.com/assemble/grunt-init-basic", + "homepage": null, + "size": 58, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-init-basic", + "download": "https://github.com/assemble/grunt-init-basic/archive/master.zip" + }, + { + "id": 11409081, + "name": "grunt-init-ghpages", + "full_name": "assemble/grunt-init-ghpages", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-init-ghpages", + "description": "Quickly build gh-pages documentation from a project README using Grunt.js and Assemble, a Node.js alternative to Jekyll.", + "fork": false, + "url": "https://github.com/assemble/grunt-init-ghpages", + "forks_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-init-ghpages/releases{/id}", + "created_at": "2013-07-14T20:45:05Z", + "updated_at": "2013-12-31T21:15:09Z", + "pushed_at": "2013-07-14T20:57:12Z", + "git_url": "git://github.com/assemble/grunt-init-ghpages.git", + "ssh_url": "git@github.com:assemble/grunt-init-ghpages.git", + "clone_url": "https://github.com/assemble/grunt-init-ghpages.git", + "svn_url": "https://github.com/assemble/grunt-init-ghpages", + "homepage": null, + "size": 552, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-init-ghpages", + "download": "https://github.com/assemble/grunt-init-ghpages/archive/master.zip" + }, + { + "id": 11077752, + "name": "grunt-init-helper", + "full_name": "assemble/grunt-init-helper", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-init-helper", + "description": "Grunt init template for creating Assemble helpers.", + "fork": false, + "url": "https://github.com/assemble/grunt-init-helper", + "forks_url": "https://api.github.com/repos/assemble/grunt-init-helper/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-init-helper/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-init-helper/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-init-helper/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-init-helper/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-init-helper/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-init-helper/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-init-helper/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-init-helper/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-init-helper/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-init-helper/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-init-helper/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-init-helper/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-init-helper/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-init-helper/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-init-helper/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-init-helper/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-init-helper/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-init-helper/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-init-helper/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-init-helper/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-init-helper/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-init-helper/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-init-helper/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-init-helper/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-init-helper/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-init-helper/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-init-helper/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-init-helper/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-init-helper/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-init-helper/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-init-helper/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-init-helper/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-init-helper/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-init-helper/releases{/id}", + "created_at": "2013-06-30T21:08:38Z", + "updated_at": "2014-03-01T02:06:25Z", + "pushed_at": "2013-09-23T00:38:37Z", + "git_url": "git://github.com/assemble/grunt-init-helper.git", + "ssh_url": "git@github.com:assemble/grunt-init-helper.git", + "clone_url": "https://github.com/assemble/grunt-init-helper.git", + "svn_url": "https://github.com/assemble/grunt-init-helper", + "homepage": null, + "size": 196, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-init-helper", + "download": "https://github.com/assemble/grunt-init-helper/archive/master.zip" + }, + { + "id": 13695810, + "name": "grunt-matter", + "full_name": "assemble/grunt-matter", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-matter", + "description": "Add, extend, sort, and strip YAML front matter. Also has options for populating randomized mock data.", + "fork": false, + "url": "https://github.com/assemble/grunt-matter", + "forks_url": "https://api.github.com/repos/assemble/grunt-matter/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-matter/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-matter/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-matter/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-matter/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-matter/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-matter/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-matter/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-matter/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-matter/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-matter/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-matter/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-matter/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-matter/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-matter/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-matter/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-matter/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-matter/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-matter/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-matter/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-matter/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-matter/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-matter/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-matter/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-matter/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-matter/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-matter/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-matter/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-matter/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-matter/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-matter/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-matter/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-matter/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-matter/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-matter/releases{/id}", + "created_at": "2013-10-19T05:04:31Z", + "updated_at": "2013-11-01T21:04:57Z", + "pushed_at": "2013-11-01T21:04:56Z", + "git_url": "git://github.com/assemble/grunt-matter.git", + "ssh_url": "git@github.com:assemble/grunt-matter.git", + "clone_url": "https://github.com/assemble/grunt-matter.git", + "svn_url": "https://github.com/assemble/grunt-matter", + "homepage": null, + "size": 118, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 1, + "forks": 0, + "open_issues": 1, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-matter", + "download": "https://github.com/assemble/grunt-matter/archive/master.zip" + }, + { + "id": 11751561, + "name": "grunt-metadata", + "full_name": "assemble/grunt-metadata", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-metadata", + "description": "", + "fork": false, + "url": "https://github.com/assemble/grunt-metadata", + "forks_url": "https://api.github.com/repos/assemble/grunt-metadata/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-metadata/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-metadata/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-metadata/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-metadata/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-metadata/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-metadata/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-metadata/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-metadata/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-metadata/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-metadata/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-metadata/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-metadata/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-metadata/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-metadata/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-metadata/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-metadata/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-metadata/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-metadata/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-metadata/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-metadata/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-metadata/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-metadata/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-metadata/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-metadata/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-metadata/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-metadata/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-metadata/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-metadata/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-metadata/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-metadata/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-metadata/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-metadata/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-metadata/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-metadata/releases{/id}", + "created_at": "2013-07-29T22:53:29Z", + "updated_at": "2014-02-19T21:14:00Z", + "pushed_at": "2013-08-24T17:45:19Z", + "git_url": "git://github.com/assemble/grunt-metadata.git", + "ssh_url": "git@github.com:assemble/grunt-metadata.git", + "clone_url": "https://github.com/assemble/grunt-metadata.git", + "svn_url": "https://github.com/assemble/grunt-metadata", + "homepage": null, + "size": 112, + "stargazers_count": 0, + "watchers_count": 0, + "language": null, + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-metadata", + "download": "https://github.com/assemble/grunt-metadata/archive/master.zip" + }, + { + "id": 12958445, + "name": "grunt-readme", + "full_name": "assemble/grunt-readme", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-readme", + "description": "Generate your README from a template. Fast, very little config, makes basic projects easier to maintain with richer documentation.", + "fork": false, + "url": "https://github.com/assemble/grunt-readme", + "forks_url": "https://api.github.com/repos/assemble/grunt-readme/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-readme/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-readme/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-readme/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-readme/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-readme/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-readme/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-readme/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-readme/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-readme/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-readme/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-readme/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-readme/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-readme/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-readme/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-readme/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-readme/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-readme/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-readme/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-readme/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-readme/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-readme/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-readme/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-readme/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-readme/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-readme/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-readme/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-readme/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-readme/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-readme/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-readme/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-readme/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-readme/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-readme/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-readme/releases{/id}", + "created_at": "2013-09-19T20:20:10Z", + "updated_at": "2014-03-21T21:14:34Z", + "pushed_at": "2014-03-21T21:14:34Z", + "git_url": "git://github.com/assemble/grunt-readme.git", + "ssh_url": "git@github.com:assemble/grunt-readme.git", + "clone_url": "https://github.com/assemble/grunt-readme.git", + "svn_url": "https://github.com/assemble/grunt-readme", + "homepage": "", + "size": 595, + "stargazers_count": 23, + "watchers_count": 23, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 7, + "mirror_url": null, + "open_issues_count": 1, + "forks": 7, + "open_issues": 1, + "watchers": 23, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-readme", + "download": "https://github.com/assemble/grunt-readme/archive/master.zip" + }, + { + "id": 14776304, + "name": "grunt-repos", + "full_name": "assemble/grunt-repos", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-repos", + "description": "Use Grunt to pull down a list of repos from GitHub.", + "fork": false, + "url": "https://github.com/assemble/grunt-repos", + "forks_url": "https://api.github.com/repos/assemble/grunt-repos/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-repos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-repos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-repos/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-repos/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-repos/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-repos/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-repos/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-repos/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-repos/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-repos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-repos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-repos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-repos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-repos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-repos/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-repos/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-repos/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-repos/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-repos/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-repos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-repos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-repos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-repos/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-repos/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-repos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-repos/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-repos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-repos/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-repos/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-repos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-repos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-repos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-repos/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-repos/releases{/id}", + "created_at": "2013-11-28T12:24:40Z", + "updated_at": "2013-11-28T16:16:56Z", + "pushed_at": "2013-11-28T16:16:53Z", + "git_url": "git://github.com/assemble/grunt-repos.git", + "ssh_url": "git@github.com:assemble/grunt-repos.git", + "clone_url": "https://github.com/assemble/grunt-repos.git", + "svn_url": "https://github.com/assemble/grunt-repos", + "homepage": null, + "size": 208, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-repos", + "download": "https://github.com/assemble/grunt-repos/archive/master.zip" + }, + { + "id": 17981316, + "name": "grunt-verb", + "full_name": "assemble/grunt-verb", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/grunt-verb", + "description": "Grunt plugin for Verb, the markdown documentation generator with zero-configuration required.", + "fork": false, + "url": "https://github.com/assemble/grunt-verb", + "forks_url": "https://api.github.com/repos/assemble/grunt-verb/forks", + "keys_url": "https://api.github.com/repos/assemble/grunt-verb/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/grunt-verb/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/grunt-verb/teams", + "hooks_url": "https://api.github.com/repos/assemble/grunt-verb/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/grunt-verb/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/grunt-verb/events", + "assignees_url": "https://api.github.com/repos/assemble/grunt-verb/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/grunt-verb/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/grunt-verb/tags", + "blobs_url": "https://api.github.com/repos/assemble/grunt-verb/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/grunt-verb/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/grunt-verb/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/grunt-verb/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/grunt-verb/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/grunt-verb/languages", + "stargazers_url": "https://api.github.com/repos/assemble/grunt-verb/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/grunt-verb/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/grunt-verb/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/grunt-verb/subscription", + "commits_url": "https://api.github.com/repos/assemble/grunt-verb/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/grunt-verb/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/grunt-verb/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/grunt-verb/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/grunt-verb/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/grunt-verb/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/grunt-verb/merges", + "archive_url": "https://api.github.com/repos/assemble/grunt-verb/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/grunt-verb/downloads", + "issues_url": "https://api.github.com/repos/assemble/grunt-verb/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/grunt-verb/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/grunt-verb/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/grunt-verb/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/grunt-verb/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/grunt-verb/releases{/id}", + "created_at": "2014-03-21T14:02:15Z", + "updated_at": "2014-03-26T10:16:17Z", + "pushed_at": "2014-03-26T10:16:19Z", + "git_url": "git://github.com/assemble/grunt-verb.git", + "ssh_url": "git@github.com:assemble/grunt-verb.git", + "clone_url": "https://github.com/assemble/grunt-verb.git", + "svn_url": "https://github.com/assemble/grunt-verb", + "homepage": null, + "size": 0, + "stargazers_count": 3, + "watchers_count": 3, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 3, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/grunt-verb", + "download": "https://github.com/assemble/grunt-verb/archive/master.zip" + }, + { + "id": 16517557, + "name": "gulp-assemble", + "full_name": "assemble/gulp-assemble", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/gulp-assemble", + "description": "Assemble plugin for Gulp ~ ALPHA! Tests, prs and feedback encourages, but this won't be ready for production use until Assemble V0.5.0 is released!", + "fork": false, + "url": "https://github.com/assemble/gulp-assemble", + "forks_url": "https://api.github.com/repos/assemble/gulp-assemble/forks", + "keys_url": "https://api.github.com/repos/assemble/gulp-assemble/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/gulp-assemble/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/gulp-assemble/teams", + "hooks_url": "https://api.github.com/repos/assemble/gulp-assemble/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/gulp-assemble/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/gulp-assemble/events", + "assignees_url": "https://api.github.com/repos/assemble/gulp-assemble/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/gulp-assemble/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/gulp-assemble/tags", + "blobs_url": "https://api.github.com/repos/assemble/gulp-assemble/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/gulp-assemble/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/gulp-assemble/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/gulp-assemble/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/gulp-assemble/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/gulp-assemble/languages", + "stargazers_url": "https://api.github.com/repos/assemble/gulp-assemble/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/gulp-assemble/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/gulp-assemble/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/gulp-assemble/subscription", + "commits_url": "https://api.github.com/repos/assemble/gulp-assemble/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/gulp-assemble/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/gulp-assemble/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/gulp-assemble/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/gulp-assemble/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/gulp-assemble/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/gulp-assemble/merges", + "archive_url": "https://api.github.com/repos/assemble/gulp-assemble/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/gulp-assemble/downloads", + "issues_url": "https://api.github.com/repos/assemble/gulp-assemble/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/gulp-assemble/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/gulp-assemble/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/gulp-assemble/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/gulp-assemble/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/gulp-assemble/releases{/id}", + "created_at": "2014-02-04T16:26:20Z", + "updated_at": "2014-03-14T20:59:36Z", + "pushed_at": "2014-03-14T20:56:56Z", + "git_url": "git://github.com/assemble/gulp-assemble.git", + "ssh_url": "git@github.com:assemble/gulp-assemble.git", + "clone_url": "https://github.com/assemble/gulp-assemble.git", + "svn_url": "https://github.com/assemble/gulp-assemble", + "homepage": "https://github.com/assemble/assemble", + "size": 179, + "stargazers_count": 7, + "watchers_count": 7, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 1, + "forks": 2, + "open_issues": 1, + "watchers": 7, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/gulp-assemble", + "download": "https://github.com/assemble/gulp-assemble/archive/master.zip" + }, + { + "id": 15395256, + "name": "gulp-convert", + "full_name": "assemble/gulp-convert", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/gulp-convert", + "description": "Gulp plugin to convert to or from JSON, YAML, XML, PLIST or CSV.", + "fork": false, + "url": "https://github.com/assemble/gulp-convert", + "forks_url": "https://api.github.com/repos/assemble/gulp-convert/forks", + "keys_url": "https://api.github.com/repos/assemble/gulp-convert/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/gulp-convert/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/gulp-convert/teams", + "hooks_url": "https://api.github.com/repos/assemble/gulp-convert/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/gulp-convert/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/gulp-convert/events", + "assignees_url": "https://api.github.com/repos/assemble/gulp-convert/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/gulp-convert/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/gulp-convert/tags", + "blobs_url": "https://api.github.com/repos/assemble/gulp-convert/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/gulp-convert/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/gulp-convert/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/gulp-convert/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/gulp-convert/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/gulp-convert/languages", + "stargazers_url": "https://api.github.com/repos/assemble/gulp-convert/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/gulp-convert/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/gulp-convert/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/gulp-convert/subscription", + "commits_url": "https://api.github.com/repos/assemble/gulp-convert/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/gulp-convert/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/gulp-convert/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/gulp-convert/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/gulp-convert/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/gulp-convert/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/gulp-convert/merges", + "archive_url": "https://api.github.com/repos/assemble/gulp-convert/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/gulp-convert/downloads", + "issues_url": "https://api.github.com/repos/assemble/gulp-convert/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/gulp-convert/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/gulp-convert/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/gulp-convert/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/gulp-convert/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/gulp-convert/releases{/id}", + "created_at": "2013-12-23T12:43:13Z", + "updated_at": "2014-03-07T11:53:41Z", + "pushed_at": "2014-03-07T11:53:41Z", + "git_url": "git://github.com/assemble/gulp-convert.git", + "ssh_url": "git@github.com:assemble/gulp-convert.git", + "clone_url": "https://github.com/assemble/gulp-convert.git", + "svn_url": "https://github.com/assemble/gulp-convert", + "homepage": null, + "size": 140, + "stargazers_count": 5, + "watchers_count": 5, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 1, + "forks": 2, + "open_issues": 1, + "watchers": 5, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/gulp-convert", + "download": "https://github.com/assemble/gulp-convert/archive/master.zip" + }, + { + "id": 17992439, + "name": "gulp-verb", + "full_name": "assemble/gulp-verb", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/gulp-verb", + "description": "A Gulp plugin for verb", + "fork": false, + "url": "https://github.com/assemble/gulp-verb", + "forks_url": "https://api.github.com/repos/assemble/gulp-verb/forks", + "keys_url": "https://api.github.com/repos/assemble/gulp-verb/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/gulp-verb/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/gulp-verb/teams", + "hooks_url": "https://api.github.com/repos/assemble/gulp-verb/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/gulp-verb/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/gulp-verb/events", + "assignees_url": "https://api.github.com/repos/assemble/gulp-verb/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/gulp-verb/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/gulp-verb/tags", + "blobs_url": "https://api.github.com/repos/assemble/gulp-verb/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/gulp-verb/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/gulp-verb/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/gulp-verb/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/gulp-verb/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/gulp-verb/languages", + "stargazers_url": "https://api.github.com/repos/assemble/gulp-verb/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/gulp-verb/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/gulp-verb/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/gulp-verb/subscription", + "commits_url": "https://api.github.com/repos/assemble/gulp-verb/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/gulp-verb/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/gulp-verb/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/gulp-verb/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/gulp-verb/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/gulp-verb/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/gulp-verb/merges", + "archive_url": "https://api.github.com/repos/assemble/gulp-verb/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/gulp-verb/downloads", + "issues_url": "https://api.github.com/repos/assemble/gulp-verb/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/gulp-verb/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/gulp-verb/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/gulp-verb/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/gulp-verb/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/gulp-verb/releases{/id}", + "created_at": "2014-03-21T19:54:53Z", + "updated_at": "2014-03-21T20:44:21Z", + "pushed_at": "2014-03-21T20:44:21Z", + "git_url": "git://github.com/assemble/gulp-verb.git", + "ssh_url": "git@github.com:assemble/gulp-verb.git", + "clone_url": "https://github.com/assemble/gulp-verb.git", + "svn_url": "https://github.com/assemble/gulp-verb", + "homepage": null, + "size": 0, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/gulp-verb", + "download": "https://github.com/assemble/gulp-verb/archive/master.zip" + }, + { + "id": 8615848, + "name": "handlebars-helpers", + "full_name": "assemble/handlebars-helpers", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/handlebars-helpers", + "description": "Library of 120+ handlebars helpers for any project: Assemble, Ghost, YUI... This project is active and supported, we love contributors and appreciate stars.", + "fork": false, + "url": "https://github.com/assemble/handlebars-helpers", + "forks_url": "https://api.github.com/repos/assemble/handlebars-helpers/forks", + "keys_url": "https://api.github.com/repos/assemble/handlebars-helpers/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/handlebars-helpers/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/handlebars-helpers/teams", + "hooks_url": "https://api.github.com/repos/assemble/handlebars-helpers/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/handlebars-helpers/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/handlebars-helpers/events", + "assignees_url": "https://api.github.com/repos/assemble/handlebars-helpers/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/handlebars-helpers/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/handlebars-helpers/tags", + "blobs_url": "https://api.github.com/repos/assemble/handlebars-helpers/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/handlebars-helpers/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/handlebars-helpers/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/handlebars-helpers/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/handlebars-helpers/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/handlebars-helpers/languages", + "stargazers_url": "https://api.github.com/repos/assemble/handlebars-helpers/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/handlebars-helpers/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/handlebars-helpers/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/handlebars-helpers/subscription", + "commits_url": "https://api.github.com/repos/assemble/handlebars-helpers/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/handlebars-helpers/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/handlebars-helpers/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/handlebars-helpers/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/handlebars-helpers/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/handlebars-helpers/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/handlebars-helpers/merges", + "archive_url": "https://api.github.com/repos/assemble/handlebars-helpers/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/handlebars-helpers/downloads", + "issues_url": "https://api.github.com/repos/assemble/handlebars-helpers/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/handlebars-helpers/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/handlebars-helpers/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/handlebars-helpers/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/handlebars-helpers/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/handlebars-helpers/releases{/id}", + "created_at": "2013-03-06T23:30:55Z", + "updated_at": "2014-03-26T05:04:56Z", + "pushed_at": "2014-03-26T05:04:57Z", + "git_url": "git://github.com/assemble/handlebars-helpers.git", + "ssh_url": "git@github.com:assemble/handlebars-helpers.git", + "clone_url": "https://github.com/assemble/handlebars-helpers.git", + "svn_url": "https://github.com/assemble/handlebars-helpers", + "homepage": "http://assemble.io/helpers/", + "size": 2803, + "stargazers_count": 446, + "watchers_count": 446, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 57, + "mirror_url": null, + "open_issues_count": 22, + "forks": 57, + "open_issues": 22, + "watchers": 446, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/handlebars-helpers", + "download": "https://github.com/assemble/handlebars-helpers/archive/master.zip" + }, + { + "id": 13577146, + "name": "layouts-example", + "full_name": "assemble/layouts-example", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/layouts-example", + "description": "Learn how to use the layouts helper. This is different than how Assemble's built-in layouts work. ", + "fork": false, + "url": "https://github.com/assemble/layouts-example", + "forks_url": "https://api.github.com/repos/assemble/layouts-example/forks", + "keys_url": "https://api.github.com/repos/assemble/layouts-example/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/layouts-example/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/layouts-example/teams", + "hooks_url": "https://api.github.com/repos/assemble/layouts-example/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/layouts-example/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/layouts-example/events", + "assignees_url": "https://api.github.com/repos/assemble/layouts-example/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/layouts-example/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/layouts-example/tags", + "blobs_url": "https://api.github.com/repos/assemble/layouts-example/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/layouts-example/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/layouts-example/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/layouts-example/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/layouts-example/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/layouts-example/languages", + "stargazers_url": "https://api.github.com/repos/assemble/layouts-example/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/layouts-example/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/layouts-example/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/layouts-example/subscription", + "commits_url": "https://api.github.com/repos/assemble/layouts-example/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/layouts-example/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/layouts-example/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/layouts-example/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/layouts-example/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/layouts-example/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/layouts-example/merges", + "archive_url": "https://api.github.com/repos/assemble/layouts-example/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/layouts-example/downloads", + "issues_url": "https://api.github.com/repos/assemble/layouts-example/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/layouts-example/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/layouts-example/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/layouts-example/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/layouts-example/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/layouts-example/releases{/id}", + "created_at": "2013-10-15T00:50:26Z", + "updated_at": "2014-03-20T01:09:36Z", + "pushed_at": "2014-02-13T15:44:13Z", + "git_url": "git://github.com/assemble/layouts-example.git", + "ssh_url": "git@github.com:assemble/layouts-example.git", + "clone_url": "https://github.com/assemble/layouts-example.git", + "svn_url": "https://github.com/assemble/layouts-example", + "homepage": "", + "size": 568, + "stargazers_count": 3, + "watchers_count": 3, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 1, + "forks": 2, + "open_issues": 1, + "watchers": 3, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/layouts-example", + "download": "https://github.com/assemble/layouts-example/archive/master.zip" + }, + { + "id": 16064893, + "name": "marked-extras", + "full_name": "assemble/marked-extras", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/marked-extras", + "description": "Extras for marked.js. Utils, language definitions, templates for custom headings and sensible defaults. Used on a number of production sites, including Less.js / lesscss.org.", + "fork": false, + "url": "https://github.com/assemble/marked-extras", + "forks_url": "https://api.github.com/repos/assemble/marked-extras/forks", + "keys_url": "https://api.github.com/repos/assemble/marked-extras/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/marked-extras/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/marked-extras/teams", + "hooks_url": "https://api.github.com/repos/assemble/marked-extras/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/marked-extras/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/marked-extras/events", + "assignees_url": "https://api.github.com/repos/assemble/marked-extras/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/marked-extras/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/marked-extras/tags", + "blobs_url": "https://api.github.com/repos/assemble/marked-extras/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/marked-extras/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/marked-extras/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/marked-extras/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/marked-extras/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/marked-extras/languages", + "stargazers_url": "https://api.github.com/repos/assemble/marked-extras/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/marked-extras/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/marked-extras/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/marked-extras/subscription", + "commits_url": "https://api.github.com/repos/assemble/marked-extras/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/marked-extras/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/marked-extras/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/marked-extras/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/marked-extras/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/marked-extras/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/marked-extras/merges", + "archive_url": "https://api.github.com/repos/assemble/marked-extras/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/marked-extras/downloads", + "issues_url": "https://api.github.com/repos/assemble/marked-extras/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/marked-extras/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/marked-extras/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/marked-extras/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/marked-extras/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/marked-extras/releases{/id}", + "created_at": "2014-01-20T08:22:27Z", + "updated_at": "2014-02-16T17:56:08Z", + "pushed_at": "2014-02-16T17:40:45Z", + "git_url": "git://github.com/assemble/marked-extras.git", + "ssh_url": "git@github.com:assemble/marked-extras.git", + "clone_url": "https://github.com/assemble/marked-extras.git", + "svn_url": "https://github.com/assemble/marked-extras", + "homepage": "", + "size": 205, + "stargazers_count": 5, + "watchers_count": 5, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 5, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/marked-extras", + "download": "https://github.com/assemble/marked-extras/archive/master.zip" + }, + { + "id": 12419064, + "name": "metadata", + "full_name": "assemble/metadata", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/metadata", + "description": "Utils for working with document metadata.", + "fork": false, + "url": "https://github.com/assemble/metadata", + "forks_url": "https://api.github.com/repos/assemble/metadata/forks", + "keys_url": "https://api.github.com/repos/assemble/metadata/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/metadata/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/metadata/teams", + "hooks_url": "https://api.github.com/repos/assemble/metadata/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/metadata/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/metadata/events", + "assignees_url": "https://api.github.com/repos/assemble/metadata/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/metadata/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/metadata/tags", + "blobs_url": "https://api.github.com/repos/assemble/metadata/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/metadata/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/metadata/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/metadata/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/metadata/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/metadata/languages", + "stargazers_url": "https://api.github.com/repos/assemble/metadata/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/metadata/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/metadata/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/metadata/subscription", + "commits_url": "https://api.github.com/repos/assemble/metadata/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/metadata/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/metadata/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/metadata/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/metadata/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/metadata/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/metadata/merges", + "archive_url": "https://api.github.com/repos/assemble/metadata/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/metadata/downloads", + "issues_url": "https://api.github.com/repos/assemble/metadata/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/metadata/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/metadata/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/metadata/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/metadata/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/metadata/releases{/id}", + "created_at": "2013-08-27T22:28:04Z", + "updated_at": "2013-10-20T20:05:58Z", + "pushed_at": "2013-08-28T07:13:01Z", + "git_url": "git://github.com/assemble/metadata.git", + "ssh_url": "git@github.com:assemble/metadata.git", + "clone_url": "https://github.com/assemble/metadata.git", + "svn_url": "https://github.com/assemble/metadata", + "homepage": null, + "size": 126, + "stargazers_count": 2, + "watchers_count": 2, + "language": null, + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/metadata", + "download": "https://github.com/assemble/metadata/archive/master.zip" + }, + { + "id": 16485004, + "name": "path-utils", + "full_name": "assemble/path-utils", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/path-utils", + "description": "Deprecated. Use fs-utils instead.", + "fork": false, + "url": "https://github.com/assemble/path-utils", + "forks_url": "https://api.github.com/repos/assemble/path-utils/forks", + "keys_url": "https://api.github.com/repos/assemble/path-utils/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/path-utils/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/path-utils/teams", + "hooks_url": "https://api.github.com/repos/assemble/path-utils/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/path-utils/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/path-utils/events", + "assignees_url": "https://api.github.com/repos/assemble/path-utils/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/path-utils/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/path-utils/tags", + "blobs_url": "https://api.github.com/repos/assemble/path-utils/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/path-utils/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/path-utils/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/path-utils/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/path-utils/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/path-utils/languages", + "stargazers_url": "https://api.github.com/repos/assemble/path-utils/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/path-utils/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/path-utils/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/path-utils/subscription", + "commits_url": "https://api.github.com/repos/assemble/path-utils/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/path-utils/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/path-utils/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/path-utils/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/path-utils/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/path-utils/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/path-utils/merges", + "archive_url": "https://api.github.com/repos/assemble/path-utils/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/path-utils/downloads", + "issues_url": "https://api.github.com/repos/assemble/path-utils/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/path-utils/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/path-utils/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/path-utils/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/path-utils/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/path-utils/releases{/id}", + "created_at": "2014-02-03T16:28:08Z", + "updated_at": "2014-02-11T03:42:37Z", + "pushed_at": "2014-02-11T03:42:37Z", + "git_url": "git://github.com/assemble/path-utils.git", + "ssh_url": "git@github.com:assemble/path-utils.git", + "clone_url": "https://github.com/assemble/path-utils.git", + "svn_url": "https://github.com/assemble/path-utils", + "homepage": "", + "size": 160, + "stargazers_count": 0, + "watchers_count": 0, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/path-utils", + "download": "https://github.com/assemble/path-utils/archive/master.zip" + }, + { + "id": 13639170, + "name": "plugins", + "full_name": "assemble/plugins", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/plugins", + "description": "Collection of contrib plugins maintained by the Assemble core team.", + "fork": false, + "url": "https://github.com/assemble/plugins", + "forks_url": "https://api.github.com/repos/assemble/plugins/forks", + "keys_url": "https://api.github.com/repos/assemble/plugins/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/plugins/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/plugins/teams", + "hooks_url": "https://api.github.com/repos/assemble/plugins/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/plugins/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/plugins/events", + "assignees_url": "https://api.github.com/repos/assemble/plugins/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/plugins/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/plugins/tags", + "blobs_url": "https://api.github.com/repos/assemble/plugins/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/plugins/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/plugins/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/plugins/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/plugins/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/plugins/languages", + "stargazers_url": "https://api.github.com/repos/assemble/plugins/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/plugins/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/plugins/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/plugins/subscription", + "commits_url": "https://api.github.com/repos/assemble/plugins/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/plugins/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/plugins/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/plugins/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/plugins/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/plugins/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/plugins/merges", + "archive_url": "https://api.github.com/repos/assemble/plugins/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/plugins/downloads", + "issues_url": "https://api.github.com/repos/assemble/plugins/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/plugins/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/plugins/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/plugins/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/plugins/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/plugins/releases{/id}", + "created_at": "2013-10-17T04:38:07Z", + "updated_at": "2013-11-29T18:30:07Z", + "pushed_at": "2013-11-29T18:28:48Z", + "git_url": "git://github.com/assemble/plugins.git", + "ssh_url": "git@github.com:assemble/plugins.git", + "clone_url": "https://github.com/assemble/plugins.git", + "svn_url": "https://github.com/assemble/plugins", + "homepage": "http://assemble.io/plugins/", + "size": 136, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 1, + "forks": 0, + "open_issues": 1, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/plugins", + "download": "https://github.com/assemble/plugins/archive/master.zip" + }, + { + "id": 12062300, + "name": "refactor-planning", + "full_name": "assemble/refactor-planning", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/refactor-planning", + "description": "Temporary repo to plan the refactoring of Assemble. if you use Assemble and have opinions about this, please add your voice to the issues. ", + "fork": false, + "url": "https://github.com/assemble/refactor-planning", + "forks_url": "https://api.github.com/repos/assemble/refactor-planning/forks", + "keys_url": "https://api.github.com/repos/assemble/refactor-planning/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/refactor-planning/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/refactor-planning/teams", + "hooks_url": "https://api.github.com/repos/assemble/refactor-planning/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/refactor-planning/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/refactor-planning/events", + "assignees_url": "https://api.github.com/repos/assemble/refactor-planning/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/refactor-planning/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/refactor-planning/tags", + "blobs_url": "https://api.github.com/repos/assemble/refactor-planning/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/refactor-planning/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/refactor-planning/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/refactor-planning/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/refactor-planning/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/refactor-planning/languages", + "stargazers_url": "https://api.github.com/repos/assemble/refactor-planning/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/refactor-planning/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/refactor-planning/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/refactor-planning/subscription", + "commits_url": "https://api.github.com/repos/assemble/refactor-planning/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/refactor-planning/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/refactor-planning/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/refactor-planning/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/refactor-planning/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/refactor-planning/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/refactor-planning/merges", + "archive_url": "https://api.github.com/repos/assemble/refactor-planning/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/refactor-planning/downloads", + "issues_url": "https://api.github.com/repos/assemble/refactor-planning/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/refactor-planning/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/refactor-planning/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/refactor-planning/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/refactor-planning/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/refactor-planning/releases{/id}", + "created_at": "2013-08-12T17:49:16Z", + "updated_at": "2013-11-30T23:35:05Z", + "pushed_at": "2013-11-30T23:34:59Z", + "git_url": "git://github.com/assemble/refactor-planning.git", + "ssh_url": "git@github.com:assemble/refactor-planning.git", + "clone_url": "https://github.com/assemble/refactor-planning.git", + "svn_url": "https://github.com/assemble/refactor-planning", + "homepage": "", + "size": 139, + "stargazers_count": 5, + "watchers_count": 5, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 19, + "forks": 1, + "open_issues": 19, + "watchers": 5, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/refactor-planning", + "download": "https://github.com/assemble/refactor-planning/archive/master.zip" + }, + { + "id": 15027676, + "name": "strings", + "full_name": "assemble/strings", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/strings", + "description": "Replace :props in strings.", + "fork": false, + "url": "https://github.com/assemble/strings", + "forks_url": "https://api.github.com/repos/assemble/strings/forks", + "keys_url": "https://api.github.com/repos/assemble/strings/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/strings/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/strings/teams", + "hooks_url": "https://api.github.com/repos/assemble/strings/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/strings/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/strings/events", + "assignees_url": "https://api.github.com/repos/assemble/strings/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/strings/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/strings/tags", + "blobs_url": "https://api.github.com/repos/assemble/strings/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/strings/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/strings/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/strings/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/strings/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/strings/languages", + "stargazers_url": "https://api.github.com/repos/assemble/strings/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/strings/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/strings/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/strings/subscription", + "commits_url": "https://api.github.com/repos/assemble/strings/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/strings/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/strings/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/strings/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/strings/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/strings/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/strings/merges", + "archive_url": "https://api.github.com/repos/assemble/strings/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/strings/downloads", + "issues_url": "https://api.github.com/repos/assemble/strings/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/strings/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/strings/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/strings/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/strings/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/strings/releases{/id}", + "created_at": "2013-12-08T17:14:45Z", + "updated_at": "2014-03-16T03:21:13Z", + "pushed_at": "2014-03-09T16:42:18Z", + "git_url": "git://github.com/assemble/strings.git", + "ssh_url": "git@github.com:assemble/strings.git", + "clone_url": "https://github.com/assemble/strings.git", + "svn_url": "https://github.com/assemble/strings", + "homepage": "", + "size": 348, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 7, + "forks": 0, + "open_issues": 7, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/strings", + "download": "https://github.com/assemble/strings/archive/master.zip" + }, + { + "id": 12825739, + "name": "swig-extensions", + "full_name": "assemble/swig-extensions", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/swig-extensions", + "description": "A growing collection of tags and filters for Swig Templates.", + "fork": false, + "url": "https://github.com/assemble/swig-extensions", + "forks_url": "https://api.github.com/repos/assemble/swig-extensions/forks", + "keys_url": "https://api.github.com/repos/assemble/swig-extensions/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/swig-extensions/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/swig-extensions/teams", + "hooks_url": "https://api.github.com/repos/assemble/swig-extensions/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/swig-extensions/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/swig-extensions/events", + "assignees_url": "https://api.github.com/repos/assemble/swig-extensions/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/swig-extensions/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/swig-extensions/tags", + "blobs_url": "https://api.github.com/repos/assemble/swig-extensions/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/swig-extensions/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/swig-extensions/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/swig-extensions/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/swig-extensions/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/swig-extensions/languages", + "stargazers_url": "https://api.github.com/repos/assemble/swig-extensions/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/swig-extensions/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/swig-extensions/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/swig-extensions/subscription", + "commits_url": "https://api.github.com/repos/assemble/swig-extensions/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/swig-extensions/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/swig-extensions/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/swig-extensions/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/swig-extensions/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/swig-extensions/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/swig-extensions/merges", + "archive_url": "https://api.github.com/repos/assemble/swig-extensions/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/swig-extensions/downloads", + "issues_url": "https://api.github.com/repos/assemble/swig-extensions/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/swig-extensions/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/swig-extensions/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/swig-extensions/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/swig-extensions/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/swig-extensions/releases{/id}", + "created_at": "2013-09-14T07:11:42Z", + "updated_at": "2014-01-17T15:04:38Z", + "pushed_at": "2014-01-17T15:04:38Z", + "git_url": "git://github.com/assemble/swig-extensions.git", + "ssh_url": "git@github.com:assemble/swig-extensions.git", + "clone_url": "https://github.com/assemble/swig-extensions.git", + "svn_url": "https://github.com/assemble/swig-extensions", + "homepage": null, + "size": 163, + "stargazers_count": 4, + "watchers_count": 4, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 3, + "mirror_url": null, + "open_issues_count": 1, + "forks": 3, + "open_issues": 1, + "watchers": 4, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/swig-extensions", + "download": "https://github.com/assemble/swig-extensions/archive/master.zip" + }, + { + "id": 13696465, + "name": "tasks", + "full_name": "assemble/tasks", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/tasks", + "description": "Collection of Grunt plugins maintained by the Assemble core team.", + "fork": false, + "url": "https://github.com/assemble/tasks", + "forks_url": "https://api.github.com/repos/assemble/tasks/forks", + "keys_url": "https://api.github.com/repos/assemble/tasks/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/tasks/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/tasks/teams", + "hooks_url": "https://api.github.com/repos/assemble/tasks/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/tasks/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/tasks/events", + "assignees_url": "https://api.github.com/repos/assemble/tasks/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/tasks/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/tasks/tags", + "blobs_url": "https://api.github.com/repos/assemble/tasks/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/tasks/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/tasks/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/tasks/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/tasks/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/tasks/languages", + "stargazers_url": "https://api.github.com/repos/assemble/tasks/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/tasks/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/tasks/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/tasks/subscription", + "commits_url": "https://api.github.com/repos/assemble/tasks/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/tasks/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/tasks/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/tasks/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/tasks/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/tasks/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/tasks/merges", + "archive_url": "https://api.github.com/repos/assemble/tasks/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/tasks/downloads", + "issues_url": "https://api.github.com/repos/assemble/tasks/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/tasks/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/tasks/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/tasks/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/tasks/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/tasks/releases{/id}", + "created_at": "2013-10-19T06:07:58Z", + "updated_at": "2013-10-19T16:38:37Z", + "pushed_at": "2013-10-19T16:38:35Z", + "git_url": "git://github.com/assemble/tasks.git", + "ssh_url": "git@github.com:assemble/tasks.git", + "clone_url": "https://github.com/assemble/tasks.git", + "svn_url": "https://github.com/assemble/tasks", + "homepage": null, + "size": 124, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/tasks", + "download": "https://github.com/assemble/tasks/archive/master.zip" + }, + { + "id": 16893658, + "name": "verb", + "full_name": "assemble/verb", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/verb", + "description": "A zero-configuration markdown documentation generator that is extremely easy to use and extend.", + "fork": false, + "url": "https://github.com/assemble/verb", + "forks_url": "https://api.github.com/repos/assemble/verb/forks", + "keys_url": "https://api.github.com/repos/assemble/verb/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/verb/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/verb/teams", + "hooks_url": "https://api.github.com/repos/assemble/verb/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/verb/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/verb/events", + "assignees_url": "https://api.github.com/repos/assemble/verb/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/verb/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/verb/tags", + "blobs_url": "https://api.github.com/repos/assemble/verb/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/verb/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/verb/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/verb/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/verb/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/verb/languages", + "stargazers_url": "https://api.github.com/repos/assemble/verb/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/verb/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/verb/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/verb/subscription", + "commits_url": "https://api.github.com/repos/assemble/verb/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/verb/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/verb/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/verb/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/verb/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/verb/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/verb/merges", + "archive_url": "https://api.github.com/repos/assemble/verb/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/verb/downloads", + "issues_url": "https://api.github.com/repos/assemble/verb/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/verb/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/verb/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/verb/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/verb/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/verb/releases{/id}", + "created_at": "2014-02-16T20:39:14Z", + "updated_at": "2014-03-25T07:13:52Z", + "pushed_at": "2014-03-25T07:13:51Z", + "git_url": "git://github.com/assemble/verb.git", + "ssh_url": "git@github.com:assemble/verb.git", + "clone_url": "https://github.com/assemble/verb.git", + "svn_url": "https://github.com/assemble/verb", + "homepage": "", + "size": 921, + "stargazers_count": 30, + "watchers_count": 30, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 1, + "forks": 2, + "open_issues": 1, + "watchers": 30, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/verb", + "download": "https://github.com/assemble/verb/archive/master.zip" + }, + { + "id": 17992873, + "name": "verb-boilerplates", + "full_name": "assemble/verb-boilerplates", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/verb-boilerplates", + "description": "Boilerplates for Verb. Each boilerplate consists of a few markdown templates to kickstart documentation for new projects.", + "fork": false, + "url": "https://github.com/assemble/verb-boilerplates", + "forks_url": "https://api.github.com/repos/assemble/verb-boilerplates/forks", + "keys_url": "https://api.github.com/repos/assemble/verb-boilerplates/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/verb-boilerplates/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/verb-boilerplates/teams", + "hooks_url": "https://api.github.com/repos/assemble/verb-boilerplates/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/verb-boilerplates/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/verb-boilerplates/events", + "assignees_url": "https://api.github.com/repos/assemble/verb-boilerplates/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/verb-boilerplates/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/verb-boilerplates/tags", + "blobs_url": "https://api.github.com/repos/assemble/verb-boilerplates/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/verb-boilerplates/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/verb-boilerplates/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/verb-boilerplates/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/verb-boilerplates/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/verb-boilerplates/languages", + "stargazers_url": "https://api.github.com/repos/assemble/verb-boilerplates/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/verb-boilerplates/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/verb-boilerplates/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/verb-boilerplates/subscription", + "commits_url": "https://api.github.com/repos/assemble/verb-boilerplates/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/verb-boilerplates/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/verb-boilerplates/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/verb-boilerplates/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/verb-boilerplates/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/verb-boilerplates/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/verb-boilerplates/merges", + "archive_url": "https://api.github.com/repos/assemble/verb-boilerplates/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/verb-boilerplates/downloads", + "issues_url": "https://api.github.com/repos/assemble/verb-boilerplates/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/verb-boilerplates/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/verb-boilerplates/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/verb-boilerplates/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/verb-boilerplates/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/verb-boilerplates/releases{/id}", + "created_at": "2014-03-21T20:10:17Z", + "updated_at": "2014-03-21T20:55:35Z", + "pushed_at": "2014-03-21T20:55:34Z", + "git_url": "git://github.com/assemble/verb-boilerplates.git", + "ssh_url": "git@github.com:assemble/verb-boilerplates.git", + "clone_url": "https://github.com/assemble/verb-boilerplates.git", + "svn_url": "https://github.com/assemble/verb-boilerplates", + "homepage": "", + "size": 0, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/verb-boilerplates", + "download": "https://github.com/assemble/verb-boilerplates/archive/master.zip" + }, + { + "id": 17980613, + "name": "verb-cli", + "full_name": "assemble/verb-cli", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/verb-cli", + "description": "Command line tool for Verb, the markdown documentation generator with zero-configuration required.", + "fork": false, + "url": "https://github.com/assemble/verb-cli", + "forks_url": "https://api.github.com/repos/assemble/verb-cli/forks", + "keys_url": "https://api.github.com/repos/assemble/verb-cli/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/verb-cli/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/verb-cli/teams", + "hooks_url": "https://api.github.com/repos/assemble/verb-cli/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/verb-cli/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/verb-cli/events", + "assignees_url": "https://api.github.com/repos/assemble/verb-cli/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/verb-cli/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/verb-cli/tags", + "blobs_url": "https://api.github.com/repos/assemble/verb-cli/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/verb-cli/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/verb-cli/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/verb-cli/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/verb-cli/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/verb-cli/languages", + "stargazers_url": "https://api.github.com/repos/assemble/verb-cli/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/verb-cli/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/verb-cli/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/verb-cli/subscription", + "commits_url": "https://api.github.com/repos/assemble/verb-cli/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/verb-cli/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/verb-cli/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/verb-cli/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/verb-cli/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/verb-cli/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/verb-cli/merges", + "archive_url": "https://api.github.com/repos/assemble/verb-cli/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/verb-cli/downloads", + "issues_url": "https://api.github.com/repos/assemble/verb-cli/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/verb-cli/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/verb-cli/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/verb-cli/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/verb-cli/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/verb-cli/releases{/id}", + "created_at": "2014-03-21T13:40:37Z", + "updated_at": "2014-03-23T07:29:44Z", + "pushed_at": "2014-03-23T07:29:44Z", + "git_url": "git://github.com/assemble/verb-cli.git", + "ssh_url": "git@github.com:assemble/verb-cli.git", + "clone_url": "https://github.com/assemble/verb-cli.git", + "svn_url": "https://github.com/assemble/verb-cli", + "homepage": null, + "size": 0, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/verb-cli", + "download": "https://github.com/assemble/verb-cli/archive/master.zip" + }, + { + "id": 18014362, + "name": "verb-contrib-templates", + "full_name": "assemble/verb-contrib-templates", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/verb-contrib-templates", + "description": "Various templates for the Assemble core team to use on Assemble projects.", + "fork": false, + "url": "https://github.com/assemble/verb-contrib-templates", + "forks_url": "https://api.github.com/repos/assemble/verb-contrib-templates/forks", + "keys_url": "https://api.github.com/repos/assemble/verb-contrib-templates/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/verb-contrib-templates/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/verb-contrib-templates/teams", + "hooks_url": "https://api.github.com/repos/assemble/verb-contrib-templates/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/verb-contrib-templates/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/verb-contrib-templates/events", + "assignees_url": "https://api.github.com/repos/assemble/verb-contrib-templates/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/verb-contrib-templates/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/verb-contrib-templates/tags", + "blobs_url": "https://api.github.com/repos/assemble/verb-contrib-templates/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/verb-contrib-templates/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/verb-contrib-templates/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/verb-contrib-templates/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/verb-contrib-templates/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/verb-contrib-templates/languages", + "stargazers_url": "https://api.github.com/repos/assemble/verb-contrib-templates/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/verb-contrib-templates/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/verb-contrib-templates/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/verb-contrib-templates/subscription", + "commits_url": "https://api.github.com/repos/assemble/verb-contrib-templates/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/verb-contrib-templates/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/verb-contrib-templates/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/verb-contrib-templates/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/verb-contrib-templates/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/verb-contrib-templates/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/verb-contrib-templates/merges", + "archive_url": "https://api.github.com/repos/assemble/verb-contrib-templates/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/verb-contrib-templates/downloads", + "issues_url": "https://api.github.com/repos/assemble/verb-contrib-templates/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/verb-contrib-templates/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/verb-contrib-templates/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/verb-contrib-templates/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/verb-contrib-templates/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/verb-contrib-templates/releases{/id}", + "created_at": "2014-03-22T16:42:50Z", + "updated_at": "2014-03-23T07:37:30Z", + "pushed_at": "2014-03-23T07:37:30Z", + "git_url": "git://github.com/assemble/verb-contrib-templates.git", + "ssh_url": "git@github.com:assemble/verb-contrib-templates.git", + "clone_url": "https://github.com/assemble/verb-contrib-templates.git", + "svn_url": "https://github.com/assemble/verb-contrib-templates", + "homepage": null, + "size": 0, + "stargazers_count": 0, + "watchers_count": 0, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/verb-contrib-templates", + "download": "https://github.com/assemble/verb-contrib-templates/archive/master.zip" + }, + { + "id": 18019310, + "name": "verb-readme-badges", + "full_name": "assemble/verb-readme-badges", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/verb-readme-badges", + "description": "Readme badge templates.", + "fork": false, + "url": "https://github.com/assemble/verb-readme-badges", + "forks_url": "https://api.github.com/repos/assemble/verb-readme-badges/forks", + "keys_url": "https://api.github.com/repos/assemble/verb-readme-badges/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/verb-readme-badges/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/verb-readme-badges/teams", + "hooks_url": "https://api.github.com/repos/assemble/verb-readme-badges/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/verb-readme-badges/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/verb-readme-badges/events", + "assignees_url": "https://api.github.com/repos/assemble/verb-readme-badges/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/verb-readme-badges/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/verb-readme-badges/tags", + "blobs_url": "https://api.github.com/repos/assemble/verb-readme-badges/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/verb-readme-badges/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/verb-readme-badges/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/verb-readme-badges/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/verb-readme-badges/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/verb-readme-badges/languages", + "stargazers_url": "https://api.github.com/repos/assemble/verb-readme-badges/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/verb-readme-badges/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/verb-readme-badges/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/verb-readme-badges/subscription", + "commits_url": "https://api.github.com/repos/assemble/verb-readme-badges/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/verb-readme-badges/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/verb-readme-badges/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/verb-readme-badges/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/verb-readme-badges/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/verb-readme-badges/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/verb-readme-badges/merges", + "archive_url": "https://api.github.com/repos/assemble/verb-readme-badges/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/verb-readme-badges/downloads", + "issues_url": "https://api.github.com/repos/assemble/verb-readme-badges/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/verb-readme-badges/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/verb-readme-badges/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/verb-readme-badges/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/verb-readme-badges/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/verb-readme-badges/releases{/id}", + "created_at": "2014-03-22T20:39:18Z", + "updated_at": "2014-03-23T03:44:59Z", + "pushed_at": "2014-03-23T03:44:59Z", + "git_url": "git://github.com/assemble/verb-readme-badges.git", + "ssh_url": "git@github.com:assemble/verb-readme-badges.git", + "clone_url": "https://github.com/assemble/verb-readme-badges.git", + "svn_url": "https://github.com/assemble/verb-readme-badges", + "homepage": null, + "size": 0, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/verb-readme-badges", + "download": "https://github.com/assemble/verb-readme-badges/archive/master.zip" + }, + { + "id": 17992919, + "name": "verb-readme-includes", + "full_name": "assemble/verb-readme-includes", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/verb-readme-includes", + "description": "Template partials for Verb.", + "fork": false, + "url": "https://github.com/assemble/verb-readme-includes", + "forks_url": "https://api.github.com/repos/assemble/verb-readme-includes/forks", + "keys_url": "https://api.github.com/repos/assemble/verb-readme-includes/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/verb-readme-includes/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/verb-readme-includes/teams", + "hooks_url": "https://api.github.com/repos/assemble/verb-readme-includes/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/verb-readme-includes/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/verb-readme-includes/events", + "assignees_url": "https://api.github.com/repos/assemble/verb-readme-includes/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/verb-readme-includes/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/verb-readme-includes/tags", + "blobs_url": "https://api.github.com/repos/assemble/verb-readme-includes/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/verb-readme-includes/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/verb-readme-includes/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/verb-readme-includes/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/verb-readme-includes/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/verb-readme-includes/languages", + "stargazers_url": "https://api.github.com/repos/assemble/verb-readme-includes/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/verb-readme-includes/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/verb-readme-includes/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/verb-readme-includes/subscription", + "commits_url": "https://api.github.com/repos/assemble/verb-readme-includes/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/verb-readme-includes/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/verb-readme-includes/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/verb-readme-includes/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/verb-readme-includes/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/verb-readme-includes/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/verb-readme-includes/merges", + "archive_url": "https://api.github.com/repos/assemble/verb-readme-includes/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/verb-readme-includes/downloads", + "issues_url": "https://api.github.com/repos/assemble/verb-readme-includes/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/verb-readme-includes/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/verb-readme-includes/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/verb-readme-includes/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/verb-readme-includes/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/verb-readme-includes/releases{/id}", + "created_at": "2014-03-21T20:11:54Z", + "updated_at": "2014-03-23T07:44:36Z", + "pushed_at": "2014-03-23T07:44:36Z", + "git_url": "git://github.com/assemble/verb-readme-includes.git", + "ssh_url": "git@github.com:assemble/verb-readme-includes.git", + "clone_url": "https://github.com/assemble/verb-readme-includes.git", + "svn_url": "https://github.com/assemble/verb-readme-includes", + "homepage": null, + "size": 0, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/verb-readme-includes", + "download": "https://github.com/assemble/verb-readme-includes/archive/master.zip" + }, + { + "id": 18014124, + "name": "verb-readme-templates", + "full_name": "assemble/verb-readme-templates", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/verb-readme-templates", + "description": "README templates for Verb.", + "fork": false, + "url": "https://github.com/assemble/verb-readme-templates", + "forks_url": "https://api.github.com/repos/assemble/verb-readme-templates/forks", + "keys_url": "https://api.github.com/repos/assemble/verb-readme-templates/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/verb-readme-templates/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/verb-readme-templates/teams", + "hooks_url": "https://api.github.com/repos/assemble/verb-readme-templates/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/verb-readme-templates/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/verb-readme-templates/events", + "assignees_url": "https://api.github.com/repos/assemble/verb-readme-templates/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/verb-readme-templates/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/verb-readme-templates/tags", + "blobs_url": "https://api.github.com/repos/assemble/verb-readme-templates/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/verb-readme-templates/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/verb-readme-templates/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/verb-readme-templates/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/verb-readme-templates/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/verb-readme-templates/languages", + "stargazers_url": "https://api.github.com/repos/assemble/verb-readme-templates/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/verb-readme-templates/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/verb-readme-templates/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/verb-readme-templates/subscription", + "commits_url": "https://api.github.com/repos/assemble/verb-readme-templates/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/verb-readme-templates/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/verb-readme-templates/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/verb-readme-templates/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/verb-readme-templates/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/verb-readme-templates/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/verb-readme-templates/merges", + "archive_url": "https://api.github.com/repos/assemble/verb-readme-templates/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/verb-readme-templates/downloads", + "issues_url": "https://api.github.com/repos/assemble/verb-readme-templates/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/verb-readme-templates/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/verb-readme-templates/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/verb-readme-templates/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/verb-readme-templates/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/verb-readme-templates/releases{/id}", + "created_at": "2014-03-22T16:31:16Z", + "updated_at": "2014-03-23T07:39:50Z", + "pushed_at": "2014-03-23T07:39:50Z", + "git_url": "git://github.com/assemble/verb-readme-templates.git", + "ssh_url": "git@github.com:assemble/verb-readme-templates.git", + "clone_url": "https://github.com/assemble/verb-readme-templates.git", + "svn_url": "https://github.com/assemble/verb-readme-templates", + "homepage": null, + "size": 0, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/verb-readme-templates", + "download": "https://github.com/assemble/verb-readme-templates/archive/master.zip" + }, + { + "id": 15998751, + "name": "yfm", + "full_name": "assemble/yfm", + "owner": { + "login": "assemble", + "id": 2645080, + "avatar_url": "https://avatars.githubusercontent.com/u/2645080?", + "gravatar_id": "d68b5947524ac7869e76da923a228dcf", + "url": "https://api.github.com/users/assemble", + "html_url": "https://github.com/assemble", + "followers_url": "https://api.github.com/users/assemble/followers", + "following_url": "https://api.github.com/users/assemble/following{/other_user}", + "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", + "organizations_url": "https://api.github.com/users/assemble/orgs", + "repos_url": "https://api.github.com/users/assemble/repos", + "events_url": "https://api.github.com/users/assemble/events{/privacy}", + "received_events_url": "https://api.github.com/users/assemble/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/assemble/yfm", + "description": "YAML front-matter parsing and extraction library.", + "fork": false, + "url": "https://github.com/assemble/yfm", + "forks_url": "https://api.github.com/repos/assemble/yfm/forks", + "keys_url": "https://api.github.com/repos/assemble/yfm/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/assemble/yfm/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/assemble/yfm/teams", + "hooks_url": "https://api.github.com/repos/assemble/yfm/hooks", + "issue_events_url": "https://api.github.com/repos/assemble/yfm/issues/events{/number}", + "events_url": "https://api.github.com/repos/assemble/yfm/events", + "assignees_url": "https://api.github.com/repos/assemble/yfm/assignees{/user}", + "branches_url": "https://api.github.com/repos/assemble/yfm/branches{/branch}", + "tags_url": "https://api.github.com/repos/assemble/yfm/tags", + "blobs_url": "https://api.github.com/repos/assemble/yfm/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/assemble/yfm/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/assemble/yfm/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/assemble/yfm/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/assemble/yfm/statuses/{sha}", + "languages_url": "https://api.github.com/repos/assemble/yfm/languages", + "stargazers_url": "https://api.github.com/repos/assemble/yfm/stargazers", + "contributors_url": "https://api.github.com/repos/assemble/yfm/contributors", + "subscribers_url": "https://api.github.com/repos/assemble/yfm/subscribers", + "subscription_url": "https://api.github.com/repos/assemble/yfm/subscription", + "commits_url": "https://api.github.com/repos/assemble/yfm/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/assemble/yfm/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/assemble/yfm/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/assemble/yfm/issues/comments/{number}", + "contents_url": "https://api.github.com/repos/assemble/yfm/contents/{+path}", + "compare_url": "https://api.github.com/repos/assemble/yfm/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/assemble/yfm/merges", + "archive_url": "https://api.github.com/repos/assemble/yfm/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/assemble/yfm/downloads", + "issues_url": "https://api.github.com/repos/assemble/yfm/issues{/number}", + "pulls_url": "https://api.github.com/repos/assemble/yfm/pulls{/number}", + "milestones_url": "https://api.github.com/repos/assemble/yfm/milestones{/number}", + "notifications_url": "https://api.github.com/repos/assemble/yfm/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/assemble/yfm/labels{/name}", + "releases_url": "https://api.github.com/repos/assemble/yfm/releases{/id}", + "created_at": "2014-01-17T12:08:27Z", + "updated_at": "2014-01-27T08:44:28Z", + "pushed_at": "2014-01-27T08:44:26Z", + "git_url": "git://github.com/assemble/yfm.git", + "ssh_url": "git@github.com:assemble/yfm.git", + "clone_url": "https://github.com/assemble/yfm.git", + "svn_url": "https://github.com/assemble/yfm", + "homepage": null, + "size": 208, + "stargazers_count": 5, + "watchers_count": 5, + "language": "JavaScript", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 1, + "forks": 0, + "open_issues": 1, + "watchers": 5, + "default_branch": "master", + "master_branch": "master", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "fullname": "assemble/yfm", + "download": "https://github.com/assemble/yfm/archive/master.zip" + } + ] +} \ No newline at end of file diff --git a/data/_utils/README.md b/data/_utils/README.md new file mode 100644 index 0000000..1056ac1 --- /dev/null +++ b/data/_utils/README.md @@ -0,0 +1,5 @@ +# pkg.js + +> Basic script for pulling down the package.json for Less.js from GitHub + +Just run `node pkg` from this directory, or `node data/utils/pkg` from the project root, and you're in business! \ No newline at end of file diff --git a/data/_utils/dates.js b/data/_utils/dates.js new file mode 100644 index 0000000..55ce83f --- /dev/null +++ b/data/_utils/dates.js @@ -0,0 +1,27 @@ +var path = require('path'); + +var re = /(\d{4})-(\d{2})-(\d{2})-(.+)/; + +var extname = function(str) { + return path.basename(str, path.extname(str)); +}; + +var year = exports.year = function(str) { + return extname(str).replace(re, '$1'); +}; + +var month = exports.month = function(str) { + return extname(str).replace(re, '$2'); +}; + +var day = exports.day = function(str) { + return extname(str).replace(re, '$3'); +}; + +var slug = exports.slug = function(str) { + return extname(str).replace(re, '$4'); +}; + +exports.toPost = function(str) { + return extname(str).replace(re, '$1/$2/$3/$4'); +}; diff --git a/data/_utils/extend-pkg.js b/data/_utils/extend-pkg.js new file mode 100644 index 0000000..6e892c7 --- /dev/null +++ b/data/_utils/extend-pkg.js @@ -0,0 +1,5 @@ +module.exports = { + repo: 'https://github.com/assemble/assemble.git', + issues: 'https://github.com/assemble/assemble/issues', + master: 'https://github.com/assemble/assemble/blob/master' +}; \ No newline at end of file diff --git a/data/_utils/pkg.js b/data/_utils/pkg.js new file mode 100644 index 0000000..888a9c6 --- /dev/null +++ b/data/_utils/pkg.js @@ -0,0 +1,51 @@ +/*! + * Pull down the package.json for a project + * Customize `user`, `repo`, `path` and `dest`. + * + * Run `node pkg` to pull down the file. + */ + +var path = require('path'); +var file = require('fs-utils'); +var _ = require('lodash'); + +var cwd = path.join.bind(null, process.cwd()); +var destination = cwd('data/_assemble.json'); + + +var githubApi = require('github'); +var github = new githubApi({ + version: '3.0.0', + timeout: 5000 +}); + +var getPackageFile = function (dest) { + + // Get package.json + github.repos.getContent({ + user: 'assemble', + repo: 'assemble', + path: 'package.json' + }, + + function (err, resp, callback) { + if (err) { + console.log('error: ' + err); + callback(err, null); + } else { + var buffer = new Buffer(resp.content, 'base64'); + var pkg = { + name: resp.name, + contents: JSON.parse(buffer.toString()) + }; + + // Extend package.json with custom properties + _.extend(pkg.contents, require('./extend-pkg')); + + file.writeJSONSync(dest, pkg.contents); + console.log('Saved:', dest); + } + }); +}; + +getPackageFile(destination); diff --git a/data/_utils/utils.js b/data/_utils/utils.js new file mode 100644 index 0000000..16e21be --- /dev/null +++ b/data/_utils/utils.js @@ -0,0 +1,149 @@ +const url = require('url'); +const file = require('fs-utils'); +const origin = require('remote-origin-url'); +const branch = require('git-branch'); +const repoUrl = require('github-repo-url'); +const ghUsername = require('git-username'); +const ghRepoName = require('git-repo-name'); + + +var utils = module.exports = {}; + + + +/** + * Get the current branch for a local git repository + */ + +utils.uppercase = function(str) { + return str.toUpperCase(); +}; + + +/** + * Get the current branch for a local git repository + */ + +utils.origin = origin.url(); + + +/** + * Get the current branch for a local git repository + */ + +utils.branch = branch; + + +/** + * Get the remote origin url for a local git repository + */ + +utils.repo_url = (function() { + return repoUrl; +}); + +/** + * Get the username from the GitHub remote origin URL + */ + +utils.username = (function() { + return ghUsername; +}); + + +/** + * Get the repo name from the GitHub remote origin URL + */ + +utils.repo_name = ghRepoName; + + +/** + * Count the number of files returned from the + * given glob pattern. + */ + +utils.fileCount = function(str) { + console.log(str) + return file.expand(str).length; +}; + + +/** + * Get the hostname of a URL + * @param {String} str The full URL to parse + * @return {String} The hostname only + * @example + * <%= _.hostname('https://assemble.io') %> + * => assemble.io + */ + +utils.hostname = function(str) { + return url.parse(str).hostname; +}; + + +/** + * Strip `.git` from the end of a URL, so the URL + * can be used and extended in config values. + * + * @param {String} str + * @return {String} + * @example + * <%= _.stripGit('https://github.com/assemble/assemble.io.git') %> + * => https://github.com/assemble/assemble.io + */ + +utils.stripGit = function(url) { + var git = /\.git$/; + if (git.test(url)) { + return url.replace(git, ''); + } + return url; +}; + + + + +/** + * Date functions used in _.date() mixin + * + * @name formatDate + * @param {Object} dateobj The date object to format. + * @param {String} structure The structure to use, e.g. 'YYYY-MM-DD'. + * + * @return {String} The formatted date. + * @api public + */ + +utils.date = function(structure) { + /* jshint unused: false */ + + var dateobj = new Date(); + + var year = dateobj.getFullYear(); + var month = ('0' + (dateobj.getMonth() + 1)).slice(-2); + var date = ('0' + dateobj.getDate()).slice(-2); + var hours = ('0' + dateobj.getHours()).slice(-2); + var minutes = ('0' + dateobj.getMinutes()).slice(-2); + var seconds = ('0' + dateobj.getSeconds()).slice(-2); + var day = dateobj.getDay(); + + var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + var dates = ['Sunday', 'Monday', 'Tuesday', 'Wendesday', 'Thursday', 'Friday', 'Saturday']; + var output = ''; + + structure = structure || 'YYYY-MMM-DD DDD'; + switch (structure) { + case 'YYYY-MM-DD': + output = year + '-' + month + '-' + date; + break; + case 'YYYY': + output = year; + break; + case 'full': + output = dates[parseInt(day)] + ', ' + months[parseInt(month) - 1] + ' ' + date + ', ' + year; + break; + } + return output; +}; diff --git a/data/button.yml b/data/button.yml new file mode 100644 index 0000000..9033cd8 --- /dev/null +++ b/data/button.yml @@ -0,0 +1,43 @@ +# Button data + +- text: Info + modifier: btn-info + +- text: Success + modifier: btn-success + +- text: Warning + modifier: btn-warning + +- text: Default + modifier: btn-default + +- text: Primary + modifier: btn-primary + +- text: Danger + modifier: btn-danger + +- text: Jade + modifier: btn-jade + +- text: Inverse + modifier: btn-inverse + +- text: Dark + modifier: button-dark + +- text: Jade Alt + modifier: button-jade-alt + +- text: Cool Gray + modifier: button-coolgray + +- text: White + modifier: button-white + +- text: Outline + modifier: btn-outline + +- text: Outline Inverse + modifier: btn-outline-inverse \ No newline at end of file diff --git a/data/community/helpers.yml b/data/community/helpers.yml new file mode 100644 index 0000000..9fa0f32 --- /dev/null +++ b/data/community/helpers.yml @@ -0,0 +1,11 @@ +# ============================================= +# Helpers +# ============================================= + +community: + - + author: "@jonschlinkert" + name: assemble-plugin-name + repo: "https://github.com/foo/bar" + description: > + Foo, bar baz diff --git a/data/community/middleware.yml b/data/community/middleware.yml new file mode 100644 index 0000000..ecf0057 --- /dev/null +++ b/data/community/middleware.yml @@ -0,0 +1,21 @@ +# ============================================= +# Plugins +# ============================================= + + +core: + - + author: "@jonschlinkert" + name: assemble-plugin-name + repo: "https://github.com/foo/bar" + description: > + Foo, bar baz + + +community: + - + author: "@jonschlinkert" + name: assemble-plugin-name + repo: "https://github.com/foo/bar" + description: > + Foo, bar baz diff --git a/data/community/team.yml b/data/community/team.yml new file mode 100644 index 0000000..979e5e3 --- /dev/null +++ b/data/community/team.yml @@ -0,0 +1,18 @@ +# ============================================= +# Team: Alphabetical Order +# ============================================= + +- name: Brian Woodward + username: doowb + follow: "http://ghbtns.com/github-btn.html?user=doowb&type=follow" + gravatar: "https://avatars.githubusercontent.com/u/995160" + +- name: Jon Schlinkert + username: jonschlinkert + follow: "http://ghbtns.com/github-btn.html?user=jonschlinkert&type=follow" + gravatar: "https://avatars.githubusercontent.com/u/383994" + +- name: Hariadi Hinta + username: hariadi + follow: "http://ghbtns.com/github-btn.html?user=hariadi&type=follow" + gravatar: "https://avatars.githubusercontent.com/u/376635" diff --git a/data/community/users.yml b/data/community/users.yml new file mode 100644 index 0000000..c256c7f --- /dev/null +++ b/data/community/users.yml @@ -0,0 +1,51 @@ +# ------- PLEASE READ ------- (borrowed from Ember.js) +# +# To have your pull request accepted, you must email assemble@sellside.com +# with the subject line "Assemble User Logo Contact". Please include the +# name and email of a contact we can reach out to should we ever need to +# make changes to this page or get logo variants. +# +# Please also be sure the logo you upload has a transparent background, +# and adequate whitespace. + +# These logos are in a particular order, most recently; that being the +# order in which people made their requests. Be respectful to those who +# came before you and add your name to the *bottom* + +# TODO: Add more references from: https://github.com/assemble/assemble/issues/300 + +- name: Zurb Ink + gruntfile: https://github.com/zurb/ink/blob/master/Gruntfile.js + website: http://zurb.com/ink/ + imageUrl: + imagePath: <%= site.images %>/users/ + +- name: Zurb Foundation + gruntfile: https://github.com/zurb/foundation/blob/master/Gruntfile.js + website: http://foundation.zurb.com/ + imageUrl: + imagePath: <%= site.images %>/users/ + +- name: Typeplate + gruntfile: https://github.com/typeplate/typeplate.github.io/blob/master/Gruntfile.js + website: http://typeplate.com/ + imageUrl: https://raw.github.com/typeplate/typeplate.github.io/master/img/logo.png + imagePath: <%= site.images %>/users/typeplate.png + +- name: Effeckt.css + gruntfile: https://github.com/h5bp/Effeckt.css/blob/master/Gruntfile.js + website: http://h5bp.github.io/Effeckt.css/ + imageUrl: + imagePath: <%= site.images %>/users/ + +- name: Less.js + gruntfile: https://github.com/less/less-docs/blob/master/Gruntfile.js + website: http://lesscss.org/ + imageUrl: https://github.com/less/less-docs/blob/master/assets/public/img/logo.png + imagePath: <%= site.images %>/users/less.png + +- name: Topcoat + gruntfile: https://github.com/topcoat/topcoat-grunt-telemetry/blob/master/Gruntfile.js + website: http://topcoat.io/ + imageUrl: + imagePath: <%= site.images %>/users/ diff --git a/data/features.yml b/data/features.yml new file mode 100644 index 0000000..8340e5b --- /dev/null +++ b/data/features.yml @@ -0,0 +1,18 @@ +# ============================================= +# SITE SECTIONS +# ============================================= + +# If "true" the section is enabled in the navigation +# please keep sections in alphabetical order. + +about: false +api: false +blog: true +cheatsheet: false +docs: true +examples: true +getting_started: false +guides: false +helpers: true +plugins: true +tutorials: false \ No newline at end of file diff --git a/data/generated-pages/helpers.yml b/data/generated-pages/helpers.yml new file mode 100644 index 0000000..9c63ead --- /dev/null +++ b/data/generated-pages/helpers.yml @@ -0,0 +1,83 @@ +#=========================================== +# HELPERS DOCS CONFIG +#=========================================== + +# The base path for helpers docs +base: content/docs/extensions/helpers + +# Published documenation +published: + collections: + title: Collections + files: <%= helpers.base %>/collections/*.md + + code: + title: Code + files: <%= helpers.base %>/code/*.md + + comparison: + title: Comparison + files: <%= helpers.base %>/comparison/*.md + + content: + title: Content + files: <%= helpers.base %>/content/*.md + + data: + title: Data + files: <%= helpers.base %>/data/*.md + + dates: + title: Dates + files: <%= helpers.base %>/dates/*.md + + html: + title: HTML + files: <%= helpers.base %>/html/*.md + + inflections: + title: Inflections + files: <%= helpers.base %>/inflections/*.md + + logging: + title: Logging + files: <%= helpers.base %>/logging/*.md + + markdown: + title: Markdown + files: <%= helpers.base %>/markdown/*.md + + math: + title: Math + files: <%= helpers.base %>/math/*.md + + misc: + title: Misc + files: <%= helpers.base %>/misc/*.md + + numbers: + title: Numbers + files: <%= helpers.base %>/numbers/*.md + + path: + title: Path + files: <%= helpers.base %>/path/*.md + + strings: + title: Strings + files: <%= helpers.base %>/strings/*.md + + url: + title: URL + files: <%= helpers.base %>/url/*.md + + +# Unpublished documenation +unpublished: + readme: + title: Readme + files: <%= helpers.base %>/readme/*.md + + special: + title: Special + files: <%= helpers.base %>/special/*.md \ No newline at end of file diff --git a/data/generated-pages/releases.yml b/data/generated-pages/releases.yml new file mode 100644 index 0000000..9267326 --- /dev/null +++ b/data/generated-pages/releases.yml @@ -0,0 +1,25 @@ +#=========================================== +# MIGRATIONS DOCS CONFIG +#=========================================== + +# The base path for release docs +base: content/news/releases + + +# Published documenation +published: + intro: + title: Upgrading to v0.5 + files: <%= releases.base %>/v0.5.0/intro.md + + helpers: + title: Helpers + files: <%= releases.base %>/v0.5.0/helpers.md + + plugins: + title: Plugins + files: <%= releases.base %>/v0.5.0/plugins.md + + +# Unpublished documenation +unpublished: diff --git a/data/informative/funfacts.yml b/data/informative/funfacts.yml new file mode 100644 index 0000000..7dac237 --- /dev/null +++ b/data/informative/funfacts.yml @@ -0,0 +1,6 @@ +helpers: + top: + # - "Exactly <%= _.fileCount('content/helpers/**/*.md') %> files were used create this page the last time it was built." + - "This page was converted from markdown." +# - "When this page is built by Assemble, all <%= _.fileCount('content/helpers/**/*.md') %> files are concatenated, converted to HTML, wrapped with a layout, templates are compiled and the final pages rendered!" + - "The file count in the first fact is automatically generated by the `_.fileCount` Lo-Dash mixin, found in the data/utils directory of the assemble.io project." diff --git a/data/informative/quotes.yml b/data/informative/quotes.yml new file mode 100644 index 0000000..8ff6f3b --- /dev/null +++ b/data/informative/quotes.yml @@ -0,0 +1,103 @@ +- name: Cory Logan + username: counterbeing + origin: assemble-issues + link: + message: > + I’ve been dreaming about a project like this for a year now, but had no idea it existed. Thanks again! + +- name: Matt Bailey + username: _mattbailey + origin: Twitter + link: https://twitter.com/_mattbailey/status/391264100782981120 + message: > + Assemble is awesome! + +- name: Bobby Bobak + username: bobek_balinek + origin: Twitter + link: https://twitter.com/bobek_balinek/statuses/346937578773172224 + message: > + That Assemble module has just completely changed my life. Thanks! + +- name: Josh Fry + username: joshfry + origin: Twitter + link: https://twitter.com/joshfry/status/400410774360711168 + message: > + I feel like a super hero with @gruntjs and @assemblejs. Modularity + build process = win. + +- name: Thomas Parisot + username: oncletom + orgs: + origin: Twitter + link: https://twitter.com/oncletom/status/382930631103356928 + message: > + Showing 11,844 changed files with 2,167,282 additions and 1,061 deletions. — done with @assemblejs :-) + +- name: Sacha Schmid + username: sachaschmid + origin: Twitter + link: https://twitter.com/sachaschmid/status/401105973336879104 + message: > + Started using Assemble. Seems far better suited for static-site-generation on non-blog sites than Jekyll. + +- name: Demetri Ganoff + username: DGanoff + origin: Twitter + link: https://twitter.com/DGanoff/status/392812423960203265 + message: > + Rebuilt my personal site in 2 days with @assemblejs static site generator for @gruntjs. So far I love it! http://demetridesign.com + +- name: Dane Petersen + username: thegreatsunra + github: https://github.com/thegreatsunra + orgs: https://github.com/GeneralElectric + origin: Twitter + link: https://twitter.com/thegreatsunra/status/404745898254557184 + message: > + What makes @assemblejs so powerful is its flexibility, which also made it a bit of a challenge to learn. + +- name: Dane Petersen + username: thegreatsunra + github: https://github.com/thegreatsunra + orgs: https://github.com/GeneralElectric + origin: Twitter + link: https://twitter.com/thegreatsunra/status/404746880753475585 + message: > + What's great is, after you understand @gruntjs you can use @assemblejs to build whatever you want, however you want. + +- name: Dane Petersen + username: thegreatsunra + github: https://github.com/thegreatsunra + orgs: https://github.com/GeneralElectric + origin: Twitter + link: https://twitter.com/thegreatsunra/status/404746498673348609 + message: > + Assemble is an awesome collection of task helpers, and it's up to you to enforce convention. + +- name: Dane Petersen + username: thegreatsunra + github: https://github.com/thegreatsunra + orgs: https://github.com/GeneralElectric + origin: Twitter + link: https://twitter.com/thegreatsunra/status/404777836516356096 + message: > + I absolutely agree! Once I wrapped my head around it, @assemblejs was far and beyond the best tool of the bunch. + +- name: kenfrederick + username: frederickk + github: https://github.com/frederickk + orgs: + origin: StackOverflow + link: http://stackoverflow.com/questions/19867677/grunt-pre-compile-inline-markdown + message: > + This system works like a dream, hats off to the Assemble.io guys. + +- name: Sharat M.R + username: cosmos_genius + github: https://github.com/cosmosgenius + orgs: + origin: Twitter + link: https://twitter.com/cosmos_genius/status/410476670714265601 + message: > + The coolest static website generator i have ever seen awesome!!! diff --git a/data/informative/updates.yml b/data/informative/updates.yml new file mode 100644 index 0000000..c7072af --- /dev/null +++ b/data/informative/updates.yml @@ -0,0 +1,17 @@ +recent: +- date: "2013-05-12" + commentary: + - Big news today! + - More news. +- date: "2013-05-13" + commentary: + - Big news today! +- date: "2013-05-14" + commentary: + - Big news today! +- date: "2013-05-15" + commentary: + - Big news today! +- date: "2013-05-16" + commentary: + - Big news today! \ No newline at end of file diff --git a/data/jumbotron.yml b/data/jumbotron.yml new file mode 100644 index 0000000..3ca4490 --- /dev/null +++ b/data/jumbotron.yml @@ -0,0 +1,5 @@ +heading: "build something" +lead: "It has never been easier to leverage the full force of powerful frameworks like Bootstrap and Zurb Foundation. Nothing can stop you now." +btn: + modifier: btn-inverse + text: "Download Assemble" diff --git a/data/menu.json b/data/menu.json new file mode 100644 index 0000000..ef3c912 --- /dev/null +++ b/data/menu.json @@ -0,0 +1,27 @@ +{ + "content": [ + { + "link": true, + "url": "<%= site.repo %>", + "text": "Docs repo" + }, + { + "link": true, + "url": "<%= site.issues %>", + "text": "Docs issues" + }, + { + "link": false + }, + { + "link": true, + "url": "<%= assemble.repo %>", + "text": "Assemble issues" + }, + { + "link": true, + "url": "<%= assemble.issues %>", + "text": "Assemble issues" + } + ] +} \ No newline at end of file diff --git a/data/nav.yml b/data/nav.yml new file mode 100644 index 0000000..22f7c1a --- /dev/null +++ b/data/nav.yml @@ -0,0 +1,114 @@ +# ============================================= +# SITE NAVIGATION +# ============================================= + + +# Used by {{> list nav.main }}: +# - which uses the `list.hbs` template +# - the first variable, `nav`, means there is a `nav` property on the context, +# in this case the name of this file, `nav.yml`, supplies that property +# - thus, the `.main` part of `nav.main` is the following property: +main: + + # In `list.hbs` you will see that variable in the first block expression + # is {{#each navigation}}, which is the following: + navigation: + + # left nav + # ===================================== + - modifier: nav navbar-nav + items: + + + # Below, the <%= features %> templates use the values in `features.yml` + # to determine whether or not the nav item should be enabled. This allows + # us, when necessary, to control any related site features from a central + # location. + # + # In other words, when you disable a feature, you may want to hide the + # nav, as well as any content referencing that feature. + + # `Getting Started` link + - enabled: <%= features.getting_started %> + url: getting-started.html + text: Getting Started + + # Dropdown Menu: `Docs` link + - dropdown: true + modifier: dropdown-menu + text: Docs + + # Dropdown items + items: + - enabled: <%= features.helpers %> + url: helpers.html + text: Helpers + + - enabled: <%= features.plugins %> + url: plugins.html + text: Plugins + + - enabled: <%= features.api %> + url: api.html + text: API + + # right nav + # ===================================== + - modifier: nav navbar-nav navbar-right + items: + + # `Blog` link + - enabled: <%= features.blog %> + url: blog.html + text: Blog + + # `About` link + - enabled: <%= features.about %> + url: about.html + text: About + + # Dropdown Menu: `More` link + - dropdown: true + modifier: dropdown-menu + text: More + + # Dropdown items + items: + - enabled: <%= features.guides %> + url: guides.html + text: Guides + + - enabled: <%= features.tutorials %> + url: tutorials.html + text: Tutorials + + - enabled: <%= features.cheatsheets %> + url: cheatsheets.html + text: Cheatsheets + + - enabled: <%= features.examples %> + url: examples.html + text: Examples + + # divider + - divider: true + + - enabled: true + url: <%= site.repo %> + text: Docs repo + + - enabled: true + url: <%= site.issues %> + text: Docs issues + + # divider + - divider: true + + - enabled: true + url: <%= assemble.repo %> + text: Assemble repo + + - enabled: true + url: <%= assemble.issues %> + text: Assemble issues + diff --git a/data/teaser.yml b/data/teaser.yml new file mode 100644 index 0000000..80c93f0 --- /dev/null +++ b/data/teaser.yml @@ -0,0 +1,19 @@ +# teaser banner, directly below masthead +masthead: + title: Assemble + subtitle: "The static site generator for Node.js." + linkable: true + modifier: + url: "https://github.com/h5bp/Effeckt.css" + +# Bottom teaser +footer: + button: + href: "#" + modifier: "button-jade button-large pull-right" + text: "Visit Assemble on GitHub" + link: "#" + modifier: "banner-inverse banner-large" + static: true + subtitle: + title: "

Get started with some examples.

" diff --git a/docs/toc.md b/docs/toc.md new file mode 100644 index 0000000..484da36 --- /dev/null +++ b/docs/toc.md @@ -0,0 +1,96 @@ +> tracking issue to discuss ideas/goals for actual documentation. + +### General goals. +- [ ] more welcoming to newcomers. this is the top priority +- [ ] better getting started info +- [ ] tutorials +- [ ] blog: with posts from core team and guests + +### Home page +- [ ] Improved [home page design](https://github.com/assemble/assemble.io/issues/95) +- [ ] featured [community projects](https://github.com/assemble/assemble.io/issues/100) +- [ ] links to specific documentation topics + +### getting started +- [ ] installation + * generator-assemble + * boilerplates +- [ ] basic usage examples +- [ ] basic configuration +- [ ] migrating from jekyll + +### User documentation + +#### Templates +- [ ] layouts +- [ ] pages +- [ ] partials / includes +- [ ] variables +- [ ] collections + +#### Content +- [ ] posts +- [ ] drafts + +#### Data +- [ ] data files +- [ ] front matter + +#### Configuration +- [ ] options +- [ ] project structure + +#### Runners +- [ ] [assemble-cli](https://github.com/assemble/assemble-cli): Assemble's command line interface +- [ ] [grunt-assemble](https://github.com/assemble/grunt-assemble) +- [ ] [gulp-assemble](https://github.com/assemble/gulp-assemble) + +#### Customization +- [ ] pagination +- [ ] permalinks +- [ ] helpers +- [ ] mixins +- [ ] middleware + +### API documentation +- [ ] engines + +### Resources +> Search for (community / core): + +- [ ] projects +- [ ] boilerplates +- [ ] middleware +- [ ] helpers +- [ ] mixins + +## Help + +- [ ] GitHub project +- [ ] GitHub Issues +- [ ] StackOverflow + +### Other sections +- [ ] Troubleshooting +- [ ] Tutorials +- [ ] Blog + +### Misc + +> Not sure where to put these topics yet. Feedback is welcome! + +* CSS pre-processors +* Deploying your site +* Using Assemble with Express + + +### Tutorials ideas +- [ ] Optimizing speed (by optimizing data files and config) +- [ ] Migrating from Jekyll +- [ ] Writing a plugin +- [ ] Writing a helper +- [ ] Adding i18n to your project +- [ ] Permalinks (pretty URLs) +- [ ] Using JSON to generate pages +- [ ] Creating a blog with Assemble +- [ ] Using Assemble for a book \ No newline at end of file diff --git a/package.json b/package.json index 6fc8bd7..013cf89 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,12 @@ { - "name": "assemble-docs", - "description": "Static site generator for Grunt.js and Yeoman. Assemble makes it dead simple to build modular sites, blogs, gh-pages, components and documentation from reusable templates and data.", - "version": "0.1.4", - "homepage": "https://github.com/assemble/assemble-docs", + "name": "assemble.io", + "version": "0.3.0", + "description": "Documentation for Assemble.", + "homepage": "http://assemble.io", "author": { - "name": "assemble", - "url": "https://assemble.io/" + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" }, - "main": "Gruntfile.js", "contributors": [ { "name": "Jon Schlinkert", @@ -21,57 +20,33 @@ "licenses": [ { "type": "MIT", - "url": "https://github.com/assemble/assemble-docs/blob/master/LICENSE-MIT" + "url": "https://github.com/assemble/assemble.io/blob/master/LICENSE-MIT" + }, + { + "type": "Creative Commons Attribution 3.0 Unported License", + "url": "http://creativecommons.org/licenses/by/3.0/" } ], "repository": { "type": "git", - "url": "https://github.com/assemble/assemble-docs.git" + "url": "https://github.com/assemble/assemble.io.git" }, "bugs": { - "url": "https://github.com/assemble/assemble-docs/issues" - }, - "engines": { - "node": ">= 0.8.0" + "url": "https://github.com/assemble/assemble.io/issues" }, + "main": "index.js", "devDependencies": { - "assemble": "~0.4.11", - "assemble-less": "~0.5.3", - "grunt": "~0.4.1", - "grunt-contrib-clean": "~0.4.0", - "grunt-contrib-copy": "~0.4.1", - "grunt-contrib-jshint": "~0.6.0", - "grunt-github-api": "~0.2.1", - "grunt-newer": "~0.5.1", - "grunt-sync-pkg": "~0.1.0", - "helper-prettify": "~0.1.3", - "highlight.js": "~7.3.0", - "js-prettify": "~1.4.0", - "lodash": "~1.3.1", - "matchdep": "~0.3.0", - "permalinks": "~0.1.3", - "time-grunt": "~0.1.1", - "handlebars-helper-slugify": "~0.2.0", - "handlebars-helper-partial": "~0.1.1" + "assemble-middleware-drafts": "^0.1.3", + "assemble-middleware-navigation": "^0.2.1", + "assemble-middleware-permalinks": "^0.5.2", + "assemble-middleware-wordcount": "^0.4.5", + "helper-markdown": "^0.1.1" }, "keywords": [ - "assemble docs", - "assemble documentation", "assemble", - "blog", - "github blog", - "grunt handlebars", - "grunt site", - "grunt static site generator", - "grunt static site", - "grunt task", - "grunt templates", - "grunt", - "site", - "static blog", - "static", - "website", - "handlebars-helper-slugify", - "handlebars-helper-partial" + "boilerplate", + "docs", + "documentation", + "theme" ] } diff --git a/scripts/.jshintrc b/scripts/.jshintrc new file mode 100644 index 0000000..b9b2ac6 --- /dev/null +++ b/scripts/.jshintrc @@ -0,0 +1,31 @@ +{ + "asi": true, + "boss": true, + "browser": true, + "curly": true, + "debug": true, + "devel": true, + "eqeqeq": true, + "eqnull": true, + "esnext": true, + "expr": true, + "immed": true, + "indent": 2, + "jquery": true, + "latedef": true, + "laxbreak": true, + "newcap": true, + "noarg": true, + "node": true, + "sub": true, + "undef": true, + "unused": true, + "validthis": true, + "globals": { + "define": true, + "before": true, + "after": true, + "describe": true, + "it": true + } +} \ No newline at end of file diff --git a/scripts/application.js b/scripts/application.js new file mode 100644 index 0000000..c74e92a --- /dev/null +++ b/scripts/application.js @@ -0,0 +1,117 @@ +/*! + * Adapted from Bootstrap docs + */ + +!(function ($) { + $(function () { + + // IE10 viewport hack for Surface/desktop Windows 8 bug + // + // See Getting Started docs for more information + if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement('style') + msViewportStyle.appendChild( + document.createTextNode('@-ms-viewport{width:auto!important}') + ) + document.querySelector('head').appendChild(msViewportStyle); + } + + var $window = $(window); + var $body = $(document.body); + + $body.scrollspy({ + target: '.sidebar' + }); + + $window.on('load', function () { + $body.scrollspy('refresh'); + }); + + $('.docs-container [href=#]').click(function (e) { + e.preventDefault(); + }); + + $('.source-link').each(function () { + var id = $(this).data('content'); + var content = $('').append($('#' + id)).html(); + $(this).attr('data-content', content); + + // Keep popovers open when hovered + $(this).popover({ + trigger: 'manual', + container: 'body', + placement: 'left', + // toggle: 'popover', + // template: '

', + html: true, + delay: {show: 50, hide: 750} + }).on('mouseenter', function () { + var self = this; + $(this).popover('show'); + $(this).addClass('active'); + + $('.popover').on('mouseleave', function () { + $(self).popover('hide'); + $(self).removeClass('active'); + }); + + }).on('mouseleave', function () { + var self = this; + setTimeout(function () { + if (!$('.popover:hover').length) { + $(self).popover('hide'); + $(self).removeClass('active'); + } + }, 100); + }); + }); + + + // Dock the content navbar as it arrives just below the navbar. This arrangement + // allows a different navbar to be defined for each content section, but for now + // we're only using one. + var contentNav = $('.navbar-wrap'); + contentNav.each(function(i) { + var navbar = $(contentNav[i]); + var next = contentNav[i + 1]; + + navbar.scrollToFixed({ + marginTop: $('.main-nav').outerHeight(true), + limit: function() { + var limit = 0; + if (next) { + limit = $(next).offset().top - $(this).outerHeight(true) - 10; + } else { + limit = $('.footer').offset().top - $(this).outerHeight(true) - 10; + } + return limit; + }, + zIndex: 999 + }); + }); + + // back to top + setTimeout(function () { + var $sideBar = $('.sidebar'); + + $sideBar.affix({ + offset: { + top: function () { + var offsetTop = $sideBar.offset().top; + var sideBarMargin = parseInt($sideBar.children(0).css('margin-top'), 10); + var navOuterHeight = $('.main-nav').height(); + + return (this.top = offsetTop - navOuterHeight - sideBarMargin); + }, + bottom: function () { + return (this.bottom = $('.footer').outerHeight(true)); + } + } + }) + }, 100); + + setTimeout(function () { + $('.top').affix() + }, 100); + }) +})(jQuery); diff --git a/src/content/helpers/code/helper-gist.md b/src/content/helpers/code/helper-gist.md deleted file mode 100644 index b60af7c..0000000 --- a/src/content/helpers/code/helper-gist.md +++ /dev/null @@ -1,17 +0,0 @@ -#### \{{gist}} -_Embed public GitHub Gists by adding only the Id of the Gist. The helper also accepts an optional second parameter for targeting a specific file on the Gist.._ - -Parameters: `String` -Default: `undefined` -Usage: `\{{ gist [id] }}` - -Example: - -```html -\{{gist '5193239'}} -``` -Output: - -```html - -``` diff --git a/src/content/helpers/collections/helper-any.md b/src/content/helpers/collections/helper-any.md deleted file mode 100644 index db649c1..0000000 --- a/src/content/helpers/collections/helper-any.md +++ /dev/null @@ -1,24 +0,0 @@ -#### \{{any}} -_Conditionally render a block if the collection isn't empty. Opposite of `empty`_ -
Parameters: `none` - -Data: - -```json -"collection": ["Professor Farnswor"] -``` -Templates: - -```html -\{{#any collection}} - Good news everyone! -\{{else}} - Bad news everyone! -\{{/any}} -``` - -Renders to: - -``` -Good news everyone! -``` \ No newline at end of file diff --git a/src/content/helpers/collections/helper-before.md b/src/content/helpers/collections/helper-before.md deleted file mode 100644 index 238645a..0000000 --- a/src/content/helpers/collections/helper-before.md +++ /dev/null @@ -1,30 +0,0 @@ -#### \{{before}} -_Returns all of the items in the collection before the specified count. Opposite of `after`._ -
Parameters: count `int` - How many items to omit from the end. (Required) - -Data: - -```json -"collection": [ - "Amy Wong", - "Bender", - "Dr. Zoidberg", - "Fry", - "Hermes Conrad", - "Leela", - "Professor Farnsworth", - "Scruffy" -] -``` -Template: - -```html -\{{before collection 5}} - -``` - -Renders to: - -```html -Amy Wong, Bender, Dr. Zoidberg -``` diff --git a/src/content/helpers/collections/helper-eachIndex.md b/src/content/helpers/collections/helper-eachIndex.md deleted file mode 100644 index 474617d..0000000 --- a/src/content/helpers/collections/helper-eachIndex.md +++ /dev/null @@ -1,22 +0,0 @@ -#### \{{eachIndex}} -_Current implementation of the default Handlebars loop helper \{{#each}} adding index (0-based index) to the loop context._ -
Parameters: `none` - -Data: - -```json -"collection": ["Professor Farnsworth", "Fry", "Bend"] -``` -Template: - -```html -\{{#eachIndex collection}} - \{{this}} is \{{index}} -\{{/eachIndex}} -``` - -Renders to: - -``` -Professor Farnsworth is 0, Fry is 1, Bender is 2 -``` \ No newline at end of file diff --git a/src/content/helpers/collections/helper-inArray.md b/src/content/helpers/collections/helper-inArray.md deleted file mode 100644 index f459f8e..0000000 --- a/src/content/helpers/collections/helper-inArray.md +++ /dev/null @@ -1,25 +0,0 @@ -#### \{{inArray}} -_Conditionally render a block if a specified value is in the collection._ -
Parameters: value `string|int` - A value to test against. (Required) - -Data: - -```json -"collection": ["Professor Farnsworth", "Fry", "Bend"] -``` -Template: - -```html -\{{#inArray collection "Fry"}} - I'm walking on sunshine! -\{{else}} - I'm walking on darkness. -\{{/inArray}} -``` - -Renders to: - -```html -I'm walking on sunshine! -``` - diff --git a/src/content/helpers/comparison/helper-if_gt.md b/src/content/helpers/comparison/helper-if_gt.md deleted file mode 100644 index f3f81c1..0000000 --- a/src/content/helpers/comparison/helper-if_gt.md +++ /dev/null @@ -1,9 +0,0 @@ -#### \{{if_gt}} -_Conditionally render a block if the value is greater than a given number (If x > y)._ -Parameters: `none` - -```html -\{{#if_gt x compare=y}} ... \{{/if_gt}} -``` - -Author: Dan Harper \ No newline at end of file diff --git a/src/content/helpers/comparison/helper-if_gteq.md b/src/content/helpers/comparison/helper-if_gteq.md deleted file mode 100644 index 85047e4..0000000 --- a/src/content/helpers/comparison/helper-if_gteq.md +++ /dev/null @@ -1,9 +0,0 @@ -#### \{{if_gteq}} -_Conditionally render a block if the value is greater or equal than a given number (If x >= y)._ -Parameters: `none` - -```html -\{{#if_gteq x compare=y}} ... \{{/if_gteq}} -``` - -Author: Dan Harper \ No newline at end of file diff --git a/src/content/helpers/comparison/helper-isnt.md b/src/content/helpers/comparison/helper-isnt.md deleted file mode 100644 index 7cd99f6..0000000 --- a/src/content/helpers/comparison/helper-isnt.md +++ /dev/null @@ -1,22 +0,0 @@ -#### \{{isnt}} -_Conditionally render a block if the condition is false. Opposite of `is`._ -
Parameters: value `string|int` - the value to test against. - -Data: -```javascript -number = 5 -``` - -Template: -```html -\{{#isnt number 5}} - Kiss my shiny metal ass! -\{{else}} - Never mind :( -\{{/isnt}} -``` - -Renders to: -``` -Never mind :( -``` \ No newline at end of file diff --git a/src/content/helpers/comparison/helper-lt.md b/src/content/helpers/comparison/helper-lt.md deleted file mode 100644 index 2547e03..0000000 --- a/src/content/helpers/comparison/helper-lt.md +++ /dev/null @@ -1,24 +0,0 @@ -#### \{{lt}} -_Conditionally render a block if the value is less than a given number. Opposite of `gt`._ -
Parameters: value `string|int` - the value to test against. - -Data: - -```javascript -number = 5 -``` - -Template: - -```html -\{{#lt number 3}} - Kiss my shiny metal ass! -\{{else}} - Never mind :( -\{{/lt}} -``` -Renders to: - -``` -Never mind :( -``` diff --git a/src/content/helpers/comparison/helper-lte.md b/src/content/helpers/comparison/helper-lte.md deleted file mode 100644 index 41ac66c..0000000 --- a/src/content/helpers/comparison/helper-lte.md +++ /dev/null @@ -1,25 +0,0 @@ -#### \{{lte}} -_Conditionally render a block if the value is less or equal than a given number. Opposite of `gte`._ -
Parameters: value `string|int` - the value to test against. - -Data: - -```javascript -number = 5 -``` - -Template: - -```html -\{{#lte number 5}} - Kiss my shiny metal ass! -\{{else}} - Never mind :( -\{{/lte}} -``` - -Renders to: - -``` -Kiss my shiny metal ass! -``` \ No newline at end of file diff --git a/src/content/helpers/comparison/helper-unless_gt.md b/src/content/helpers/comparison/helper-unless_gt.md deleted file mode 100644 index 84f1d4b..0000000 --- a/src/content/helpers/comparison/helper-unless_gt.md +++ /dev/null @@ -1,8 +0,0 @@ -#### \{{unless_gt}} -_Unless greater than (Unless x > y)_ -Parameters: `none` - -```html -\{{#unless_gt x compare=y}} ... \{{/unless_gt}} -``` -Author: Dan Harper \ No newline at end of file diff --git a/src/content/helpers/comparison/helper-unless_gteq.md b/src/content/helpers/comparison/helper-unless_gteq.md deleted file mode 100644 index 701bbfb..0000000 --- a/src/content/helpers/comparison/helper-unless_gteq.md +++ /dev/null @@ -1,9 +0,0 @@ -#### \{{unless_gteq}} -_"Unless x >= y". Render block, unless given value is greater than or equal to._ - -Parameters: `none` - -```html -\{{#unless_gteq x compare=y}} ... \{{/unless_gteq}} -``` -Author: Dan Harper \ No newline at end of file diff --git a/src/content/helpers/comparison/helper-unless_lt.md b/src/content/helpers/comparison/helper-unless_lt.md deleted file mode 100644 index 411fea8..0000000 --- a/src/content/helpers/comparison/helper-unless_lt.md +++ /dev/null @@ -1,9 +0,0 @@ -#### \{{unless_lt}} -_Render block, unless value is less than a given number (Unless x < y)_. - -Parameters: `none` - -```html -\{{#unless_lt x compare=y}} ... \{{/unless_lt}} -``` -Author: Dan Harper \ No newline at end of file diff --git a/src/content/helpers/comparison/helper-unless_lteq.md b/src/content/helpers/comparison/helper-unless_lteq.md deleted file mode 100644 index d0e8609..0000000 --- a/src/content/helpers/comparison/helper-unless_lteq.md +++ /dev/null @@ -1,9 +0,0 @@ -#### \{{unless_lteq}} -_Render block, unless value is less than or equal to a given number (Unless x <= y)_. - -Parameters: `none` - -```html -\{{#unless_lteq x compare=y}} ... \{{/unless_lteq}} -``` -Author: Dan Harper \ No newline at end of file diff --git a/src/content/helpers/content/helper-copy.md b/src/content/helpers/content/helper-copy.md deleted file mode 100644 index 5415976..0000000 --- a/src/content/helpers/content/helper-copy.md +++ /dev/null @@ -1,14 +0,0 @@ -#### \{{copy}} -**example helpers, not for actual use!** -Why do this? The goal is to inspire other concepts that build from this one. - -_Example helper, copies file A to path B._ -
Parameters: `String` -
Default: `undefined` - -Example: - -```html -\{{copy 'a.html' '../dir/b.txt'}} -``` - diff --git a/src/content/helpers/html/helper-blockquote.md b/src/content/helpers/html/helper-blockquote.md deleted file mode 100644 index 37c957a..0000000 --- a/src/content/helpers/html/helper-blockquote.md +++ /dev/null @@ -1,27 +0,0 @@ -{{#todo}} -#### \{{blockquote}} -**Planned...** - -_Create a blockquote. Outputs a string with a given attribution as a quote._ - -Template: - -```html -\{{#blockquote '@doowb' 'http://github.com/source/for/your/quote' 'This is the title' }} - This is your quote. -\{{/blockquote}} -``` -Renders to: - -```html -
-

This is your quote.

- -
-``` -{{/todo}} \ No newline at end of file diff --git a/src/content/helpers/html/helper-br.md b/src/content/helpers/html/helper-br.md deleted file mode 100644 index de3149c..0000000 --- a/src/content/helpers/html/helper-br.md +++ /dev/null @@ -1,18 +0,0 @@ -#### \{{br}} -_Renders `
` elements in the output, based on the number given as a parameter. Not really recommended for general use, but it's here if you need it._ - -Parameters: `Integer|Count`, `Optional` - -The number of `br` elements to render. - -`template.hbs` - -```html -\{{br 5}} -``` - -renders to: - -```html -`




` -``` diff --git a/src/content/helpers/html/helper-doctype.md b/src/content/helpers/html/helper-doctype.md deleted file mode 100644 index e1a402d..0000000 --- a/src/content/helpers/html/helper-doctype.md +++ /dev/null @@ -1,42 +0,0 @@ -#### \{{doctype}} -_Easy way to add an uncommonly used doctype._ - -Default is HTML 5 (``) although this is probably only useful on projects that use anything besides HTML 5. - -Template: - -```html -\{{DOCTYPE 'svg 1.1'}} -``` - -Renders to: - -```html - -``` - -Available doctypes: - -**HTML 5 (default)** -*
- `\{{doctype '5'}}` | aliases: `html`, `html5` - -**XML** -*
- `` -*
- `\{{doctype 'xml'}}` - -**XHTML** -*
- `\{{doctype 'basic'}}` -*
- `\{{doctype 'strict'}}` -*
- `\{{doctype 'transitional'}}` -*
- `\{{doctype 'frameset'}}` -*
- `\{{doctype '1.1'}}` | aliases: `1.1`, `xhtml 1.1` -*
- `\{{doctype 'mobile'}}` - -**HTML 4.01** -*
- `\{{doctype '4'}}` | aliases: `4.01`, `4.01 strict` -*
- `\{{doctype '4.01 trans'}}` -*
- `\{{doctype '4.01 frameset'}}` - -**SVG** -*
- `\{{doctype 'svg'}}` | aliases: `svg`, `svg 1.1`, `svg1.1` -*
- `\{{doctype 'svg 1.0'}}` | aliases: `svg 1.0`, `svg1.0`, `svg1` diff --git a/src/content/helpers/html/helper-timeline.md b/src/content/helpers/html/helper-timeline.md deleted file mode 100644 index 857445c..0000000 --- a/src/content/helpers/html/helper-timeline.md +++ /dev/null @@ -1,28 +0,0 @@ -{{#todo}} -#### \{{timeline}} -**Planned...** - -_Iterates through an array, letting the contents know whether a timeline entry belongs in the left or right column._ - -Parameters: - -* `array` to iterate over, -* `string`: CSS class name for left columns -* `string`: CSS class name for right columns - -Credit: by [@jonschlinkert](http://github.com/jonschlinkert), and based on striped helper from [treehouse blog](http://blog.teamtreehouse.com/handlebars-js-part-2-partials-and-helpers) - -Usage: - -```html -
- \{{#timeline myArray "left" "right"}} -
- \{{> entry}} -
- \{{else}} - There aren't any entries. - \{{/timeline}} -
-``` -{{/todo}} diff --git a/src/content/helpers/inflections/helper-ordinalize.md b/src/content/helpers/inflections/helper-ordinalize.md deleted file mode 100644 index 879f9df..0000000 --- a/src/content/helpers/inflections/helper-ordinalize.md +++ /dev/null @@ -1,19 +0,0 @@ -#### \{{ordinalize}} -_Turns a number into an ordinal string. Taken from the templating library [Walrus](https://github.com/jeremyruppel/walrus) by [Jeremy Ruppel](https://github.com/jeremyruppel)._ - -Parameters: `none` - -Template: - -```html -\{{ordinalize 3}} -\{{ordinalize 1}} -\{{ordinalize 22}} -``` -Renders to: - -``` -3rd -1st -22nd -``` diff --git a/src/content/helpers/math/helper-add.md b/src/content/helpers/math/helper-add.md deleted file mode 100644 index 7ce5643..0000000 --- a/src/content/helpers/math/helper-add.md +++ /dev/null @@ -1,19 +0,0 @@ -#### \{{add}} -_Returns the sum of two numbers._ -
Parameters: value `int` - The number to add to the expression. (Required) - -Data: - -```javascript -value = 5 -``` -Template: - -```html -\{{add value 5}} -``` -Renders to: - -``` -10 -``` diff --git a/src/content/helpers/math/helper-ceil.md b/src/content/helpers/math/helper-ceil.md deleted file mode 100644 index c710c97..0000000 --- a/src/content/helpers/math/helper-ceil.md +++ /dev/null @@ -1,19 +0,0 @@ -#### \{{ceil}} -_Returns the value rounded up to the nearest integer._ -
Parameters: `none` - -Data: - -```javascript -value = 5.6 -``` -Template: - -```html -\{{ceil value}} -``` -Renders to: - -``` -6 -``` diff --git a/src/content/helpers/math/helper-divide.md b/src/content/helpers/math/helper-divide.md deleted file mode 100644 index c7fd7e1..0000000 --- a/src/content/helpers/math/helper-divide.md +++ /dev/null @@ -1,19 +0,0 @@ -#### \{{divide}} -_Returns the division of two numbers._ -
Parameters: value `int` - The number to divide the expression. (Required) - -Data: - -```javascript -value = 5 -``` -Template: - -```html -\{{divide value 5}} -``` -Renders to: - -``` -1 -``` diff --git a/src/content/helpers/math/helper-floor.md b/src/content/helpers/math/helper-floor.md deleted file mode 100644 index e3cdbc3..0000000 --- a/src/content/helpers/math/helper-floor.md +++ /dev/null @@ -1,19 +0,0 @@ -#### \{{floor}} -_Returns the value rounded down to the nearest integer._ -
Parameters: `none` - -Data: - -```javascript -value = 5.6 -``` -Template: - -```html -\{{floor value}} -``` -Renders to: - -``` -5 -``` diff --git a/src/content/helpers/math/helper-multiply.md b/src/content/helpers/math/helper-multiply.md deleted file mode 100644 index 9366799..0000000 --- a/src/content/helpers/math/helper-multiply.md +++ /dev/null @@ -1,20 +0,0 @@ -#### \{{multiply}} -_Returns the multiplication of two numbers._ -
Parameters: value `int` - The number to multiply the expression. (Required) - -Data: - -```javascript -value = 5 - -``` -Template: - -```html -\{{multiply value 5}} -``` -Renders to: - -``` -25 -``` diff --git a/src/content/helpers/math/helper-round.md b/src/content/helpers/math/helper-round.md deleted file mode 100644 index 3149b40..0000000 --- a/src/content/helpers/math/helper-round.md +++ /dev/null @@ -1,19 +0,0 @@ -#### \{{round}} -_Returns the value rounded to the nearest integer._ -
Parameters: `none` - -Data: - -```javascript -value = 5.69 -``` -Template: - -```html -\{{round value}} -``` -Renders to: - -``` -6 -``` diff --git a/src/content/helpers/math/helper-subtract.md b/src/content/helpers/math/helper-subtract.md deleted file mode 100644 index d199916..0000000 --- a/src/content/helpers/math/helper-subtract.md +++ /dev/null @@ -1,19 +0,0 @@ -#### \{{subtract}} -_Returns the difference of two numbers. Opposite of `add`_ -
Parameters: value `int` - The number to subtract from the expression. (Required)_ - -Data: - -```javascript -value = 5 -``` -Template: - -```html -\{{subtract value 5}} -``` -Renders to: - -``` -0 -``` diff --git a/src/content/helpers/math/helper-sum.md b/src/content/helpers/math/helper-sum.md deleted file mode 100644 index bda0c46..0000000 --- a/src/content/helpers/math/helper-sum.md +++ /dev/null @@ -1,23 +0,0 @@ -#### \{{sum}} -_Returns the sum of multiple numbers. Similar to `\{{#add}}` block helper but accepts multiple arguments._ -
Parameters: `none` - -Data: - -```javascript -value = { - a: 1, - b: 2, - c: 3 -} -``` -Template: - -```html -\{{sum value.a value.b value.c}} -``` -Renders to: - -``` -6 -``` diff --git a/src/content/helpers/misc/helper-default.md b/src/content/helpers/misc/helper-default.md deleted file mode 100644 index 0e7abac..0000000 --- a/src/content/helpers/misc/helper-default.md +++ /dev/null @@ -1,14 +0,0 @@ -#### \{{default}} -_Provides a default or fallback value if a value doesn't exist._ -
Parameters: defaultValue `string|int` - The default value to use. `title = ''` - -Template: - -```html -\{{default title "No title available."}} -``` -Renders to: - -``` -No title available. -``` diff --git a/src/content/helpers/misc/helper-noop.md b/src/content/helpers/misc/helper-noop.md deleted file mode 100644 index 8203f05..0000000 --- a/src/content/helpers/misc/helper-noop.md +++ /dev/null @@ -1,3 +0,0 @@ -#### \{{noop}} - -TODO... \ No newline at end of file diff --git a/src/content/helpers/new-helpers.md b/src/content/helpers/new-helpers.md deleted file mode 100644 index 9a1260a..0000000 --- a/src/content/helpers/new-helpers.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -published: false ---- - -## \\{{#loop}} -some_object = { foo: { firstname: 'John', lastname: 'Johnson' }, bar: { firstname: 'Peter', lastname: 'Parker' } }; - -with: - -```handlebars -\{{#loop some_object}} - \{{__key}}: \{{firstname}} - \{{lastname}}
-\{{/loop}} -``` - -Results in: - -```html -foo: John Johnson
-bar: Peter Parker
-``` - -### \{{check}} - -```handlebars -\{{#check variable "xx" }} - do something if variable is equal to "xx" -\{{else}} - do something if variable is not equal to "xx" -\{{/check}} -``` - -### \{{checknot}} - -Opposite of \{{check}}. - - -### \{{eq}} - -```html -link -``` - -### \{{def}} - -```html -
\{{def variable "default_value"}}
-``` - -### \{{truncate}} - -```html -
\{{truncate "some very long text" 10}}
-``` - -### \{{assign}} - -Attention, the following helper is some kind of workaround, do not use this function unless you know what are you doing and you really need this. - -```js -foo=bar -``` - -```handlebars -\{{assign "tmp_var" "this " "is " "some " "combined " "string " "with " foo " variable" }} -``` - -Results in `tmp_var="this is some combined string with bar variable"` - - -You can see and examine other functions in script.js - - -## LICENSE -MIT - - -## AUTHORS -Arminas Žukauskas \ No newline at end of file diff --git a/src/content/helpers/numbers/helper-toFixed.md b/src/content/helpers/numbers/helper-toFixed.md deleted file mode 100644 index a9f8259..0000000 --- a/src/content/helpers/numbers/helper-toFixed.md +++ /dev/null @@ -1,22 +0,0 @@ -#### \{{toFixed}} -_Returns exactly `digits` after the decimal place. The number is rounded if necessary, and the fractional part is padded with zeros if necessary so that it has the specified length._ - -Parameters: digits `int` - The number of digits to appear after the decimal point. (Optional) - -Data: - -```javascript -value = 5.53231 -``` - -Template: - -```html -\{{toFixed value 3}} -``` - -Renders to: - -``` -5.532 -``` diff --git a/src/content/helpers/path/_readme.md b/src/content/helpers/path/_readme.md deleted file mode 100644 index 2368f02..0000000 --- a/src/content/helpers/path/_readme.md +++ /dev/null @@ -1,4 +0,0 @@ -Path helpers are [node.js](http://nodejs.org/api/path.html) utilities for handling and transforming file paths. As with node.js: - -> "these helpers perform only string transformations. The file system is not consulted to check whether paths are valid." - diff --git a/src/content/helpers/path/helper-dirname.md b/src/content/helpers/path/helper-dirname.md deleted file mode 100644 index 71937ca..0000000 --- a/src/content/helpers/path/helper-dirname.md +++ /dev/null @@ -1,14 +0,0 @@ -#### \{{_dirname}} -_Return the directory name of a path. Similar to the Unix dirname command._ - -Template: - -```html -\{{_dirname '/foo/bar/baz/asdf/quux'}} -``` - -Renders to: - -``` -'/foo/bar/baz/asdf' -``` diff --git a/src/content/helpers/path/helper-extname.md b/src/content/helpers/path/helper-extname.md deleted file mode 100644 index a348753..0000000 --- a/src/content/helpers/path/helper-extname.md +++ /dev/null @@ -1,37 +0,0 @@ -#### \{{_extname}} -_"Return the extension of the path, from the last '.' to end of string in the last portion of the path. If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string."_ - -Parameters: `string` (the value to test against). -Default: `none` - -Template: - -```html -\{{_extname 'index.html'}} -``` - -Renders to: - -``` -.html -``` - -Template: - -```html -\{{_extname 'index.'}} -``` - -Renders to: - -``` -. -``` - -Template: - -```html -\{{_extname 'index'}} -``` - -Returns nothing. diff --git a/src/content/helpers/path/helper-relative.md b/src/content/helpers/path/helper-relative.md deleted file mode 100644 index 16891ba..0000000 --- a/src/content/helpers/path/helper-relative.md +++ /dev/null @@ -1,21 +0,0 @@ -#### \{{_relative}} -_Derive the relative path from one **absolute path** to another (e.g from path A, to path B)._ -
Parameters: `string` (the value to test against) -
Default: `none` - -Example: - -```html -\{{_relative "from" "to"}} -``` -Template: - -```html - -``` - -Renders to: - -```html - -``` \ No newline at end of file diff --git a/src/content/helpers/strings/helper-dashify.md b/src/content/helpers/strings/helper-dashify.md deleted file mode 100644 index 9d46caa..0000000 --- a/src/content/helpers/strings/helper-dashify.md +++ /dev/null @@ -1,11 +0,0 @@ -#### \{{dashify}} -_Same as `hyphenate`, but replaces dots in string with hyphens._ -
Parameters: `none` - -```html -\{{dashify "make.this.all.hyphenated"}} -``` -Renders to: -``` -make-this-all-hyphenated -``` \ No newline at end of file diff --git a/src/content/helpers/strings/helper-hyphenate.md b/src/content/helpers/strings/helper-hyphenate.md deleted file mode 100644 index 388f52c..0000000 --- a/src/content/helpers/strings/helper-hyphenate.md +++ /dev/null @@ -1,12 +0,0 @@ -#### \{{hyphenate}} -_Replace spaces in string with hyphens._ -
Parameters: `none` - -```html -\{{hyphenate "make this all hyphenated"}} -``` -Result: - -``` -make-this-all-hyphenated -``` \ No newline at end of file diff --git a/src/content/helpers/strings/helper-titleize.md b/src/content/helpers/strings/helper-titleize.md deleted file mode 100644 index 3a2a056..0000000 --- a/src/content/helpers/strings/helper-titleize.md +++ /dev/null @@ -1,12 +0,0 @@ -#### \{{titleize}} -_Capitalizes all words within a string. Taken from the templating library [Walrus](https://github.com/jeremyruppel/walrus) by [Jeremy Ruppel](https://github.com/jeremyruppel)._ -
Parameters: `none` - -```html -\{{titleize "capitalize EACH word in this sentence"}} -``` -Renders to: - -``` -Capitalize Each Word In This Sentence. -``` \ No newline at end of file diff --git a/src/content/helpers/strings/helper-uppercase.md b/src/content/helpers/strings/helper-uppercase.md deleted file mode 100644 index c2cf488..0000000 --- a/src/content/helpers/strings/helper-uppercase.md +++ /dev/null @@ -1,12 +0,0 @@ -#### \{{uppercase}} -_Turns a string to uppercase. Opposite of `\{{lowercase}}`._ -
Parameters: `none` - -```html - \{{uppercase "make this all uppercase"}} -``` -Renders to: - -``` -MAKE THIS ALL UPPERCASE -``` \ No newline at end of file diff --git a/src/content/helpers/url/_readme.md b/src/content/helpers/url/_readme.md deleted file mode 100644 index 8968caf..0000000 --- a/src/content/helpers/url/_readme.md +++ /dev/null @@ -1,3 +0,0 @@ -URL helpers are [node.js](http://nodejs.org/api/url.html) `url` utilities for URL resolution and parsing. As with node.js: - -> "Parsed URL objects have some or all of the following fields, depending on whether or not they exist in the URL string. Any parts that are not in the URL string will not be in the parsed object." \ No newline at end of file diff --git a/src/data/banner-alt.json b/src/data/banner-alt.json deleted file mode 100644 index cff51ec..0000000 --- a/src/data/banner-alt.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "homepage": { - "masthead": { - "linkable": true, - "modifier": "", - "title": "Design. Templates. Data.", - "subtitle": "See how Assemble bridges the gap between design and development.", - "ideas": "Built with Assemble It has never been easier to build static sites.", - "link": "docs/", - "button": { - "modifier": "button-white" - } - }, - "footer": { - "static": true, - "modifier": "banner-inverse banner-large", - "title": "

Get started with some examples.

", - "subtitle": "", - "link": "#", - "button": { - "modifier": "button-jade button-large pull-right", - "href": "#", - "text": "Visit Assemble on GitHub" - } - } - } -} \ No newline at end of file diff --git a/src/data/banner.yml b/src/data/banner.yml deleted file mode 100644 index 040c9d0..0000000 --- a/src/data/banner.yml +++ /dev/null @@ -1,2 +0,0 @@ -banner: - text: "Get Started with Assemble" \ No newline at end of file diff --git a/src/data/gallery.json b/src/data/gallery.json deleted file mode 100644 index 9a9d8de..0000000 --- a/src/data/gallery.json +++ /dev/null @@ -1,82 +0,0 @@ -[ - { - "id": 100, - "title": "Example Theme 1", - "version": "1.0", - "layouts": "Responsive, Fluid", - "published": "January 29, 2013", - "updated": "January 29, 2013", - "size": "4 MB", - "file-types": "CSS, LESS, HTML, JavaScript", - "description": "This is a theme from example data.", - "stats": [ - { - "label": "purchases", - "value": "1,250" - }, - { - "label": "likes", - "value": "9,350" - }, - { - "label": "follows", - "value": "850,334" - } - ] - }, - { - "id": 200, - "title": "Example Theme 2", - "version": "1.0", - "layouts": "Responsive, Fluid", - "published": "January 29, 2013", - "updated": "January 29, 2013", - "size": "4 MB", - "file-types": "CSS, LESS, HTML, JavaScript", - "description": "This is a theme from example data." - }, - { - "id": 300, - "title": "Example Theme 3", - "version": "1.0", - "layouts": "Responsive, Fluid", - "published": "January 29, 2013", - "updated": "January 29, 2013", - "size": "4 MB", - "file-types": "CSS, LESS, HTML, JavaScript", - "description": "This is a theme from example data." - }, - { - "id": 400, - "title": "Example Theme 4", - "version": "1.0", - "layouts": "Responsive, Fluid", - "published": "January 29, 2013", - "updated": "January 29, 2013", - "size": "4 MB", - "file-types": "CSS, LESS, HTML, JavaScript", - "description": "This is a theme from example data." - }, - { - "id": 500, - "title": "Example Theme 5", - "version": "1.0", - "layouts": "Responsive, Fluid", - "published": "January 29, 2013", - "updated": "January 29, 2013", - "size": "4 MB", - "file-types": "CSS, LESS, HTML, JavaScript", - "description": "This is a theme from example data." - }, - { - "id": 600, - "title": "Example Theme 6", - "version": "1.0", - "layouts": "Responsive, Fluid", - "published": "January 29, 2013", - "updated": "January 29, 2013", - "size": "4 MB", - "file-types": "CSS, LESS, HTML, JavaScript", - "description": "This is a theme from example data." - } -] \ No newline at end of file diff --git a/src/data/home.yml b/src/data/home.yml deleted file mode 100644 index 2cb838b..0000000 --- a/src/data/home.yml +++ /dev/null @@ -1,12 +0,0 @@ -ideas: - one: | - Documentation. Sites. Components.
It has never been easier to leverage the full - force of powerful frameworks like Bootstrap and Zurb Foundation. Nothing can stop you now. - three: "Built with Assemble It has never been easier to build static sites." - two: | - Finally, a tool that closes the gap between developers and designers. - The bridge between designers and developers. - Want leverage? You got it, now go build something. - Workflow between design and development has never been easier. - Assemble makes it easy for designers and developers stay on the same page. - It has never been easier to build static sites. diff --git a/src/data/jumbotron.yml b/src/data/jumbotron.yml deleted file mode 100644 index 3d03e48..0000000 --- a/src/data/jumbotron.yml +++ /dev/null @@ -1,5 +0,0 @@ -heading: "build something" -lead: "It has never been easier to leverage the full force of powerful frameworks like Bootstrap and Zurb Foundation. Nothing can stop you now." -btn: - modifier: btn-inverse - text: "Download Assemble" diff --git a/src/data/keywords.json b/src/data/keywords.json deleted file mode 100644 index 7c9bb46..0000000 --- a/src/data/keywords.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "keywords": [ - "assemble", - "boilerplate", - "boilerplates", - "bootstrap", - "build and deployment", - "build system", - "build", - "build-bootstrap", - "builder", - "cheatsheet", - "cheat sheet", - "compile", - "compiler", - "component", - "components", - "conventions", - "docs", - "documentation", - "framework", - "generator", - "gh-pages", - "grunt task", - "grunt", - "less", - "less.js", - "pre-processor", - "pre-processors", - "scaffold", - "scaffolds", - "static HTML", - "template", - "templates", - "templating", - "theme", - "themes", - "theming", - "toolkit" - ] -} \ No newline at end of file diff --git a/src/data/news.yml b/src/data/news.yml deleted file mode 100644 index 3a3b1b0..0000000 --- a/src/data/news.yml +++ /dev/null @@ -1,15 +0,0 @@ -2013-05-12: - news: - - Big news today! -2013-05-12: - news: - - Big news today! -2013-05-12: - news: - - Big news today! -2013-05-12: - news: - - Big news today! -2013-05-12: - news: - - Big news today! diff --git a/src/data/repos.json b/src/data/repos.json deleted file mode 100644 index cb39e68..0000000 --- a/src/data/repos.json +++ /dev/null @@ -1,742 +0,0 @@ -[ - { - "id": 5916767, - "name": "assemble", - "full_name": "assemble/assemble", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/assemble", - "description": "Static site generator for Grunt.js, Yeoman and Node.js. \"npm install assemble\". Used by H5BP, Topcoat, and hundreds of other projects to build sites, themes, components, documentation, blogs and gh-pages.", - "fork": false, - "url": "https://api.github.com/repos/assemble/assemble", - "created_at": "2012-09-22T20:50:23Z", - "updated_at": "2013-10-13T00:20:33Z", - "pushed_at": "2013-10-11T13:41:04Z", - "homepage": "http://assemble.io/", - "size": 9684, - "watchers_count": 419, - "language": "JavaScript", - "forks_count": 25, - "forks": 25, - "watchers": 419 - }, - { - "id": 8470606, - "name": "assemble-less", - "full_name": "assemble/assemble-less", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/assemble-less", - "description": "Grunt task for compiling LESS to CSS. ", - "fork": false, - "url": "https://api.github.com/repos/assemble/assemble-less", - "created_at": "2013-02-28T02:51:21Z", - "updated_at": "2013-10-11T07:20:51Z", - "pushed_at": "2013-09-17T02:58:44Z", - "homepage": "http://github.com/assemble/assemble-less/", - "size": 1362, - "watchers_count": 30, - "language": "JavaScript", - "forks_count": 9, - "forks": 9, - "watchers": 30 - }, - { - "id": 8615848, - "name": "handlebars-helpers", - "full_name": "assemble/handlebars-helpers", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/handlebars-helpers", - "description": "Library of 100+ handlebars helpers. This project is active and supported, we love contributors and appreciate stars.", - "fork": false, - "url": "https://api.github.com/repos/assemble/handlebars-helpers", - "created_at": "2013-03-06T23:30:55Z", - "updated_at": "2013-10-12T15:15:29Z", - "pushed_at": "2013-10-12T15:15:28Z", - "homepage": "http://assemble.io/helpers/", - "size": 1927, - "watchers_count": 243, - "language": "JavaScript", - "forks_count": 21, - "forks": 21, - "watchers": 243 - }, - { - "id": 8697068, - "name": "boilerplates", - "full_name": "assemble/boilerplates", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/boilerplates", - "description": "A bunch of example projects to help you learn how to use Assemble.", - "fork": false, - "url": "https://api.github.com/repos/assemble/boilerplates", - "created_at": "2013-03-11T05:23:09Z", - "updated_at": "2013-10-09T16:00:13Z", - "pushed_at": "2013-08-17T20:23:14Z", - "homepage": "http://assemble.io/", - "size": 1611, - "watchers_count": 15, - "language": "CSS", - "forks_count": 3, - "forks": 3, - "watchers": 15 - }, - { - "id": 9438253, - "name": "boilerplate-site", - "full_name": "assemble/boilerplate-site", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/boilerplate-site", - "description": "Demonstrates how to use Assemble to build a site. Includes layouts, pages, partials, and markdown content.", - "fork": false, - "url": "https://api.github.com/repos/assemble/boilerplate-site", - "created_at": "2013-04-15T01:09:50Z", - "updated_at": "2013-10-10T10:04:15Z", - "pushed_at": "2013-08-17T20:14:55Z", - "homepage": "http://assemble.github.io/boilerplate-site/", - "size": 317, - "watchers_count": 9, - "language": "JavaScript", - "forks_count": 12, - "forks": 12, - "watchers": 9 - }, - { - "id": 9508441, - "name": "grunt-init-assemble", - "full_name": "assemble/grunt-init-assemble", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/grunt-init-assemble", - "description": "Grunt init template for Assemble, the static site generator built on Grunt.js. Kickstart new Assemble projects in just a few seconds, including templates, data, layouts, and a theme.", - "fork": false, - "url": "https://api.github.com/repos/assemble/grunt-init-assemble", - "created_at": "2013-04-17T21:58:35Z", - "updated_at": "2013-10-10T08:35:54Z", - "pushed_at": "2013-09-11T21:02:38Z", - "homepage": "http://assemble.io/docs/Resources.html", - "size": 687, - "watchers_count": 10, - "language": "JavaScript", - "forks_count": 4, - "forks": 4, - "watchers": 10 - }, - { - "id": 9589732, - "name": "generator-assemble", - "full_name": "assemble/generator-assemble", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/generator-assemble", - "description": "Yeoman generator for Assemble, the static site generator built on Grunt.js. Kickstart new Assemble projects in just a few seconds, including templates, data, layouts, and a theme.", - "fork": false, - "url": "https://api.github.com/repos/assemble/generator-assemble", - "created_at": "2013-04-22T02:56:41Z", - "updated_at": "2013-09-24T06:21:07Z", - "pushed_at": "2013-09-22T10:13:39Z", - "homepage": "http://assemble.io/docs/Resources.html", - "size": 916, - "watchers_count": 7, - "language": "JavaScript", - "forks_count": 5, - "forks": 5, - "watchers": 7 - }, - { - "id": 9718601, - "name": "grunt-github-api", - "full_name": "assemble/grunt-github-api", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/grunt-github-api", - "description": "Grunt plugin used to query the Github API and save the returned JSON files locally.", - "fork": false, - "url": "https://api.github.com/repos/assemble/grunt-github-api", - "created_at": "2013-04-27T17:40:03Z", - "updated_at": "2013-10-10T23:14:22Z", - "pushed_at": "2013-10-10T23:14:21Z", - "homepage": null, - "size": 259, - "watchers_count": 7, - "language": "JavaScript", - "forks_count": 3, - "forks": 3, - "watchers": 7 - }, - { - "id": 9926406, - "name": "assemble-swig", - "full_name": "assemble/assemble-swig", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/assemble-swig", - "description": "Assemble engine plugin for swig templates.", - "fork": false, - "url": "https://api.github.com/repos/assemble/assemble-swig", - "created_at": "2013-05-08T02:11:34Z", - "updated_at": "2013-10-09T19:49:48Z", - "pushed_at": "2013-09-14T07:57:47Z", - "homepage": null, - "size": 137, - "watchers_count": 3, - "language": "JavaScript", - "forks_count": 3, - "forks": 3, - "watchers": 3 - }, - { - "id": 10885210, - "name": "boilerplate-markdown", - "full_name": "assemble/boilerplate-markdown", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/boilerplate-markdown", - "description": "Use Assemble to generate HTML pages from markdown content. Useful for wikis, gh-pages, documentation and blogs or sites with markdown posts.", - "fork": false, - "url": "https://api.github.com/repos/assemble/boilerplate-markdown", - "created_at": "2013-06-23T13:47:16Z", - "updated_at": "2013-09-29T03:11:25Z", - "pushed_at": "2013-09-23T01:08:14Z", - "homepage": "http://assemble.github.io/boilerplate-markdown", - "size": 673, - "watchers_count": 4, - "language": "JavaScript", - "forks_count": 2, - "forks": 2, - "watchers": 4 - }, - { - "id": 11070783, - "name": "assemble-handlebars-momentjs", - "full_name": "assemble/assemble-handlebars-momentjs", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/assemble-handlebars-momentjs", - "description": "Combines the powers of Assemble, Handlebars.js and Moment.js into a great helper to master time.", - "fork": false, - "url": "https://api.github.com/repos/assemble/assemble-handlebars-momentjs", - "created_at": "2013-06-30T13:37:37Z", - "updated_at": "2013-09-04T22:40:25Z", - "pushed_at": "2013-07-02T08:50:44Z", - "homepage": "", - "size": 168, - "watchers_count": 4, - "language": "JavaScript", - "forks_count": 0, - "forks": 0, - "watchers": 4 - }, - { - "id": 11077752, - "name": "grunt-init-helper", - "full_name": "assemble/grunt-init-helper", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/grunt-init-helper", - "description": "Grunt init template for creating Assemble helpers.", - "fork": false, - "url": "https://api.github.com/repos/assemble/grunt-init-helper", - "created_at": "2013-06-30T21:08:38Z", - "updated_at": "2013-09-23T00:38:37Z", - "pushed_at": "2013-09-23T00:38:37Z", - "homepage": null, - "size": 316, - "watchers_count": 1, - "language": "JavaScript", - "forks_count": 0, - "forks": 0, - "watchers": 1 - }, - { - "id": 11125522, - "name": "grunt-convert", - "full_name": "assemble/grunt-convert", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/grunt-convert", - "description": "Grunt task to convert to or from JSON, YAML, XML, PLIST or CSV.", - "fork": false, - "url": "https://api.github.com/repos/assemble/grunt-convert", - "created_at": "2013-07-02T13:34:35Z", - "updated_at": "2013-09-27T01:52:20Z", - "pushed_at": "2013-09-26T11:22:04Z", - "homepage": "", - "size": 213, - "watchers_count": 7, - "language": "JavaScript", - "forks_count": 3, - "forks": 3, - "watchers": 7 - }, - { - "id": 11809010, - "name": "grunt-firebase", - "full_name": "assemble/grunt-firebase", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/grunt-firebase", - "description": "Grunt task for updating firebase data.", - "fork": false, - "url": "https://api.github.com/repos/assemble/grunt-firebase", - "created_at": "2013-08-01T05:40:59Z", - "updated_at": "2013-09-18T12:51:16Z", - "pushed_at": "2013-09-03T04:05:18Z", - "homepage": "https://github.com/assemble/grunt-firebase", - "size": 116, - "watchers_count": 10, - "language": "JavaScript", - "forks_count": 2, - "forks": 2, - "watchers": 10 - }, - { - "id": 11885399, - "name": "boilerplate-bootstrap", - "full_name": "assemble/boilerplate-bootstrap", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/boilerplate-bootstrap", - "description": "Build Bootstrap with Assemble instead of Jekyll. ", - "fork": false, - "url": "https://api.github.com/repos/assemble/boilerplate-bootstrap", - "created_at": "2013-08-04T21:34:16Z", - "updated_at": "2013-09-29T23:11:11Z", - "pushed_at": "2013-09-29T23:11:11Z", - "homepage": "http://assemble.github.io/boilerplate-bootstrap", - "size": 935, - "watchers_count": 8, - "language": "JavaScript", - "forks_count": 4, - "forks": 4, - "watchers": 8 - }, - { - "id": 11965412, - "name": "boilerplate-h5bp", - "full_name": "assemble/boilerplate-h5bp", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/boilerplate-h5bp", - "description": "Assemble + HTML5 Boilerplate. ", - "fork": false, - "url": "https://api.github.com/repos/assemble/boilerplate-h5bp", - "created_at": "2013-08-08T02:14:36Z", - "updated_at": "2013-08-15T02:40:28Z", - "pushed_at": "2013-08-15T02:40:28Z", - "homepage": "", - "size": 71, - "watchers_count": 2, - "language": "JavaScript", - "forks_count": 1, - "forks": 1, - "watchers": 2 - }, - { - "id": 11967245, - "name": "boilerplate-swig", - "full_name": "assemble/boilerplate-swig", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/boilerplate-swig", - "description": "Example of using swig templates with Assemble.", - "fork": false, - "url": "https://api.github.com/repos/assemble/boilerplate-swig", - "created_at": "2013-08-08T04:03:39Z", - "updated_at": "2013-09-16T18:33:59Z", - "pushed_at": "2013-09-16T18:33:57Z", - "homepage": "", - "size": 578, - "watchers_count": 4, - "language": "JavaScript", - "forks_count": 3, - "forks": 3, - "watchers": 4 - }, - { - "id": 12112441, - "name": "buttons", - "full_name": "assemble/buttons", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/buttons", - "description": "Sooo many buttons... is this really necessary?! In reality this project has little to do with buttons. It's an exercise in separation of concerns regarding structure, style, content and data.", - "fork": false, - "url": "https://api.github.com/repos/assemble/buttons", - "created_at": "2013-08-14T15:34:23Z", - "updated_at": "2013-10-05T05:40:04Z", - "pushed_at": "2013-09-17T20:40:48Z", - "homepage": "", - "size": 442, - "watchers_count": 7, - "language": "CSS", - "forks_count": 2, - "forks": 2, - "watchers": 7 - }, - { - "id": 12958445, - "name": "grunt-readme", - "full_name": "assemble/grunt-readme", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/grunt-readme", - "description": "Generate your README from a template. Fast, very little config, and if you already use Grunt it's a no-brainer.", - "fork": false, - "url": "https://api.github.com/repos/assemble/grunt-readme", - "created_at": "2013-09-19T20:20:10Z", - "updated_at": "2013-10-11T13:47:27Z", - "pushed_at": "2013-10-11T13:47:27Z", - "homepage": "", - "size": 277, - "watchers_count": 6, - "language": "JavaScript", - "forks_count": 3, - "forks": 3, - "watchers": 6 - }, - { - "id": 13308551, - "name": "permalinks", - "full_name": "assemble/permalinks", - "owner": { - "login": "assemble", - "id": 2645080, - "avatar_url": "https://0.gravatar.com/avatar/d68b5947524ac7869e76da923a228dcf?d=https%3A%2F%2Fidenticons.github.com%2Ff6d99a3829b704a4a102b1bbec4499b0.png", - "gravatar_id": "d68b5947524ac7869e76da923a228dcf", - "url": "https://api.github.com/users/assemble", - "html_url": "https://github.com/assemble", - "followers_url": "https://api.github.com/users/assemble/followers", - "following_url": "https://api.github.com/users/assemble/following{/other_user}", - "gists_url": "https://api.github.com/users/assemble/gists{/gist_id}", - "starred_url": "https://api.github.com/users/assemble/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/assemble/subscriptions", - "organizations_url": "https://api.github.com/users/assemble/orgs", - "repos_url": "https://api.github.com/users/assemble/repos", - "type": "Organization", - "site_admin": false - }, - "private": false, - "html_url": "https://github.com/assemble/permalinks", - "description": "Permalinks plugin for Assemble, the static site generator for Grunt.js and Yeoman. This plugin enables powerful and configurable URI replacement patterns, presets, uses Moment.js for parsing dates, and much more.", - "fork": false, - "url": "https://api.github.com/repos/assemble/permalinks", - "created_at": "2013-10-03T20:10:32Z", - "updated_at": "2013-10-09T23:24:56Z", - "pushed_at": "2013-10-09T23:24:56Z", - "homepage": "", - "size": 215, - "watchers_count": 10, - "language": "JavaScript", - "forks_count": 4, - "forks": 4, - "watchers": 10 - } -] \ No newline at end of file diff --git a/src/data/site.yml b/src/data/site.yml deleted file mode 100644 index d056e7a..0000000 --- a/src/data/site.yml +++ /dev/null @@ -1,35 +0,0 @@ -### -# Site variables -### - -production: <%= production %> -destination: ./_gh_pages - - -area: - # Documentation - docs: - org: http://github.com/assemble - repo: <%= site.area.docs.org %>/assemble-docs - - # Handlebars Helpers - helpers: - org: http://github.com/helpers - - # Underscore Mixins - mixins: - org: http://github.com/mixins - - # Boilerplates - boilerplates: - org: http://github.com/boilerplates - - -templates: - edit: <%= site.area.docs.repo %>/edit/master/templates/pages - view: <%= site.area.docs.repo %>/blob/master/templates/pages - -content: - edit: <%= site.area.docs.repo %>/edit/master/src/content - view: <%= site.area.docs.repo %>/tree/master/src/content - diff --git a/src/data/teaser.yml b/src/data/teaser.yml deleted file mode 100644 index 52c0eb9..0000000 --- a/src/data/teaser.yml +++ /dev/null @@ -1,19 +0,0 @@ -# teaser banner, directly below masthead -masthead: - title: Assemble - subtitle: "The static site generator for Node.js, Grunt.js and Yeoman." - linkable: true - modifier: "" - url: "https://github.com/h5bp/Effeckt.css" - -# Bottom teaser -footer: - button: - href: "#" - modifier: "button-jade button-large pull-right" - text: "Visit Assemble on GitHub" - link: "#" - modifier: "banner-inverse banner-large" - static: true - subtitle: "" - title: "

Get started with some examples.

" diff --git a/src/data/track.json b/src/data/track.json deleted file mode 100644 index 528e45a..0000000 --- a/src/data/track.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "masthead": { - "download": "onclick=\"_gaq.push(['_trackEvent', 'masthead-download', 'clicked'])\"" - }, - "navbar": { - "download": "onclick=\"_gaq.push(['_trackEvent', 'navbar-download', 'clicked'])\"", - "click-repo": "onclick=\"_gaq.push(['_trackEvent', 'click-repo', 'clicked'])\"" - } -} \ No newline at end of file diff --git a/src/extensions/helper-condense.js b/src/extensions/helper-condense.js deleted file mode 100644 index 810a7a3..0000000 --- a/src/extensions/helper-condense.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports.register = function(Handlebars, options) { - - /** - * Collapse multiple newlines into one. - * @param none - * @example: - * {{#condense}} - * {{> body }} - * {{/condense}} - */ - Handlebars.registerHelper('condense', function(context) { - return context.fn(this).replace(/(\n|\r){2,}/g, '\n').replace(/(\s* + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/structure/components/banners/README.md b/structure/components/banners/README.md new file mode 100644 index 0000000..4e24fe1 --- /dev/null +++ b/structure/components/banners/README.md @@ -0,0 +1,5 @@ +# Masthead + +> In web web design, a masthead is a type of imprint or section used at the top of a webpage. + +In publishing, a masthead refers to the flag, banner or the name of a newspaper or periodical, its proprietors, publisher, etc., printed in large type at the top of the front page. Also, as a list, usually found on the editorial page of a newspaper or other periodical, of the publisher, EST., editorial board, etc. \ No newline at end of file diff --git a/structure/components/banners/banner.hbs b/structure/components/banners/banner.hbs new file mode 100644 index 0000000..1b50bc1 --- /dev/null +++ b/structure/components/banners/banner.hbs @@ -0,0 +1,8 @@ + diff --git a/structure/components/banners/jumbotron.hbs b/structure/components/banners/jumbotron.hbs new file mode 100644 index 0000000..844abd3 --- /dev/null +++ b/structure/components/banners/jumbotron.hbs @@ -0,0 +1,20 @@ +{{warn 'reading' 'partial > jumbotron'}} + +
+
+
+
+

{{{uppercase heading}}}

+

{{{lead}}}

+

{{{btn.text}}}

+
+
+ + {{#is site.mode 'live'}} + {{> rotating-tweets }} + {{/is}} + +
+
+
+
\ No newline at end of file diff --git a/structure/components/banners/masthead.hbs b/structure/components/banners/masthead.hbs new file mode 100644 index 0000000..fb130c6 --- /dev/null +++ b/structure/components/banners/masthead.hbs @@ -0,0 +1,10 @@ +
+
+

Assemble

+

{{{site.description}}}

+

+ Download Assemble v{{ _assemble.version }} + Download source +

+
+
diff --git a/structure/components/banners/subhead.hbs b/structure/components/banners/subhead.hbs new file mode 100644 index 0000000..bdde091 --- /dev/null +++ b/structure/components/banners/subhead.hbs @@ -0,0 +1,6 @@ +
+
+

{{ title }}

+

{{ lead }}

+
+
\ No newline at end of file diff --git a/templates/includes/teaser.hbs b/structure/components/banners/teaser.hbs similarity index 59% rename from templates/includes/teaser.hbs rename to structure/components/banners/teaser.hbs index 55b7114..281b221 100644 --- a/templates/includes/teaser.hbs +++ b/structure/components/banners/teaser.hbs @@ -1,9 +1,9 @@ --- component: teaser --- +{{warn 'reading' 'partial > teaser'}} + -{{! Special styles for GitHub Buttons -====================================== }} - - - -{{! TEASER COMPONENT -====================================== }} + +
\ No newline at end of file diff --git a/structure/components/buttons/back-to-top.hbs b/structure/components/buttons/back-to-top.hbs new file mode 100644 index 0000000..bc9cee2 --- /dev/null +++ b/structure/components/buttons/back-to-top.hbs @@ -0,0 +1,3 @@ + + Back to top + \ No newline at end of file diff --git a/structure/components/buttons/btn.hbs b/structure/components/buttons/btn.hbs new file mode 100644 index 0000000..e3c7ec0 --- /dev/null +++ b/structure/components/buttons/btn.hbs @@ -0,0 +1,4 @@ +--- +name: btn +--- + \ No newline at end of file diff --git a/structure/components/buttons/button-dropdowns.hbs b/structure/components/buttons/button-dropdowns.hbs new file mode 100644 index 0000000..636c1ee --- /dev/null +++ b/structure/components/buttons/button-dropdowns.hbs @@ -0,0 +1,333 @@ +
+

Button dropdowns

+ +

Use any button to trigger a dropdown menu by placing it within a .btn-group and providing the proper menu markup.

+ +
+

Plugin dependency

+

Button dropdowns require the dropdown plugin to be included in your version of Bootstrap.

+
+ +

Single button dropdowns

+

Turn a button into a dropdown toggle with some basic markup changes.

+ + +{{#markdown}} +```html + + +``` +{{/markdown}} + +

Split button dropdowns

+

Similarly, create split button dropdowns with the same markup changes, only with a separate button.

+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ +{{#markdown}} +```html + +
+ + + +
+``` +{{/markdown}} + +

Sizing

+

Button dropdowns work with buttons of all sizes.

+
+ + + +
+ +{{#markdown}} +```html + +
+ + +
+ + +
+ + +
+ + +
+ + +
+``` +{{/markdown}} + +

Dropup variation

+

Trigger dropdown menus above elements by adding .dropup to the parent.

+
+ +
+ +{{#markdown}} +```html +
+ + + +
+``` +{{/markdown}} +
diff --git a/structure/components/buttons/button.hbs b/structure/components/buttons/button.hbs new file mode 100644 index 0000000..e414672 --- /dev/null +++ b/structure/components/buttons/button.hbs @@ -0,0 +1 @@ + diff --git a/structure/components/callouts/callout.hbs b/structure/components/callouts/callout.hbs new file mode 100644 index 0000000..bb8c57b --- /dev/null +++ b/structure/components/callouts/callout.hbs @@ -0,0 +1,19 @@ +--- +component: callout +--- +
+

No default class

+

Alerts don't have default classes, only base and modifier classes. A default gray alert doesn't make too much sense, so you're required to specify a type via contextual class. Choose from success, info, warning, or danger.

+
+
+

No default class

+

Alerts don't have default classes, only base and modifier classes. A default gray alert doesn't make too much sense, so you're required to specify a type via contextual class. Choose from success, info, warning, or danger.

+
+
+

No default class

+

Alerts don't have default classes, only base and modifier classes. A default gray alert doesn't make too much sense, so you're required to specify a type via contextual class. Choose from success, info, warning, or danger.

+
+
+

No default class

+

Alerts don't have default classes, only base and modifier classes. A default gray alert doesn't make too much sense, so you're required to specify a type via contextual class. Choose from success, info, warning, or danger.

+
\ No newline at end of file diff --git a/structure/components/cards/repo-cards.hbs b/structure/components/cards/repo-cards.hbs new file mode 100644 index 0000000..8b288df --- /dev/null +++ b/structure/components/cards/repo-cards.hbs @@ -0,0 +1,33 @@ +--- +# Used for listing GitHub repos +component: repos +--- + + + + +
    + {{#each repos}} + + {{/each}} +
\ No newline at end of file diff --git a/structure/components/composer.hbs b/structure/components/composer.hbs new file mode 100644 index 0000000..b388796 --- /dev/null +++ b/structure/components/composer.hbs @@ -0,0 +1,6 @@ +--- +component: composer +--- +
+ +
\ No newline at end of file diff --git a/structure/components/dropdowns/dropdown-menu.hbs b/structure/components/dropdowns/dropdown-menu.hbs new file mode 100644 index 0000000..ae53dfc --- /dev/null +++ b/structure/components/dropdowns/dropdown-menu.hbs @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/structure/components/footer/colophon.hbs b/structure/components/footer/colophon.hbs new file mode 100644 index 0000000..9c1872e --- /dev/null +++ b/structure/components/footer/colophon.hbs @@ -0,0 +1,16 @@ +{{! Footer +================================================== }} + \ No newline at end of file diff --git a/structure/components/footer/footer-blog.hbs b/structure/components/footer/footer-blog.hbs new file mode 100644 index 0000000..57f5dd0 --- /dev/null +++ b/structure/components/footer/footer-blog.hbs @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/structure/components/footer/footer.hbs b/structure/components/footer/footer.hbs new file mode 100644 index 0000000..f3b8061 --- /dev/null +++ b/structure/components/footer/footer.hbs @@ -0,0 +1,20 @@ + + \ No newline at end of file diff --git a/structure/components/forms/form-signin.hbs b/structure/components/forms/form-signin.hbs new file mode 100644 index 0000000..a9036e2 --- /dev/null +++ b/structure/components/forms/form-signin.hbs @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/structure/components/indicator/indicator.hbs b/structure/components/indicator/indicator.hbs new file mode 100644 index 0000000..8666958 --- /dev/null +++ b/structure/components/indicator/indicator.hbs @@ -0,0 +1,12 @@ +--- +name: indicator +--- + + + + +{{#example}} + + + +{{/example}} \ No newline at end of file diff --git a/structure/components/labels/label-site-status.hbs b/structure/components/labels/label-site-status.hbs new file mode 100644 index 0000000..0aab744 --- /dev/null +++ b/structure/components/labels/label-site-status.hbs @@ -0,0 +1,8 @@ +--- +comments: Informational component. Displays either `development` or `live` to Sellside developers. There is probably a much better way to do this! +--- +{{#is site.status 'live'}} + live + {{^}} + dev +{{/is}} \ No newline at end of file diff --git a/structure/components/labels/label-wordcount.hbs b/structure/components/labels/label-wordcount.hbs new file mode 100644 index 0000000..0748006 --- /dev/null +++ b/structure/components/labels/label-wordcount.hbs @@ -0,0 +1,2 @@ + words, + read \ No newline at end of file diff --git a/structure/components/nav/nav-list.hbs b/structure/components/nav/nav-list.hbs new file mode 100644 index 0000000..a6e2adc --- /dev/null +++ b/structure/components/nav/nav-list.hbs @@ -0,0 +1,32 @@ +{{#each navigation}} + +{{/each}} diff --git a/structure/components/nav/sidenav.hbs b/structure/components/nav/sidenav.hbs new file mode 100644 index 0000000..34384fd --- /dev/null +++ b/structure/components/nav/sidenav.hbs @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/structure/components/navbar/nav-main.hbs b/structure/components/navbar/nav-main.hbs new file mode 100644 index 0000000..1600734 --- /dev/null +++ b/structure/components/navbar/nav-main.hbs @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/structure/components/navbar/navbar-content.hbs b/structure/components/navbar/navbar-content.hbs new file mode 100644 index 0000000..7ab76df --- /dev/null +++ b/structure/components/navbar/navbar-content.hbs @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/structure/components/navbar/navbar.hbs b/structure/components/navbar/navbar.hbs new file mode 100644 index 0000000..2e02dc3 --- /dev/null +++ b/structure/components/navbar/navbar.hbs @@ -0,0 +1,64 @@ +{{#is title 'Blog'}} + +
+ +
+ +{{else}} + + + +{{/is}} \ No newline at end of file diff --git a/structure/components/navbar/toggle.hbs b/structure/components/navbar/toggle.hbs new file mode 100644 index 0000000..5e0f7b5 --- /dev/null +++ b/structure/components/navbar/toggle.hbs @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/structure/components/newsfeed/README.md b/structure/components/newsfeed/README.md new file mode 100644 index 0000000..a859729 --- /dev/null +++ b/structure/components/newsfeed/README.md @@ -0,0 +1,9 @@ +# Newsfeed + +> Newsfeed and activity stream semantics + + +## Resources + +* [Activity Streams](http://activitystrea.ms/) +* [JSON Activity Streams 1.0](http://activitystrea.ms/registry/specs/json-activity/) \ No newline at end of file diff --git a/structure/components/newsfeed/newsfeed-body.hbs b/structure/components/newsfeed/newsfeed-body.hbs new file mode 100644 index 0000000..68de949 --- /dev/null +++ b/structure/components/newsfeed/newsfeed-body.hbs @@ -0,0 +1,10 @@ +--- +component: newsfeed-body +comments: Not sure of the best way to scaffold this out. From a "static" standpoint it seems straightforward. I can use some guidance here @doowb +--- + + \ No newline at end of file diff --git a/structure/components/newsfeed/newsfeed-footer.hbs b/structure/components/newsfeed/newsfeed-footer.hbs new file mode 100644 index 0000000..8c8b69e --- /dev/null +++ b/structure/components/newsfeed/newsfeed-footer.hbs @@ -0,0 +1,7 @@ +--- +component: newsfeed-footer +comments: The newsfeed footer is primariy for pagination. +--- + \ No newline at end of file diff --git a/structure/components/newsfeed/newsfeed-header.hbs b/structure/components/newsfeed/newsfeed-header.hbs new file mode 100644 index 0000000..8b5e9f9 --- /dev/null +++ b/structure/components/newsfeed/newsfeed-header.hbs @@ -0,0 +1,8 @@ +--- +component: newsfeed-header +--- +{{> composer }} + +
+ +{{> newsfeed-settings }} \ No newline at end of file diff --git a/structure/components/newsfeed/newsfeed-item.hbs b/structure/components/newsfeed/newsfeed-item.hbs new file mode 100644 index 0000000..74acb4e --- /dev/null +++ b/structure/components/newsfeed/newsfeed-item.hbs @@ -0,0 +1,46 @@ +
  • + + Generic placeholder image + +
    +

    Media heading

    +

    Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.

    + + +
    + + Generic placeholder image + +
    +

    Nested media heading

    Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. + + +
    + + Generic placeholder image + +
    +

    Nested media heading

    Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.
    +
    +
    +
    + + +
    + + Generic placeholder image + +
    +

    Nested media heading

    Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.
    +
    +
    +
  • + + +
  • + + Generic placeholder image + +
    +

    Media heading

    Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.
    +
  • \ No newline at end of file diff --git a/structure/components/newsfeed/newsfeed-settings.hbs b/structure/components/newsfeed/newsfeed-settings.hbs new file mode 100644 index 0000000..6f793cc --- /dev/null +++ b/structure/components/newsfeed/newsfeed-settings.hbs @@ -0,0 +1,4 @@ +--- +component: newsfeed-settings +comments: Sits below the composer in the header of a newsfeed. +--- diff --git a/structure/components/newsfeed/newsfeed-sidebar.hbs b/structure/components/newsfeed/newsfeed-sidebar.hbs new file mode 100644 index 0000000..7eef932 --- /dev/null +++ b/structure/components/newsfeed/newsfeed-sidebar.hbs @@ -0,0 +1,3 @@ +--- +component: newsfeed-sidebar +--- \ No newline at end of file diff --git a/structure/components/newsfeed/newsfeed.hbs b/structure/components/newsfeed/newsfeed.hbs new file mode 100644 index 0000000..4dacb27 --- /dev/null +++ b/structure/components/newsfeed/newsfeed.hbs @@ -0,0 +1,35 @@ +--- +component: newsfeed +--- +
    + + + +
    +
    + + +
    + {{> newsfeed-header }} +
    + + +
    + {{> newsfeed-body }} +
    + + + + +
    +
    + + +
    + +
    +
    \ No newline at end of file diff --git a/structure/components/pagination/paginate.hbs b/structure/components/pagination/paginate.hbs new file mode 100644 index 0000000..1d61dff --- /dev/null +++ b/structure/components/pagination/paginate.hbs @@ -0,0 +1,9 @@ + + {{#if prev}} + {{text}} + {{/if}} + + {{#if next}} + {{text}} + {{/if}} + \ No newline at end of file diff --git a/structure/components/popovers/popover-source-link.hbs b/structure/components/popovers/popover-source-link.hbs new file mode 100644 index 0000000..cf0f467 --- /dev/null +++ b/structure/components/popovers/popover-source-link.hbs @@ -0,0 +1,3 @@ +{{! This partial is defined in the options of the `md` helper. Specifically, the `prepend` option of the md helper. With this option, the helper will prepend or append the given template to each generated file using dynamically generated information about each file, such as source filepath, and so on. }} + +Edit the {{{filetype @filepath}}} for {{{rename (basename @filepath)}}} \ No newline at end of file diff --git a/templates/includes/btn-github-fork-small.hbs b/structure/components/social-media/btn-github-fork.hbs similarity index 90% rename from templates/includes/btn-github-fork-small.hbs rename to structure/components/social-media/btn-github-fork.hbs index 3a854e3..041f731 100644 --- a/templates/includes/btn-github-fork-small.hbs +++ b/structure/components/social-media/btn-github-fork.hbs @@ -1 +1 @@ - \ No newline at end of file + diff --git a/structure/components/social-media/btn-github-watch.hbs b/structure/components/social-media/btn-github-watch.hbs new file mode 100644 index 0000000..5fa9d36 --- /dev/null +++ b/structure/components/social-media/btn-github-watch.hbs @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/structure/components/social-media/btn-social.hbs b/structure/components/social-media/btn-social.hbs new file mode 100644 index 0000000..0f8cb90 --- /dev/null +++ b/structure/components/social-media/btn-social.hbs @@ -0,0 +1,27 @@ +--- +component: social-buttons +--- + + + +
    + {{#is site.status 'live'}} +
      + + +
    • {{> btn-github-watch }}
    • +
    • {{> btn-github-fork }}
    • + + + +
    • {{> btn-twitter-tweet }}
    • +
    + {{^}} + Replaced with social buttons in production mode. + {{/is}} +
    \ No newline at end of file diff --git a/templates/includes/btn-tweet.hbs b/structure/components/social-media/btn-tweet.hbs similarity index 79% rename from templates/includes/btn-tweet.hbs rename to structure/components/social-media/btn-tweet.hbs index b68b497..e3c28de 100644 --- a/templates/includes/btn-tweet.hbs +++ b/structure/components/social-media/btn-tweet.hbs @@ -10,11 +10,12 @@ border-radius: 4px; } #custom-tweet-button > a:hover { + text-decoration: none; background-color: rgba(255,255,255,.07); }
    -  Tweet +  Tweet \ No newline at end of file diff --git a/structure/components/social-media/sharing.hbs b/structure/components/social-media/sharing.hbs new file mode 100644 index 0000000..a43650f --- /dev/null +++ b/structure/components/social-media/sharing.hbs @@ -0,0 +1,32 @@ +{{#if site.social.twitter}} + +{{/if}} + +{{#if site.social.facebook}} +
    + +{{/if}} + +{{#if site.social.gplus}} + +{{/if}} + +{{#if site.social.hn}} + +{{/if}} + +{{#if site.social.google}} + +{{/if}} diff --git a/structure/components/social-media/social-buttons-alt.hbs b/structure/components/social-media/social-buttons-alt.hbs new file mode 100644 index 0000000..1bb8d84 --- /dev/null +++ b/structure/components/social-media/social-buttons-alt.hbs @@ -0,0 +1,16 @@ +
    + +
    \ No newline at end of file diff --git a/structure/components/social-media/social-buttons.hbs b/structure/components/social-media/social-buttons.hbs new file mode 100644 index 0000000..ba7347f --- /dev/null +++ b/structure/components/social-media/social-buttons.hbs @@ -0,0 +1,20 @@ +
    + {{#if production}} +
      +
    • + {{ghbtn size="small" user="assemble" repo="assemble"}} +
    • +
    • + {{ghbtn size="small" user="assemble" repo="assemble" type="fork"}} +
    • + +
    • + {{tweet url="http://assemble.io" via="assemblejs" related="jonschlinkert:Assemble core team."}} +
    • +
    + {{^}} + Replaced with social buttons in production mode. + {{/if}} +
    \ No newline at end of file diff --git a/structure/components/social-media/social.hbs b/structure/components/social-media/social.hbs new file mode 100644 index 0000000..a86bd37 --- /dev/null +++ b/structure/components/social-media/social.hbs @@ -0,0 +1,28 @@ +{{#if site.social}} + +{{/if}} diff --git a/structure/helpers/base.js b/structure/helpers/base.js new file mode 100644 index 0000000..263d967 --- /dev/null +++ b/structure/helpers/base.js @@ -0,0 +1,12 @@ +const relative = require('relative'); + +module.exports = function () { + var helpers = {}; + + helpers.base = function (context) { + return relative.toBase(context.data.site.dest, context.data.dest); + }; + + return helpers; +}; + diff --git a/structure/helpers/console.js b/structure/helpers/console.js new file mode 100644 index 0000000..01947c9 --- /dev/null +++ b/structure/helpers/console.js @@ -0,0 +1,24 @@ +const chalk = require('chalk'); + +/** + * Logging helpers + */ + +module.exports = function () { + var helpers = {}; + + helpers.success = function (msg, context) { + console.log(chalk.green(' ' + msg), context); + }; + + helpers.warn = function (msg, context) { + console.log(chalk.yellow(' ' + msg), context); + }; + + helpers.fail = function (msg, context) { + console.log(chalk.red(' ' + msg), context); + }; + + return helpers; +}; + diff --git a/structure/helpers/context.js b/structure/helpers/context.js new file mode 100644 index 0000000..5b63952 --- /dev/null +++ b/structure/helpers/context.js @@ -0,0 +1,15 @@ +module.exports = function (config) { + var Handlebars = config.Handlebars; + + var helpers = {}; + helpers.context = function (options) { + var frame = Handlebars.createFrame(options.data); + for (var prop in options.hash) { + frame[prop] = options.hash[prop]; + } + return options.fn(this, {data: frame}); + }; + + return helpers; +}; + diff --git a/structure/helpers/expand.js b/structure/helpers/expand.js new file mode 100644 index 0000000..87266d6 --- /dev/null +++ b/structure/helpers/expand.js @@ -0,0 +1,41 @@ +/** + * Handlebars Helpers: {{expand}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +const file = require('fs-utils'); +const log = require('verbalize'); + + +var helperError = function(name, msg) { + name = '\n {{' + name + '}} helper:'; + log.warn(name, log.red(msg)); + throw new Error(log.bold(name, log.red(msg))); +}; + + + +module.exports = function () { + var helpers = {}; + + helpers.expand = function (patterns) { + + // Throw an error if invalid patterns are passed + if(!/string|array/.test(typeof patterns)) { + helperError('expand', 'expects an array, string or glob patterns.', this); + } + + // Expand files. + var files = file.expand(patterns); + + // Throw an error if no files are returned. + if(!files.length) { + helperError('expand', 'tried to expand "' + patterns + '" but no files were returned.', this); + } + + return files; + }; + + return helpers; +}; diff --git a/structure/helpers/fs.js b/structure/helpers/fs.js new file mode 100644 index 0000000..2015884 --- /dev/null +++ b/structure/helpers/fs.js @@ -0,0 +1,56 @@ +/** + * Handlebars Helper: {{read}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +const path = require('path'); +const file = require('fs-utils'); +const matter = require('gray-matter'); +const _ = require('lodash'); + + +module.exports = function (config) { + var Handlebars = config.Handlebars; + var helpers = {}; + + + helpers.read = function (filepath, context) { + context.data = context.data || {}; + var page = matter.read(filepath); + var metadata = _.extend(context.data.root, page.context); + var template = Handlebars.compile(page.content); + return new Handlebars.SafeString(template(metadata)); + }; + + /** + * Write a file to disk. + * + * @param {String} filepath Filepath of the destination file + * @param {String} content Content to write to the file. + * @return {String} + */ + + helpers.write = function (filepath, content) { + return file.writeFileSync(filepath, content); + }; + + /** + * Write the give context to a JSON file. + * @param {String} dest Destination directory + * @param {String} name Destination file name + * @param {Object} context Context object + * @return {Object} JSON File with context + * + * @example + * {{writeJSON 'tmp/page/' basename this.page}} + * + */ + + helpers.writeJSON = function (dest, name, context) { + return file.writeJSONSync(path.join(dest, name) + '.json', context); + }; + + return helpers; +}; + diff --git a/structure/helpers/git.js b/structure/helpers/git.js new file mode 100644 index 0000000..057e1ba --- /dev/null +++ b/structure/helpers/git.js @@ -0,0 +1,35 @@ +/** + * Handlebars Helpers: Git branch and remote origin URL + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +const branch = require('git-branch'); +const repoUrl = require('github-repo-url'); + +module.exports = function (assemble) { + var Handlebars = assemble.Handlebars; + var helpers = {}; + + /** + * Current branch of the project's git repository + * @return {String} + */ + + helpers.branch = function () { + return new Handlebars.SafeString(branch); + }; + + + /** + * Remote origin url of the project's git repository. + * @return {String} + */ + + helpers.origin = function () { + return new Handlebars.SafeString(repoUrl); + }; + + return helpers; +}; + diff --git a/structure/helpers/inline.js b/structure/helpers/inline.js new file mode 100644 index 0000000..6aef461 --- /dev/null +++ b/structure/helpers/inline.js @@ -0,0 +1,44 @@ +/** + * Handlebars Helper: {{inline}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +const matter = require('gray-matter'); +const _ = require('lodash'); + + +module.exports = function (config) { + var Handlebars = config.Handlebars; + var helpers = {}; + + var options = config.options || {}; + options.data = options.data || {}; + + // Add `inline` to assemble's options. + var inline = _.extend(options.inline || {}, options.data.inline || {}); + + + helpers.inline = function (filepath, context) { + context.data = context.data || {}; + var append = '', + prepend = ''; + + var page = matter.read(filepath); + var data = Handlebars.createFrame({filepath: filepath}); + + _.defaults(page.context, context.data.root || {}); + + // Prepend or append any content in the given partial to the output + prepend = inline.prepend ? Handlebars.partials[inline.prepend] : ''; + append = inline.append ? Handlebars.partials[inline.append] : ''; + + var sections = [prepend, page.content, append].join('\n\n'); + + var template = Handlebars.compile(sections); + var result = template(page.context, {data: data}); + return new Handlebars.SafeString(result); + }; + + return helpers; +}; diff --git a/structure/helpers/isActive.js b/structure/helpers/isActive.js new file mode 100644 index 0000000..3e2286a --- /dev/null +++ b/structure/helpers/isActive.js @@ -0,0 +1,39 @@ +/** + * Handlebars Helpers: {{isActive}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +const _ = require('lodash'); + + +module.exports = function (config) { + var Handlebars = config.Handlebars; + var opts = config.options || {}; + + var helpers = {}; + + /** + * Add `active` class for current page. + * Customize the class in the options hash. + * @example: {{isActive class="current"}} + * + * @usage: {{isActive}} + */ + + helpers.isActive = function (current, options) { + var context = _.extend({}, opts, this); + options = options || {}; + + var modifier = (options.hash && options.hash.class) ? options.hash.class : 'active'; + context.page = context.page || {}; + if(context.page.basename === current) { + modifier = ' class="' + modifier + '"'; + } else { + modifier = ''; + } + return new Handlebars.SafeString(modifier); + }; + + return helpers; +}; diff --git a/structure/helpers/join.js b/structure/helpers/join.js new file mode 100644 index 0000000..569b28a --- /dev/null +++ b/structure/helpers/join.js @@ -0,0 +1,16 @@ +/** + * Handlebars Helpers: {{join}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +module.exports = function (config) { + var Handlebars = config.Handlebars; + + var helpers = {}; + helpers.join = function (arr, sep) { + return new Handlebars.SafeString(arr.join(sep)); + }; + + return helpers; +}; diff --git a/structure/helpers/markdown.js b/structure/helpers/markdown.js new file mode 100644 index 0000000..f23f096 --- /dev/null +++ b/structure/helpers/markdown.js @@ -0,0 +1,50 @@ +/** + * Markdown Helper {{markdown}} + * Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors + * Licensed under the MIT License (MIT). + */ + +// const file = require('fs-utils'); +const marked = require('marked'); +const extras = require('marked-extras'); +const strip = require('strip-indent'); +const _ = require('lodash'); + + +module.exports = function (config) { + var Handlebars = config.Handlebars; + config.options = config.options || {}; + var opts = _.extend(config.options, config.options.data || {}); + var helpers = {}; + + // file.expand(opts.content).map(function(filepath) { + // var name = file.base(filepath).toLowerCase(); + // var template = file.readFileSync(filepath); + // Handlebars.registerPartial(name, template); + // }); + + opts.marked = opts.marked || {}; + + // Initialize `marked-extras` + extras.init(opts.marked); + + // Extend defaults from `marked-extras` with Gruntfile options + var markedOpts = _.extend({}, extras.markedDefaults, opts.marked); + + // Set marked.js options + marked.setOptions(markedOpts); + + helpers.markdown = function (options) { + var content = strip(options.fn(this)); + return new Handlebars.SafeString(marked(content || '')); + }; + + helpers.md = function (name, context) { + var ctx = _.extend(this, context || {}); + var template = Handlebars.partials[name]; + var fn = Handlebars.compile(template); + return new Handlebars.SafeString(marked(fn(ctx) || '')); + }; + + return helpers; +}; \ No newline at end of file diff --git a/structure/helpers/nav.js b/structure/helpers/nav.js new file mode 100644 index 0000000..52d53c1 --- /dev/null +++ b/structure/helpers/nav.js @@ -0,0 +1,19 @@ +module.exports = function (config) { + var Handlebars = config.Handlebars; + + var helpers = {}; + helpers.nav = function (name, context, options) { + var fn = Handlebars.compile(Handlebars.partials[name]); + + var frame = Handlebars.createFrame(context.data); + for (var prop in options.hash) { + frame[prop] = options.hash[prop]; + } + + var template = fn(context, {data: frame}); + return new Handlebars.SafeString(template); + }; + + return helpers; +}; + diff --git a/structure/helpers/news.js b/structure/helpers/news.js new file mode 100644 index 0000000..56712c9 --- /dev/null +++ b/structure/helpers/news.js @@ -0,0 +1,32 @@ +/** + * Handlebars Helper: {{news}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +module.exports = function (config) { + var Handlebars = config.Handlebars; + + var helpers = {}; + helpers.news = function (context, options) { + var result = '
      '; + var data; + + for (var i = 0; i < context.length; i++) { + if (options.data) { + data = Handlebars.createFrame(options.data || {}); + data.index = i; + } + + result += '
    • ' + options.fn(context[i], { + data: data + }) + '
    • '; + } + + result += '
    '; + return new Handlebars.SafeString(result); + }; + + return helpers; +}; + diff --git a/structure/helpers/path.js b/structure/helpers/path.js new file mode 100644 index 0000000..80d2b75 --- /dev/null +++ b/structure/helpers/path.js @@ -0,0 +1,19 @@ +/** + * Handlebars Helper: {{basename}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +const path = require('path'); + + +module.exports = function () { + var helpers = {}; + + helpers.basename = function (filepath) { + return path.basename(filepath); + }; + + return helpers; +}; + diff --git a/structure/helpers/replace.js b/structure/helpers/replace.js new file mode 100644 index 0000000..76cdd3e --- /dev/null +++ b/structure/helpers/replace.js @@ -0,0 +1,66 @@ +/** + * Handlebars Helpers + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +const path = require('path'); + + +module.exports = function (config) { + var Handlebars = config.Handlebars; + var helpers = {}; + + /** + * JavaScript's replace function exposed in a helper. + * + * @param {String} str The string to evaluate + * @param {RegExp} pattern The regex or string pattern to replace + * @param {String} replacement The replacement value + * @param {String} flags Optional regex flags to use. + * @return {String} + */ + helpers.replace = function (str, pattern, replacement, flags) { + flags = flags || 'gi'; + return str.replace(new RegExp(pattern, flags), replacement); + }; + + /** + * This helper is used in the `source-link` popovers to + * rename, say `helper-foo` to `"{{foo}}"` or, if not a + * helper, rename `bar` to `"bar"` + * + * @param {String} basename The string to rename. + * @return {String} The {{renamed}} string + */ + + helpers.rename = function (name) { + if(/helper-/.test(name)) { + return '{{' + name.split(/\W/)[1] + '}}'; + } + return new Handlebars.SafeString('"' + name + '"'); + }; + + /** + * Used in the source-link popovers to modify + * the message based on the file extension. + * + * @param {String} filepath + * @return {String} + */ + + helpers.filetype = function (filepath) { + switch (path.extname(filepath)) { + case '.md': + return 'markdown source'; + case '.hbs': + case '.tmpl': + case '.html': + return 'source template'; + default: + return 'source file'; + } + }; + + return helpers; +}; diff --git a/structure/helpers/resolve.js b/structure/helpers/resolve.js new file mode 100644 index 0000000..503c498 --- /dev/null +++ b/structure/helpers/resolve.js @@ -0,0 +1,51 @@ +/** + * Handlebars Helpers: {{resolve}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +const path = require('path'); +const file = require('fs-utils'); +const _ = require('lodash'); +const relative = require('relative'); + + +module.exports = function (config) { + var Handlebars = config.Handlebars; + var options = config.options || {}; + var site = options.site || {}; + + var helpers = {}; + helpers.resolve = function (name, context) { + var basename = path.basename(name, path.extname(name)); + var url = ''; + + context = context || {}; + var self = _.extend({}, this, context); + + self.components.forEach(function (page) { + if (page.src.indexOf(basename) !== -1) { + url = relative(self.page.dest, page.dest); + } + }); + + if (!url) { + var dest = file.normalizeSlash(path.join(site.dest, name)); + url = relative.toBase(url, dest); + } + + return new Handlebars.SafeString(url); + }; + + helpers.rel = function (to, context) { + if (context.data.dest) { + return relative(to, context.data.dest) + } + return to; + // return new Handlebars.SafeString(relative(from, to)); + }; + + + return helpers; +}; + diff --git a/structure/helpers/unescape.js b/structure/helpers/unescape.js new file mode 100644 index 0000000..4812d62 --- /dev/null +++ b/structure/helpers/unescape.js @@ -0,0 +1,16 @@ +const _str = require('underscore.string'); + + +module.exports = function () { + var helpers = {}; + + helpers.unescape = function (options) { + if (options.fn && typeof options.fn === 'function') { + return _str.unescapeHTML(options.fn(this)); + } + return _str.unescapeHTML(options); + }; + + return helpers; +}; + diff --git a/structure/helpers/webfonts.js b/structure/helpers/webfonts.js new file mode 100644 index 0000000..1544a8e --- /dev/null +++ b/structure/helpers/webfonts.js @@ -0,0 +1,17 @@ +/** + * Handlebars Helpers: {{webfonts}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +module.exports = function (assemble) { + + var Handlebars = assemble.Handlebars; + var helpers = {}; + + helpers.webfonts = function (context) { + return new Handlebars.SafeString('"' + context.join('", "') + '"'); + }; + + return helpers; +}; diff --git a/structure/includes/docs.hbs b/structure/includes/docs.hbs new file mode 100644 index 0000000..c123e12 --- /dev/null +++ b/structure/includes/docs.hbs @@ -0,0 +1,20 @@ +{{#each .}} + +
    + + + {{#each (expand files)}} + + {{success '>> Inlining:' (basename .)}} {{! log a success message! }} + + {{#markdown}} + {{inline .}} + {{/markdown}} + +
    + {{/each}} + +
    +{{/each}} \ No newline at end of file diff --git a/structure/includes/head.hbs b/structure/includes/head.hbs new file mode 100644 index 0000000..f67c7dd --- /dev/null +++ b/structure/includes/head.hbs @@ -0,0 +1,38 @@ +{{default title (titleize basename)}} | {{site.title}} » {{site.description}} + + + + + + + + + + + +{{!-- + + + + +--}} + +{{!-- Google Analytics --}} +{{#if production}} + {{! setup your google analytics info in .assemblerc.yml }} + {{analytics site.google.analytics 'head'}} +{{/if}} + +{{!-- Add JSON-LD metadata. TODO: update metadata to conform better to Google standards. --}} +{{> metadata }} diff --git a/structure/includes/javascripts.hbs b/structure/includes/javascripts.hbs new file mode 100644 index 0000000..6fbcaf2 --- /dev/null +++ b/structure/includes/javascripts.hbs @@ -0,0 +1,25 @@ + + + +{{#production}}{{/production}} + + + + + +{{! hide the "content" navbar and related elements }} + + + +{{! google analytics settings are in .assemblerc.yml }} +{{#is site.mode 'production'}} + + {{analytics site.google.analytics 'footer'}} +{{/is}} \ No newline at end of file diff --git a/structure/layouts/README.md b/structure/layouts/README.md new file mode 100644 index 0000000..5526322 --- /dev/null +++ b/structure/layouts/README.md @@ -0,0 +1,5 @@ +# Layouts + +> Layouts _wrap_ pages. + +While a page contains the structural scaffolding required to wrap components or content, layouts generally consist of elements that will be used across multiple pages, such as a footer, masthead, navigation and so on. diff --git a/structure/layouts/base.hbs b/structure/layouts/base.hbs new file mode 100644 index 0000000..bab13a2 --- /dev/null +++ b/structure/layouts/base.hbs @@ -0,0 +1,33 @@ + + + + {{> head }} + + + Skip to main content + + + {{> nav-main }} + + + + {{#is slug "index"}} + {{> jumbotron jumbotron }} + {{> teaser teaser }} + {{/is}} + + + + {{ body }} + + + + {{#isnt slug 'blog'}} + {{> footer }} + {{/isnt}} + + + + {{> javascripts }} + + \ No newline at end of file diff --git a/structure/layouts/container.hbs b/structure/layouts/container.hbs new file mode 100644 index 0000000..2eedb00 --- /dev/null +++ b/structure/layouts/container.hbs @@ -0,0 +1,8 @@ +--- +# This layout extends the `common` layout with a container that centers content. +layout: base +--- + +
    + {{ body }} +
    \ No newline at end of file diff --git a/structure/layouts/content.hbs b/structure/layouts/content.hbs new file mode 100644 index 0000000..20e79d5 --- /dev/null +++ b/structure/layouts/content.hbs @@ -0,0 +1,10 @@ +--- +# This layout extends the `two-col-sidebar-left` layout +# with a content navbar in the main column +layout: two-col-sidebar-left +--- + + +{{> navbar-content }} + +{{ body }} \ No newline at end of file diff --git a/structure/layouts/default.hbs b/structure/layouts/default.hbs new file mode 100644 index 0000000..f449997 --- /dev/null +++ b/structure/layouts/default.hbs @@ -0,0 +1,24 @@ +--- +layout: base +--- +
    +
    + +
    +
    + {{#is slug 'helpers'}} + {{> paginate paginate.prev }} + {{/is}} + + +
    + {{ body }} +
    + + {{#is slug 'helpers'}} + {{> paginate paginate.next }} + {{/is}} +
    +
    \ No newline at end of file diff --git a/structure/layouts/two-col-sidebar-left.hbs b/structure/layouts/two-col-sidebar-left.hbs new file mode 100644 index 0000000..0df7a4c --- /dev/null +++ b/structure/layouts/two-col-sidebar-left.hbs @@ -0,0 +1,26 @@ +--- +# This 2-column layout extends the `container` layout +layout: container +--- + +
    +
    + +
    +
    + {{#is slug 'helpers'}} + {{> paginate paginate.prev }} + {{/is}} + + +
    + {{ body }} +
    + + {{#is slug 'helpers'}} + {{> paginate paginate.next }} + {{/is}} +
    +
    \ No newline at end of file diff --git a/structure/layouts/two-col-sidebar-right.hbs b/structure/layouts/two-col-sidebar-right.hbs new file mode 100644 index 0000000..fc038d5 --- /dev/null +++ b/structure/layouts/two-col-sidebar-right.hbs @@ -0,0 +1,26 @@ +--- +# This 2-column layout extends the `container` layout +layout: container +--- +
    +
    + {{#is slug 'helpers'}} + {{> paginate paginate.prev }} + {{/is}} + + +
    + {{ body }} +
    + + {{#is slug 'helpers'}} + {{> paginate paginate.next }} + {{/is}} +
    + +
    + +
    +
    \ No newline at end of file diff --git a/structure/middleware/README.md b/structure/middleware/README.md new file mode 100644 index 0000000..6584145 --- /dev/null +++ b/structure/middleware/README.md @@ -0,0 +1,5 @@ +# Assemble Plugins + +> Structure-related plugins. + +Use this directory for necessary local Assemble plugins only. If the plugin _can_ be generalized and published as a standalone Node.js library, please do so! \ No newline at end of file diff --git a/structure/middleware/context.js b/structure/middleware/context.js new file mode 100644 index 0000000..746bb58 --- /dev/null +++ b/structure/middleware/context.js @@ -0,0 +1,163 @@ +const url = require('url'); +const file = require('fs-utils'); +const origin = require('remote-origin-url'); +const branch = require('git-branch'); +const repoUrl = require('github-repo-url'); +const ghUsername = require('git-username'); +const ghRepoName = require('git-repo-name'); +const _ = require('lodash'); + +/** + * Extend the context + */ + +module.exports = function (assemble) { + + var middleware = function (params, next) { + var utils = {}; + + /** + * Get the current branch for a local git repository + */ + + utils.uppercase = function(str) { + return str.toUpperCase(); + }; + + + /** + * Get the current branch for a local git repository + */ + + utils.origin = origin.url(); + + + /** + * Get the current branch for a local git repository + */ + + utils.branch = branch; + + + /** + * Get the remote origin url for a local git repository + */ + + utils.repo_url = repoUrl; + + + /** + * Get the username from the GitHub remote origin URL + */ + + utils.username = ghUsername; + + + /** + * Get the repo name from the GitHub remote origin URL + */ + + utils.repo_name = ghRepoName; + + + /** + * Count the number of files returned from the + * given glob pattern. + */ + + utils.fileCount = function(str) { + return file.expand(str).length; + }; + + + /** + * Get the hostname of a URL + * @param {String} str The full URL to parse + * @return {String} The hostname only + * @example + * <%= _.hostname('https://assemble.io') %> + * => assemble.io + */ + + utils.hostname = function(str) { + return url.parse(str).hostname; + }; + + + /** + * Strip `.git` from the end of a URL, so the URL + * can be used and extended in config values. + * + * @param {String} str + * @return {String} + * @example + * <%= _.stripGit('https://github.com/assemble/assemble.io.git') %> + * => https://github.com/assemble/assemble.io + */ + + utils.stripGit = function(url) { + var git = /\.git$/; + if (git.test(url)) { + return url.replace(git, ''); + } + return url; + }; + + + + + /** + * Date functions used in _.date() mixin + * + * @name formatDate + * @param {Object} dateobj The date object to format. + * @param {String} structure The structure to use, e.g. 'YYYY-MM-DD'. + * + * @return {String} The formatted date. + * @api public + */ + + utils.date = function(structure) { + /* jshint unused: false */ + + var dateobj = new Date(); + + var year = dateobj.getFullYear(); + var month = ('0' + (dateobj.getMonth() + 1)).slice(-2); + var date = ('0' + dateobj.getDate()).slice(-2); + var hours = ('0' + dateobj.getHours()).slice(-2); + var minutes = ('0' + dateobj.getMinutes()).slice(-2); + var seconds = ('0' + dateobj.getSeconds()).slice(-2); + var day = dateobj.getDay(); + + var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + var dates = ['Sunday', 'Monday', 'Tuesday', 'Wendesday', 'Thursday', 'Friday', 'Saturday']; + var output = ''; + + structure = structure || 'YYYY-MMM-DD DDD'; + switch (structure) { + case 'YYYY-MM-DD': + output = year + '-' + month + '-' + date; + break; + case 'YYYY': + output = year; + break; + case 'full': + output = dates[parseInt(day)] + ', ' + months[parseInt(month) - 1] + ' ' + date + ', ' + year; + break; + } + return output; + }; + + _.extend(assemble.config, utils); + + next(); + }; + + middleware.event = 'assemble:before:configuration'; + return { + 'assemble-middleware-context': middleware + }; +}; + + diff --git a/structure/middleware/holder-404-avoid.js b/structure/middleware/holder-404-avoid.js new file mode 100644 index 0000000..24c8d47 --- /dev/null +++ b/structure/middleware/holder-404-avoid.js @@ -0,0 +1,41 @@ +/* + * Adapted from holder-404-avoid.js + * github.com/less/less-docs + * @lukeapage + * + */ + + +var cheerio = require('cheerio'); + + +module.exports = function (assemble) { + var middleware = function (params, next) { + 'use strict'; + + // Load current page content + var $ = cheerio.load(params.content); + + // Get all the anchor tags from inside the headers + var images = $('img[src]'); + + images.each(function (i, e) { + var $e = $(e); + var src = $e.attr("src"); + if (src.indexOf("holder.js") === 0) { + $e.attr("src", null); + $e.attr("data-src", src); + } + }); + + params.content = $.html(); + + next(); + }; + + + middleware.event = 'page:after:render'; + return { + 'assemble-404-avoid': middleware + }; +}; diff --git a/structure/middleware/lib/utils.js b/structure/middleware/lib/utils.js new file mode 100644 index 0000000..6dca81e --- /dev/null +++ b/structure/middleware/lib/utils.js @@ -0,0 +1,56 @@ +/* + * marked-toc: utils + * https://github.com/jonschlinkert/marked-toc + * + * Copyright (c) 2013 Jon Schlinkert + * Licensed under the MIT license. + */ + + +// The following code for slugifying is from underscore.string: +// https://github.com/epeli/underscore.string +var nativeTrim = String.prototype.trim; + +var escapeRegExp = function (str) { + if (str == null) { + return ''; + } + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; + +var defaultToWhiteSpace = function (characters) { + if (characters == null) { + return '\\s'; + } else if (characters.source) { + return characters.source; + } else { + return '[' + escapeRegExp(characters) + ']'; + } +}; + +var trim = function (str, characters) { + if (str == null) {return ''; } + if (!characters && nativeTrim) { + return nativeTrim.call(str); + } + characters = defaultToWhiteSpace(characters); + return String(str).replace(new RegExp('^' + characters + '+|' + characters + '+$', 'g'), ''); +}; +var dasherize = function(str){ + return trim(str).replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase(); +}; + + +exports.slugify = function (str) { + if (str == null) { + return ''; + } + var from = "ąàáäâãåæăćęèéëêìíïîłńòóöôõøśșțùúüûñçżź"; + var to = "aaaaaaaaaceeeeeiiiilnoooooosstuuuunczz"; + var regex = new RegExp(defaultToWhiteSpace(from), 'g'); + str = String(str).toLowerCase().replace(regex, function (c) { + var index = from.indexOf(c); + return to.charAt(index) || '-'; + }); + return dasherize(str.replace(/[^\w\s-]/g, '')); +}; \ No newline at end of file diff --git a/structure/middleware/link-checker.js b/structure/middleware/link-checker.js new file mode 100644 index 0000000..78445e7 --- /dev/null +++ b/structure/middleware/link-checker.js @@ -0,0 +1,194 @@ +/* + * Adapted from link-checker.js + * github.com/less/less-docs + * @lukeapage + * + */ + +var options = { + stage: 'render:post:page' +}; + +var cheerio = require('cheerio'); +var request = require('request'); + +var linkMap = {}; + + +var que = []; +var activeRequests = 0; + +function checkLink(link, callback) { + + if (link.indexOf("//") === 0) { + link = "http:" + link; + } + + function doRequest() { + activeRequests++; + request.get({ + uri: link, + strictSSL: false + }, function (error, res, body) { + if (error) { + callback(false, error); + } else { + callback(res.statusCode === 200, res.statusCode); + } + if (que.length) { + que.pop()(); + } else { + activeRequests--; + } + }); + } + + if (activeRequests >= 9) { + que.push(doRequest); + } else { + doRequest(); + } +} + +function findLink(linkToFind, anchors) { + for (var i = 0; i < anchors.length; i++) { + if (anchors[i] === linkToFind) { + return true; + } + } + return false; +} + +module.exports = function (assemble) { + + // Adapted from link-checker.js from less/less-docs + var middleware = function (params, next) { + 'use strict'; + + var page = params.page.dest.replace(params.page.dirname, "").substr(1), + shortname = page.replace(/\/?index.html$/, ""); + + // load current page content + var $ = cheerio.load(params.content); + + // get all the anchor tags from inside the headers + var anchors = $('h1[id],h2[id],h3[id],h4[id],h5[id],a[id]'), + links = $('a[href]'), + failures = [], + externalLinks = [], + externalLinksChecked = 0, + syncFinished = false; + + function finish() { + if (syncFinished && externalLinks.length === externalLinksChecked) { + if (failures.length > 0) { + console.log("\n"); + failures.forEach(function (error) { + console.log(error); + }); + console.warn("failed to find some links"); + } + + next(); + } + } + + if (!linkMap[shortname]) { + linkMap[shortname] = {}; + } + + linkMap[shortname].anchors = anchors.map(function (i, e) { + return $(e).attr("id"); + }); + + if (linkMap[shortname].checks) { + linkMap[shortname].checks.map(function (check) { + check(); + }); + } + + function isLinkException(href, $e) { + if (href === "#" && $e.attr("class") === "dropdown-toggle") { + return true; + } + if (href === '#' && $e.attr("class") === "navbar-brand" && shortname === "") { + //console.log("leaving '" + shortname + "'"); + return true; + } + return false; + } + + links.map(function (i, e) { + + function checkInternalCrossRefLink() { + if (!findLink(linkid, linkMap[linkpage].anchors)) { + failures.push("Could not find internal cross link '" + href + "' as part of link '" + $.html(e) + "'"); + } + } + + var href = $(e).attr("href"); + if (href.match(/^#/)) { + if (!isLinkException(href, $(e))) { + if (!findLink(href.substr(1), linkMap[shortname].anchors)) { + failures.push("Could not find '" + href + "' as part of link '" + $.html(e) + "'"); + } + } + } else if (href.match("^(https?:)?//")) { + if (href.indexOf("http://localhost") !== 0) { + externalLinks.push(href); + checkLink(href, function (ok, statusCode) { + externalLinksChecked++; + if (!ok) { + failures.push("Could not find external '" + href + "' as part of link '" + $.html(e) + "'. Got status code " + statusCode); + } + finish(); + }); + } + } else { + var split = href.split("#"), + linkpage = split[0], + linkid = split[1], + currentDirectory = ""; + + if (page.indexOf("/") > 0) { + currentDirectory = page.substr(0, page.indexOf("/")); + } + + if (linkpage.indexOf("../") === 0) { + linkpage = linkpage.substr(3); + } else { + linkpage = currentDirectory + "/" + linkpage; + } + + linkpage = linkpage.replace(/(^\/)|(\/$)/g, ""); + + if (linkpage !== "usage" && linkpage !== "features" && linkpage !== "" && linkpage !== "functions" && linkpage !== "about") { + failures.push("Could not find internal page '" + href + "' as part of link '" + $.html(e)); + } + + if (linkid) { + if (!linkMap[linkpage]) { + linkMap[linkpage] = {}; + } + if (linkMap[linkpage].anchors) { + checkInternalCrossRefLink(); + } else { + linkMap[linkpage].checks = linkMap[linkpage].checks || []; + linkMap[linkpage].checks.push(checkInternalCrossRefLink); + } + } + } + }); + + syncFinished = true; + finish(); + }; + + + + middleware.event = 'page:after:render'; + + return { + 'assemble-middleware-link-checker': middleware + }; +}; diff --git a/structure/middleware/postprocess.js b/structure/middleware/postprocess.js new file mode 100644 index 0000000..0c6c051 --- /dev/null +++ b/structure/middleware/postprocess.js @@ -0,0 +1,36 @@ +/* + * Assemble Contrib Plugin: postprocess + * https://github.com/assemble/assemble-contrib-postprocess + * Assemble is the 100% JavaScript static site generator for Node.js, Grunt.js, and Yeoman. + * + * Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors. + * Licensed under the MIT license. + */ + + +module.exports = function (assemble) { + + var middleware = function (params, next) { + 'use strict'; + + var grunt = params.grunt; + + grunt.verbose.subhead('Running:'.bold, '"assemble-contrib-postprocess"'); + grunt.verbose.writeln('Stage: '.bold, '"render:post:page"\n'); + + var content = params.content; + var p = params.assemble.options.postprocess; + + function postprocess(src, fn) {return fn(src);} + var processFn = function(src) {return src;}; + + params.content = postprocess(content, p || processFn); + next(); + }; + + middleware.event = 'page:after:render'; + + return { + 'assemble-middleware-postprocess': middleware + }; +}; diff --git a/structure/middleware/scripts.js b/structure/middleware/scripts.js new file mode 100644 index 0000000..f2e167f --- /dev/null +++ b/structure/middleware/scripts.js @@ -0,0 +1,34 @@ +const cheerio = require('cheerio'); + +/** + * Aggregate scripts from the body to a single + * script tag in the head + */ + +module.exports = function (assemble) { + + var middleware = function (params, next) { + 'use strict'; + + // Load current page content + var $ = cheerio.load(params.content); + var arr = []; + + // Find the script tags in the body + $('body script').each(function (i, ele) { + arr.push($(ele).html()); + $(ele).remove(); + }); + + // Append them to the head + $('head').append('\n\n'); + params.content = $.html(); + + next(); + }; + + middleware.event = 'page:after:render'; + return { + 'assemble-middleware-scripts': middleware + }; +}; diff --git a/structure/middleware/styles.js b/structure/middleware/styles.js new file mode 100644 index 0000000..6061033 --- /dev/null +++ b/structure/middleware/styles.js @@ -0,0 +1,34 @@ +const cheerio = require('cheerio'); + +/** + * Aggregate styles from the body to a single + * style tag in the head + */ + +module.exports = function (assemble) { + + var middleware = function (params, next) { + 'use strict'; + + // Load current page content + var $ = cheerio.load(params.content); + var arr = []; + + // Find the style tags in the body + $('body style').each(function (i, ele) { + arr.push($(ele).html()); + $(ele).remove(); + }); + + // Append them to the head + $('head').append('\n\n'); + params.content = $.html(); + + next(); + }; + + middleware.event = 'page:after:render'; + return { + 'assemble-middleware-styles': middleware + }; +}; diff --git a/structure/middleware/validate.js b/structure/middleware/validate.js new file mode 100644 index 0000000..95e4104 --- /dev/null +++ b/structure/middleware/validate.js @@ -0,0 +1,39 @@ +/* + * HTML validation plugin for Assemble + */ + +'use strict'; + +var file = require('fs-utils'); +var w3cjs = require('w3cjs'); + +module.exports = function (assemble) { + + var middleware = function (params, next) { + 'use strict'; + + var options = params.assemble.options.validation || {}; + + var report = options.report; + + w3cjs.validate({ + input: params.content, + output: 'json', // Defaults to 'json', other option includes html + doctype: 'HTML5', // Defaults false for autodetect + charset: 'utf-8', // Defaults false for autodetect + callback: function (res) { + callback(console.log(res)); + file.writeJSONSync(report, res); + // depending on the output type, res will either be a json object or a html string + } + }); + + next(); + }; + + middleware.event = 'page:after:render'; + + return { + 'assemble-middleware-validate': middleware + }; +}; diff --git a/structure/pages/README.md b/structure/pages/README.md new file mode 100644 index 0000000..f8cfeaa --- /dev/null +++ b/structure/pages/README.md @@ -0,0 +1,13 @@ +# Pages + +> Templates for static pages + +_Pages_ should generally be viewed as scaffolding for other content or components. + +Although pages may contain as much "content" as you want them to. However, the main purpose of pages should be to serve as: + +* transitional vehicles. A vehicle transports something from A to B. Similarly our "page-as-a-vehicle" might be a Table of Contents, or photo gallery that should transport a visitor to another section of the website. +* containers for components, or includes +* "stencils" for content, which is actually written in other files (e.g. markdown files). + +Also, if a _page_ is generalized enough that it could be used by multiple sections of a site, then it might make more sense to use the page as a [layout](../layouts) or a sub-layout instead. \ No newline at end of file diff --git a/structure/pages/about.hbs b/structure/pages/about.hbs new file mode 100644 index 0000000..a51596d --- /dev/null +++ b/structure/pages/about.hbs @@ -0,0 +1,52 @@ +--- +title: About +slug: about +lead: "Learn about the history of assemble, meet the core team, and check out the ever-growing community resources." +--- +{{!-- History +================================================== --}} +
    + +
    + + +{{!-- Team +================================================== --}} +
    + +

    {{titleize site.title}} is maintained by a group of invaluable core contributors, with the massive support and involvement of our community. No one person is in charge and everyone has their own areas and donates the time they can afford. In alphabetical order:

    +
    + + {{! Generated from data/team.yml }} + {{#each team}} + + {{/each}} + +
    +

    Get involved with {{titleize site.title}} development by opening an issue or submitting a pull request (if it's a feature request, please open an issue first).

    +

    Read our contributing guidelines and the developing section of our usage page.

    +
    + + +{{!-- Community +================================================== --}} +
    + +

    Stay up to date on the development of {{titleize site.title}} and reach out to the community with these helpful resources.

    + +
    diff --git a/structure/pages/api.hbs b/structure/pages/api.hbs new file mode 100644 index 0000000..7db53e9 --- /dev/null +++ b/structure/pages/api.hbs @@ -0,0 +1,11 @@ +--- +published: false + +title: API +slug: API +lead: Coming soon. +--- + +
    + Coming soon. +
    \ No newline at end of file diff --git a/structure/pages/blog.hbs b/structure/pages/blog.hbs new file mode 100644 index 0000000..61d9b72 --- /dev/null +++ b/structure/pages/blog.hbs @@ -0,0 +1,144 @@ +--- +published: false +layout: base +title: Blog +lead: Welcome to the <%= site.title %> blog! +slug: blog +modifier: <%= slug %> +--- + +
    + +
    +

    {{title}}

    +

    {{lead}}

    +
    + +
    + +
    + + + {{! NOTE: for the wordcount plugin to work, the `.wordcount` class must be on the element wrapping the words you want to count }} + +
    +

    Sample blog post

    + + + {{! wordcount plugin }} + + {{! /wordcount plugin }} + + +

    This blog post shows a few different types of content that's supported and styled with Bootstrap. Basic typography, images, and code are all supported.

    +
    +

    Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

    +
    +

    Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

    +
    +

    Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

    +

    Heading

    +

    Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

    +

    Sub-heading

    +

    Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

    +
    Example code block
    +

    Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

    +

    Sub-heading

    +

    Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

    +
      +
    • Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
    • +
    • Donec id elit non mi porta gravida at eget metus.
    • +
    • Nulla vitae elit libero, a pharetra augue.
    • +
    +

    Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

    +
      +
    1. Vestibulum id ligula porta felis euismod semper.
    2. +
    3. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
    4. +
    5. Maecenas sed diam eget risus varius blandit sit amet non magna.
    6. +
    +

    Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.

    +
    + +
    +

    Another blog post

    + + +

    Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

    +
    +

    Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

    +
    +

    Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

    +

    Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

    +
    + +
    +

    New feature

    + + +

    Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

    +
      +
    • Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
    • +
    • Donec id elit non mi porta gravida at eget metus.
    • +
    • Nulla vitae elit libero, a pharetra augue.
    • +
    +

    Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

    +

    Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

    +
    + + + + +
    + +
    + + + +
    + + + +
    + +
    +
    + + +{{> footer-blog }} + + +{{!-- disqus javascript --}} +{{#if site.disqus.enabled}} + {{disqus site.disqus.shortname}} +{{/if}} \ No newline at end of file diff --git a/structure/pages/cheatsheet.hbs b/structure/pages/cheatsheet.hbs new file mode 100644 index 0000000..bca2ae9 --- /dev/null +++ b/structure/pages/cheatsheet.hbs @@ -0,0 +1,11 @@ +--- +published: false + +title: Cheatsheet +slug: cheatsheet +lead: Assemble cheatsheet +--- + +
    + Coming soon. +
    \ No newline at end of file diff --git a/structure/pages/contributing.hbs b/structure/pages/contributing.hbs new file mode 100644 index 0000000..907b6d4 --- /dev/null +++ b/structure/pages/contributing.hbs @@ -0,0 +1,9 @@ +--- +title: Contributing +slug: contributing +lead: Contributing to Assemble +--- + +
    + {{md 'contributing'}} +
    \ No newline at end of file diff --git a/templates/pages/docs/index.hbs b/structure/pages/docs.md similarity index 99% rename from templates/pages/docs/index.hbs rename to structure/pages/docs.md index c29fc27..95791dc 100644 --- a/templates/pages/docs/index.hbs +++ b/structure/pages/docs.md @@ -34,8 +34,7 @@ That depends on how you learn, but here are some really great starting points: 1. [assemble/generator-assemble](https://github.com/assemble/generator-assemble). Yeoman generator for Assemble, the static site generator built on Grunt.js. Kickstart new Assemble projects in just a few seconds, including templates, data, layouts, and a theme. - -{{> toc.md }} +{{!> toc }} ## Community Projects diff --git a/structure/pages/examples.hbs b/structure/pages/examples.hbs new file mode 100644 index 0000000..970e92c --- /dev/null +++ b/structure/pages/examples.hbs @@ -0,0 +1,50 @@ +--- +title: Examples +slug: examples +--- + +
    + +
    + + +
    + +
    + {{#each button}} + {{> button }} + {{/each}} +
    +
    +{{#markdown}} +```html + + + + + + + + + + + + + + + + + + + + +``` +{{/markdown}} +
    +
    + + diff --git a/structure/pages/getting-started.hbs b/structure/pages/getting-started.hbs new file mode 100644 index 0000000..e6a6a5a --- /dev/null +++ b/structure/pages/getting-started.hbs @@ -0,0 +1,24 @@ +--- +title: Getting started +slug: getting-started +lead: Brief introduction to using Assemble. +--- + + +
    +

    {{title}}

    +

    {{lead}}

    +
    + +{{#each usage.published}} + +
    + +
    + {{md @key}} +
    +
    +{{/each}} \ No newline at end of file diff --git a/structure/pages/helpers.hbs b/structure/pages/helpers.hbs new file mode 100644 index 0000000..a441de7 --- /dev/null +++ b/structure/pages/helpers.hbs @@ -0,0 +1,28 @@ +--- +layout: content +title: Helpers +slug: helpers +modifier: book +--- + +{{#each helpers.published}} + +
    + + + {{#each (expand files)}} + + + {{success '>> Inlining:' (basename .)}} {{! log a success message! }} + + {{#markdown}} + {{inline .}} + {{/markdown}} + +
    + {{/each}} + +
    +{{/each}} \ No newline at end of file diff --git a/structure/pages/index.hbs b/structure/pages/index.hbs new file mode 100644 index 0000000..415224b --- /dev/null +++ b/structure/pages/index.hbs @@ -0,0 +1,33 @@ +--- +layout: base +title: Home +slug: index +lead: Welcome to <%= site.domain %>! +--- + +{{!-- Getting started +================================================== --}} +
    + + {{md 'getting-started'}} +
    + + +{{!-- News +================================================== --}} +{{#news updates.recent}} + {{date}}: {{#join commentary ' · '}}{{.}}{{/join}} +{{/news}} + + +{{!-- Getting started +================================================== --}} +
      +
    • Cras justo odio
    • +
    • Dapibus ac facilisis in
    • +
    • Morbi leo risus
    • +
    • Porta ac consectetur ac
    • +
    • Vestibulum at eros
    • +
    \ No newline at end of file diff --git a/structure/pages/license.hbs b/structure/pages/license.hbs new file mode 100644 index 0000000..b9dece6 --- /dev/null +++ b/structure/pages/license.hbs @@ -0,0 +1,10 @@ +--- +layout: base +title: License +--- + +
    +{{#markdown}} + {{read 'LICENSE-MIT'}} +{{/markdown}} +
    \ No newline at end of file diff --git a/structure/pages/plugins.md b/structure/pages/plugins.md new file mode 100644 index 0000000..7e9ecfc --- /dev/null +++ b/structure/pages/plugins.md @@ -0,0 +1,10 @@ +--- +published: false + +title: Plugins +slug: plugins +--- + +
    + Coming soon. +
    \ No newline at end of file diff --git a/structure/pages/releases.hbs b/structure/pages/releases.hbs new file mode 100644 index 0000000..22f4534 --- /dev/null +++ b/structure/pages/releases.hbs @@ -0,0 +1,27 @@ +--- +layout: content +title: Releases +slug: releases +modifier: book +--- + +{{#each releases.published}} + +
    + + + {{#each (expand files)}} + + {{success '>> Inlining:' (basename .)}} {{! log a success message! }} + + {{#markdown}} + {{inline .}} + {{/markdown}} + +
    + {{/each}} + +
    +{{/each}} \ No newline at end of file diff --git a/structure/pages/upgrading.hbs b/structure/pages/upgrading.hbs new file mode 100644 index 0000000..689ff6c --- /dev/null +++ b/structure/pages/upgrading.hbs @@ -0,0 +1,26 @@ +--- +layout: content +title: Migrations +slug: helpers +--- + +{{#each upgrading.published}} + +
    + + + {{#each (expand files)}} + + {{success '>> Inlining:' (basename .)}} {{! log a success message! }} + + {{#markdown}} + {{inline .}} + {{/markdown}} + +
    + {{/each}} + +
    +{{/each}} \ No newline at end of file diff --git a/structure/snippets/README.md b/structure/snippets/README.md new file mode 100644 index 0000000..a7dcde1 --- /dev/null +++ b/structure/snippets/README.md @@ -0,0 +1,8 @@ +# Snippets + +> Like includes, "snippets" are reusable fragments of code. + +But snippets differ in that they may or may not be _included_ in other HTML. Examples: + +* `feed.xml`: template used to generated RSS feeds. +* `heading.tmpl`: Lo-Dash/Underscore template used by [marked-extras](https://github.com/assemble/marked-extras) to generated heading IDs diff --git a/structure/snippets/_robots.txt b/structure/snippets/_robots.txt new file mode 100644 index 0000000..40f5ccd --- /dev/null +++ b/structure/snippets/_robots.txt @@ -0,0 +1,10 @@ +--- +layout: none +--- + +# www.robotstxt.org/ + +# Allow crawling of all content +User-agent: * +Disallow: +Sitemap: {{ site.url.pulic }}/sitemap.xml \ No newline at end of file diff --git a/structure/snippets/alexa.hbs b/structure/snippets/alexa.hbs new file mode 100644 index 0000000..9995559 --- /dev/null +++ b/structure/snippets/alexa.hbs @@ -0,0 +1,7 @@ + + + + + diff --git a/templates/includes/snippets/analytics.hbs b/structure/snippets/analytics.hbs similarity index 100% rename from templates/includes/snippets/analytics.hbs rename to structure/snippets/analytics.hbs diff --git a/structure/snippets/bugherd.hbs b/structure/snippets/bugherd.hbs new file mode 100644 index 0000000..3971a98 --- /dev/null +++ b/structure/snippets/bugherd.hbs @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/templates/includes/layout/click-tracker.hbs b/structure/snippets/click-tracker.hbs similarity index 100% rename from templates/includes/layout/click-tracker.hbs rename to structure/snippets/click-tracker.hbs diff --git a/structure/snippets/feed.xml b/structure/snippets/feed.xml new file mode 100644 index 0000000..6edc22d --- /dev/null +++ b/structure/snippets/feed.xml @@ -0,0 +1,26 @@ + + + + + + {{site.title}} + {{datetime}} + {{site.homepage}} + {{#_assemble.authors}} + + {{name}} + {{email}} + + {{/_assemble.authors}} + Copyright (c) 2013-{{now '%Y'}}, Jon Schlinkert, Brian Woodward. All rights reserved. + + {{#feed src="templates/*.hbs"}} + + {{@title}} + + {{@date}} + {{site.homepage}}/{{@slug}} + {{!@content}} + + {{/feed}} + \ No newline at end of file diff --git a/structure/snippets/github.js b/structure/snippets/github.js new file mode 100644 index 0000000..f9eed96 --- /dev/null +++ b/structure/snippets/github.js @@ -0,0 +1,32 @@ +$.ajax({ + type: 'GET', + url: 'https://api.github.com/users/jonschlinkert/repos?page=1&per_page=100', + dataType: 'json', + success: function (repos) { + for (i in repos) { + var repo = repos[i]; + if(repo.fork === false) { + if(repo.description !== undefined && repo.description.length !== 0) { + $('#repos').append([ + '
    ', + '
    ', + '
    ', + '

    ' + repo.name + '

    ', + '
    ', + '
    ', + repo.description, + '
    ', + ' ', + '
    ', + '
    ' + ].join('\n') + ); + } + } + } + $('#repos-total').append('Total Repos: ' + repos.length); + } +}); \ No newline at end of file diff --git a/structure/snippets/heading.tmpl b/structure/snippets/heading.tmpl new file mode 100644 index 0000000..c577d0f --- /dev/null +++ b/structure/snippets/heading.tmpl @@ -0,0 +1 @@ + id="<%= _.slugify(text) %>"><%= text %>> \ No newline at end of file diff --git a/structure/snippets/metadata.hbs b/structure/snippets/metadata.hbs new file mode 100644 index 0000000..4198849 --- /dev/null +++ b/structure/snippets/metadata.hbs @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/structure/snippets/robots.txt b/structure/snippets/robots.txt new file mode 100644 index 0000000..3f86d8a --- /dev/null +++ b/structure/snippets/robots.txt @@ -0,0 +1,10 @@ +--- +layout: nil +--- + +# www.robotstxt.org/ + +# Allow crawling of all content +User-agent: * +Disallow: +Sitemap: {{ site.url }}/sitemap.xml diff --git a/templates/includes/snippets/segment-io.hbs b/structure/snippets/segment-io.hbs similarity index 95% rename from templates/includes/snippets/segment-io.hbs rename to structure/snippets/segment-io.hbs index d77061f..c25ca30 100644 --- a/templates/includes/snippets/segment-io.hbs +++ b/structure/snippets/segment-io.hbs @@ -1,4 +1,4 @@ -{{! Segment.io Analytics +{{! Segment.io Analytics ================================================== }} - -{{! Documentation for Segment.io +{{#unpublished}} +{{! Documentation for Segment.io ================================================== }} -{{#documentation}} -{{/documentation}} \ No newline at end of file +{{/unpublished}} \ No newline at end of file diff --git a/structure/snippets/sitemap.xml b/structure/snippets/sitemap.xml new file mode 100644 index 0000000..aa6dbda --- /dev/null +++ b/structure/snippets/sitemap.xml @@ -0,0 +1,22 @@ +--- +layout: nil +--- + + + + {{ site.url }}/ + {{!date (date_to_xmlschema site.time)}} + daily + 1.0 + + {{#each site.pages}} + {{#is page.layout "home"}} + + {{ site.url }}{{ page.url }} + {{!date (date_to_xmlschema site.time)}} + weekly + 0.7 + + {{/is}} + {{/each}} + diff --git a/styles/.csscomb.json b/styles/.csscomb.json new file mode 100644 index 0000000..8456e41 --- /dev/null +++ b/styles/.csscomb.json @@ -0,0 +1,297 @@ +{ + "always-semicolon": true, + "block-indent": 2, + "colon-space": [0, 1], + "color-case": "lower", + "color-shorthand": true, + "combinator-space": true, + "element-case": "lower", + "eof-newline": true, + "leading-zero": false, + "remove-empty-rulesets": true, + "rule-indent": 2, + "stick-brace": " ", + "strip-spaces": true, + "unitless-zero": true, + "vendor-prefix-align": true, + "sort-order": [ + [ + "position", + "top", + "right", + "bottom", + "left", + "z-index", + "display", + "float", + "width", + "min-width", + "max-width", + "height", + "min-height", + "max-height", + "-webkit-box-sizing", + "-moz-box-sizing", + "box-sizing", + "-webkit-appearance", + "padding", + "padding-top", + "padding-right", + "padding-bottom", + "padding-left", + "margin", + "margin-top", + "margin-right", + "margin-bottom", + "margin-left", + "overflow", + "overflow-x", + "overflow-y", + "-webkit-overflow-scrolling", + "-ms-overflow-x", + "-ms-overflow-y", + "-ms-overflow-style", + "clip", + "clear", + "font", + "font-family", + "font-size", + "font-style", + "font-weight", + "font-variant", + "font-size-adjust", + "font-stretch", + "font-effect", + "font-emphasize", + "font-emphasize-position", + "font-emphasize-style", + "font-smooth", + "-webkit-hyphens", + "-moz-hyphens", + "hyphens", + "line-height", + "color", + "text-align", + "-webkit-text-align-last", + "-moz-text-align-last", + "-ms-text-align-last", + "text-align-last", + "text-emphasis", + "text-emphasis-color", + "text-emphasis-style", + "text-emphasis-position", + "text-decoration", + "text-indent", + "text-justify", + "text-outline", + "-ms-text-overflow", + "text-overflow", + "text-overflow-ellipsis", + "text-overflow-mode", + "text-shadow", + "text-transform", + "text-wrap", + "-webkit-text-size-adjust", + "-ms-text-size-adjust", + "letter-spacing", + "-ms-word-break", + "word-break", + "word-spacing", + "-ms-word-wrap", + "word-wrap", + "-moz-tab-size", + "-o-tab-size", + "tab-size", + "white-space", + "vertical-align", + "list-style", + "list-style-position", + "list-style-type", + "list-style-image", + "pointer-events", + "cursor", + "visibility", + "zoom", + "flex-direction", + "flex-order", + "flex-pack", + "flex-align", + "table-layout", + "empty-cells", + "caption-side", + "border-spacing", + "border-collapse", + "content", + "quotes", + "counter-reset", + "counter-increment", + "resize", + "-webkit-user-select", + "-moz-user-select", + "-ms-user-select", + "-o-user-select", + "user-select", + "nav-index", + "nav-up", + "nav-right", + "nav-down", + "nav-left", + "background", + "background-color", + "background-image", + "-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient", + "filter:progid:DXImageTransform.Microsoft.gradient", + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader", + "filter", + "background-repeat", + "background-attachment", + "background-position", + "background-position-x", + "background-position-y", + "-webkit-background-clip", + "-moz-background-clip", + "background-clip", + "background-origin", + "-webkit-background-size", + "-moz-background-size", + "-o-background-size", + "background-size", + "border", + "border-color", + "border-style", + "border-width", + "border-top", + "border-top-color", + "border-top-style", + "border-top-width", + "border-right", + "border-right-color", + "border-right-style", + "border-right-width", + "border-bottom", + "border-bottom-color", + "border-bottom-style", + "border-bottom-width", + "border-left", + "border-left-color", + "border-left-style", + "border-left-width", + "border-radius", + "border-top-left-radius", + "border-top-right-radius", + "border-bottom-right-radius", + "border-bottom-left-radius", + "-webkit-border-image", + "-moz-border-image", + "-o-border-image", + "border-image", + "-webkit-border-image-source", + "-moz-border-image-source", + "-o-border-image-source", + "border-image-source", + "-webkit-border-image-slice", + "-moz-border-image-slice", + "-o-border-image-slice", + "border-image-slice", + "-webkit-border-image-width", + "-moz-border-image-width", + "-o-border-image-width", + "border-image-width", + "-webkit-border-image-outset", + "-moz-border-image-outset", + "-o-border-image-outset", + "border-image-outset", + "-webkit-border-image-repeat", + "-moz-border-image-repeat", + "-o-border-image-repeat", + "border-image-repeat", + "outline", + "outline-width", + "outline-style", + "outline-color", + "outline-offset", + "-webkit-box-shadow", + "-moz-box-shadow", + "box-shadow", + "filter:progid:DXImageTransform.Microsoft.Alpha(Opacity", + "-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha", + "opacity", + "-ms-interpolation-mode", + "-webkit-transition", + "-moz-transition", + "-ms-transition", + "-o-transition", + "transition", + "-webkit-transition-delay", + "-moz-transition-delay", + "-ms-transition-delay", + "-o-transition-delay", + "transition-delay", + "-webkit-transition-timing-function", + "-moz-transition-timing-function", + "-ms-transition-timing-function", + "-o-transition-timing-function", + "transition-timing-function", + "-webkit-transition-duration", + "-moz-transition-duration", + "-ms-transition-duration", + "-o-transition-duration", + "transition-duration", + "-webkit-transition-property", + "-moz-transition-property", + "-ms-transition-property", + "-o-transition-property", + "transition-property", + "-webkit-transform", + "-moz-transform", + "-ms-transform", + "-o-transform", + "transform", + "-webkit-transform-origin", + "-moz-transform-origin", + "-ms-transform-origin", + "-o-transform-origin", + "transform-origin", + "-webkit-animation", + "-moz-animation", + "-ms-animation", + "-o-animation", + "animation", + "-webkit-animation-name", + "-moz-animation-name", + "-ms-animation-name", + "-o-animation-name", + "animation-name", + "-webkit-animation-duration", + "-moz-animation-duration", + "-ms-animation-duration", + "-o-animation-duration", + "animation-duration", + "-webkit-animation-play-state", + "-moz-animation-play-state", + "-ms-animation-play-state", + "-o-animation-play-state", + "animation-play-state", + "-webkit-animation-timing-function", + "-moz-animation-timing-function", + "-ms-animation-timing-function", + "-o-animation-timing-function", + "animation-timing-function", + "-webkit-animation-delay", + "-moz-animation-delay", + "-ms-animation-delay", + "-o-animation-delay", + "animation-delay", + "-webkit-animation-iteration-count", + "-moz-animation-iteration-count", + "-ms-animation-iteration-count", + "-o-animation-iteration-count", + "animation-iteration-count", + "-webkit-animation-direction", + "-moz-animation-direction", + "-ms-animation-direction", + "-o-animation-direction", + "animation-direction" + ] + ] +} diff --git a/styles/.csslintrc b/styles/.csslintrc new file mode 100644 index 0000000..79b4920 --- /dev/null +++ b/styles/.csslintrc @@ -0,0 +1,20 @@ +{ + "adjoining-classes" : false, + "box-sizing" : false, + "box-model" : false, + "compatible-vendor-prefixes": false, + "floats" : false, + "font-sizes" : false, + "gradients" : false, + "important" : false, + "known-properties" : false, + "outline-none" : false, + "qualified-headings" : false, + "regex-selectors" : false, + "shorthand" : false, + "text-indent" : false, + "unique-headings" : false, + "universal-selector" : false, + "unqualified-attributes" : false, + "zero-units" : false +} diff --git a/styles/README.md b/styles/README.md new file mode 100644 index 0000000..f5896bd --- /dev/null +++ b/styles/README.md @@ -0,0 +1,23 @@ +# Styles +> CSS styles are organized into the following concepts + +## Generalized styles + +- **Components**: generic UI components that can be used with any theme. Buttons, navbars, and so on. +- **Mixins**: generalized mixins that can be used with any theme +- **Utilities**: generalized styles that are either intended to be stop-gaps for more semantic or idiomatic alternatives, or allow for special styling overrides that wouldn't make sense to add to components themselves. For example, `.pull-left` and `.pull-right` are utility classes for `float: left` and `float: right`. For the majority of use cases, some components might not need built-in floats, so the `.pull-` classes come in handy when one of these components needs a float. +- **Vendor**: Third-party styles from a framework, library or toolkit like Bootstrap or Zurb. + +## Themes +> Themes can be thought of as **special styles**, built **on top of common styles** + +**Core** + +At minimum, every theme consists of the following: + +- index.less +- variables.less + +**Components** + +Whenever possible, components are generalized, but themes can have their own components when they are specific enough. For example, a [book](./themes/book) theme might have components that are book-related. It wouldn't make sense for book-specific components to be lumped in with the generic components. diff --git a/styles/components/ad.less b/styles/components/ad.less new file mode 100644 index 0000000..779cf59 --- /dev/null +++ b/styles/components/ad.less @@ -0,0 +1,105 @@ +// +// Ads +// -------------------------------------------------- + + +/* + * Advertisement that shows on all pages (except homepage) in page headers. + * `!important` is required for any pre-set property. + */ +.ad { + width: auto !important; + margin: 50px -30px -40px !important; + padding: 20px !important; + overflow: hidden; /* clearfix */ + height: auto !important; + font-size: 13px !important; + line-height: 16px !important; + text-align: left; + background: darken(@navbar-inverse-bg, 5%) !important; + border: 0 !important; + box-shadow: inset 0 3px 5px rgba(0,0,0,.075); +} +.ad-img { + margin: 0 !important; +} +.ad-text, +.ad-tag { + float: none !important; + display: block !important; + width: auto !important; + height: auto !important; + margin-left: 145px !important; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important; +} +.ad-text { + padding-top: 0 !important; +} +.ad-tag { + color: @navbar-inverse-color !important; + text-align: left !important; +} +.ad-text a, +.ad-tag a { + color: #fff !important; +} +.ad #adsense > img { + display: none; /* hide what I assume are tracking images */ +} + +@media (min-width: 768px) { + .ad { + margin: 0 !important; + border-radius: 4px; + box-shadow: inset 0 3px 5px rgba(0,0,0,.075), 0 1px 0 rgba(255,255,255,.1); + } +} + +@media (min-width: 992px) { + .ad { + position: absolute; + top: 20px; + right: 15px; /* 15px instead of 0 since box-sizing */ + padding: 15px !important; + width: 330px !important; + } +} + +/* Homepage variations */ +.docs-home .ad { + margin: 0 -15px 40px !important; +} +@media (min-width: 480px) { + .docs-home .ad { + width: 330px !important; + margin: 0 auto 40px !important; + border-radius: 4px; + } +} +@media (min-width: 768px) { + .docs-home .ad { + float: left; + width: 330px !important; + margin: 0 0 30px !important; + } + .docs-home .bs-social, + .docs-home .bs-masthead-links { + margin-left: 350px; + } + .docs-home .bs-social { + margin-bottom: 10px; + } + .docs-home .bs-masthead-links { + margin-top: 10px; + } +} +@media (min-width: 992px) { + .docs-home .ad { + position: static; + } +} +@media (min-width: 1170px) { + .docs-home .ad { + margin-top: -25px !important; + } +} diff --git a/styles/components/anchors.less b/styles/components/anchors.less new file mode 100644 index 0000000..2112564 --- /dev/null +++ b/styles/components/anchors.less @@ -0,0 +1,68 @@ +// +// Anchors +// -------------------------------------------------- +// Anchors show upon hovering over a heading + +@anchor-width: 200px; +@anchor-distance: 160px; +@anchor-distance-small: 100px; + +// Base class +// ---------------------------------------------- +// Our "anchors" are really just icons that sit +// in the left margin, and are only visible when +// hovering over headings or the icons themselves. + +.anchor { + position: absolute; + top: auto; + bottom: 0; + left: 0; + + color: transparent; + font-size: 18px; + padding: 10px 10px 10px 25px; + width: @anchor-width; +} + +// Adjust the vertical positioning +// of anchors next to larger headings. +h2 .anchor { + margin-bottom: -9px; +} + + +// Headings +// ---------------------------------------------- + +h1, h2, h3 { + position: relative; + padding-left: @content-gutter; + margin-left: -(@content-gutter); + + .anchor:hover { + color: @gray-darkest; + visibility: visible; + text-decoration: none; + } +} + + +// Offset +// ---------------------------------------------- +// anchor targets are invisble and sit the specified +// distance above headings and anchors. This is what +// ensures that our headings won't overlap the navar. +// If you done require clickable anchors, you can +// achieve this with fewer classes and less HTML + +.anchor-target { + position: absolute; + margin-top: -(@anchor-distance); + padding-top: @anchor-distance; +} + +.anchor-target-small { + margin-top: -(@anchor-distance-small); + padding-top: @anchor-distance-small; +} \ No newline at end of file diff --git a/styles/components/banner.less b/styles/components/banner.less new file mode 100644 index 0000000..7412213 --- /dev/null +++ b/styles/components/banner.less @@ -0,0 +1,16 @@ +// +// Banners +// ------------------------------------------------------- +// Appears directly below page headers/subheads + + +.banner { + padding: 15px 20px; + color: #777; + background-color: #fafafa; + border-top: 1px solid #fff; + border-bottom: 1px solid #e5e5e5; +} +.banner strong { + color: #555; +} diff --git a/styles/components/base.less b/styles/components/base.less new file mode 100644 index 0000000..525ed3e --- /dev/null +++ b/styles/components/base.less @@ -0,0 +1,12 @@ +// +// Base +// --------------------------------------------- + +body { + background: @gray-lightest; + padding-top: @body-padding; +} + +.container { + background: #fff; +} \ No newline at end of file diff --git a/styles/components/blockquote.less b/styles/components/blockquote.less new file mode 100644 index 0000000..92a7d96 --- /dev/null +++ b/styles/components/blockquote.less @@ -0,0 +1,23 @@ +// +// Blockquotes +// --------------------------------------------- + +blockquote { + color: #000; + padding: 0px 15px; + margin-bottom: 25px; + background-color: fade(@link-color, 8%); + border-left: 4px solid fade(@link-color, 80%); +} + + +// Blockquote themes +// -------------------------------------- + +.blockquote-warning { + border-left: 4px solid #e5b333; +} + +.blockquote-danger { + border-left: 4px solid #e53365; +} diff --git a/styles/components/btn-outline.less b/styles/components/btn-outline.less new file mode 100644 index 0000000..628eb10 --- /dev/null +++ b/styles/components/btn-outline.less @@ -0,0 +1,32 @@ +// +// Buttons +// -------------------------------------------------- + + +.btn-outline { + color: @navbar-inverse-bg; + background-color: #fff; + border-color: #e5e5e5; +} +.btn-outline:hover, +.btn-outline:focus, +.btn-outline:active { + color: #fff; + background-color: @navbar-inverse-bg; + border-color: @navbar-inverse-bg; +} + +/* Inverted outline button (white on dark) */ +.btn-outline-inverse { + color: #fff; + background-color: transparent; + border-color: @navbar-inverse-color; +} +.btn-outline-inverse:hover, +.btn-outline-inverse:focus, +.btn-outline-inverse:active { + color: @navbar-inverse-bg; + text-shadow: none; + background-color: #fff; + border-color: #fff; +} diff --git a/styles/components/btn-social.less b/styles/components/btn-social.less new file mode 100644 index 0000000..879d7f4 --- /dev/null +++ b/styles/components/btn-social.less @@ -0,0 +1,38 @@ +// +// Social buttons +// ------------------------------------------------------- +// Twitter and GitHub social action buttons +// (for homepage and footer). + + +.bs-docs-social { + margin-bottom: 20px; + text-align: center; +} + +.bs-docs-social-buttons { + display: inline-block; + padding-left: 0; + margin-bottom: 0; + list-style: none; + + li { + display: inline-block; + padding: 5px 8px; + line-height: 1; + } + + // Make sure the actual buttons a fixed-width + .twitter-follow-button { + width: 225px !important; + } + .twitter-share-button { + width: 98px !important; + } +} + +// Style the GitHub buttons via CSS instead of inline attributes +.github-btn { + overflow: hidden; + border: 0; +} \ No newline at end of file diff --git a/src/less/components/buttons.less b/styles/components/btn.less similarity index 68% rename from src/less/components/buttons.less rename to styles/components/btn.less index 722d841..fa17ef4 100644 --- a/src/less/components/buttons.less +++ b/styles/components/btn.less @@ -2,48 +2,42 @@ // Buttons // -------------------------------------------------- +@btn-default-color: darken(#fff, 1%); +@btn-default-bg: #e5e5e5; +@btn-default-border: @btn-default-bg; -// Button psuedo states -// ------------------------- -// Easily pump out default styles, as well as :hover, :focus, :active, -// and disabled options for all buttons -.btn-pseudo-states(@color, @background, @border) { - color: @color; - background-color: @background; - border-color: @border; +@btn-primary-color: @btn-default-color; +@btn-primary-bg: @brand-primary; +@btn-primary-border: @btn-primary-bg; - &:hover, - &:focus, - &:active, - &.active { - background-color: darken(@background, 10%); - border-color: darken(@border, 10%); - } +@btn-success-color: @btn-default-color; +@btn-success-bg: @brand-success; +@btn-success-border: @btn-success-bg; - &.disabled, - &[disabled], - fieldset[disabled] & { - &:hover, - &:focus, - &:active, - &.active { - background-color: @background; - border-color: @border - } - } -} -.btn-inverse-pseudo-states(@color: #222, @background, @border) { - .btn-pseudo-states(@color, @background, @border); - &:hover, - &:focus, - &:active, - &.active { - color: @color; - background-color: darken(@background, 10%); - border-color: darken(@border, 10%); - } -} +@btn-warning-color: @btn-default-color; +@btn-warning-bg: @brand-warning; +@btn-warning-border: @btn-warning-bg; + +@btn-danger-color: @btn-default-color; +@btn-danger-bg: @brand-danger; +@btn-danger-border: @btn-danger-bg; + +@btn-info-color: @btn-default-color; +@btn-info-bg: @brand-info; +@btn-info-border: @btn-info-bg; +@btn-gray-color: #222; +@btn-gray-bg: #e5e5e5; +@btn-gray-border: @btn-default-bg; + +@btn-inverse-color: @gray-darker; +@btn-inverse-bg: @brand-inverse; +@btn-inverse-border: @btn-inverse-bg; + +@btn-jade-color: darken(#fff, 1%); +@btn-jade-bg: #62c98f; +@btn-jade-bg-hover: #20c97b; +@btn-jade-border: @btn-jade-bg; // Base styles @@ -99,41 +93,77 @@ - -// Alternate buttons +// Generate alternate buttons // -------------------------------------------------- .btn-default { - .btn-pseudo-states(@btn-default-color, @btn-default-bg, @btn-default-border); + .button-pseudo-states(@btn-default-color, @btn-default-bg, @btn-default-border); } .btn-primary { - .btn-pseudo-states(@btn-primary-color, @btn-primary-bg, @btn-primary-border); + .button-pseudo-states(@btn-primary-color, @btn-primary-bg, @btn-primary-border); } // Warning appears as orange .btn-warning { - .btn-pseudo-states(@btn-warning-color, @btn-warning-bg, @btn-warning-border); + .button-pseudo-states(@btn-warning-color, @btn-warning-bg, @btn-warning-border); } // Danger and error appear as red .btn-danger { - .btn-pseudo-states(@btn-danger-color, @btn-danger-bg, @btn-danger-border); + .button-pseudo-states(@btn-danger-color, @btn-danger-bg, @btn-danger-border); } // Success appears as green .btn-success { - .btn-pseudo-states(@btn-success-color, @btn-success-bg, @btn-success-border); + .button-pseudo-states(@btn-success-color, @btn-success-bg, @btn-success-border); } // Info appears as blue-green .btn-info { - .btn-pseudo-states(@btn-info-color, @btn-info-bg, @btn-info-border); + .button-pseudo-states(@btn-info-color, @btn-info-bg, @btn-info-border); } // Jade appears as green-blue .btn-jade { - .btn-pseudo-states(@btn-jade-color, @btn-jade-bg, @btn-jade-border); + .button-pseudo-states(@btn-jade-color, @btn-jade-bg, @btn-jade-border); } // Inverse appears as white .btn-inverse { - .btn-inverse-pseudo-states(@btn-inverse-color, @btn-inverse-bg, @btn-inverse-border); + .button-inverse-pseudo-states(@btn-inverse-color, @btn-inverse-bg, @btn-inverse-border); +} + + +// Basic alternate styles +// -------------------------------------------------- + +.button-jade-alt { + color: @btn-jade-color; + background: @btn-jade-bg; + .transition(all 0.1s ease-out); + &:hover { + color: @btn-jade-color; + background: @btn-jade-bg-hover; + } +} + +// Cool gray +.button-coolgray { + color: #fff; + background-color: #3f4546; +} + +.button-white { + color: #222; + background: #fff; + &:hover { + color: #222; + background: #e5e5e5; + } +} + +.button-dark { + color: #fff; + background-color: #222; + &:hover { + background-color: #444; + } } @@ -209,7 +239,7 @@ fieldset[disabled] .btn-link { font-size: 17px; line-height: 64px; letter-spacing: 1px; - border-radius: 40px; + border-radius: 40px; } // Small button @@ -259,47 +289,6 @@ input[type="button"] { - -// Alternate styles -// -------------------------------------------------- - - -.button-jade { - color: @btn-jade-color; - background: @btn-jade-bg; - .transition(all 0.1s ease-out); - &:hover { - color: @btn-jade-color; - background: @btn-jade-bg-hover; - } -} - -// Cool gray -.button-coolgray { - color: #fff; - background-color: #3f4546; -} - -.button-white { - color: #222; - background: #fff; - &:hover { - color: #222; - background: #e5e5e5; - } -} - -.button-dark { - color: #fff; - background-color: #222; - &:hover { - background-color: #444; - } -} - - - - // Buttons // -------------------------------- @@ -318,7 +307,4 @@ input[type="button"] { &:hover { background-color: #2f4a84; } -} - - - +} \ No newline at end of file diff --git a/styles/components/callout.less b/styles/components/callout.less new file mode 100644 index 0000000..4a72df1 --- /dev/null +++ b/styles/components/callout.less @@ -0,0 +1,51 @@ +// +// Callouts +// -------------------------------------------------- + + +.callout { + margin: 20px 0; + padding: 20px; + border-left: 3px solid @gray-lighter; +} + + +// Content +// ------------------------------- + +.callout h4 { + margin-top: 0; + margin-bottom: 5px; +} +.callout p:last-child { + margin-bottom: 0; +} + + +// Modifiers +// ------------------------------- + +.callout-info { + background-color: #f4f8fa; + border-color: #bce8f1; + h4 { + color: #3a87ad; + } +} + +.callout-warning { + background-color: #faf8f0; + border-color: #faebcc; + h4 { + color: #c09853; + } +} + +.callout-danger { + background-color: #fdf7f7; + border-color: #eed3d7; + h4 { + color: #b94a48; + } +} + diff --git a/styles/components/code-wide.less b/styles/components/code-wide.less new file mode 100644 index 0000000..cc1edbc --- /dev/null +++ b/styles/components/code-wide.less @@ -0,0 +1,62 @@ +// +// Code +// --------------------------------------------- +// Wide-themed code + +.book { + .log("components/code-wide"); + + pre code { + color: #333; + background: transparent; + } + + pre { + background-color: darken(@gray-lightest, 1%); + margin: 8px -(@content-gutter) 25px; + padding: 15px @content-gutter; + border: none; + border-radius: 0; + } + // burnt siena-ish + code { + color: #af4b08; + + // Neutralize background to allow the syntax + // highlighter theme to show through. + background-color: #fff6f0; + } +} + + +.highlight { + padding: 9px 14px; + margin-bottom: 14px; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; + border-radius: 4px; +} +.highlight pre { + padding: 0; + margin-top: 0; + margin-bottom: 0; + background-color: transparent; + border: 0; + white-space: nowrap; +} +.highlight pre code { + font-size: inherit; + color: #333; /* Effectively the base text color */ +} +.highlight pre .lineno { + display: inline-block; + width: 22px; + padding-right: 5px; + margin-right: 10px; + text-align: right; + color: #bebec5; +} + +pre { + background-color: @gray-lightest; +} \ No newline at end of file diff --git a/src/less/bootstrap/alerts.less b/styles/components/core/alerts.less similarity index 50% rename from src/less/bootstrap/alerts.less rename to styles/components/core/alerts.less index 66aa6cf..3eab066 100644 --- a/src/less/bootstrap/alerts.less +++ b/styles/components/core/alerts.less @@ -7,28 +7,38 @@ // ------------------------- .alert { - padding: 10px 35px 10px 15px; + padding: @alert-padding; margin-bottom: @line-height-computed; - color: @alert-text; - background-color: @alert-bg; - border: 1px solid @alert-border; + border: 1px solid transparent; border-radius: @alert-border-radius; // Headings for larger alerts h4 { margin-top: 0; - // Specified for the h4 to prevent conflicts of changing @headingsColor + // Specified for the h4 to prevent conflicts of changing @headings-color color: inherit; } - // Match the hr to the border of the alert - hr { - border-top-color: darken(@alert-border, 5%); - } // Provide class for links that match alerts .alert-link { - font-weight: 500; - color: darken(@alert-text, 10%); + font-weight: @alert-link-font-weight; + } + + // Improve alignment and spacing of inner content + > p, + > ul { + margin-bottom: 0; + } + > p + p { + margin-top: 5px; } +} + +// Dismissable alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissable { + padding-right: (@alert-padding + 20); // Adjust close link position .close { @@ -40,30 +50,18 @@ } // Alternate styles -// ------------------------- +// +// Generate contextual modifier classes for colorizing the alert. .alert-success { - .alert-variant(@alert-success-bg, @alert-success-border, @alert-success-text); -} -.alert-danger { - .alert-variant(@alert-danger-bg, @alert-danger-border, @alert-danger-text); + .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); } .alert-info { - .alert-variant(@alert-info-bg, @alert-info-border, @alert-info-text); + .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); } - -// Block alerts -// ------------------------- - -.alert-block { - padding-top: 15px; - padding-bottom: 15px; - - > p, - > ul { - margin-bottom: 0; - } - p + p { - margin-top: 5px; - } +.alert-warning { + .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); +} +.alert-danger { + .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); } diff --git a/styles/components/core/badges.less b/styles/components/core/badges.less new file mode 100644 index 0000000..20624f3 --- /dev/null +++ b/styles/components/core/badges.less @@ -0,0 +1,55 @@ +// +// Badges +// -------------------------------------------------- + + +// Base class +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: @font-size-small; + font-weight: @badge-font-weight; + color: @badge-color; + line-height: @badge-line-height; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: @badge-bg; + border-radius: @badge-border-radius; + + // Empty badges collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for badges in buttons + .btn & { + position: relative; + top: -1px; + } + .btn-xs & { + top: 0; + padding: 1px 5px; + } + + // Hover state, but only for links + a& { + &:hover, + &:focus { + color: @badge-link-hover-color; + text-decoration: none; + cursor: pointer; + } + } + + // Account for badges in navs + a.list-group-item.active > &, + .nav-pills > .active > a > & { + color: @badge-active-color; + background-color: @badge-active-bg; + } + .nav-pills > li > a > & { + margin-left: 3px; + } +} diff --git a/src/less/bootstrap/breadcrumbs.less b/styles/components/core/breadcrumbs.less similarity index 63% rename from src/less/bootstrap/breadcrumbs.less rename to styles/components/core/breadcrumbs.less index 92643d1..cb01d50 100644 --- a/src/less/bootstrap/breadcrumbs.less +++ b/styles/components/core/breadcrumbs.less @@ -4,19 +4,22 @@ .breadcrumb { - padding: 8px 15px; + padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; margin-bottom: @line-height-computed; list-style: none; background-color: @breadcrumb-bg; border-radius: @border-radius-base; + > li { display: inline-block; - &+li:before { - content: "/\00a0"; // Unicode space added since inline-block means non-collapsing white-space + + + li:before { + content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space padding: 0 5px; color: @breadcrumb-color; } } + > .active { color: @breadcrumb-active-color; } diff --git a/src/less/bootstrap/button-groups.less b/styles/components/core/button-groups.less similarity index 50% rename from src/less/bootstrap/button-groups.less rename to styles/components/core/button-groups.less index 69dfd87..ef11cf1 100644 --- a/src/less/bootstrap/button-groups.less +++ b/styles/components/core/button-groups.less @@ -2,14 +2,6 @@ // Button groups // -------------------------------------------------- -// Button carets -.btn .caret { - border-top-color: @btn-default-color; -} -.dropup .btn .caret { - border-bottom-color: @btn-default-color; -} - // Make the div behave like a button .btn-group, .btn-group-vertical { @@ -21,33 +13,43 @@ float: left; // Bring the "active" button to the front &:hover, - &:active { + &:focus, + &:active, + &.active { z-index: 2; } + &:focus { + // Remove focus outline when dropdown JS adds it after closing the menu + outline: 0; + } } } // Prevent double borders when buttons are next to each other -.btn-group .btn + .btn { - margin-left: -1px; +.btn-group { + .btn + .btn, + .btn + .btn-group, + .btn-group + .btn, + .btn-group + .btn-group { + margin-left: -1px; + } } // Optional: Group multiple button groups together for a toolbar .btn-toolbar { - .clearfix(); + margin-left: -5px; // Offset the first child's margin + &:extend(.clearfix all); - .btn-group { + .btn-group, + .input-group { float: left; } - // Space out series of button groups > .btn, - > .btn-group { - + .btn, - + .btn-group { + > .btn-group, + > .input-group { margin-left: 5px; } } -} .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0; @@ -76,8 +78,8 @@ .btn-group > .btn-group:first-child { > .btn:last-child, > .dropdown-toggle { - .border-right-radius(0); -} + .border-right-radius(0); + } } .btn-group > .btn-group:last-child > .btn:first-child { .border-left-radius(0); @@ -90,6 +92,14 @@ } +// Sizing +// +// Remix the default button sizing classes into new ones for easier manipulation. + +.btn-group-xs > .btn { &:extend(.btn-xs); } +.btn-group-sm > .btn { &:extend(.btn-sm); } +.btn-group-lg > .btn { &:extend(.btn-lg); } + // Split button dropdowns // ---------------------- @@ -99,7 +109,7 @@ padding-left: 8px; padding-right: 8px; } -.btn-group > .btn-large + .dropdown-toggle { +.btn-group > .btn-lg + .dropdown-toggle { padding-left: 12px; padding-right: 12px; } @@ -108,6 +118,11 @@ // Remove the gradient and set the same inset shadow as the :active state .btn-group.open .dropdown-toggle { .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + + // Show no shadow for `.btn-link` since it has no other button styles. + &.btn-link { + .box-shadow(none); + } } @@ -116,38 +131,72 @@ margin-left: 0; } // Carets in other button sizes -.btn-large .caret { - border-width: 5px; +.btn-lg .caret { + border-width: @caret-width-large @caret-width-large 0; + border-bottom-width: 0; } // Upside down carets for .dropup -.dropup .btn-large .caret { - border-bottom-width: 5px; +.dropup .btn-lg .caret { + border-width: 0 @caret-width-large @caret-width-large; } // Vertical button groups // ---------------------- -.btn-group-vertical > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; - + .btn { +.btn-group-vertical { + > .btn, + > .btn-group, + > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; + } + + // Clear floats so dropdown menus can be properly placed + > .btn-group { + &:extend(.clearfix all); + > .btn { + float: none; + } + } + + > .btn + .btn, + > .btn + .btn-group, + > .btn-group + .btn, + > .btn-group + .btn-group { margin-top: -1px; + margin-left: 0; } } -.btn-group-vertical .btn { + +.btn-group-vertical > .btn { &:not(:first-child):not(:last-child) { + border-radius: 0; + } + &:first-child:not(:last-child) { + border-top-right-radius: @border-radius-base; + .border-bottom-radius(0); + } + &:last-child:not(:first-child) { + border-bottom-left-radius: @border-radius-base; + .border-top-radius(0); + } +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } - &:first-child { - .border-bottom-radius(0); +.btn-group-vertical > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + .border-bottom-radius(0); + } } - &:last-child { +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { .border-top-radius(0); } -} + // Justified button groups @@ -156,16 +205,32 @@ .btn-group-justified { display: table; width: 100%; - .btn { + table-layout: fixed; + border-collapse: separate; + > .btn, + > .btn-group { float: none; display: table-cell; width: 1%; } + > .btn-group .btn { + width: 100%; + } } // Checkbox and radio options -.btn-group[data-toggle="buttons"] > .btn > input[type="radio"], -.btn-group[data-toggle="buttons"] > .btn > input[type="checkbox"] { - display: none; +// +// In order to support the browser's form validation feedback, powered by the +// `required` attribute, we have to "hide" the inputs via `opacity`. We cannot +// use `display: none;` or `visibility: hidden;` as that also hides the popover. +// This way, we ensure a DOM element is visible to position the popover from. +// +// See https://github.com/twbs/bootstrap/pull/12794 for more. + +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + position: absolute; + z-index: -1; + opacity: 0; } diff --git a/src/less/bootstrap/buttons.less b/styles/components/core/buttons.less similarity index 57% rename from src/less/bootstrap/buttons.less rename to styles/components/core/buttons.less index b8bbfc6..d4fc156 100644 --- a/src/less/bootstrap/buttons.less +++ b/styles/components/core/buttons.less @@ -6,46 +6,48 @@ // Base styles // -------------------------------------------------- -// Core styles .btn { display: inline-block; - padding: @padding-base-vertical @padding-base-horizontal; margin-bottom: 0; // For input.btn - font-size: @font-size-base; - font-weight: 500; - line-height: @line-height-base; + font-weight: @btn-font-weight; text-align: center; vertical-align: middle; cursor: pointer; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 border: 1px solid transparent; - border-radius: @border-radius-base; white-space: nowrap; + .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base); + .user-select(none); - &:focus { - .tab-focus(); + &, + &:active, + &.active { + &:focus { + .tab-focus(); + } } &:hover, &:focus { - color: @btn-hover-color; + color: @btn-default-color; text-decoration: none; } &:active, &.active { outline: 0; + background-image: none; .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); } &.disabled, &[disabled], fieldset[disabled] & { - cursor: default; + cursor: not-allowed; pointer-events: none; // Future-proof disabling of clicks .opacity(.65); .box-shadow(none); } - } @@ -53,26 +55,26 @@ // -------------------------------------------------- .btn-default { - .btn-pseudo-states(@btn-default-color, @btn-default-bg, @btn-default-border); + .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border); } .btn-primary { - .btn-pseudo-states(@btn-primary-color, @btn-primary-bg, @btn-primary-border); -} -// Warning appears as orange -.btn-warning { - .btn-pseudo-states(@btn-warning-color, @btn-warning-bg, @btn-warning-border); -} -// Danger and error appear as red -.btn-danger { - .btn-pseudo-states(@btn-danger-color, @btn-danger-bg, @btn-danger-border); + .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border); } // Success appears as green .btn-success { - .btn-pseudo-states(@btn-success-color, @btn-success-bg, @btn-success-border); + .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border); } // Info appears as blue-green .btn-info { - .btn-pseudo-states(@btn-info-color, @btn-info-bg, @btn-info-border); + .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border); +} +// Warning appears as orange +.btn-warning { + .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border); +} +// Danger and error appear as red +.btn-danger { + .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); } @@ -109,7 +111,7 @@ fieldset[disabled] & { &:hover, &:focus { - color: @gray-dark; + color: @btn-link-disabled-color; text-decoration: none; } } @@ -119,16 +121,16 @@ // Button Sizes // -------------------------------------------------- -.btn-large { - padding: @padding-large-vertical @padding-large-horizontal; - font-size: @font-size-large; - border-radius: @border-radius-large; +.btn-lg { + // line-height: ensure even-numbered height of button next to large input + .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); +} +.btn-sm { + // line-height: ensure proper height of button next to small input + .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); } -.btn-small { - padding: @padding-small-vertical @padding-small-horizontal; - font-size: @font-size-small; - line-height: 1.5; // ensure proper height of button next to small input - border-radius: @border-radius-small; +.btn-xs { + .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small); } diff --git a/styles/components/core/carousel.less b/styles/components/core/carousel.less new file mode 100644 index 0000000..f06bc16 --- /dev/null +++ b/styles/components/core/carousel.less @@ -0,0 +1,241 @@ +// +// Carousel +// -------------------------------------------------- + + +// Wrapper for the slide container and indicators +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; + + > .item { + display: none; + position: relative; + .transition(.6s ease-in-out left); + + // Account for jankitude on images + > img, + > a > img { + &:extend(.img-responsive); + line-height: 1; + } + } + + > .active, + > .next, + > .prev { display: block; } + + > .active { + left: 0; + } + + > .next, + > .prev { + position: absolute; + top: 0; + width: 100%; + } + + > .next { + left: 100%; + } + > .prev { + left: -100%; + } + > .next.left, + > .prev.right { + left: 0; + } + + > .active.left { + left: -100%; + } + > .active.right { + left: 100%; + } + +} + +// Left/right controls for nav +// --------------------------- + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: @carousel-control-width; + .opacity(@carousel-control-opacity); + font-size: @carousel-control-font-size; + color: @carousel-control-color; + text-align: center; + text-shadow: @carousel-text-shadow; + // We can't have this transition here because WebKit cancels the carousel + // animation if you trip this while in the middle of another animation. + + // Set gradients for backgrounds + &.left { + #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001)); + } + &.right { + left: auto; + right: 0; + #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5)); + } + + // Hover/focus state + &:hover, + &:focus { + outline: 0; + color: @carousel-control-color; + text-decoration: none; + .opacity(.9); + } + + // Toggles + .icon-prev, + .icon-next, + .glyphicon-chevron-left, + .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + } + .icon-prev, + .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; + } + .icon-next, + .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; + } + .icon-prev, + .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; + } + + + .icon-prev { + &:before { + content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) + } + } + .icon-next { + &:before { + content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) + } + } +} + +// Optional indicator pips +// +// Add an unordered list with the following class and add a list item for each +// slide your carousel holds. + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; + + li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid @carousel-indicator-border-color; + border-radius: 10px; + cursor: pointer; + + // IE8-9 hack for event handling + // + // Internet Explorer 8-9 does not support clicks on elements without a set + // `background-color`. We cannot use `filter` since that's not viewed as a + // background color by the browser. Thus, a hack is needed. + // + // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we + // set alpha transparency for the best results possible. + background-color: #000 \9; // IE8 + background-color: rgba(0,0,0,0); // IE9 + } + .active { + margin: 0; + width: 12px; + height: 12px; + background-color: @carousel-indicator-active-bg; + } +} + +// Optional captions +// ----------------------------- +// Hidden by default for smaller viewports +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: @carousel-caption-color; + text-align: center; + text-shadow: @carousel-text-shadow; + & .btn { + text-shadow: none; // No shadow for button elements in carousel-caption + } +} + + +// Scale up controls for tablets and up +@media screen and (min-width: @screen-sm-min) { + + // Scale up the controls a smidge + .carousel-control { + .glyphicon-chevron-left, + .glyphicon-chevron-right, + .icon-prev, + .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .glyphicon-chevron-left, + .icon-prev { + margin-left: -15px; + } + .glyphicon-chevron-right, + .icon-next { + margin-right: -15px; + } + } + + // Show and left align the captions + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + + // Move up the indicators + .carousel-indicators { + bottom: 20px; + } +} diff --git a/src/less/bootstrap/close.less b/styles/components/core/close.less similarity index 94% rename from src/less/bootstrap/close.less rename to styles/components/core/close.less index f915667..9b4e74f 100644 --- a/src/less/bootstrap/close.less +++ b/styles/components/core/close.less @@ -6,7 +6,7 @@ .close { float: right; font-size: (@font-size-base * 1.5); - font-weight: bold; + font-weight: @close-font-weight; line-height: 1; color: @close-color; text-shadow: @close-text-shadow; diff --git a/styles/components/core/code.less b/styles/components/core/code.less new file mode 100644 index 0000000..4d0eadc --- /dev/null +++ b/styles/components/core/code.less @@ -0,0 +1,62 @@ +// +// Code (inline and block) +// -------------------------------------------------- + + +// Inline and block code styles +code, +kbd, +pre, +samp { + font-family: @font-family-monospace; +} + +// Inline code +code { + padding: 2px 4px; + font-size: 90%; + color: @code-color; + background-color: @code-bg; + border-radius: @border-radius-base; +} + +// User input typically entered via keyboard +kbd { + padding: 2px 4px; + font-size: 90%; + color: @kbd-color; + background-color: @kbd-bg; + border-radius: @border-radius-small; + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); +} + +// Blocks of code +pre { + display: block; + padding: ((@line-height-computed - 1) / 2); + margin: 0 0 (@line-height-computed / 2); + font-size: (@font-size-base - 1); // 14px to 13px + line-height: @line-height-base; + word-break: break-all; + word-wrap: break-word; + color: @pre-color; + background-color: @pre-bg; + border: 1px solid @pre-border-color; + border-radius: @border-radius-base; + + // Account for some code outputs that place code tags in pre tags + code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; + } +} + +// Enable scrollable blocks of code +.pre-scrollable { + max-height: @pre-scrollable-max-height; + overflow-y: scroll; +} diff --git a/src/less/bootstrap/component-animations.less b/styles/components/core/component-animations.less similarity index 68% rename from src/less/bootstrap/component-animations.less rename to styles/components/core/component-animations.less index 1efe45e..9400a0d 100644 --- a/src/less/bootstrap/component-animations.less +++ b/styles/components/core/component-animations.less @@ -5,7 +5,7 @@ // Heads up! // // We don't use the `.opacity()` mixin here since it causes a bug with text -// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552. +// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. .fade { opacity: 0; @@ -17,10 +17,12 @@ .collapse { display: none; - &.in { - display: block; - } + + &.in { display: block; } + tr&.in { display: table-row; } + tbody&.in { display: table-row-group; } } + .collapsing { position: relative; height: 0; diff --git a/src/less/bootstrap/dropdowns.less b/styles/components/core/dropdowns.less similarity index 62% rename from src/less/bootstrap/dropdowns.less rename to styles/components/core/dropdowns.less index 938e682..8d0a6a2 100644 --- a/src/less/bootstrap/dropdowns.less +++ b/styles/components/core/dropdowns.less @@ -4,21 +4,28 @@ // Dropdown arrow/caret -// -------------------- .caret { display: inline-block; width: 0; height: 0; margin-left: 2px; vertical-align: middle; - border-top: 4px solid @dropdown-caret-color; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; + border-top: @caret-width-base solid; + border-right: @caret-width-base solid transparent; + border-left: @caret-width-base solid transparent; +} + +// The dropdown wrapper (div) +.dropdown { + position: relative; +} + +// Prevent the focus on the dropdown toggle when closing dropdowns +.dropdown-toggle:focus { + outline: 0; } // The dropdown menu (ul) -// ---------------------- .dropdown-menu { position: absolute; top: 100%; @@ -30,14 +37,18 @@ padding: 5px 0; margin: 2px 0 0; // override default ul list-style: none; + font-size: @font-size-base; + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) background-color: @dropdown-bg; border: 1px solid @dropdown-fallback-border; // IE8 fallback border: 1px solid @dropdown-border; border-radius: @border-radius-base; .box-shadow(0 6px 12px rgba(0,0,0,.175)); - .background-clip(padding-box); + background-clip: padding-box; // Aligns the dropdown menu to right + // + // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` &.pull-right { right: 0; left: auto; @@ -61,18 +72,16 @@ } // Hover/Focus state -// ----------- .dropdown-menu > li > a { &:hover, &:focus { text-decoration: none; color: @dropdown-link-hover-color; - #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%)); + background-color: @dropdown-link-hover-bg; } } // Active state -// ------------ .dropdown-menu > .active > a { &, &:hover, @@ -80,18 +89,19 @@ color: @dropdown-link-active-color; text-decoration: none; outline: 0; - #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); + background-color: @dropdown-link-active-bg; } } // Disabled state -// -------------- +// // Gray out text and ensure the hover/focus state remains gray + .dropdown-menu > .disabled > a { &, &:hover, &:focus { - color: @gray-light; + color: @dropdown-link-disabled-color; } } // Nuke hover/focus effects @@ -107,7 +117,6 @@ } // Open state for the dropdown -// --------------------------- .open { // Show the menu > .dropdown-menu { @@ -120,46 +129,61 @@ } } +// Menu positioning +// +// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown +// menu with the parent. +.dropdown-menu-right { + left: auto; // Reset the default from `.dropdown-menu` + right: 0; +} +// With v3, we enabled auto-flipping if you have a dropdown within a right +// aligned nav component. To enable the undoing of that, we provide an override +// to restore the default dropdown menu alignment. +// +// This is only for left-aligning a dropdown menu within a `.navbar-right` or +// `.pull-right` nav component. +.dropdown-menu-left { + left: 0; + right: auto; +} + // Dropdown section headers -// --------------------------- .dropdown-header { display: block; padding: 3px 20px; font-size: @font-size-small; line-height: @line-height-base; - color: @gray-light; + color: @dropdown-header-color; } - - // Backdrop to catch body clicks on mobile, etc. -// --------------------------- .dropdown-backdrop { position: fixed; left: 0; right: 0; bottom: 0; top: 0; - z-index: @zindex-dropdown - 10; + z-index: (@zindex-dropdown - 10); } // Right aligned dropdowns -// --------------------------- .pull-right > .dropdown-menu { right: 0; left: auto; } // Allow for dropdowns to go bottom up (aka, dropup-menu) -// ------------------------------------------------------ +// // Just add .dropup after the standard .dropdown class and you're set, bro. // TODO: abstract this so that the navbar fixed styles are not placed here? + .dropup, .navbar-fixed-bottom .dropdown { // Reverse the caret .caret { border-top: 0; - border-bottom: 4px solid @dropdown-caret-color; + border-bottom: @caret-width-base solid; content: ""; } // Different positioning for bottom up menu @@ -169,3 +193,22 @@ margin-bottom: 1px; } } + + +// Component alignment +// +// Reiterate per navbar.less and the modified component alignment there. + +@media (min-width: @grid-float-breakpoint) { + .navbar-right { + .dropdown-menu { + .dropdown-menu-right(); + } + // Necessary for overrides of the default right aligned menu. + // Will remove come v4 in all likelihood. + .dropdown-menu-left { + .dropdown-menu-left(); + } + } +} + diff --git a/styles/components/core/forms.less b/styles/components/core/forms.less new file mode 100644 index 0000000..0368c0c --- /dev/null +++ b/styles/components/core/forms.less @@ -0,0 +1,480 @@ +// +// Forms +// -------------------------------------------------- + + +// Normalize non-controls +// +// Restyle and baseline non-control form elements. + +fieldset { + padding: 0; + margin: 0; + border: 0; + // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets, + // so we reset that to ensure it behaves more like a standard block element. + // See https://github.com/twbs/bootstrap/issues/12359. + min-width: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: @line-height-computed; + font-size: (@font-size-base * 1.5); + line-height: inherit; + color: @legend-color; + border: 0; + border-bottom: 1px solid @legend-border-color; +} + +label { + display: inline-block; + max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) + margin-bottom: 5px; + font-weight: bold; +} + + +// Normalize form controls +// +// While most of our form styles require extra classes, some basic normalization +// is required to ensure optimum display with or without those classes to better +// address browser inconsistencies. + +// Override content-box in Normalize (* isn't specific enough) +input[type="search"] { + .box-sizing(border-box); +} + +// Position radios and checkboxes better +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; // IE8-9 + line-height: normal; +} + +// Set the height of file controls to match text inputs +input[type="file"] { + display: block; +} + +// Make range inputs behave like textual form controls +input[type="range"] { + display: block; + width: 100%; +} + +// Make multiple select elements height not fixed +select[multiple], +select[size] { + height: auto; +} + +// Focus for file, radio, and checkbox +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + .tab-focus(); +} + +// Adjust output element +output { + display: block; + padding-top: (@padding-base-vertical + 1); + font-size: @font-size-base; + line-height: @line-height-base; + color: @input-color; +} + + +// Common form controls +// +// Shared size and type resets for form controls. Apply `.form-control` to any +// of the following form controls: +// +// select +// textarea +// input[type="text"] +// input[type="password"] +// input[type="datetime"] +// input[type="datetime-local"] +// input[type="date"] +// input[type="month"] +// input[type="time"] +// input[type="week"] +// input[type="number"] +// input[type="email"] +// input[type="url"] +// input[type="search"] +// input[type="tel"] +// input[type="color"] + +.form-control { + display: block; + width: 100%; + height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) + padding: @padding-base-vertical @padding-base-horizontal; + font-size: @font-size-base; + line-height: @line-height-base; + color: @input-color; + background-color: @input-bg; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid @input-border; + border-radius: @input-border-radius; + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); + .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s"); + + // Customize the `:focus` state to imitate native WebKit styles. + .form-control-focus(); + + // Placeholder + .placeholder(); + + // Disabled and read-only inputs + // + // HTML5 says that controls under a fieldset > legend:first-child won't be + // disabled if the fieldset is disabled. Due to implementation difficulty, we + // don't honor that edge case; we style them as disabled anyway. + &[disabled], + &[readonly], + fieldset[disabled] & { + cursor: not-allowed; + background-color: @input-bg-disabled; + opacity: 1; // iOS fix for unreadable disabled content + } + + // Reset height for `textarea`s + textarea& { + height: auto; + } +} + + +// Search inputs in iOS +// +// This overrides the extra rounded corners on search inputs in iOS so that our +// `.form-control` class can properly style them. Note that this cannot simply +// be added to `.form-control` as it's not specific enough. For details, see +// https://github.com/twbs/bootstrap/issues/11586. + +input[type="search"] { + -webkit-appearance: none; +} + + +// Special styles for iOS date input +// +// In Mobile Safari, date inputs require a pixel line-height that matches the +// given height of the input. Since this fucks up everything else, we have to +// appropriately reset it for Internet Explorer and the size variations. + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: @input-height-base; + // IE8+ misaligns the text within date inputs, so we reset + line-height: @line-height-base ~"\0"; + + &.input-sm { + line-height: @input-height-small; + } + &.input-lg { + line-height: @input-height-large; + } +} + + +// Form groups +// +// Designed to help with the organization and spacing of vertical forms. For +// horizontal forms, use the predefined grid classes. + +.form-group { + margin-bottom: 15px; +} + + +// Checkboxes and radios +// +// Indent the labels to position radios/checkboxes as hanging controls. + +.radio, +.checkbox { + display: block; + min-height: @line-height-computed; // clear the floating input if there is no label text + margin-top: 10px; + margin-bottom: 10px; + + label { + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; + } +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing +} + +// Radios and checkboxes on same line +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; // space out consecutive inline controls +} + +// Apply same disabled cursor tweak as for inputs +// +// Note: Neither radios nor checkboxes can be readonly. +input[type="radio"], +input[type="checkbox"], +.radio, +.radio-inline, +.checkbox, +.checkbox-inline { + &[disabled], + fieldset[disabled] & { + cursor: not-allowed; + } +} + + +// Form control sizing +// +// Build on `.form-control` with modifier classes to decrease or increase the +// height and font-size of form controls. + +.input-sm { + .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); +} + +.input-lg { + .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); +} + + +// Form control feedback states +// +// Apply contextual and semantic states to individual form controls. + +.has-feedback { + // Enable absolute positioning + position: relative; + + // Ensure icons don't overlap text + .form-control { + padding-right: (@input-height-base * 1.25); + } +} +// Feedback icon (requires .glyphicon classes) +.form-control-feedback { + position: absolute; + top: (@line-height-computed + 5); // Height of the `label` and its margin + right: 0; + z-index: 2; // Ensure icon is above input groups + display: block; + width: @input-height-base; + height: @input-height-base; + line-height: @input-height-base; + text-align: center; +} +.input-lg + .form-control-feedback { + width: @input-height-large; + height: @input-height-large; + line-height: @input-height-large; +} +.input-sm + .form-control-feedback { + width: @input-height-small; + height: @input-height-small; + line-height: @input-height-small; +} + +// Feedback states +.has-success { + .form-control-validation(@state-success-text; @state-success-text; @state-success-bg); +} +.has-warning { + .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg); +} +.has-error { + .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg); +} + + +// Static form control text +// +// Apply class to a `p` element to make any string of text align with labels in +// a horizontal form layout. + +.form-control-static { + margin-bottom: 0; // Remove default margin from `p` +} + + +// Help text +// +// Apply to any element you wish to create light text for placement immediately +// below a form control. Use for general help, formatting, or instructional text. + +.help-block { + display: block; // account for any element using help-block + margin-top: 5px; + margin-bottom: 10px; + color: lighten(@text-color, 25%); // lighten the text some for contrast +} + + + +// Inline forms +// +// Make forms appear inline(-block) by adding the `.form-inline` class. Inline +// forms begin stacked on extra small (mobile) devices and then go inline when +// viewports reach <768px. +// +// Requires wrapping inputs and labels with `.form-group` for proper display of +// default HTML form controls and our custom form controls (e.g., input groups). +// +// Heads up! This is mixin-ed into `.navbar-form` in navbars.less. + +.form-inline { + + // Kick in the inline + @media (min-width: @screen-sm-min) { + // Inline-block all the things for "inline" + .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + + // In navbar-form, allow folks to *not* use `.form-group` + .form-control { + display: inline-block; + width: auto; // Prevent labels from stacking above inputs in `.form-group` + vertical-align: middle; + } + + .input-group { + display: inline-table; + vertical-align: middle; + + .input-group-addon, + .input-group-btn, + .form-control { + width: auto; + } + } + + // Input groups need that 100% width though + .input-group > .form-control { + width: 100%; + } + + .control-label { + margin-bottom: 0; + vertical-align: middle; + } + + // Remove default margin on radios/checkboxes that were used for stacking, and + // then undo the floating of radios and checkboxes to match (which also avoids + // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969). + .radio, + .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + padding-left: 0; + vertical-align: middle; + } + .radio input[type="radio"], + .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } + + // Validation states + // + // Reposition the icon because it's now within a grid column and columns have + // `position: relative;` on them. Also accounts for the grid gutter padding. + .has-feedback .form-control-feedback { + top: 0; + } + } +} + + +// Horizontal forms +// +// Horizontal forms are built on grid classes and allow you to create forms with +// labels on the left and inputs on the right. + +.form-horizontal { + + // Consistent vertical alignment of radios and checkboxes + // + // Labels also get some reset styles, but that is scoped to a media query below. + .radio, + .checkbox, + .radio-inline, + .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: (@padding-base-vertical + 1); // Default padding plus a border + } + // Account for padding we're adding to ensure the alignment and of help text + // and other content below items + .radio, + .checkbox { + min-height: (@line-height-computed + (@padding-base-vertical + 1)); + } + + // Make form groups behave like rows + .form-group { + .make-row(); + } + + .form-control-static { + padding-top: (@padding-base-vertical + 1); + padding-bottom: (@padding-base-vertical + 1); + } + + // Reset spacing and right align labels, but scope to media queries so that + // labels on narrow viewports stack the same as a default form example. + @media (min-width: @screen-sm-min) { + .control-label { + text-align: right; + margin-bottom: 0; + padding-top: (@padding-base-vertical + 1); // Default padding plus a border + } + } + + // Validation states + // + // Reposition the icon because it's now within a grid column and columns have + // `position: relative;` on them. Also accounts for the grid gutter padding. + .has-feedback .form-control-feedback { + top: 0; + right: (@grid-gutter-width / 2); + } +} diff --git a/styles/components/core/glyphicons.less b/styles/components/core/glyphicons.less new file mode 100644 index 0000000..789c5e7 --- /dev/null +++ b/styles/components/core/glyphicons.less @@ -0,0 +1,233 @@ +// +// Glyphicons for Bootstrap +// +// Since icons are fonts, they can be placed anywhere text is placed and are +// thus automatically sized to match the surrounding child. To use, create an +// inline element with the appropriate classes, like so: +// +// Star + +// Import the fonts +@font-face { + font-family: 'Glyphicons Halflings'; + src: ~"url('@{icon-font-path}@{icon-font-name}.eot')"; + src: ~"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')", + ~"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')", + ~"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')", + ~"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')"; +} + +// Catchall baseclass +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +// Individual icons +.glyphicon-asterisk { &:before { content: "\2a"; } } +.glyphicon-plus { &:before { content: "\2b"; } } +.glyphicon-euro { &:before { content: "\20ac"; } } +.glyphicon-minus { &:before { content: "\2212"; } } +.glyphicon-cloud { &:before { content: "\2601"; } } +.glyphicon-envelope { &:before { content: "\2709"; } } +.glyphicon-pencil { &:before { content: "\270f"; } } +.glyphicon-glass { &:before { content: "\e001"; } } +.glyphicon-music { &:before { content: "\e002"; } } +.glyphicon-search { &:before { content: "\e003"; } } +.glyphicon-heart { &:before { content: "\e005"; } } +.glyphicon-star { &:before { content: "\e006"; } } +.glyphicon-star-empty { &:before { content: "\e007"; } } +.glyphicon-user { &:before { content: "\e008"; } } +.glyphicon-film { &:before { content: "\e009"; } } +.glyphicon-th-large { &:before { content: "\e010"; } } +.glyphicon-th { &:before { content: "\e011"; } } +.glyphicon-th-list { &:before { content: "\e012"; } } +.glyphicon-ok { &:before { content: "\e013"; } } +.glyphicon-remove { &:before { content: "\e014"; } } +.glyphicon-zoom-in { &:before { content: "\e015"; } } +.glyphicon-zoom-out { &:before { content: "\e016"; } } +.glyphicon-off { &:before { content: "\e017"; } } +.glyphicon-signal { &:before { content: "\e018"; } } +.glyphicon-cog { &:before { content: "\e019"; } } +.glyphicon-trash { &:before { content: "\e020"; } } +.glyphicon-home { &:before { content: "\e021"; } } +.glyphicon-file { &:before { content: "\e022"; } } +.glyphicon-time { &:before { content: "\e023"; } } +.glyphicon-road { &:before { content: "\e024"; } } +.glyphicon-download-alt { &:before { content: "\e025"; } } +.glyphicon-download { &:before { content: "\e026"; } } +.glyphicon-upload { &:before { content: "\e027"; } } +.glyphicon-inbox { &:before { content: "\e028"; } } +.glyphicon-play-circle { &:before { content: "\e029"; } } +.glyphicon-repeat { &:before { content: "\e030"; } } +.glyphicon-refresh { &:before { content: "\e031"; } } +.glyphicon-list-alt { &:before { content: "\e032"; } } +.glyphicon-lock { &:before { content: "\e033"; } } +.glyphicon-flag { &:before { content: "\e034"; } } +.glyphicon-headphones { &:before { content: "\e035"; } } +.glyphicon-volume-off { &:before { content: "\e036"; } } +.glyphicon-volume-down { &:before { content: "\e037"; } } +.glyphicon-volume-up { &:before { content: "\e038"; } } +.glyphicon-qrcode { &:before { content: "\e039"; } } +.glyphicon-barcode { &:before { content: "\e040"; } } +.glyphicon-tag { &:before { content: "\e041"; } } +.glyphicon-tags { &:before { content: "\e042"; } } +.glyphicon-book { &:before { content: "\e043"; } } +.glyphicon-bookmark { &:before { content: "\e044"; } } +.glyphicon-print { &:before { content: "\e045"; } } +.glyphicon-camera { &:before { content: "\e046"; } } +.glyphicon-font { &:before { content: "\e047"; } } +.glyphicon-bold { &:before { content: "\e048"; } } +.glyphicon-italic { &:before { content: "\e049"; } } +.glyphicon-text-height { &:before { content: "\e050"; } } +.glyphicon-text-width { &:before { content: "\e051"; } } +.glyphicon-align-left { &:before { content: "\e052"; } } +.glyphicon-align-center { &:before { content: "\e053"; } } +.glyphicon-align-right { &:before { content: "\e054"; } } +.glyphicon-align-justify { &:before { content: "\e055"; } } +.glyphicon-list { &:before { content: "\e056"; } } +.glyphicon-indent-left { &:before { content: "\e057"; } } +.glyphicon-indent-right { &:before { content: "\e058"; } } +.glyphicon-facetime-video { &:before { content: "\e059"; } } +.glyphicon-picture { &:before { content: "\e060"; } } +.glyphicon-map-marker { &:before { content: "\e062"; } } +.glyphicon-adjust { &:before { content: "\e063"; } } +.glyphicon-tint { &:before { content: "\e064"; } } +.glyphicon-edit { &:before { content: "\e065"; } } +.glyphicon-share { &:before { content: "\e066"; } } +.glyphicon-check { &:before { content: "\e067"; } } +.glyphicon-move { &:before { content: "\e068"; } } +.glyphicon-step-backward { &:before { content: "\e069"; } } +.glyphicon-fast-backward { &:before { content: "\e070"; } } +.glyphicon-backward { &:before { content: "\e071"; } } +.glyphicon-play { &:before { content: "\e072"; } } +.glyphicon-pause { &:before { content: "\e073"; } } +.glyphicon-stop { &:before { content: "\e074"; } } +.glyphicon-forward { &:before { content: "\e075"; } } +.glyphicon-fast-forward { &:before { content: "\e076"; } } +.glyphicon-step-forward { &:before { content: "\e077"; } } +.glyphicon-eject { &:before { content: "\e078"; } } +.glyphicon-chevron-left { &:before { content: "\e079"; } } +.glyphicon-chevron-right { &:before { content: "\e080"; } } +.glyphicon-plus-sign { &:before { content: "\e081"; } } +.glyphicon-minus-sign { &:before { content: "\e082"; } } +.glyphicon-remove-sign { &:before { content: "\e083"; } } +.glyphicon-ok-sign { &:before { content: "\e084"; } } +.glyphicon-question-sign { &:before { content: "\e085"; } } +.glyphicon-info-sign { &:before { content: "\e086"; } } +.glyphicon-screenshot { &:before { content: "\e087"; } } +.glyphicon-remove-circle { &:before { content: "\e088"; } } +.glyphicon-ok-circle { &:before { content: "\e089"; } } +.glyphicon-ban-circle { &:before { content: "\e090"; } } +.glyphicon-arrow-left { &:before { content: "\e091"; } } +.glyphicon-arrow-right { &:before { content: "\e092"; } } +.glyphicon-arrow-up { &:before { content: "\e093"; } } +.glyphicon-arrow-down { &:before { content: "\e094"; } } +.glyphicon-share-alt { &:before { content: "\e095"; } } +.glyphicon-resize-full { &:before { content: "\e096"; } } +.glyphicon-resize-small { &:before { content: "\e097"; } } +.glyphicon-exclamation-sign { &:before { content: "\e101"; } } +.glyphicon-gift { &:before { content: "\e102"; } } +.glyphicon-leaf { &:before { content: "\e103"; } } +.glyphicon-fire { &:before { content: "\e104"; } } +.glyphicon-eye-open { &:before { content: "\e105"; } } +.glyphicon-eye-close { &:before { content: "\e106"; } } +.glyphicon-warning-sign { &:before { content: "\e107"; } } +.glyphicon-plane { &:before { content: "\e108"; } } +.glyphicon-calendar { &:before { content: "\e109"; } } +.glyphicon-random { &:before { content: "\e110"; } } +.glyphicon-comment { &:before { content: "\e111"; } } +.glyphicon-magnet { &:before { content: "\e112"; } } +.glyphicon-chevron-up { &:before { content: "\e113"; } } +.glyphicon-chevron-down { &:before { content: "\e114"; } } +.glyphicon-retweet { &:before { content: "\e115"; } } +.glyphicon-shopping-cart { &:before { content: "\e116"; } } +.glyphicon-folder-close { &:before { content: "\e117"; } } +.glyphicon-folder-open { &:before { content: "\e118"; } } +.glyphicon-resize-vertical { &:before { content: "\e119"; } } +.glyphicon-resize-horizontal { &:before { content: "\e120"; } } +.glyphicon-hdd { &:before { content: "\e121"; } } +.glyphicon-bullhorn { &:before { content: "\e122"; } } +.glyphicon-bell { &:before { content: "\e123"; } } +.glyphicon-certificate { &:before { content: "\e124"; } } +.glyphicon-thumbs-up { &:before { content: "\e125"; } } +.glyphicon-thumbs-down { &:before { content: "\e126"; } } +.glyphicon-hand-right { &:before { content: "\e127"; } } +.glyphicon-hand-left { &:before { content: "\e128"; } } +.glyphicon-hand-up { &:before { content: "\e129"; } } +.glyphicon-hand-down { &:before { content: "\e130"; } } +.glyphicon-circle-arrow-right { &:before { content: "\e131"; } } +.glyphicon-circle-arrow-left { &:before { content: "\e132"; } } +.glyphicon-circle-arrow-up { &:before { content: "\e133"; } } +.glyphicon-circle-arrow-down { &:before { content: "\e134"; } } +.glyphicon-globe { &:before { content: "\e135"; } } +.glyphicon-wrench { &:before { content: "\e136"; } } +.glyphicon-tasks { &:before { content: "\e137"; } } +.glyphicon-filter { &:before { content: "\e138"; } } +.glyphicon-briefcase { &:before { content: "\e139"; } } +.glyphicon-fullscreen { &:before { content: "\e140"; } } +.glyphicon-dashboard { &:before { content: "\e141"; } } +.glyphicon-paperclip { &:before { content: "\e142"; } } +.glyphicon-heart-empty { &:before { content: "\e143"; } } +.glyphicon-link { &:before { content: "\e144"; } } +.glyphicon-phone { &:before { content: "\e145"; } } +.glyphicon-pushpin { &:before { content: "\e146"; } } +.glyphicon-usd { &:before { content: "\e148"; } } +.glyphicon-gbp { &:before { content: "\e149"; } } +.glyphicon-sort { &:before { content: "\e150"; } } +.glyphicon-sort-by-alphabet { &:before { content: "\e151"; } } +.glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } } +.glyphicon-sort-by-order { &:before { content: "\e153"; } } +.glyphicon-sort-by-order-alt { &:before { content: "\e154"; } } +.glyphicon-sort-by-attributes { &:before { content: "\e155"; } } +.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } } +.glyphicon-unchecked { &:before { content: "\e157"; } } +.glyphicon-expand { &:before { content: "\e158"; } } +.glyphicon-collapse-down { &:before { content: "\e159"; } } +.glyphicon-collapse-up { &:before { content: "\e160"; } } +.glyphicon-log-in { &:before { content: "\e161"; } } +.glyphicon-flash { &:before { content: "\e162"; } } +.glyphicon-log-out { &:before { content: "\e163"; } } +.glyphicon-new-window { &:before { content: "\e164"; } } +.glyphicon-record { &:before { content: "\e165"; } } +.glyphicon-save { &:before { content: "\e166"; } } +.glyphicon-open { &:before { content: "\e167"; } } +.glyphicon-saved { &:before { content: "\e168"; } } +.glyphicon-import { &:before { content: "\e169"; } } +.glyphicon-export { &:before { content: "\e170"; } } +.glyphicon-send { &:before { content: "\e171"; } } +.glyphicon-floppy-disk { &:before { content: "\e172"; } } +.glyphicon-floppy-saved { &:before { content: "\e173"; } } +.glyphicon-floppy-remove { &:before { content: "\e174"; } } +.glyphicon-floppy-save { &:before { content: "\e175"; } } +.glyphicon-floppy-open { &:before { content: "\e176"; } } +.glyphicon-credit-card { &:before { content: "\e177"; } } +.glyphicon-transfer { &:before { content: "\e178"; } } +.glyphicon-cutlery { &:before { content: "\e179"; } } +.glyphicon-header { &:before { content: "\e180"; } } +.glyphicon-compressed { &:before { content: "\e181"; } } +.glyphicon-earphone { &:before { content: "\e182"; } } +.glyphicon-phone-alt { &:before { content: "\e183"; } } +.glyphicon-tower { &:before { content: "\e184"; } } +.glyphicon-stats { &:before { content: "\e185"; } } +.glyphicon-sd-video { &:before { content: "\e186"; } } +.glyphicon-hd-video { &:before { content: "\e187"; } } +.glyphicon-subtitles { &:before { content: "\e188"; } } +.glyphicon-sound-stereo { &:before { content: "\e189"; } } +.glyphicon-sound-dolby { &:before { content: "\e190"; } } +.glyphicon-sound-5-1 { &:before { content: "\e191"; } } +.glyphicon-sound-6-1 { &:before { content: "\e192"; } } +.glyphicon-sound-7-1 { &:before { content: "\e193"; } } +.glyphicon-copyright-mark { &:before { content: "\e194"; } } +.glyphicon-registration-mark { &:before { content: "\e195"; } } +.glyphicon-cloud-download { &:before { content: "\e197"; } } +.glyphicon-cloud-upload { &:before { content: "\e198"; } } +.glyphicon-tree-conifer { &:before { content: "\e199"; } } +.glyphicon-tree-deciduous { &:before { content: "\e200"; } } diff --git a/styles/components/core/grid.less b/styles/components/core/grid.less new file mode 100644 index 0000000..e100655 --- /dev/null +++ b/styles/components/core/grid.less @@ -0,0 +1,84 @@ +// +// Grid system +// -------------------------------------------------- + + +// Container widths +// +// Set the container width, and override it for fixed navbars in media queries. + +.container { + .container-fixed(); + + @media (min-width: @screen-sm-min) { + width: @container-sm; + } + @media (min-width: @screen-md-min) { + width: @container-md; + } + @media (min-width: @screen-lg-min) { + width: @container-lg; + } +} + + +// Fluid container +// +// Utilizes the mixin meant for fixed width containers, but without any defined +// width for fluid, full width layouts. + +.container-fluid { + .container-fixed(); +} + + +// Row +// +// Rows contain and clear the floats of your columns. + +.row { + .make-row(); +} + + +// Columns +// +// Common styles for small and large grid columns + +.make-grid-columns(); + + +// Extra small grid +// +// Columns, offsets, pushes, and pulls for extra small devices like +// smartphones. + +.make-grid(xs); + + +// Small grid +// +// Columns, offsets, pushes, and pulls for the small device range, from phones +// to tablets. + +@media (min-width: @screen-sm-min) { + .make-grid(sm); +} + + +// Medium grid +// +// Columns, offsets, pushes, and pulls for the desktop device range. + +@media (min-width: @screen-md-min) { + .make-grid(md); +} + + +// Large grid +// +// Columns, offsets, pushes, and pulls for the large desktop device range. + +@media (min-width: @screen-lg-min) { + .make-grid(lg); +} diff --git a/styles/components/core/index.less b/styles/components/core/index.less new file mode 100644 index 0000000..c36a2c5 --- /dev/null +++ b/styles/components/core/index.less @@ -0,0 +1,45 @@ +// Reset and dependencies +@import "normalize.less"; +@import "print.less"; +@import "glyphicons.less"; + +// Core CSS +@import "scaffolding.less"; +@import "type.less"; +@import "code.less"; +@import "grid.less"; +@import "tables.less"; +@import "forms.less"; +@import "buttons.less"; + +// Components +@import "component-animations.less"; +@import "dropdowns.less"; +@import "button-groups.less"; +@import "input-groups.less"; +@import "navs.less"; +@import "navbar.less"; +@import "breadcrumbs.less"; +@import "pagination.less"; +@import "pager.less"; +@import "labels.less"; +@import "badges.less"; +@import "jumbotron.less"; +@import "thumbnails.less"; +@import "alerts.less"; +@import "progress-bars.less"; +@import "media.less"; +@import "list-group.less"; +@import "panels.less"; +@import "responsive-embed.less"; +@import "wells.less"; +@import "close.less"; + +// Components w/ JavaScript +@import "modals.less"; +@import "tooltip.less"; +@import "popovers.less"; +@import "carousel.less"; + +// Utility classes +@import "responsive-utilities.less"; diff --git a/styles/components/core/input-groups.less b/styles/components/core/input-groups.less new file mode 100644 index 0000000..a111474 --- /dev/null +++ b/styles/components/core/input-groups.less @@ -0,0 +1,162 @@ +// +// Input groups +// -------------------------------------------------- + +// Base styles +// ------------------------- +.input-group { + position: relative; // For dropdowns + display: table; + border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table + + // Undo padding and float of grid classes + &[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; + } + + .form-control { + // Ensure that the input is always above the *appended* addon button for + // proper border colors. + position: relative; + z-index: 2; + + // IE9 fubars the placeholder attribute in text inputs and the arrows on + // select elements in input groups. To fix it, we float the input. Details: + // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855 + float: left; + + width: 100%; + margin-bottom: 0; + } +} + +// Sizing options +// +// Remix the default form control sizing classes into new ones for easier +// manipulation. + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { .input-lg(); } +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { .input-sm(); } + + +// Display as table-cell +// ------------------------- +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; + + &:not(:first-child):not(:last-child) { + border-radius: 0; + } +} +// Addon and addon wrapper for buttons +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; // Match the inputs +} + +// Text input groups +// ------------------------- +.input-group-addon { + padding: @padding-base-vertical @padding-base-horizontal; + font-size: @font-size-base; + font-weight: normal; + line-height: 1; + color: @input-color; + text-align: center; + background-color: @input-group-addon-bg; + border: 1px solid @input-group-addon-border-color; + border-radius: @border-radius-base; + + // Sizing + &.input-sm { + padding: @padding-small-vertical @padding-small-horizontal; + font-size: @font-size-small; + border-radius: @border-radius-small; + } + &.input-lg { + padding: @padding-large-vertical @padding-large-horizontal; + font-size: @font-size-large; + border-radius: @border-radius-large; + } + + // Nuke default margins from checkboxes and radios to vertically center within. + input[type="radio"], + input[type="checkbox"] { + margin-top: 0; + } +} + +// Reset rounded corners +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + .border-right-radius(0); +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + .border-left-radius(0); +} +.input-group-addon:last-child { + border-left: 0; +} + +// Button input groups +// ------------------------- +.input-group-btn { + position: relative; + // Jankily prevent input button groups from wrapping with `white-space` and + // `font-size` in combination with `inline-block` on buttons. + font-size: 0; + white-space: nowrap; + + // Negative margin for spacing, position for bringing hovered/focused/actived + // element above the siblings. + > .btn { + position: relative; + + .btn { + margin-left: -1px; + } + // Bring the "active" button to the front + &:hover, + &:focus, + &:active { + z-index: 2; + } + } + + // Negative margin to only have a 1px border between the two + &:first-child { + > .btn, + > .btn-group { + margin-right: -1px; + } + } + &:last-child { + > .btn, + > .btn-group { + margin-left: -1px; + } + } +} diff --git a/styles/components/core/jumbotron.less b/styles/components/core/jumbotron.less new file mode 100644 index 0000000..27cd8b8 --- /dev/null +++ b/styles/components/core/jumbotron.less @@ -0,0 +1,48 @@ +// +// Jumbotron +// -------------------------------------------------- + + +.jumbotron { + padding: @jumbotron-padding; + margin-bottom: @jumbotron-padding; + color: @jumbotron-color; + background-color: @jumbotron-bg; + + h1, + .h1 { + color: @jumbotron-heading-color; + } + p { + margin-bottom: (@jumbotron-padding / 2); + font-size: @jumbotron-font-size; + font-weight: 200; + } + + > hr { + border-top-color: darken(@jumbotron-bg, 10%); + } + + .container & { + border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container + } + + .container { + max-width: 100%; + } + + @media screen and (min-width: @screen-sm-min) { + padding-top: (@jumbotron-padding * 1.6); + padding-bottom: (@jumbotron-padding * 1.6); + + .container & { + padding-left: (@jumbotron-padding * 2); + padding-right: (@jumbotron-padding * 2); + } + + h1, + .h1 { + font-size: (@font-size-base * 4.5); + } + } +} diff --git a/src/less/bootstrap/labels.less b/styles/components/core/labels.less similarity index 63% rename from src/less/bootstrap/labels.less rename to styles/components/core/labels.less index 7ee7ee6..9a5a270 100644 --- a/src/less/bootstrap/labels.less +++ b/styles/components/core/labels.less @@ -4,43 +4,61 @@ .label { display: inline; - padding: .25em .6em; + padding: .2em .6em .3em; font-size: 75%; - font-weight: 500; + font-weight: bold; line-height: 1; color: @label-color; text-align: center; white-space: nowrap; - vertical-align: middle; - background-color: @gray-light; + vertical-align: baseline; border-radius: .25em; // Add hover effects, but only for links - &[href] { + a& { &:hover, &:focus { color: @label-link-hover-color; text-decoration: none; cursor: pointer; - background-color: darken(@gray-light, 10%); } } + + // Empty labels collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for labels in buttons + .btn & { + position: relative; + top: -1px; + } } // Colors // Contextual variations (linked labels get darker on :hover) -.label-danger { - .label-variant(@label-danger-bg); + +.label-default { + .label-variant(@label-default-bg); +} + +.label-primary { + .label-variant(@label-primary-bg); } .label-success { .label-variant(@label-success-bg); } +.label-info { + .label-variant(@label-info-bg); +} + .label-warning { .label-variant(@label-warning-bg); } -.label-info { - .label-variant(@label-info-bg); +.label-danger { + .label-variant(@label-danger-bg); } diff --git a/src/less/bootstrap/list-group.less b/styles/components/core/list-group.less similarity index 51% rename from src/less/bootstrap/list-group.less rename to styles/components/core/list-group.less index ad6ac96..2514389 100644 --- a/src/less/bootstrap/list-group.less +++ b/styles/components/core/list-group.less @@ -2,77 +2,92 @@ // List groups // -------------------------------------------------- + // Base class // // Easily usable on
      ,
        , or
        . + .list-group { // No need to set list-style: none; since .list-group-item is block level margin-bottom: 20px; padding-left: 0; // reset padding because ul and ol - background-color: @list-group-bg; } + // Individual list items -// ------------------------- +// +// Use on `li`s or `div`s within the `.list-group` parent. .list-group-item { position: relative; display: block; - padding: 10px 30px 10px 15px; + padding: 10px 15px; // Place the border on the list items and negative margin up for better styling margin-bottom: -1px; + background-color: @list-group-bg; border: 1px solid @list-group-border; // Round the first and last items &:first-child { - .border-top-radius(@border-radius-base); + .border-top-radius(@list-group-border-radius); } &:last-child { margin-bottom: 0; - .border-bottom-radius(@border-radius-base); + .border-bottom-radius(@list-group-border-radius); } // Align badges within list items > .badge { float: right; - margin-right: -15px; + } + > .badge + .badge { + margin-right: 5px; } } -// Custom content options -// ------------------------- - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} // Linked list items -// ------------------------- +// +// Use anchor elements instead of `li`s or `div`s to create linked list items. +// Includes an extra `.active` modifier class for showing selected items. -// Custom content within linked items a.list-group-item { - // Colorize content accordingly + color: @list-group-link-color; + .list-group-item-heading { color: @list-group-link-heading-color; } - .list-group-item-text { - color: @list-group-link-color; - } // Hover state &:hover, &:focus { text-decoration: none; + color: @list-group-link-hover-color; background-color: @list-group-hover-bg; } +} + +.list-group-item { + // Disabled state + &.disabled, + &.disabled:hover, + &.disabled:focus { + background-color: @list-group-disabled-bg; + color: @list-group-disabled-color; + + // Force color to inherit for custom content + .list-group-item-heading { + color: inherit; + } + .list-group-item-text { + color: @list-group-disabled-text-color; + } + } // Active class on item itself, not parent - &.active { + &.active, + &.active:hover, + &.active:focus { z-index: 2; // Place active items above their siblings for proper border styling color: @list-group-active-color; background-color: @list-group-active-bg; @@ -83,7 +98,32 @@ a.list-group-item { color: inherit; } .list-group-item-text { - color: lighten(@list-group-active-bg, 40%); + color: @list-group-active-text-color; } } } + + +// Contextual variants +// +// Add modifier classes to change text and background color on individual items. +// Organizationally, this must come after the `:hover` states. + +.list-group-item-variant(success; @state-success-bg; @state-success-text); +.list-group-item-variant(info; @state-info-bg; @state-info-text); +.list-group-item-variant(warning; @state-warning-bg; @state-warning-text); +.list-group-item-variant(danger; @state-danger-bg; @state-danger-text); + + +// Custom content options +// +// Extra classes for creating well-formatted content within `.list-group-item`s. + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} diff --git a/src/less/bootstrap/media.less b/styles/components/core/media.less similarity index 100% rename from src/less/bootstrap/media.less rename to styles/components/core/media.less diff --git a/src/less/bootstrap/modals.less b/styles/components/core/modals.less similarity index 73% rename from src/less/bootstrap/modals.less rename to styles/components/core/modals.less index 8b7349c..093d051 100644 --- a/src/less/bootstrap/modals.less +++ b/styles/components/core/modals.less @@ -22,25 +22,26 @@ right: 0; bottom: 0; left: 0; - z-index: @zindex-modal-background; + z-index: @zindex-modal; + -webkit-overflow-scrolling: touch; + + // Prevent Chrome on Windows from adding a focus outline. For details, see + // https://github.com/twbs/bootstrap/pull/10951. + outline: 0; // When fading in the modal, animate it to slide down &.fade .modal-dialog { .translate(0, -25%); .transition-transform(~"0.3s ease-out"); } - &.fade.in .modal-dialog { .translate(0, 0)} + &.in .modal-dialog { .translate(0, 0)} } // Shell div to position the modal with bottom padding .modal-dialog { position: relative; - top: 0; - left: 0; - right: 0; width: auto; - padding: 10px; - z-index: (@zindex-modal-background + 10); + margin: 10px; } // Actual modal @@ -51,9 +52,9 @@ border: 1px solid @modal-content-border-color; border-radius: @border-radius-large; .box-shadow(0 3px 9px rgba(0,0,0,.5)); - .background-clip(padding-box); + background-clip: padding-box; // Remove focus outline from opened modal - outline: none; + outline: 0; } // Modal background @@ -63,11 +64,11 @@ right: 0; bottom: 0; left: 0; - z-index: (@zindex-modal-background - 10); + z-index: @zindex-modal-background; background-color: @modal-backdrop-bg; // Fade for backdrop &.fade { .opacity(0); } - &.fade.in { .opacity(.5); } + &.in { .opacity(@modal-backdrop-opacity); } } // Modal header @@ -97,11 +98,10 @@ // Footer (for actions) .modal-footer { - margin-top: 15px; - padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding; + padding: @modal-inner-padding; text-align: right; // right align buttons border-top: 1px solid @modal-footer-border-color; - .clearfix(); // clear it in case folks use .pull-* classes on buttons + &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons // Properly space out buttons .btn + .btn { @@ -118,19 +118,30 @@ } } -// Scale up the modal -@media screen and (min-width: @screen-tablet) { +// Measure scrollbar width for padding body during modal show/hide +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +// Scale up the modal +@media (min-width: @screen-sm-min) { + // Automatically set modal's width for larger viewports .modal-dialog { - left: 50%; - right: auto; - width: 560px; - margin-left: -280px; - padding-top: 30px; - padding-bottom: 30px; + width: @modal-md; + margin: 30px auto; } .modal-content { .box-shadow(0 5px 15px rgba(0,0,0,.5)); } + // Modal sizes + .modal-sm { width: @modal-sm; } +} + +@media (min-width: @screen-md-min) { + .modal-lg { width: @modal-lg; } } diff --git a/styles/components/core/navbar.less b/styles/components/core/navbar.less new file mode 100644 index 0000000..b5e9a5f --- /dev/null +++ b/styles/components/core/navbar.less @@ -0,0 +1,654 @@ +// +// Navbars +// -------------------------------------------------- + + +// Wrapper and base class +// +// Provide a static navbar from which we expand to create full-width, fixed, and +// other navbar variations. + +.navbar { + position: relative; + min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode) + margin-bottom: @navbar-margin-bottom; + border: 1px solid transparent; + + // Prevent floats from breaking the navbar + &:extend(.clearfix all); + + @media (min-width: @grid-float-breakpoint) { + border-radius: @navbar-border-radius; + } +} + + +// Navbar heading +// +// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy +// styling of responsive aspects. + +.navbar-header { + &:extend(.clearfix all); + + @media (min-width: @grid-float-breakpoint) { + float: left; + } +} + + +// Navbar collapse (body) +// +// Group your navbar content into this for easy collapsing and expanding across +// various device sizes. By default, this content is collapsed when <768px, but +// will expand past that for a horizontal display. +// +// To start (on mobile devices) the navbar links, forms, and buttons are stacked +// vertically and include a `max-height` to overflow in case you have too much +// content for the user's viewport. + +.navbar-collapse { + overflow-x: visible; + padding-right: @navbar-padding-horizontal; + padding-left: @navbar-padding-horizontal; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255,255,255,.1); + &:extend(.clearfix all); + -webkit-overflow-scrolling: touch; + + &.in { + overflow-y: auto; + } + + @media (min-width: @grid-float-breakpoint) { + width: auto; + border-top: 0; + box-shadow: none; + + &.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; // Override default setting + overflow: visible !important; + } + + &.in { + overflow-y: visible; + } + + // Undo the collapse side padding for navbars with containers to ensure + // alignment of right-aligned contents. + .navbar-fixed-top &, + .navbar-static-top &, + .navbar-fixed-bottom & { + padding-left: 0; + padding-right: 0; + } + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + .navbar-collapse { + max-height: @navbar-collapse-max-height; + + @media (max-width: @screen-xs-min) and (orientation: landscape) { + max-height: 200px; + } + } +} + + +// Both navbar header and collapse +// +// When a container is present, change the behavior of the header and collapse. + +.container, +.container-fluid { + > .navbar-header, + > .navbar-collapse { + margin-right: -@navbar-padding-horizontal; + margin-left: -@navbar-padding-horizontal; + + @media (min-width: @grid-float-breakpoint) { + margin-right: 0; + margin-left: 0; + } + } +} + + +// +// Navbar alignment options +// +// Display the navbar across the entirety of the page or fixed it to the top or +// bottom of the page. + +// Static top (unfixed, but 100% wide) navbar +.navbar-static-top { + z-index: @zindex-navbar; + border-width: 0 0 1px; + + @media (min-width: @grid-float-breakpoint) { + border-radius: 0; + } +} + +// Fix the top/bottom navbars when screen real estate supports it +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: @zindex-navbar-fixed; + + // Undo the rounded corners + @media (min-width: @grid-float-breakpoint) { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; // override .navbar defaults + border-width: 1px 0 0; +} + + +// Brand/project name + +.navbar-brand { + float: left; + padding: @navbar-padding-vertical @navbar-padding-horizontal; + font-size: @font-size-large; + line-height: @line-height-computed; + height: @navbar-height; + + &:hover, + &:focus { + text-decoration: none; + } + + @media (min-width: @grid-float-breakpoint) { + .navbar > .container &, + .navbar > .container-fluid & { + margin-left: -@navbar-padding-horizontal; + } + } +} + + +// Navbar toggle +// +// Custom button for toggling the `.navbar-collapse`, powered by the collapse +// JavaScript plugin. + +.navbar-toggle { + position: relative; + float: right; + margin-right: @navbar-padding-horizontal; + padding: 9px 10px; + .navbar-vertical-align(34px); + background-color: transparent; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid transparent; + border-radius: @border-radius-base; + + // We remove the `outline` here, but later compensate by attaching `:hover` + // styles to `:focus`. + &:focus { + outline: 0; + } + + // Bars + .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; + } + .icon-bar + .icon-bar { + margin-top: 4px; + } + + @media (min-width: @grid-float-breakpoint) { + display: none; + } +} + + +// Navbar nav links +// +// Builds on top of the `.nav` components with its own modifier class to make +// the nav the full height of the horizontal nav (above 768px). + +.navbar-nav { + margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal; + + > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: @line-height-computed; + } + + @media (max-width: @grid-float-breakpoint-max) { + // Dropdowns get custom display when collapsed + .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + > li > a, + .dropdown-header { + padding: 5px 15px 5px 25px; + } + > li > a { + line-height: @line-height-computed; + &:hover, + &:focus { + background-image: none; + } + } + } + } + + // Uncollapse the nav + @media (min-width: @grid-float-breakpoint) { + float: left; + margin: 0; + + > li { + float: left; + > a { + padding-top: @navbar-padding-vertical; + padding-bottom: @navbar-padding-vertical; + } + } + + &.navbar-right:last-child { + margin-right: -@navbar-padding-horizontal; + } + } +} + + +// Component alignment +// +// Repurpose the pull utilities as their own navbar utilities to avoid specificity +// issues with parents and chaining. Only do this when the navbar is uncollapsed +// though so that navbar contents properly stack and align in mobile. + +@media (min-width: @grid-float-breakpoint) { + .navbar-left { .pull-left(); } + .navbar-right { .pull-right(); } +} + + +// Navbar form +// +// Extension of the `.form-inline` with some extra flavor for optimum display in +// our navbars. + +.navbar-form { + margin-left: -@navbar-padding-horizontal; + margin-right: -@navbar-padding-horizontal; + padding: 10px @navbar-padding-horizontal; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); + .box-shadow(@shadow); + + // Mixin behavior for optimum display + .form-inline(); + + .form-group { + @media (max-width: @grid-float-breakpoint-max) { + margin-bottom: 5px; + } + } + + // Vertically center in expanded, horizontal navbar + .navbar-vertical-align(@input-height-base); + + // Undo 100% width for pull classes + @media (min-width: @grid-float-breakpoint) { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + .box-shadow(none); + + // Outdent the form if last child to line up with content down the page + &.navbar-right:last-child { + margin-right: -@navbar-padding-horizontal; + } + } +} + + +// Dropdown menus + +// Menu position and menu carets +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + .border-top-radius(0); +} +// Menu position and menu caret support for dropups via extra dropup class +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + .border-bottom-radius(0); +} + + +// Buttons in navbars +// +// Vertically center a button within a navbar (when *not* in a form). + +.navbar-btn { + .navbar-vertical-align(@input-height-base); + + &.btn-sm { + .navbar-vertical-align(@input-height-small); + } + &.btn-xs { + .navbar-vertical-align(22); + } +} + + +// Text in navbars +// +// Add a class to make any element properly align itself vertically within the navbars. + +.navbar-text { + .navbar-vertical-align(@line-height-computed); + + @media (min-width: @grid-float-breakpoint) { + float: left; + margin-left: @navbar-padding-horizontal; + margin-right: @navbar-padding-horizontal; + + // Outdent the form if last child to line up with content down the page + &.navbar-right:last-child { + margin-right: 0; + } + } +} + +// Alternate navbars +// -------------------------------------------------- + +// Default navbar +.navbar-default { + background-color: @navbar-default-bg; + border-color: @navbar-default-border; + + .navbar-brand { + color: @navbar-default-brand-color; + &:hover, + &:focus { + color: @navbar-default-brand-hover-color; + background-color: @navbar-default-brand-hover-bg; + } + } + + .navbar-text { + color: @navbar-default-color; + } + + .navbar-nav { + > li > a { + color: @navbar-default-link-color; + + &:hover, + &:focus { + color: @navbar-default-link-hover-color; + background-color: @navbar-default-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-active-color; + background-color: @navbar-default-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-disabled-color; + background-color: @navbar-default-link-disabled-bg; + } + } + } + + .navbar-toggle { + border-color: @navbar-default-toggle-border-color; + &:hover, + &:focus { + background-color: @navbar-default-toggle-hover-bg; + } + .icon-bar { + background-color: @navbar-default-toggle-icon-bar-bg; + } + } + + .navbar-collapse, + .navbar-form { + border-color: @navbar-default-border; + } + + // Dropdown menu items + .navbar-nav { + // Remove background color from open dropdown + > .open > a { + &, + &:hover, + &:focus { + background-color: @navbar-default-link-active-bg; + color: @navbar-default-link-active-color; + } + } + + @media (max-width: @grid-float-breakpoint-max) { + // Dropdowns get custom display when collapsed + .open .dropdown-menu { + > li > a { + color: @navbar-default-link-color; + &:hover, + &:focus { + color: @navbar-default-link-hover-color; + background-color: @navbar-default-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-active-color; + background-color: @navbar-default-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-disabled-color; + background-color: @navbar-default-link-disabled-bg; + } + } + } + } + } + + + // Links in navbars + // + // Add a class to ensure links outside the navbar nav are colored correctly. + + .navbar-link { + color: @navbar-default-link-color; + &:hover { + color: @navbar-default-link-hover-color; + } + } + + .btn-link { + color: @navbar-default-link-color; + &:hover, + &:focus { + color: @navbar-default-link-hover-color; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @navbar-default-link-disabled-color; + } + } + } +} + +// Inverse navbar + +.navbar-inverse { + background-color: @navbar-inverse-bg; + border-color: @navbar-inverse-border; + + .navbar-brand { + color: @navbar-inverse-brand-color; + &:hover, + &:focus { + color: @navbar-inverse-brand-hover-color; + background-color: @navbar-inverse-brand-hover-bg; + } + } + + .navbar-text { + color: @navbar-inverse-color; + } + + .navbar-nav { + > li > a { + color: @navbar-inverse-link-color; + + &:hover, + &:focus { + color: @navbar-inverse-link-hover-color; + background-color: @navbar-inverse-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-active-color; + background-color: @navbar-inverse-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-disabled-color; + background-color: @navbar-inverse-link-disabled-bg; + } + } + } + + // Darken the responsive nav toggle + .navbar-toggle { + border-color: @navbar-inverse-toggle-border-color; + &:hover, + &:focus { + background-color: @navbar-inverse-toggle-hover-bg; + } + .icon-bar { + background-color: @navbar-inverse-toggle-icon-bar-bg; + } + } + + .navbar-collapse, + .navbar-form { + border-color: darken(@navbar-inverse-bg, 7%); + } + + // Dropdowns + .navbar-nav { + > .open > a { + &, + &:hover, + &:focus { + background-color: @navbar-inverse-link-active-bg; + color: @navbar-inverse-link-active-color; + } + } + + @media (max-width: @grid-float-breakpoint-max) { + // Dropdowns get custom display + .open .dropdown-menu { + > .dropdown-header { + border-color: @navbar-inverse-border; + } + .divider { + background-color: @navbar-inverse-border; + } + > li > a { + color: @navbar-inverse-link-color; + &:hover, + &:focus { + color: @navbar-inverse-link-hover-color; + background-color: @navbar-inverse-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-active-color; + background-color: @navbar-inverse-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-disabled-color; + background-color: @navbar-inverse-link-disabled-bg; + } + } + } + } + } + + .navbar-link { + color: @navbar-inverse-link-color; + &:hover { + color: @navbar-inverse-link-hover-color; + } + } + + .btn-link { + color: @navbar-inverse-link-color; + &:hover, + &:focus { + color: @navbar-inverse-link-hover-color; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @navbar-inverse-link-disabled-color; + } + } + } +} diff --git a/src/less/bootstrap/navs.less b/styles/components/core/navs.less similarity index 63% rename from src/less/bootstrap/navs.less rename to styles/components/core/navs.less index 00b7537..9e729b3 100644 --- a/src/less/bootstrap/navs.less +++ b/styles/components/core/navs.less @@ -10,7 +10,7 @@ margin-bottom: 0; padding-left: 0; // Override default ul/ol list-style: none; - .clearfix(); + &:extend(.clearfix all); > li { position: relative; @@ -19,7 +19,7 @@ > a { position: relative; display: block; - padding: 10px 15px; + padding: @nav-link-padding; &:hover, &:focus { text-decoration: none; @@ -39,44 +39,35 @@ cursor: not-allowed; } } - - // Space the headers out when they follow another list item (link) - + .nav-header { - margin-top: 9px; - } } // Open dropdowns - &.open > a { + .open > a { &, &:hover, &:focus { - color: @nav-open-link-hover-color; - background-color: @link-color; + background-color: @nav-link-hover-bg; border-color: @link-color; - .caret { - border-top-color: @nav-open-caret-border-color; - border-bottom-color: @nav-open-caret-border-color; - } } } - // Redeclare pull classes because of specificity - // Todo: consider making these utilities !important to avoid this bullshit - > .pull-right { - float: right; - } - - // Dividers (basically an hr) within the dropdown + // Nav dividers (deprecated with v3.0.1) + // + // This should have been removed in v3 with the dropping of `.nav-list`, but + // we missed it. We don't currently support this anywhere, but in the interest + // of maintaining backward compatibility in case you use it, it's deprecated. .nav-divider { .nav-divider(); } -} - + // Prevent IE8 from misplacing imgs + // + // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989 + > li > a > img { + max-width: none; + } +} -// Nav variations -// -------------------------------------------------- // Tabs // ------------------------- @@ -96,11 +87,11 @@ border: 1px solid transparent; border-radius: @border-radius-base @border-radius-base 0 0; &:hover { - border-color: @nav-tabs-link-hover-border-color; + border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color; } } - // Active state, and it's :hover to override normal :hover + // Active state, and its :hover to override normal :hover &.active > a { &, &:hover, @@ -129,7 +120,7 @@ // Links rendered as pills > a { - border-radius: 5px; + border-radius: @nav-pills-border-radius; } + li { margin-left: 2px; @@ -153,81 +144,95 @@ > li { float: none; + li { - > a { - margin-top: 2px; - margin-left: 0; // no need for this gap between nav items - } + margin-top: 2px; + margin-left: 0; // no need for this gap between nav items } } } + +// Nav variations +// -------------------------------------------------- + // Justified nav links // ------------------------- .nav-justified { width: 100%; + > li { float: none; - display: table-cell; - width: 1%; - > a { + > a { text-align: center; + margin-bottom: 5px; + } + } + + > .dropdown .dropdown-menu { + top: auto; + left: auto; + } + + @media (min-width: @screen-sm-min) { + > li { + display: table-cell; + width: 1%; + > a { + margin-bottom: 0; + } } } } // Move borders to anchors instead of bottom of list +// +// Mixin for adding on top the shared `.nav-justified` styles for our tabs .nav-tabs-justified { border-bottom: 0; - > li > a { - border-bottom: 1px solid @nav-tabs-justified-link-border-color; + > li > a { // Override margin from .nav-tabs margin-right: 0; + border-radius: @border-radius-base; } - > .active > a { - border-bottom-color: @nav-tabs-justified-active-link-border-color; + + > .active > a, + > .active > a:hover, + > .active > a:focus { + border: 1px solid @nav-tabs-justified-link-border-color; } + @media (min-width: @screen-sm-min) { + > li > a { + border-bottom: 1px solid @nav-tabs-justified-link-border-color; + border-radius: @border-radius-base @border-radius-base 0 0; + } + > .active > a, + > .active > a:hover, + > .active > a:focus { + border-bottom-color: @nav-tabs-justified-active-link-border-color; + } + } } - // Tabbable tabs // ------------------------- -// Clear any floats -.tabbable { - .clearfix(); -} - -// Show/hide tabbable areas -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content, -.pill-content { +// Hide tabbable panes to start, show them when `.active` +.tab-content { + > .tab-pane { + display: none; + } > .active { display: block; } } - // Dropdowns // ------------------------- -// Make dropdown carets use link color in navs -.nav .caret { - border-top-color: @link-color; - border-bottom-color: @link-color; -} -.nav a:hover .caret { - border-top-color: @link-hover-color; - border-bottom-color: @link-hover-color; -} - // Specific dropdowns .nav-tabs .dropdown-menu { // make dropdown border overlap tab border diff --git a/styles/components/core/normalize.less b/styles/components/core/normalize.less new file mode 100644 index 0000000..ce04b6a --- /dev/null +++ b/styles/components/core/normalize.less @@ -0,0 +1,425 @@ +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ + +// +// 1. Set default font family to sans-serif. +// 2. Prevent iOS text size adjust after orientation change, without disabling +// user zoom. +// + +html { + font-family: sans-serif; // 1 + -ms-text-size-adjust: 100%; // 2 + -webkit-text-size-adjust: 100%; // 2 +} + +// +// Remove default margin. +// + +body { + margin: 0; +} + +// HTML5 display definitions +// ========================================================================== + +// +// Correct `block` display not defined for any HTML5 element in IE 8/9. +// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. +// Correct `block` display not defined for `main` in IE 11. +// + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +// +// 1. Correct `inline-block` display not defined in IE 8/9. +// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. +// + +audio, +canvas, +progress, +video { + display: inline-block; // 1 + vertical-align: baseline; // 2 +} + +// +// Prevent modern browsers from displaying `audio` without controls. +// Remove excess height in iOS 5 devices. +// + +audio:not([controls]) { + display: none; + height: 0; +} + +// +// Address `[hidden]` styling not present in IE 8/9/10. +// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. +// + +[hidden], +template { + display: none; +} + +// Links +// ========================================================================== + +// +// Remove the gray background color from active links in IE 10. +// + +a { + background: transparent; +} + +// +// Improve readability when focused and also mouse hovered in all browsers. +// + +a:active, +a:hover { + outline: 0; +} + +// Text-level semantics +// ========================================================================== + +// +// Address styling not present in IE 8/9/10/11, Safari, and Chrome. +// + +abbr[title] { + border-bottom: 1px dotted; +} + +// +// Address style set to `bolder` in Firefox 4+, Safari, and Chrome. +// + +b, +strong { + font-weight: bold; +} + +// +// Address styling not present in Safari and Chrome. +// + +dfn { + font-style: italic; +} + +// +// Address variable `h1` font-size and margin within `section` and `article` +// contexts in Firefox 4+, Safari, and Chrome. +// + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +// +// Address styling not present in IE 8/9. +// + +mark { + background: #ff0; + color: #000; +} + +// +// Address inconsistent and variable font size in all browsers. +// + +small { + font-size: 80%; +} + +// +// Prevent `sub` and `sup` affecting `line-height` in all browsers. +// + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +// Embedded content +// ========================================================================== + +// +// Remove border when inside `a` element in IE 8/9/10. +// + +img { + border: 0; +} + +// +// Correct overflow not hidden in IE 9/10/11. +// + +svg:not(:root) { + overflow: hidden; +} + +// Grouping content +// ========================================================================== + +// +// Address margin not present in IE 8/9 and Safari. +// + +figure { + margin: 1em 40px; +} + +// +// Address differences between Firefox and other browsers. +// + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +// +// Contain overflow in all browsers. +// + +pre { + overflow: auto; +} + +// +// Address odd `em`-unit font size rendering in all browsers. +// + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +// Forms +// ========================================================================== + +// +// Known limitation: by default, Chrome and Safari on OS X allow very limited +// styling of `select`, unless a `border` property is set. +// + +// +// 1. Correct color not being inherited. +// Known issue: affects color of disabled elements. +// 2. Correct font properties not being inherited. +// 3. Address margins set differently in Firefox 4+, Safari, and Chrome. +// + +button, +input, +optgroup, +select, +textarea { + color: inherit; // 1 + font: inherit; // 2 + margin: 0; // 3 +} + +// +// Address `overflow` set to `hidden` in IE 8/9/10/11. +// + +button { + overflow: visible; +} + +// +// Address inconsistent `text-transform` inheritance for `button` and `select`. +// All other form control elements do not inherit `text-transform` values. +// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. +// Correct `select` style inheritance in Firefox. +// + +button, +select { + text-transform: none; +} + +// +// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` +// and `video` controls. +// 2. Correct inability to style clickable `input` types in iOS. +// 3. Improve usability and consistency of cursor style between image-type +// `input` and others. +// + +button, +html input[type="button"], // 1 +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; // 2 + cursor: pointer; // 3 +} + +// +// Re-set default cursor for disabled elements. +// + +button[disabled], +html input[disabled] { + cursor: default; +} + +// +// Remove inner padding and border in Firefox 4+. +// + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +// +// Address Firefox 4+ setting `line-height` on `input` using `!important` in +// the UA stylesheet. +// + +input { + line-height: normal; +} + +// +// It's recommended that you don't attempt to style these elements. +// Firefox's implementation doesn't respect box-sizing, padding, or width. +// +// 1. Address box sizing set to `content-box` in IE 8/9/10. +// 2. Remove excess padding in IE 8/9/10. +// + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; // 1 + padding: 0; // 2 +} + +// +// Fix the cursor style for Chrome's increment/decrement buttons. For certain +// `font-size` values of the `input`, it causes the cursor style of the +// decrement button to change from `default` to `text`. +// + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +// +// 1. Address `appearance` set to `searchfield` in Safari and Chrome. +// 2. Address `box-sizing` set to `border-box` in Safari and Chrome +// (include `-moz` to future-proof). +// + +input[type="search"] { + -webkit-appearance: textfield; // 1 + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; // 2 + box-sizing: content-box; +} + +// +// Remove inner padding and search cancel button in Safari and Chrome on OS X. +// Safari (but not Chrome) clips the cancel button when the search input has +// padding (and `textfield` appearance). +// + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +// +// Define consistent border, margin, and padding. +// + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +// +// 1. Correct `color` not being inherited in IE 8/9/10/11. +// 2. Remove padding so people aren't caught out if they zero out fieldsets. +// + +legend { + border: 0; // 1 + padding: 0; // 2 +} + +// +// Remove default vertical scrollbar in IE 8/9/10/11. +// + +textarea { + overflow: auto; +} + +// +// Don't inherit the `font-weight` (applied by a rule above). +// NOTE: the default cannot safely be changed in Chrome and Safari on OS X. +// + +optgroup { + font-weight: bold; +} + +// Tables +// ========================================================================== + +// +// Remove most spacing between table cells. +// + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/src/less/bootstrap/pager.less b/styles/components/core/pager.less similarity index 78% rename from src/less/bootstrap/pager.less rename to styles/components/core/pager.less index 04585a3..59103f4 100644 --- a/src/less/bootstrap/pager.less +++ b/styles/components/core/pager.less @@ -8,22 +8,22 @@ margin: @line-height-computed 0; list-style: none; text-align: center; - .clearfix(); + &:extend(.clearfix all); li { display: inline; > a, > span { display: inline-block; padding: 5px 14px; - background-color: @pagination-bg; - border: 1px solid @pagination-border; + background-color: @pager-bg; + border: 1px solid @pager-border; border-radius: @pager-border-radius; } > a:hover, > a:focus { text-decoration: none; - background-color: @pagination-active-bg; + background-color: @pager-hover-bg; } } @@ -47,7 +47,7 @@ > a:focus, > span { color: @pager-disabled-color; - background-color: @pagination-bg; + background-color: @pager-bg; cursor: not-allowed; } } diff --git a/styles/components/core/pagination.less b/styles/components/core/pagination.less new file mode 100644 index 0000000..b2856ae --- /dev/null +++ b/styles/components/core/pagination.less @@ -0,0 +1,88 @@ +// +// Pagination (multiple pages) +// -------------------------------------------------- +.pagination { + display: inline-block; + padding-left: 0; + margin: @line-height-computed 0; + border-radius: @border-radius-base; + + > li { + display: inline; // Remove list-style and block-level defaults + > a, + > span { + position: relative; + float: left; // Collapse white-space + padding: @padding-base-vertical @padding-base-horizontal; + line-height: @line-height-base; + text-decoration: none; + color: @pagination-color; + background-color: @pagination-bg; + border: 1px solid @pagination-border; + margin-left: -1px; + } + &:first-child { + > a, + > span { + margin-left: 0; + .border-left-radius(@border-radius-base); + } + } + &:last-child { + > a, + > span { + .border-right-radius(@border-radius-base); + } + } + } + + > li > a, + > li > span { + &:hover, + &:focus { + color: @pagination-hover-color; + background-color: @pagination-hover-bg; + border-color: @pagination-hover-border; + } + } + + > .active > a, + > .active > span { + &, + &:hover, + &:focus { + z-index: 2; + color: @pagination-active-color; + background-color: @pagination-active-bg; + border-color: @pagination-active-border; + cursor: default; + } + } + + > .disabled { + > span, + > span:hover, + > span:focus, + > a, + > a:hover, + > a:focus { + color: @pagination-disabled-color; + background-color: @pagination-disabled-bg; + border-color: @pagination-disabled-border; + cursor: not-allowed; + } + } +} + +// Sizing +// -------------------------------------------------- + +// Large +.pagination-lg { + .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large); +} + +// Small +.pagination-sm { + .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small); +} diff --git a/styles/components/core/panels.less b/styles/components/core/panels.less new file mode 100644 index 0000000..9afa4cb --- /dev/null +++ b/styles/components/core/panels.less @@ -0,0 +1,240 @@ +// +// Panels +// -------------------------------------------------- + + +// Base class +.panel { + margin-bottom: @line-height-computed; + background-color: @panel-bg; + border: 1px solid transparent; + border-radius: @panel-border-radius; + .box-shadow(0 1px 1px rgba(0,0,0,.05)); +} + +// Panel contents +.panel-body { + padding: @panel-body-padding; + &:extend(.clearfix all); +} + +// Optional heading +.panel-heading { + padding: @panel-heading-padding; + border-bottom: 1px solid transparent; + .border-top-radius((@panel-border-radius - 1)); + + > .dropdown .dropdown-toggle { + color: inherit; + } +} + +// Within heading, strip any `h*` tag of its default margins for spacing. +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: ceil((@font-size-base * 1.125)); + color: inherit; + + > a { + color: inherit; + } +} + +// Optional footer (stays gray in every modifier class) +.panel-footer { + padding: @panel-footer-padding; + background-color: @panel-footer-bg; + border-top: 1px solid @panel-inner-border; + .border-bottom-radius((@panel-border-radius - 1)); +} + + +// List groups in panels +// +// By default, space out list group content from panel headings to account for +// any kind of custom content between the two. + +.panel { + > .list-group { + margin-bottom: 0; + + .list-group-item { + border-width: 1px 0; + border-radius: 0; + } + + // Add border top radius for first one + &:first-child { + .list-group-item:first-child { + border-top: 0; + .border-top-radius((@panel-border-radius - 1)); + } + } + // Add border bottom radius for last one + &:last-child { + .list-group-item:last-child { + border-bottom: 0; + .border-bottom-radius((@panel-border-radius - 1)); + } + } + } +} +// Collapse space between when there's no additional content. +.panel-heading + .list-group { + .list-group-item:first-child { + border-top-width: 0; + } +} + + +// Tables in panels +// +// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and +// watch it go full width. + +.panel { + > .table, + > .table-responsive > .table { + margin-bottom: 0; + } + // Add border top radius for first one + > .table:first-child, + > .table-responsive:first-child > .table:first-child { + .border-top-radius((@panel-border-radius - 1)); + + > thead:first-child, + > tbody:first-child { + > tr:first-child { + td:first-child, + th:first-child { + border-top-left-radius: (@panel-border-radius - 1); + } + td:last-child, + th:last-child { + border-top-right-radius: (@panel-border-radius - 1); + } + } + } + } + // Add border bottom radius for last one + > .table:last-child, + > .table-responsive:last-child > .table:last-child { + .border-bottom-radius((@panel-border-radius - 1)); + + > tbody:last-child, + > tfoot:last-child { + > tr:last-child { + td:first-child, + th:first-child { + border-bottom-left-radius: (@panel-border-radius - 1); + } + td:last-child, + th:last-child { + border-bottom-right-radius: (@panel-border-radius - 1); + } + } + } + } + > .panel-body + .table, + > .panel-body + .table-responsive { + border-top: 1px solid @table-border-color; + } + > .table > tbody:first-child > tr:first-child th, + > .table > tbody:first-child > tr:first-child td { + border-top: 0; + } + > .table-bordered, + > .table-responsive > .table-bordered { + border: 0; + > thead, + > tbody, + > tfoot { + > tr { + > th:first-child, + > td:first-child { + border-left: 0; + } + > th:last-child, + > td:last-child { + border-right: 0; + } + } + } + > thead, + > tbody { + > tr:first-child { + > td, + > th { + border-bottom: 0; + } + } + } + > tbody, + > tfoot { + > tr:last-child { + > td, + > th { + border-bottom: 0; + } + } + } + } + > .table-responsive { + border: 0; + margin-bottom: 0; + } +} + + +// Collapsable panels (aka, accordion) +// +// Wrap a series of panels in `.panel-group` to turn them into an accordion with +// the help of our collapse JavaScript plugin. + +.panel-group { + margin-bottom: @line-height-computed; + + // Tighten up margin so it's only between panels + .panel { + margin-bottom: 0; + border-radius: @panel-border-radius; + + .panel { + margin-top: 5px; + } + } + + .panel-heading { + border-bottom: 0; + + .panel-collapse .panel-body { + border-top: 1px solid @panel-inner-border; + } + } + .panel-footer { + border-top: 0; + + .panel-collapse .panel-body { + border-bottom: 1px solid @panel-inner-border; + } + } +} + + +// Contextual variations +.panel-default { + .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border); +} +.panel-primary { + .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border); +} +.panel-success { + .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border); +} +.panel-info { + .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border); +} +.panel-warning { + .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border); +} +.panel-danger { + .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border); +} diff --git a/src/less/bootstrap/popovers.less b/styles/components/core/popovers.less similarity index 87% rename from src/less/bootstrap/popovers.less rename to styles/components/core/popovers.less index c07350f..bf6af40 100644 --- a/src/less/bootstrap/popovers.less +++ b/styles/components/core/popovers.less @@ -13,8 +13,6 @@ padding: 1px; text-align: left; // Reset given new insertion method background-color: @popover-bg; - -webkit-bg-clip: padding-box; - -moz-bg-clip: padding; background-clip: padding-box; border: 1px solid @popover-fallback-border-color; border: 1px solid @popover-border-color; @@ -25,10 +23,10 @@ white-space: normal; // Offset the popover to account for the popover arrow - &.top { margin-top: -10px; } - &.right { margin-left: 10px; } - &.bottom { margin-top: 10px; } - &.left { margin-left: -10px; } + &.top { margin-top: -@popover-arrow-width; } + &.right { margin-left: @popover-arrow-width; } + &.bottom { margin-top: @popover-arrow-width; } + &.left { margin-left: -@popover-arrow-width; } } .popover-title { @@ -39,7 +37,7 @@ line-height: 18px; background-color: @popover-title-bg; border-bottom: 1px solid darken(@popover-title-bg, 5%); - border-radius: 5px 5px 0 0; + border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0; } .popover-content { @@ -50,7 +48,7 @@ // // .arrow is outer, .arrow:after is inner -.popover .arrow { +.popover > .arrow { &, &:after { position: absolute; @@ -61,16 +59,16 @@ border-style: solid; } } -.popover .arrow { +.popover > .arrow { border-width: @popover-arrow-outer-width; } -.popover .arrow:after { +.popover > .arrow:after { border-width: @popover-arrow-width; content: ""; } .popover { - &.top .arrow { + &.top > .arrow { left: 50%; margin-left: -@popover-arrow-outer-width; border-bottom-width: 0; @@ -85,7 +83,7 @@ border-top-color: @popover-arrow-color; } } - &.right .arrow { + &.right > .arrow { top: 50%; left: -@popover-arrow-outer-width; margin-top: -@popover-arrow-outer-width; @@ -100,7 +98,7 @@ border-right-color: @popover-arrow-color; } } - &.bottom .arrow { + &.bottom > .arrow { left: 50%; margin-left: -@popover-arrow-outer-width; border-top-width: 0; @@ -116,7 +114,7 @@ } } - &.left .arrow { + &.left > .arrow { top: 50%; right: -@popover-arrow-outer-width; margin-top: -@popover-arrow-outer-width; diff --git a/src/less/bootstrap/print.less b/styles/components/core/print.less similarity index 89% rename from src/less/bootstrap/print.less rename to styles/components/core/print.less index 1e4bffe..3655d03 100644 --- a/src/less/bootstrap/print.less +++ b/styles/components/core/print.less @@ -26,7 +26,6 @@ } // Don't show links for images, or javascript/internal links - .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; @@ -51,10 +50,6 @@ max-width: 100% !important; } - @page { - margin: 2cm .5cm; - } - p, h2, h3 { @@ -67,6 +62,12 @@ page-break-after: avoid; } + // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245 + // Once fixed, we can just straight up remove this. + select { + background: #fff !important; + } + // Bootstrap components .navbar { display: none; diff --git a/src/less/bootstrap/progress-bars.less b/styles/components/core/progress-bars.less similarity index 56% rename from src/less/bootstrap/progress-bars.less rename to styles/components/core/progress-bars.less index fe399ab..74b7028 100644 --- a/src/less/bootstrap/progress-bars.less +++ b/styles/components/core/progress-bars.less @@ -6,31 +6,6 @@ // Bar animations // ------------------------- -// Webkit -@-webkit-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// Firefox -@-moz-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// IE9 -@-ms-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// Opera -@-o-keyframes progress-bar-stripes { - from { background-position: 0 0; } - to { background-position: 40px 0; } -} - -// Spec @keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } @@ -57,6 +32,7 @@ width: 0%; height: 100%; font-size: @font-size-small; + line-height: @line-height-computed; color: @progress-bar-color; text-align: center; background-color: @progress-bar-bg; @@ -66,17 +42,29 @@ // Striped bars .progress-striped .progress-bar { - #gradient > .striped(@progress-bar-bg); - .background-size(40px 40px); + #gradient > .striped(); + background-size: 40px 40px; } // Call animation for the active one .progress.active .progress-bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; + .animation(progress-bar-stripes 2s linear infinite); +} + +// Account for lower percentages +.progress-bar { + &[aria-valuenow="1"], + &[aria-valuenow="2"] { + min-width: 30px; + } + + &[aria-valuenow="0"] { + color: @gray-light; + min-width: 30px; + background-color: transparent; + background-image: none; + box-shadow: none; + } } @@ -84,22 +72,18 @@ // Variations // ------------------------- -// Danger (red) -.progress-bar-danger { - .progress-bar-variant(@progress-bar-danger-bg); -} - -// Success (green) .progress-bar-success { .progress-bar-variant(@progress-bar-success-bg); } -// Warning (orange) +.progress-bar-info { + .progress-bar-variant(@progress-bar-info-bg); +} + .progress-bar-warning { .progress-bar-variant(@progress-bar-warning-bg); } -// Info (teal) -.progress-bar-info { - .progress-bar-variant(@progress-bar-info-bg); +.progress-bar-danger { + .progress-bar-variant(@progress-bar-danger-bg); } diff --git a/styles/components/core/responsive-embed.less b/styles/components/core/responsive-embed.less new file mode 100644 index 0000000..a884d49 --- /dev/null +++ b/styles/components/core/responsive-embed.less @@ -0,0 +1,34 @@ +// Embeds responsive +// +// Credit: Nicolas Gallagher and SUIT CSS. + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; + + .embed-responsive-item, + iframe, + embed, + object { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; + } + + // Modifier class for 16:9 aspect ratio + &.embed-responsive-16by9 { + padding-bottom: 56.25%; + } + + // Modifier class for 4:3 aspect ratio + &.embed-responsive-4by3 { + padding-bottom: 75%; + } +} diff --git a/styles/components/core/responsive-utilities.less b/styles/components/core/responsive-utilities.less new file mode 100644 index 0000000..93f2e8e --- /dev/null +++ b/styles/components/core/responsive-utilities.less @@ -0,0 +1,193 @@ +// +// Responsive: Utility classes +// -------------------------------------------------- + + +// IE10 in Windows (Phone) 8 +// +// Support for responsive views via media queries is kind of borked in IE10, for +// Surface/desktop in split view and for Windows Phone 8. This particular fix +// must be accompanied by a snippet of JavaScript to sniff the user agent and +// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at +// our Getting Started page for more information on this bug. +// +// For more information, see the following: +// +// Issue: https://github.com/twbs/bootstrap/issues/10497 +// Docs: http://getbootstrap.com/getting-started/#browsers +// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ + +@-ms-viewport { + width: device-width; +} + + +// Visibility utilities +// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0 +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + .responsive-invisibility(); +} + +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} + +.visible-xs { + @media (max-width: @screen-xs-max) { + .responsive-visibility(); + } +} +.visible-xs-block { + @media (max-width: @screen-xs-max) { + display: block !important; + } +} +.visible-xs-inline { + @media (max-width: @screen-xs-max) { + display: inline !important; + } +} +.visible-xs-inline-block { + @media (max-width: @screen-xs-max) { + display: inline-block !important; + } +} + +.visible-sm { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + .responsive-visibility(); + } +} +.visible-sm-block { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + display: block !important; + } +} +.visible-sm-inline { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + display: inline !important; + } +} +.visible-sm-inline-block { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + display: inline-block !important; + } +} + +.visible-md { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + .responsive-visibility(); + } +} +.visible-md-block { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + display: block !important; + } +} +.visible-md-inline { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + display: inline !important; + } +} +.visible-md-inline-block { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + display: inline-block !important; + } +} + +.visible-lg { + @media (min-width: @screen-lg-min) { + .responsive-visibility(); + } +} +.visible-lg-block { + @media (min-width: @screen-lg-min) { + display: block !important; + } +} +.visible-lg-inline { + @media (min-width: @screen-lg-min) { + display: inline !important; + } +} +.visible-lg-inline-block { + @media (min-width: @screen-lg-min) { + display: inline-block !important; + } +} + +.hidden-xs { + @media (max-width: @screen-xs-max) { + .responsive-invisibility(); + } +} +.hidden-sm { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + .responsive-invisibility(); + } +} +.hidden-md { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + .responsive-invisibility(); + } +} +.hidden-lg { + @media (min-width: @screen-lg-min) { + .responsive-invisibility(); + } +} + + +// Print utilities +// +// Media queries are placed on the inside to be mixin-friendly. + +// Note: Deprecated .visible-print as of v3.2.0 +.visible-print { + .responsive-invisibility(); + + @media print { + .responsive-visibility(); + } +} +.visible-print-block { + display: none !important; + + @media print { + display: block !important; + } +} +.visible-print-inline { + display: none !important; + + @media print { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; + + @media print { + display: inline-block !important; + } +} + +.hidden-print { + @media print { + .responsive-invisibility(); + } +} diff --git a/styles/components/core/scaffolding.less b/styles/components/core/scaffolding.less new file mode 100644 index 0000000..c658d7b --- /dev/null +++ b/styles/components/core/scaffolding.less @@ -0,0 +1,150 @@ +// +// Scaffolding +// -------------------------------------------------- + + +// Reset the box-sizing +// +// Heads up! This reset may cause conflicts with some third-party widgets. +// For recommendations on resolving such conflicts, see +// http://getbootstrap.com/getting-started/#third-box-sizing +* { + .box-sizing(border-box); +} +*:before, +*:after { + .box-sizing(border-box); +} + + +// Body reset + +html { + font-size: 62.5%; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +body { + font-family: @font-family-base; + font-size: @font-size-base; + line-height: @line-height-base; + color: @text-color; + background-color: @body-bg; +} + +// Reset fonts for relevant elements +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + + +// Links + +a { + color: @link-color; + text-decoration: none; + + &:hover, + &:focus { + color: @link-hover-color; + text-decoration: underline; + } + + &:focus { + .tab-focus(); + } +} + + +// Figures +// +// We reset this here because previously Normalize had no `figure` margins. This +// ensures we don't break anyone's use of the element. + +figure { + margin: 0; +} + + +// Images + +img { + vertical-align: middle; +} + +// Responsive images (ensure images don't scale beyond their parents) +.img-responsive { + .img-responsive(); +} + +// Rounded corners +.img-rounded { + border-radius: @border-radius-large; +} + +// Image thumbnails +// +// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`. +.img-thumbnail { + padding: @thumbnail-padding; + line-height: @line-height-base; + background-color: @thumbnail-bg; + border: 1px solid @thumbnail-border; + border-radius: @thumbnail-border-radius; + .transition(all .2s ease-in-out); + + // Keep them at most 100% wide + .img-responsive(inline-block); +} + +// Perfect circle +.img-circle { + border-radius: 50%; // set radius in percents +} + + +// Horizontal rules + +hr { + margin-top: @line-height-computed; + margin-bottom: @line-height-computed; + border: 0; + border-top: 1px solid @hr-border; +} + + +// Only display content to screen readers +// +// See: http://a11yproject.com/posts/how-to-hide-content/ + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} + +// Use in conjunction with .sr-only to only display content when it's focused. +// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 +// Credit: HTML5 Boilerplate + +.sr-only-focusable { + &:active, + &:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; + } +} diff --git a/styles/components/core/tables.less b/styles/components/core/tables.less new file mode 100644 index 0000000..555d792 --- /dev/null +++ b/styles/components/core/tables.less @@ -0,0 +1,233 @@ +// +// Tables +// -------------------------------------------------- + + +table { + max-width: 100%; + background-color: @table-bg; +} +th { + text-align: left; +} + + +// Baseline styles + +.table { + width: 100%; + margin-bottom: @line-height-computed; + // Cells + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + padding: @table-cell-padding; + line-height: @line-height-base; + vertical-align: top; + border-top: 1px solid @table-border-color; + } + } + } + // Bottom align for column headings + > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid @table-border-color; + } + // Remove top border from thead by default + > caption + thead, + > colgroup + thead, + > thead:first-child { + > tr:first-child { + > th, + > td { + border-top: 0; + } + } + } + // Account for multiple tbody instances + > tbody + tbody { + border-top: 2px solid @table-border-color; + } + + // Nesting + .table { + background-color: @body-bg; + } +} + + +// Condensed table w/ half padding + +.table-condensed { + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + padding: @table-condensed-cell-padding; + } + } + } +} + + +// Bordered version +// +// Add borders all around the table and between all the columns. + +.table-bordered { + border: 1px solid @table-border-color; + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + border: 1px solid @table-border-color; + } + } + } + > thead > tr { + > th, + > td { + border-bottom-width: 2px; + } + } +} + + +// Zebra-striping +// +// Default zebra-stripe styles (alternating gray and transparent backgrounds) + +.table-striped { + > tbody > tr:nth-child(odd) { + > td, + > th { + background-color: @table-bg-accent; + } + } +} + + +// Hover effect +// +// Placed here since it has to come after the potential zebra striping + +.table-hover { + > tbody > tr:hover { + > td, + > th { + background-color: @table-bg-hover; + } + } +} + + +// Table cell sizing +// +// Reset default table behavior + +table col[class*="col-"] { + position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623) + float: none; + display: table-column; +} +table { + td, + th { + &[class*="col-"] { + position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623) + float: none; + display: table-cell; + } + } +} + + +// Table backgrounds +// +// Exact selectors below required to override `.table-striped` and prevent +// inheritance to nested tables. + +// Generate the contextual variants +.table-row-variant(active; @table-bg-active); +.table-row-variant(success; @state-success-bg); +.table-row-variant(info; @state-info-bg); +.table-row-variant(warning; @state-warning-bg); +.table-row-variant(danger; @state-danger-bg); + + +// Responsive tables +// +// Wrap your tables in `.table-responsive` and we'll make them mobile friendly +// by enabling horizontal scrolling. Only applies <768px. Everything above that +// will display normally. + +.table-responsive { + @media screen and (max-width: @screen-xs-max) { + width: 100%; + margin-bottom: (@line-height-computed * 0.75); + overflow-y: hidden; + overflow-x: scroll; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid @table-border-color; + -webkit-overflow-scrolling: touch; + + // Tighten up spacing + > .table { + margin-bottom: 0; + + // Ensure the content doesn't wrap + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + white-space: nowrap; + } + } + } + } + + // Special overrides for the bordered tables + > .table-bordered { + border: 0; + + // Nuke the appropriate borders so that the parent can handle them + > thead, + > tbody, + > tfoot { + > tr { + > th:first-child, + > td:first-child { + border-left: 0; + } + > th:last-child, + > td:last-child { + border-right: 0; + } + } + } + + // Only nuke the last row's bottom-border in `tbody` and `tfoot` since + // chances are there will be only one `tr` in a `thead` and that would + // remove the border altogether. + > tbody, + > tfoot { + > tr:last-child { + > th, + > td { + border-bottom: 0; + } + } + } + + } + } +} diff --git a/styles/components/core/theme.less b/styles/components/core/theme.less new file mode 100644 index 0000000..6f957fb --- /dev/null +++ b/styles/components/core/theme.less @@ -0,0 +1,247 @@ + +// +// Load core variables and mixins +// -------------------------------------------------- + +@import "variables.less"; +@import "mixins.less"; + + + +// +// Buttons +// -------------------------------------------------- + +// Common styles +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0,0,0,.2); + @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075); + .box-shadow(@shadow); + + // Reset the shadow + &:active, + &.active { + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + } +} + +// Mixin for generating new styles +.btn-styles(@btn-color: #555) { + #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%)); + .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners + background-repeat: repeat-x; + border-color: darken(@btn-color, 14%); + + &:hover, + &:focus { + background-color: darken(@btn-color, 12%); + background-position: 0 -15px; + } + + &:active, + &.active { + background-color: darken(@btn-color, 12%); + border-color: darken(@btn-color, 14%); + } +} + +// Common styles +.btn { + // Remove the gradient for the pressed/active state + &:active, + &.active { + background-image: none; + } +} + +// Apply the mixin to the buttons +.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; } +.btn-primary { .btn-styles(@btn-primary-bg); } +.btn-success { .btn-styles(@btn-success-bg); } +.btn-info { .btn-styles(@btn-info-bg); } +.btn-warning { .btn-styles(@btn-warning-bg); } +.btn-danger { .btn-styles(@btn-danger-bg); } + + + +// +// Images +// -------------------------------------------------- + +.thumbnail, +.img-thumbnail { + .box-shadow(0 1px 2px rgba(0,0,0,.075)); +} + + + +// +// Dropdowns +// -------------------------------------------------- + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%)); + background-color: darken(@dropdown-link-hover-bg, 5%); +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); + background-color: darken(@dropdown-link-active-bg, 5%); +} + + + +// +// Navbar +// -------------------------------------------------- + +// Default navbar +.navbar-default { + #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg); + .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered + border-radius: @navbar-border-radius; + @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075); + .box-shadow(@shadow); + + .navbar-nav > .active > a { + #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%)); + .box-shadow(inset 0 3px 9px rgba(0,0,0,.075)); + } +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255,255,255,.25); +} + +// Inverted navbar +.navbar-inverse { + #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg); + .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered + + .navbar-nav > .active > a { + #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%)); + .box-shadow(inset 0 3px 9px rgba(0,0,0,.25)); + } + + .navbar-brand, + .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + } +} + +// Undo rounded corners in static and fixed navbars +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} + + + +// +// Alerts +// -------------------------------------------------- + +// Common styles +.alert { + text-shadow: 0 1px 0 rgba(255,255,255,.2); + @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05); + .box-shadow(@shadow); +} + +// Mixin for generating new styles +.alert-styles(@color) { + #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%)); + border-color: darken(@color, 15%); +} + +// Apply the mixin to the alerts +.alert-success { .alert-styles(@alert-success-bg); } +.alert-info { .alert-styles(@alert-info-bg); } +.alert-warning { .alert-styles(@alert-warning-bg); } +.alert-danger { .alert-styles(@alert-danger-bg); } + + + +// +// Progress bars +// -------------------------------------------------- + +// Give the progress background some depth +.progress { + #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg) +} + +// Mixin for generating new styles +.progress-bar-styles(@color) { + #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%)); +} + +// Apply the mixin to the progress bars +.progress-bar { .progress-bar-styles(@progress-bar-bg); } +.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); } +.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); } +.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); } +.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); } + + + +// +// List groups +// -------------------------------------------------- + +.list-group { + border-radius: @border-radius-base; + .box-shadow(0 1px 2px rgba(0,0,0,.075)); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%); + #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%)); + border-color: darken(@list-group-active-border, 7.5%); +} + + + +// +// Panels +// -------------------------------------------------- + +// Common styles +.panel { + .box-shadow(0 1px 2px rgba(0,0,0,.05)); +} + +// Mixin for generating new styles +.panel-heading-styles(@color) { + #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%)); +} + +// Apply the mixin to the panel headings only +.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); } +.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); } +.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); } +.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); } +.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); } +.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); } + + + +// +// Wells +// -------------------------------------------------- + +.well { + #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg); + border-color: darken(@well-bg, 10%); + @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1); + .box-shadow(@shadow); +} diff --git a/styles/components/core/thumbnails.less b/styles/components/core/thumbnails.less new file mode 100644 index 0000000..c428920 --- /dev/null +++ b/styles/components/core/thumbnails.less @@ -0,0 +1,36 @@ +// +// Thumbnails +// -------------------------------------------------- + + +// Mixin and adjust the regular image class +.thumbnail { + display: block; + padding: @thumbnail-padding; + margin-bottom: @line-height-computed; + line-height: @line-height-base; + background-color: @thumbnail-bg; + border: 1px solid @thumbnail-border; + border-radius: @thumbnail-border-radius; + .transition(all .2s ease-in-out); + + > img, + a > img { + &:extend(.img-responsive); + margin-left: auto; + margin-right: auto; + } + + // Add a hover state for linked versions only + a&:hover, + a&:focus, + a&.active { + border-color: @link-color; + } + + // Image captions + .caption { + padding: @thumbnail-caption-padding; + color: @thumbnail-caption-color; + } +} diff --git a/src/less/bootstrap/tooltip.less b/styles/components/core/tooltip.less similarity index 82% rename from src/less/bootstrap/tooltip.less rename to styles/components/core/tooltip.less index 819b9df..bd62699 100644 --- a/src/less/bootstrap/tooltip.less +++ b/styles/components/core/tooltip.less @@ -13,11 +13,11 @@ line-height: 1.4; .opacity(0); - &.in { .opacity(1); } - &.top { margin-top: -3px; padding: 5px 0; } - &.right { margin-left: 3px; padding: 0 5px; } - &.bottom { margin-top: 3px; padding: 5px 0; } - &.left { margin-left: -3px; padding: 0 5px; } + &.in { .opacity(@tooltip-opacity); } + &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; } + &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; } + &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; } + &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; } } // Wrapper for the tooltip content @@ -49,13 +49,13 @@ } &.top-left .tooltip-arrow { bottom: 0; - left: 5px; + left: @tooltip-arrow-width; border-width: @tooltip-arrow-width @tooltip-arrow-width 0; border-top-color: @tooltip-arrow-color; } &.top-right .tooltip-arrow { bottom: 0; - right: 5px; + right: @tooltip-arrow-width; border-width: @tooltip-arrow-width @tooltip-arrow-width 0; border-top-color: @tooltip-arrow-color; } @@ -82,13 +82,13 @@ } &.bottom-left .tooltip-arrow { top: 0; - left: 5px; + left: @tooltip-arrow-width; border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; border-bottom-color: @tooltip-arrow-color; } &.bottom-right .tooltip-arrow { top: 0; - right: 5px; + right: @tooltip-arrow-width; border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; border-bottom-color: @tooltip-arrow-color; } diff --git a/styles/components/core/type.less b/styles/components/core/type.less new file mode 100644 index 0000000..91298f1 --- /dev/null +++ b/styles/components/core/type.less @@ -0,0 +1,303 @@ +// +// Typography +// -------------------------------------------------- + + +// Headings +// ------------------------- + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + font-family: @headings-font-family; + font-weight: @headings-font-weight; + line-height: @headings-line-height; + color: @headings-color; + + small, + .small { + font-weight: normal; + line-height: 1; + color: @headings-small-color; + } +} + +h1, .h1, +h2, .h2, +h3, .h3 { + margin-top: @line-height-computed; + margin-bottom: (@line-height-computed / 2); + + small, + .small { + font-size: 65%; + } +} +h4, .h4, +h5, .h5, +h6, .h6 { + margin-top: (@line-height-computed / 2); + margin-bottom: (@line-height-computed / 2); + + small, + .small { + font-size: 75%; + } +} + +h1, .h1 { font-size: @font-size-h1; } +h2, .h2 { font-size: @font-size-h2; } +h3, .h3 { font-size: @font-size-h3; } +h4, .h4 { font-size: @font-size-h4; } +h5, .h5 { font-size: @font-size-h5; } +h6, .h6 { font-size: @font-size-h6; } + + +// Body text +// ------------------------- + +p { + margin: 0 0 (@line-height-computed / 2); +} + +.lead { + margin-bottom: @line-height-computed; + font-size: floor((@font-size-base * 1.15)); + font-weight: 200; + line-height: 1.4; + + @media (min-width: @screen-sm-min) { + font-size: (@font-size-base * 1.5); + } +} + + +// Emphasis & misc +// ------------------------- + +// Ex: 14px base font * 85% = about 12px +small, +.small { font-size: 85%; } + +// Undo browser default styling +cite { font-style: normal; } + +mark, +.mark { + background-color: @state-warning-bg; + padding: .2em; +} + +// Alignment +.text-left { text-align: left; } +.text-right { text-align: right; } +.text-center { text-align: center; } +.text-justify { text-align: justify; } + +// Contextual colors +.text-muted { + color: @text-muted; +} +.text-primary { + .text-emphasis-variant(@brand-primary); +} +.text-success { + .text-emphasis-variant(@state-success-text); +} +.text-info { + .text-emphasis-variant(@state-info-text); +} +.text-warning { + .text-emphasis-variant(@state-warning-text); +} +.text-danger { + .text-emphasis-variant(@state-danger-text); +} + +// Contextual backgrounds +// For now we'll leave these alongside the text classes until v4 when we can +// safely shift things around (per SemVer rules). +.bg-primary { + // Given the contrast here, this is the only class to have its color inverted + // automatically. + color: #fff; + .bg-variant(@brand-primary); +} +.bg-success { + .bg-variant(@state-success-bg); +} +.bg-info { + .bg-variant(@state-info-bg); +} +.bg-warning { + .bg-variant(@state-warning-bg); +} +.bg-danger { + .bg-variant(@state-danger-bg); +} + + +// Page header +// ------------------------- + +.page-header { + padding-bottom: ((@line-height-computed / 2) - 1); + margin: (@line-height-computed * 2) 0 @line-height-computed; + border-bottom: 1px solid @page-header-border-color; +} + + +// Lists +// ------------------------- + +// Unordered and Ordered lists +ul, +ol { + margin-top: 0; + margin-bottom: (@line-height-computed / 2); + ul, + ol { + margin-bottom: 0; + } +} + +// List options + +// Unstyled keeps list items block level, just removes default browser padding and list-style +.list-unstyled { + padding-left: 0; + list-style: none; +} + +// Inline turns list items into inline-block +.list-inline { + .list-unstyled(); + margin-left: -5px; + + > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; + } +} + +// Description Lists +dl { + margin-top: 0; // Remove browser default + margin-bottom: @line-height-computed; +} +dt, +dd { + line-height: @line-height-base; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; // Undo browser default +} + +// Horizontal description lists +// +// Defaults to being stacked without any of the below styles applied, until the +// grid breakpoint is reached (default of ~768px). + +.dl-horizontal { + dd { + &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present + } + + @media (min-width: @grid-float-breakpoint) { + dt { + float: left; + width: (@component-offset-horizontal - 20); + clear: left; + text-align: right; + .text-overflow(); + } + dd { + margin-left: @component-offset-horizontal; + } + } +} + + +// Misc +// ------------------------- + +// Abbreviations and acronyms +abbr[title], +// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257 +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted @abbr-border-color; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +// Blockquotes +blockquote { + padding: (@line-height-computed / 2) @line-height-computed; + margin: 0 0 @line-height-computed; + font-size: @blockquote-font-size; + border-left: 5px solid @blockquote-border-color; + + p, + ul, + ol { + &:last-child { + margin-bottom: 0; + } + } + + // Note: Deprecated small and .small as of v3.1.0 + // Context: https://github.com/twbs/bootstrap/issues/11660 + footer, + small, + .small { + display: block; + font-size: 80%; // back to default font-size + line-height: @line-height-base; + color: @blockquote-small-color; + + &:before { + content: '\2014 \00A0'; // em dash, nbsp + } + } +} + +// Opposite alignment of blockquote +// +// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0. +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid @blockquote-border-color; + border-left: 0; + text-align: right; + + // Account for citation + footer, + small, + .small { + &:before { content: ''; } + &:after { + content: '\00A0 \2014'; // nbsp, em dash + } + } +} + +// Quotes +blockquote:before, +blockquote:after { + content: ""; +} + +// Addresses +address { + margin-bottom: @line-height-computed; + font-style: normal; + line-height: @line-height-base; +} diff --git a/src/less/bootstrap/wells.less b/styles/components/core/wells.less similarity index 87% rename from src/less/bootstrap/wells.less rename to styles/components/core/wells.less index 6a909f4..15d072b 100644 --- a/src/less/bootstrap/wells.less +++ b/styles/components/core/wells.less @@ -9,7 +9,7 @@ padding: 19px; margin-bottom: 20px; background-color: @well-bg; - border: 1px solid darken(@well-bg, 7%); + border: 1px solid @well-border; border-radius: @border-radius-base; .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); blockquote { @@ -19,11 +19,11 @@ } // Sizes -.well-large { +.well-lg { padding: 24px; border-radius: @border-radius-large; } -.well-small { +.well-sm { padding: 9px; border-radius: @border-radius-small; } diff --git a/styles/components/dismiss.less b/styles/components/dismiss.less new file mode 100644 index 0000000..0f33ceb --- /dev/null +++ b/styles/components/dismiss.less @@ -0,0 +1,41 @@ +// +// Dismiss icons +// -------------------------------------------------- + + +.dismiss { + font-size: (@font-size-large * 1.5); + font-weight: @dismiss-font-weight; + line-height: 1; + color: @dismiss-color; + text-shadow: @dismiss-text-shadow; + .opacity(.2); + + &:hover, + &:focus { + color: @dismiss-color; + text-decoration: none; + cursor: pointer; + outline: none; + .opacity(.5); + } + + // Additional properties for button version + // iOS requires the button element instead of an anchor tag. + // If you want the anchor version, it requires `href="#"`. + button& { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + } +} + + +// Size modifier classes +// -------------------------------------------------- + +.dismiss-large { + font-size: @font-size-h1; +} \ No newline at end of file diff --git a/styles/components/dropdown-inverse.less b/styles/components/dropdown-inverse.less new file mode 100644 index 0000000..93a577e --- /dev/null +++ b/styles/components/dropdown-inverse.less @@ -0,0 +1,94 @@ +// +// Dropdown menus +// -------------------------------------------------- + +// Variables +// --------------------------------------- + +@dropdown-inverse-font-size: 13px; +@dropdown-inverse-font-family: @font-family-sans-serif; +@dropdown-inverse-min-width: 240px; +@dropdown-inverse-bg: #333; +@dropdown-inverse-border: transparent; +@dropdown-inverse-link-color: lighten(@dropdown-inverse-bg, 65%); +@dropdown-inverse-link-hover-color: #fff; +@dropdown-inverse-link-hover-bg: rgba(255,255,255,.05); +@dropdown-inverse-link-active-color: @dropdown-inverse-link-hover-color; +@dropdown-inverse-link-active-bg: @dropdown-inverse-link-hover-bg; +@dropdown-inverse-link-disabled-color: lighten(@dropdown-inverse-bg, 5%); +@dropdown-inverse-header-color: @dropdown-inverse-link-color; + + +// The dropdown menu (ul) +.dropdown-inverse { + &:extend(.dropdown-menu all); + + left: -2px; + font-family: @dropdown-inverse-font-family; + font-size: @dropdown-inverse-font-size; + padding: 8px 0 12px; // a bit more space looks better on inverse dropdowns + min-width: @dropdown-inverse-min-width; + background-color: @dropdown-inverse-bg; + border: 1px solid @dropdown-inverse-border; + border-radius: 7px; + + .no-select(); + -webkit-overflow-scrolling: touch !important; + .box-shadow(4px 6px 10px rgba(0,0,0,.175)); + + // Links within the dropdown menu + > li > a { + color: @dropdown-inverse-link-color; + text-shadow: 0 -1px 0 rgba(0,0,0,.1); + + padding: 6px 20px; + + .transition-property(color); + .transition-duration(.1s); + .transition-timing-function(ease-out); + + &:hover, &:focus { + text-shadow: 0 -1px 0 rgba(0,0,0,.1); + color: @dropdown-inverse-link-hover-color; + background-color: @dropdown-inverse-link-hover-bg; + } + } + + // Dividers + .divider { + background-color: rgba(255,255,255,.05); + } + + + // Active state + > .active > a { + &, &:hover, &:focus { + text-shadow: 0 -1px 0 rgba(0,0,0,.1); + color: @dropdown-inverse-link-active-color; + background-color: @dropdown-inverse-link-active-bg; + } + } + + // Disabled state + > .disabled > a { + &, &:hover, &:focus { + color: @dropdown-inverse-link-disabled-color; + } + } + + // Nuke hover/focus effects + > .disabled > a { + &:hover, &:focus { + background-color: transparent; + background-image: none; // Remove CSS gradient + .reset-filter(); + } + } + + // Dropdown section headers + .dropdown-header { + color: @dropdown-inverse-header-color; + } +} + + diff --git a/styles/components/fonts.less b/styles/components/fonts.less new file mode 100644 index 0000000..62cfdee --- /dev/null +++ b/styles/components/fonts.less @@ -0,0 +1,9 @@ + +.font-face(@font-family: 'Open Sans'; @font-name: 'bar'; @font-style: normal; @font-weight: 300;) { + @font-face { + font-family: @font-family; + src: ~"url('@{font-path}/@{font-name}.ttf') format('truetype')"; + font-style: @font-style; + font-weight: @font-weight; + } +} \ No newline at end of file diff --git a/styles/components/footer.less b/styles/components/footer.less new file mode 100644 index 0000000..2f65a2f --- /dev/null +++ b/styles/components/footer.less @@ -0,0 +1,48 @@ +// +// Footer +// -------------------------------------------------- +// Separated section of content at the bottom of all +// pages, save the homepage. + + +// Variables +@footer-text-color: #777; +@footer-border-color: #e5e5e5; + + + +// Base +.footer { + background: #fff; + padding-top: 40px; + padding-bottom: 30px; + margin-top: 100px; + color: @footer-text-color; + text-align: center; + border-top: 1px solid @footer-border-color; +} + + +// Components +.footer-links { + margin: 10px 0; + padding-left: 0; +} +.footer-links li { + display: inline; + padding: 0 2px; +} +.footer-links li:first-child { + padding-left: 0; +} + + +// Responsive +@media (min-width: 768px) { + .footer { + text-align: left; + } + .footer p { + margin-bottom: 0; + } +} \ No newline at end of file diff --git a/styles/components/form-signin.less b/styles/components/form-signin.less new file mode 100644 index 0000000..8559742 --- /dev/null +++ b/styles/components/form-signin.less @@ -0,0 +1,50 @@ +// +// Signin +// ------------------------------------------------------- + +body { + padding-top: 40px; + padding-bottom: 40px; + background-color: #eee; +} + +.form-signin { + max-width: 330px; + padding: 15px; + margin: 30px auto; + + .form-signin-heading, + .checkbox { + margin-bottom: 10px; + } + .checkbox { + font-weight: normal; + } + + // Override Bootstrap defaults + .checkbox input[type="checkbox"] { + margin-left: 0; + margin-right: 5px; + } + + .form-control { + position: relative; + height: auto; + .box-sizing(border-box); + padding: 10px; + font-size: 16px; + } + .form-control:focus { + z-index: 2; + } + + input[type="email"] { + margin-bottom: -1px; + .border-bottom-radius(0); + } + input[type="password"] { + margin-bottom: 10px; + .border-top-radius(0); + } + +} diff --git a/styles/components/header.less b/styles/components/header.less new file mode 100644 index 0000000..e6f8376 --- /dev/null +++ b/styles/components/header.less @@ -0,0 +1,47 @@ +// +// Subhead +// -------------------------------------------------- + + + +.docs-header, +.docs-home { + color: @navbar-inverse-link-color; + background-color: @navbar-inverse-bg; +} + +/* Page headers */ +.docs-header { + padding: 30px 15px 50px; /* side padding builds on .container 15px, so 30px */ + font-size: 16px; + text-align: center; + text-shadow: 0 1px 0 rgba(0,0,0,.15); +} +.docs-header h1 { + color: #fff; +} +.docs-header p { + font-weight: 300; + line-height: 1.5; +} +.docs-header .container { + position: relative; +} + +@media (min-width: 768px) { + .docs-header { + font-size: 21px; + text-align: left; + } + .docs-header h1 { + font-size: 60px; + line-height: 1; + } +} + +@media (min-width: 992px) { + .docs-header h1, + .docs-header p { + margin-right: 380px; + } +} diff --git a/styles/components/highlight.less b/styles/components/highlight.less new file mode 100644 index 0000000..97d08ae --- /dev/null +++ b/styles/components/highlight.less @@ -0,0 +1,193 @@ +// +// Syntax Highlighting for highlight.js +// ---------------------------------------------------------- +// github.com style (c) Vasily Polovnyov + + + +// Langauge Variables +// -------------------------------------------------- + +@grayish: #998; +@grayer: #aaa; + +// Base variables +@example-bg: #f8f8ff; +@code-color: #af4b08; // rust coor + + +// Language + +// Grays +@language-doctype: @gray-light; +@language-handlebars: #8d880f; +@language-comment: @grayish; +@language-chunk: @grayer; + +// Blues +@language-command: #458; // denim blue +@language-keyword: #000080; // saturated blue + +// Greens +@language-regexp: #009926; // green +@language-variable: #008080; // dark greenish +@language-constant: #099; // sea green +@language-addition: #dfd; // pale green + +// Reds/pinks +@language-deletion: #fdd; // pink +@language-formula: #d14; // dark pink +@language-preprocessor: #900; // dark red +@language-prompt: #990073; // fuschia + +// Background colors +@language-diff-bg: #0086b3; // fuschia + + + +pre code { + display: block; padding: 0.5em; + color: @gray-dark; + background: @example-bg; +} + +.xml { + color: @gray-dark; +} + + +.language-comment, +.language-template_comment, +.diff .language-header, +.language-javadoc { + color: @language-comment; + font-style: italic; +} + +.language-keyword, +.language-css .language-rule .language-keyword, +.language-javascript .language-title, +.language-subst, +.language-request, +.language-status { + color: @gray-dark; + font-weight: bold +} + +.language-number, +.language-hexcolor, +.ruby .language-constant { + color: @language-constant; +} + +.language-string, +.language-tag .language-value, +.language-phpdoc, +.tex .language-formula { + color: @language-formula; +} + +.language-title, +.language-id, +.coffeescript .language-params, +.scss .language-preprocessor { + color: @language-preprocessor; + font-weight: bold; +} + +.javascript .language-title, +.lisp .language-title, +.clojure .language-title, +.language-subst { + font-weight: normal; +} + +.language-class .language-title, +.haskell .language-type, +.vhdl .language-literal, +.tex .language-command { + color: @language-command; + font-weight: bold; +} + +.language-tag, +.language-tag .language-title, +.language-rules .language-property, +.django .language-tag .language-keyword { + color: @language-keyword; + font-weight: normal; +} + +.language-attribute, +.language-variable, +.lisp .language-body { + color: @language-variable; +} + +.language-regexp { + color: @language-regexp; +} + +.language-symbol, +.ruby .language-symbol .language-string, +.lisp .language-keyword, +.tex .language-special, +.language-prompt { + color: @language-prompt; +} + +.language-built_in, +.lisp .language-title, +.clojure .language-built_in { + color: @language-diff-bg; +} + +.language-preprocessor, +.language-pragma, +.language-pi, +.language-doctype, +.language-shebang, +.language-cdata { + color: @language-doctype; + font-weight: bold; +} + +.language-deletion { + background: @language-deletion; +} + +.language-addition { + background: @language-addition; +} + +.diff .language-change { + background: @language-diff-bg; +} + +.language-chunk { + color: @language-chunk; +} + + +// Overrides +// -------------------------------------------------- +// Increase specificity to override defaults + +.book pre code { + &.lang-js { + color: #000; + } + + &.lang-handlebars { + color: @language-handlebars; + .language-variable { + color: #299cb3; + } + } + + &.lang-html { + .language-comment { + margin-top: 10px; + } + } +} diff --git a/styles/components/main-nav.less b/styles/components/main-nav.less new file mode 100644 index 0000000..6c7fa62 --- /dev/null +++ b/styles/components/main-nav.less @@ -0,0 +1,60 @@ +// +// Main navigation +// -------------------------------------------------- + + + + +.main-nav { + font-family: @font-family-assemble; + margin-bottom: 0; + background-color: #fff; + border-bottom: 0; + + .navbar-nav > li > a:hover, + .navbar-nav > .active > a, + .navbar-nav > .active > a:hover { + color: @gray; + background-color: #f9f9f9; + } + .navbar-toggle .icon-bar { + background-color: @text-color; + } + + // Toggle + .navbar-toggle { + border-color: #fff; + } + + .navbar-toggle:hover, + .navbar-toggle:focus { + background-color: #f9f9f9; + border-color: #f9f9f9; + } + + // Brand + .navbar-brand { + color: #111; + font-weight: 700; + font-size: 21px; + letter-spacing: 5px; + padding-left: 20px; + padding-top: 31px; + text-transform: uppercase; + } + + // Links + .navbar-nav > li > a { + padding-top: 30px; + padding-bottom: 30px; + color: #777; + line-height: 20px; + } +} + + +// Increase specificity on box-shadow. We only +// want this applied on the main-nav. +.navbar.main-nav { + .box-shadow(0 1px 7px rgba(0,0,0,.2)); +} \ No newline at end of file diff --git a/src/less/components/masthead.less b/styles/components/masthead.less similarity index 78% rename from src/less/components/masthead.less rename to styles/components/masthead.less index a53b1e0..fae6ad5 100644 --- a/src/less/components/masthead.less +++ b/styles/components/masthead.less @@ -1,28 +1,30 @@ // -// Jumbotrons +// Masthead // -------------------------------------------------- + +// Variables + // Masthead -@masthead-bg: @gray-darkest; // @brand-primary; +@masthead-text-color: #fff; +@masthead-bg: @gray-darkest; // @brand-primary; // Subhead -@masthead-color-muted: #666; // lighten(@brand-primary, 20%); +@masthead-color-muted: @gray-medium; +// Jumbotrons +// -------------------------------------------------- .jumbotron { margin-bottom: 0; - h1 { - font-size: 140px; - } + .lead { color: @masthead-color-muted; // #acb3b5; font-size: 18px; line-height: 1.5em; margin: 20px 0 30px; padding: 0; - text-align: left; - width: 88%; } .lead + .lead { margin-top: -25px; @@ -35,10 +37,6 @@ } } - -// Masthead (docs hom -// ------------------------- - .masthead { padding: (70px + @navbar-height) 0 80px; margin-top: -(@navbar-height); @@ -53,6 +51,7 @@ } // Heading h1 { + font-family: @headings-font-family; font-size: 42px; font-weight: normal; line-height: 1; @@ -61,8 +60,6 @@ } } - - // Textual links in masthead .masthead-links { &:extend(.bs-docs-jumbotron a); @@ -104,12 +101,29 @@ font-weight: 300; } -// Large subhead +/*// Large subhead .subhead-large { padding: 120px 0 60px; h1 { font-size: 60px; } } +*/ + +@media (min-width: 768px) { + .jumbotron { + .lead { + margin: 20px 0 30px; + text-align: left; + width: 88%; + } + } - + // Large subhead + .subhead-large { + padding: 120px 0 60px; + h1 { + font-size: 60px; + } + } +} \ No newline at end of file diff --git a/styles/components/navbar-content.less b/styles/components/navbar-content.less new file mode 100644 index 0000000..44943bf --- /dev/null +++ b/styles/components/navbar-content.less @@ -0,0 +1,233 @@ +// +// Content Navbar +// --------------------------------------------- + +.navbar-content { + &:extend(.clearfix all, .navbar-default all); + + margin: 0 -(@content-gutter); + min-height: 60px; + + background-color: #f7f8f8; + border-color: #e7e7e7; + box-shadow: 0 -1px @gray-lighter; + + // Remove bottom-left radius on dropdown menus + // inside the content navbar + .dropdown-menu { + border-bottom-left-radius: 0; + } + + .navbar-nav { + float: none; + margin: 0; + + @media (max-width: @grid-float-breakpoint-max) { + // Override Bootstrap's responsive styling + .open .dropdown-menu { + position: absolute; + float: left; + width: auto; + min-width: @dropdown-inverse-min-width; + background-color: @dropdown-inverse-bg; + border: 1px solid @dropdown-inverse-border; + .box-shadow(0 6px 12px rgba(0,0,0,.175)); + background-clip: padding-box; + + > li > a { + &:hover, &:focus { + text-shadow: none; + color: @dropdown-inverse-link-hover-color; + background-color: @dropdown-inverse-link-hover-bg; + } + } + } + } + } + + .navbar-nav > li > a { + padding: 20px 15px; + } + .nav > li { + display: inline-block; + } + + // Ensure that toggle always shows, + // and remove border to make it blend in. + .dropdown-toggle .navbar-toggle { + float: none; + display: inline-block; + background-image: none; + + top: 3px; + padding-bottom: 0; + padding-top: 0; + margin: 0; + + border: none; + + .icon-bar { + background-color: @gray-dark; + } + + &:hover, &:focus, &:active { + background-color: transparent; + &, + &.open { + .icon-bar { + background-color: #000; + } + } + } + } +} + +// Affix +.navbar-content.affix { + position: static; +} + + +// Forms +// -------------------------------------------- + + +// Increase specificity to override Bootstrap styles. +.navbar-content { + .navbar-form { + margin: 13px 0 0; + + &.navbar-right:last-child { + width: 100%; + margin-right: 0; + } + + // Make the search field span most of the width of the content area + .form-group { + &, .form-control { + width: 100%; + } + } + } + + + // Search form inside dismissable navbar + // -------------------------------------------- + // Expand the right padding and account for the + // close button's positioning. + + .navbar-form { + position: relative; + padding-right: 0; + } + + // Adjust vertical and horizontal possitioning of dismiss icon + .dismiss-large { + margin-left: -5px; + line-height: 1.6; // vertically center the icon + } + + + @media (max-width: @screen-sm-min) { + // Make the navbar background white on small screens. + // It blends with the body bg better. + background-color: #fff; + + .navbar-form { + padding: 0; + border: 0; + } + + // Adjust columns in navbar, to accommodate + // dropdown and dismiss icon in side columns + .col-xs-10 { + width: 76%; + } + .col-xs-1 { + width: 12%; + } + + .dismiss-large { + margin-left: 0; + } + } + + @media (max-width: @screen-sm-min) { + .col-xs-10 { + width: 68%; + } + .col-xs-1 { + width: 16%; + } + } + +} + + + +// Show and affix the side nav when space allows it +@media (min-width: 992px) { + .navbar-content .nav > .active > ul { + display: block; + } + + .navbar-content.affix, + .navbar-content.affix-bottom { + width: 100%; + } + .navbar-content.affix { + position: fixed; // Undo the static from mobile first approach + top: 80px; + } + .navbar-content.affix-bottom { + position: absolute; // Undo the static from mobile first approach + } + .navbar-content.affix-bottom .sidenav, + .navbar-content.affix .sidenav { + margin-top: 0; + margin-bottom: 0; + } +} +@media (min-width: 1200px) { + // Widen the fixed navbar-content again + .navbar-content.affix-bottom, + .navbar-content.affix { + width: 100%; + } +} + + + +// +// Themes for content navbar +// --------------------------------------------- + +@navbar-bg-light-blue: #eaf7fc; // temp + +.navbar-content-light { + background-color: @navbar-bg-light-blue; + + .navbar-nav > .active > a, + .navbar-nav > .active > a:hover, + .navbar-nav > .active > a:focus { + color: @gray; + background-color: #cceaf7; + } +} + +.navbar-content-slate { + background-color: #585858; + + .navbar-nav > .active > a, + .navbar-nav > .active > a:hover, + .navbar-nav > .active > a:focus { + color: @gray; + background-color: #95cee7; + } + .navbar-brand { + color: #888; + } + .navbar-nav > li > a { + color: @gray-light; + } +} diff --git a/styles/components/paginate.less b/styles/components/paginate.less new file mode 100644 index 0000000..2ed58e6 --- /dev/null +++ b/styles/components/paginate.less @@ -0,0 +1,29 @@ +// +// Paginate +// --------------------------------------------- +// top and bottom book-style pagination + +.paginate { + position: relative; + display: block; + text-align: center; + background-color: #fff; + padding: 15px 0; + margin: 0 -15px 30px; + .box-shadow(0 1px 3px rgba(0,0,0,.2)); + + &:hover { + text-decoration: none; + } + + // Make icons centered in pagination + .glyphicon { + display: block; + } +} + +.paginate-next { + margin: 30px -15px -100px; + .box-shadow(~'inset 0px -3px 4px 0px rgba(0,0,0,.1), 0 -1px 2px rgba(0,0,0,.1)'); +} + diff --git a/styles/components/sidebar.less b/styles/components/sidebar.less new file mode 100644 index 0000000..9a34942 --- /dev/null +++ b/styles/components/sidebar.less @@ -0,0 +1,154 @@ +// +// Side navigation +// -------------------------------------------------- +// Scrollspy and affixed-enhanced navigation, +// to highlight sections and secondary +// sections of docs content. + + +// Hide the sidenav on smaller screens +.sidebar { + display: none; +} + +// By default it's not affixed in +// mobile views, so undo that +.sidebar.affix { + position: static; +} + +// First level of nav +.sidenav { + font-family: @font-family-sans-serif; + text-shadow: 0 1px 0 rgba(255,255,255,.25); + + margin-top: 70px; + margin-bottom: 30px; + padding-top: 10px; + padding-bottom: 10px; +} + +// All levels of nav +.sidebar { + .nav > li > a { + display: block; + color: @gray-darker; + padding: 5px 20px; + /*padding: 5px 40px 5px 20px; + margin-right: -20px;*/ + } + .nav > li > a:hover, + .nav > li > a:focus { + text-decoration: none; + background-color: @gray-lighter; + border-right: 1px solid rgba(0,0,0,.1); + } + .nav > .active > a, + .nav > .active:hover > a, + .nav > .active:focus > a { + font-weight: bold; + color: @gray-darker; + background-color: @gray-lightest; + border-right: 1px solid rgba(0,0,0,.2); + } +} + + +// Nav: second (nested) level (shown on .active) +.sidebar .nav .nav { + display: none; // Hide by default, show when > 768px + margin-bottom: 8px; + + > li > a { + padding: 3px 30px; + font-size: 90%; + } +} + +// Icons +.sidebar .glyphicon { + font-size: 12px; + margin-left: 10px +} + + +// Show and affix the side nav when space allows it +@media (min-width: 992px) { + // Show the sidenav on larger screens + .sidebar { + display: block; + padding-top: 15px; + } + + .sidebar .nav > .active > ul { + display: block; + } + // Widen the fixed sidebar + .sidebar.affix, + .sidebar.affix-bottom { + width: 213px; + } + .sidebar.affix { + position: fixed; // Undo the static from mobile first approach + top: 60px; + } + .sidebar.affix-bottom { + position: absolute; // Undo the static from mobile first approach + } + .sidebar.affix .sidenav, + .sidebar.affix-bottom .sidenav { + margin-top: 10px; + margin-bottom: 0; + } +} + + +@media (min-width: 1200px) { + + // Widen the fixed sidebar again + .sidebar.affix-bottom, + .sidebar.affix { + width: 263px; + } +} + + + +// +// Sidebar themes +// ------------------------------------------- + +// All levels of nav +/*.sidebar { + + .nav > li > a { + color: @gray-darker; + &:hover, + &:focus { + background-color: @gray-lighter; + border-right: 1px solid rgba(0,0,0,.1); + } + } + + .nav > .active { + > a, + &:hover > a, + &:focus > a { + color: @navbar-inverse-bg; + background-color: @gray-lightest; + border-right: 1px solid rgba(0,0,0,.2); + } + } +} + + + + +.sidebar .nav > .active > a, +.sidebar .nav > .active:hover > a, +.sidebar .nav > .active:focus > a { + font-weight: bold; + color: @navbar-inverse-bg; + background-color: rgba(51,181,229,.1); + border-right: 10px solid #33B5E5; +}*/ \ No newline at end of file diff --git a/styles/components/source-link.less b/styles/components/source-link.less new file mode 100644 index 0000000..6d0e6f8 --- /dev/null +++ b/styles/components/source-link.less @@ -0,0 +1,55 @@ +// +// Source Link +// -------------------------------------------------- +// Special styles for hyperlinked "edit" icon that +// takes the user to the source code for the current +// section. + +@source-link-width: 100px; + +h1, h2, h3 { + .source-link { + &:extend(.anchor all); + + // override anchor positioning + top: -5px; + right: -10px; + left: auto; + width: @source-link-width; + + color: @gray-lighter; + font-size: @font-size-large; + text-align: right; + + &.active, &:hover { + color: @link-color; + text-decoration: none; + } + } +} + + +// Special popover styles +// --------------------------------------------- + +.popover-source { + max-width: 60%; // prevent inner text from wrapping in source links + + // Specific styling for new-window icon in popovers + .glyphicon-new-window { + font-size: 12px; + padding-left: 6px; + } + + &.left { + margin-top: 2px; // tweak margin to align vertically + margin-left: 60px; + } + &, .glyphicon-new-window { + &, &:hover { + color: #849396; // medium gray-blue + } + } +} + + diff --git a/styles/components/stack.less b/styles/components/stack.less new file mode 100644 index 0000000..0fcde00 --- /dev/null +++ b/styles/components/stack.less @@ -0,0 +1,30 @@ + +.stacked { + padding-bottom: 10px; +} +.stacked:after, +.stacked:before { + content: ''; + visibility: visible; + + position: absolute; + bottom: -3px; + left: 0%; + + width: 100%; + height: 6px; + + border-top: 1px solid rgba(0,0,0,.1); +} +.stacked:before { + bottom: 0px; +} + + +.adjust-stack:before { + bottom: -10px; +} +.adjust-stack:after { + bottom: -11px; + height: 4px; +} \ No newline at end of file diff --git a/styles/components/swatch.less b/styles/components/swatch.less new file mode 100644 index 0000000..330cbc8 --- /dev/null +++ b/styles/components/swatch.less @@ -0,0 +1,114 @@ +// +// Color swatches +// ----------------------------------------------------------- +// Color swatches and associated values for our grayscale and +// brand colors. + + +.color-swatches { + margin: 0 -5px; + overflow: hidden; /* clearfix */ +} +.color-swatch { + float: left; + width: 60px; + height: 60px; + margin: 0 5px; + border-radius: 3px; +} + +@media (min-width: 768px) { + .color-swatch { + width: 100px; + height: 100px; + } +} + +/* Framework colors */ +.color-swatches .gray-darker { + background-color: #222; +} +.color-swatches .gray-dark { + background-color: #333; +} +.color-swatches .gray { + background-color: #555; +} +.color-swatches .gray-light { + background-color: #999; +} +.color-swatches .gray-lighter { + background-color: #eee; +} +.color-swatches .brand-primary { + background-color: #428bca; +} +.color-swatches .brand-success { + background-color: #5cb85c; +} +.color-swatches .brand-warning { + background-color: #f0ad4e; +} +.color-swatches .brand-danger { + background-color: #d9534f; +} +.color-swatches .brand-info { + background-color: #5bc0de; +} + +/* Docs colors */ +.color-swatches .bs-purple { + background-color: #563d7c; +} +.color-swatches .bs-purple-light { + background-color: #c7bfd3; +} +.color-swatches .bs-purple-lighter { + background-color: #e5e1ea; +} +.color-swatches .bs-gray { + background-color: #f9f9f9; +} + +/* + * Color swatches + * + * Color swatches and associated values for our grayscale and brand colors. + */ + +.color-swatches { + margin: 0 -5px; + overflow: hidden; /* clearfix */ +} +.color-swatch { + float: left; + width: 60px; + height: 60px; + margin: 0 5px; + border-radius: 3px; +} + +@media (min-width: 768px) { + .color-swatch { + width: 100px; + height: 100px; + } +} + +/* Framework colors */ +.color-swatches .gray-darker { background-color: #222; } +.color-swatches .gray-dark { background-color: #333; } +.color-swatches .gray { background-color: #555; } +.color-swatches .gray-light { background-color: #999; } +.color-swatches .gray-lighter { background-color: #eee; } +.color-swatches .brand-primary { background-color: #428bca; } +.color-swatches .brand-success { background-color: #5cb85c; } +.color-swatches .brand-warning { background-color: #f0ad4e; } +.color-swatches .brand-danger { background-color: #d9534f; } +.color-swatches .brand-info { background-color: #5bc0de; } + +/* Docs colors */ +.color-swatches .bs-purple { background-color: @text-color; } +.color-swatches .bs-purple-light { background-color: #c7bfd3; } +.color-swatches .bs-purple-lighter { background-color: #e5e1ea; } +.color-swatches .bs-gray { background-color: #f9f9f9; } diff --git a/styles/components/team.less b/styles/components/team.less new file mode 100644 index 0000000..390c6f1 --- /dev/null +++ b/styles/components/team.less @@ -0,0 +1,25 @@ +// +// Team members +// ------------------------------------------------------- + + +.team .team-member { + color: #555; + line-height: 32px; +} +.team .team-member:hover { + color: #333; + text-decoration: none; +} +.team .github-btn { + float: right; + margin-top: 6px; + width: 185px; + height: 20px; +} +.team img { + float: left; + width: 32px; + margin-right: 10px; + border-radius: 4px; +} \ No newline at end of file diff --git a/src/less/components/teaser.less b/styles/components/teaser.less similarity index 95% rename from src/less/components/teaser.less rename to styles/components/teaser.less index 249d4a8..53e0c3d 100644 --- a/src/less/components/teaser.less +++ b/styles/components/teaser.less @@ -1,4 +1,4 @@ -// +// // Teaser // ----------------------------------------------------------- @@ -53,8 +53,7 @@ border-bottom: 1px @teaser-inverse-border-color; color: @teaser-inverse-text-color; p { - font-weight: 300; - font-family: "Open Sans", @font-family-sans-serif; + font-family: @headings-font-family; } } .teaser-large .teaser-content { diff --git a/styles/components/webfonts.less b/styles/components/webfonts.less new file mode 100644 index 0000000..583aaa9 --- /dev/null +++ b/styles/components/webfonts.less @@ -0,0 +1,27 @@ +@font-face { + font-family: "Assemble SSm A"; + font-style: normal; + font-weight: 400; + src: url(data:application/x-font-woff;base64,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); +} + +@font-face { + font-family: "Assemble SSm A"; + font-style: normal; + font-weight: 700; + src: url(data:application/x-font-woff;base64,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); +} + +@font-face { + font-family: "Chronicle SSm A"; + font-style: normal; + font-weight: 400; + src: url(data:application/x-font-woff;base64,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); +} + +@font-face { + font-family: "Chronicle SSm A"; + font-style: italic; + font-weight: 400; + src: url(data:application/x-font-woff;base64,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); +} diff --git a/styles/docs.less b/styles/docs.less new file mode 100644 index 0000000..9236051 --- /dev/null +++ b/styles/docs.less @@ -0,0 +1,1248 @@ +/*csslint ids: false, overqualified-elements: false, fallback-colors: false*/ + +/*! + * Bootstrap Docs (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see http://creativecommons.org/licenses/by/3.0/. + */ + + +/* + * Bootstrap Documentation + * Special styles for presenting Bootstrap's documentation and code examples. + * + * Table of contents: + * + * Scaffolding + * Main navigation + * Footer + * Social buttons + * Homepage + * Page headers + * Old docs callout + * Ads + * Side navigation + * Docs sections + * Callouts + * Grid styles + * Examples + * Code snippets (highlight) + * Responsive tests + * Glyphicons + * Customizer + * Miscellaneous + */ + +/* Home page code, putting here for development */ +@import 'module/page-home'; + +/* + * Scaffolding + * + * Update the basics of our documents to prep for docs content. + */ + +body { + position: relative; /* For scrollspy */ +} + +/* Keep code small in tables on account of limited space */ +.table code { + font-size: 13px; + font-weight: normal; +} + +/* Outline button for use within the docs */ +.btn-outline { + color: @text-color; + background-color: transparent; + border-color: @text-color; +} +.btn-outline:hover, +.btn-outline:focus, +.btn-outline:active { + color: #fff; + background-color: @text-color; + border-color: @text-color; +} + +/* Inverted outline button (white on dark) */ +.btn-outline-inverse { + color: #fff; + background-color: transparent; + border-color: @gray; +} +.btn-outline-inverse:hover, +.btn-outline-inverse:focus, +.btn-outline-inverse:active { + color: @text-color; + text-shadow: none; + background-color: #fff; + border-color: #fff; +} + +/* Bootstrap "B" icon */ +.bs-docs-booticon { + display: block; + font-weight: 500; + color: #fff; + text-align: center; + cursor: default; + background-color: @text-color; + border-radius: 15%; +} +.bs-docs-booticon-sm { + width: 30px; + height: 30px; + font-size: 20px; + line-height: 28px; +} +.bs-docs-booticon-lg { + width: 144px; + height: 144px; + font-size: 108px; + line-height: 140px; +} +.bs-docs-booticon-inverse { + color: @text-color; + background-color: #fff; +} +.bs-docs-booticon-outline { + background-color: transparent; + border: 1px solid @gray; +} + + + +/* + * Footer + * + * Separated section of content at the bottom of all pages, save the homepage. + */ + +.bs-docs-footer { + padding-top: 40px; + padding-bottom: 40px; + margin-top: 100px; + color: #777; + text-align: center; + border-top: 1px solid @gray-lighter; +} +.bs-docs-footer-links { + margin-top: 20px; + padding-left: 0; + color: #999; +} +.bs-docs-footer-links li { + display: inline; + padding: 0 2px; +} +.bs-docs-footer-links li:first-child { + padding-left: 0; +} + +@media (min-width: 768px) { + .bs-docs-footer p { + margin-bottom: 0; + } +} + + +/* + * Social buttons + * + * Twitter and GitHub social action buttons (for homepage and footer). + */ + +.bs-docs-social { + margin-bottom: 20px; + text-align: center; +} +.bs-docs-social-buttons { + display: inline-block; + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.bs-docs-social-buttons li { + display: inline-block; + line-height: 1; + padding: 5px 8px; +} +.bs-docs-social-buttons .twitter-follow-button { + width: 225px !important; +} +.bs-docs-social-buttons .twitter-share-button { + width: 98px !important; +} +/* Style the GitHub buttons via CSS instead of inline attributes */ +.github-btn { + border: 0; + overflow: hidden; +} + + +/* + * Homepage + * + * Tweaks to the custom homepage and the masthead (main jumbotron). + */ + +/* Share masthead with page headers */ +.bs-docs-masthead, +.masthead { + position: relative; + padding: 30px 15px; + color: @gray; + text-align: center; + text-shadow: 0 1px 0 rgba(0,0,0,.1); + background-color: @black; + background-image: -webkit-linear-gradient(top, @gray-darker 0%, @black 100%); + background-image: linear-gradient(to bottom, @gray-darker 0%, @black 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='@gray-darker', endColorstr='@black', GradientType=0); +} + + /* Masthead (headings and download button) */ +.bs-docs-masthead .bs-docs-booticon { + margin: 0 auto 30px; +} +.bs-docs-masthead h1 { + font-weight: 300; + line-height: 1; + color: #fff; +} +.bs-docs-masthead .lead { + margin: 0 auto 30px; + font-size: 20px; + color: #fff; +} +.bs-docs-masthead .version { + margin-top: -15px; + margin-bottom: 30px; + color: #1A9BCB; +} +.bs-docs-masthead .btn { + width: 100%; + padding: 15px 30px; + font-size: 20px; +} + +@media (min-width: 480px) { + .bs-docs-masthead .btn { + width: auto; + } +} + +@media (min-width: 768px) { + .bs-docs-masthead { + padding-top: 80px; + padding-bottom: 80px; + } + .bs-docs-masthead h1 { + font-size: 60px; + } + .bs-docs-masthead .lead { + font-size: 24px; + } +} + +@media (min-width: 992px) { + .bs-docs-masthead .lead { + width: 80%; + font-size: 30px; + } +} + + +/* + * Page headers + * + * Jumbotron-esque headers at the top of every page that's not the homepage. + */ + +/* Page headers */ +.masthead { + /*margin-bottom: 40px;*/ + font-size: 20px; +} +.masthead h1 { + margin-top: 0; + color: #fff; +} +.masthead p { + margin-bottom: 0; + font-weight: 300; + line-height: 1.4; +} +.masthead .container { + position: relative; +} + +@media (min-width: 768px) { + .masthead { + padding-top: 60px; + padding-bottom: 60px; + font-size: 24px; + text-align: left; + } + .masthead h1 { + font-size: 60px; + line-height: 1; + } +} + + + +/* + * Homepage featurettes + * + * Reasons to use Bootstrap, entries from the Expo, and more. + */ + +.bs-docs-featurette { + padding-top: 40px; + padding-bottom: 40px; + font-size: 16px; + line-height: 1.5; + color: #555; + text-align: center; + background-color: #fff; + border-bottom: 1px solid @gray-lighter; +} +.bs-docs-featurette + .bs-docs-footer { + margin-top: 0; + border-top: 0; +} + +.bs-docs-featurette-title { + font-size: 30px; + font-weight: normal; + color: #333; + margin-bottom: 5px; +} +.half-rule { + width: 100px; + margin: 40px auto; +} +.bs-docs-featurette h3 { + font-weight: normal; + color: #333; + margin-bottom: 5px; +} +.bs-docs-featurette-img { + display: block; + margin-bottom: 20px; + color: #333; +} +.bs-docs-featurette-img:hover { + text-decoration: none; + color: #428bca; +} +.bs-docs-featurette-img img { + display: block; + margin-bottom: 15px; +} + +/* Featured sites */ +.bs-docs-featured-sites { + margin-left: -1px; + margin-right: -1px; +} +.bs-docs-featured-sites .col-sm-3 { + padding-left: 1px; + padding-right: 1px; +} + +@media (min-width: 480px) { + .bs-docs-featurette .img-responsive { + margin-top: 30px; + } +} +@media (min-width: 768px) { + .bs-docs-featurette { + padding-top: 100px; + padding-bottom: 100px; + } + .bs-docs-featurette-title { + font-size: 40px; + } + .bs-docs-featurette .lead { + margin-left: auto; + margin-right: auto; + max-width: 80%; + } + .bs-docs-featured-sites .col-sm-3:first-child img { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + } + .bs-docs-featured-sites .col-sm-3:last-child img { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + } + + .bs-docs-featurette .img-responsive { + margin-top: 0; + } +} + + +/* + * Side navigation + * + * Scrollspy and affixed enhanced navigation to highlight sections and secondary + * sections of docs content. + */ + +/* By default it's not affixed in mobile views, so undo that */ +.bs-docs-sidebar.affix { + position: static; +} +@media (min-width: 768px) { + .bs-docs-sidebar { + padding-left: 20px; + } +} + +/* First level of nav */ +.bs-docs-sidenav { + margin-top: 20px; + margin-bottom: 20px; +} + +/* All levels of nav */ +.bs-docs-sidebar .nav > li > a { + display: block; + font-size: 13px; + font-weight: 500; + color: #999; + padding: 4px 20px; +} +.bs-docs-sidebar .nav > li > a:hover, +.bs-docs-sidebar .nav > li > a:focus { + padding-left: 19px; + color: @text-color; + text-decoration: none; + background-color: transparent; + border-left: 1px solid @text-color; +} +.bs-docs-sidebar .nav > .active > a, +.bs-docs-sidebar .nav > .active:hover > a, +.bs-docs-sidebar .nav > .active:focus > a { + padding-left: 18px; + font-weight: bold; + color: @text-color; + background-color: transparent; + border-left: 2px solid @text-color; +} + +/* Nav: second level (shown on .active) */ +.bs-docs-sidebar .nav .nav { + display: none; /* Hide by default, but at >768px, show it */ + padding-bottom: 10px; +} +.bs-docs-sidebar .nav .nav > li > a { + padding-top: 1px; + padding-bottom: 1px; + padding-left: 30px; + font-size: 12px; + font-weight: normal; +} +.bs-docs-sidebar .nav .nav > li > a:hover, +.bs-docs-sidebar .nav .nav > li > a:focus { + padding-left: 29px; +} +.bs-docs-sidebar .nav .nav > .active > a, +.bs-docs-sidebar .nav .nav > .active:hover > a, +.bs-docs-sidebar .nav .nav > .active:focus > a { + font-weight: 500; + padding-left: 28px; +} + +/* Back to top (hidden on mobile) */ +.back-to-top { + display: none; + margin-top: 10px; + margin-left: 10px; + padding: 4px 10px; + font-size: 12px; + font-weight: 500; + color: #999; +} +.back-to-top:hover { + text-decoration: none; + color: @text-color; +} + +@media (min-width: 768px) { + .back-to-top { + display: block; + } +} + +/* Show and affix the side nav when space allows it */ +@media (min-width: 992px) { + .bs-docs-sidebar .nav > .active > ul { + display: block; + } + /* Widen the fixed sidebar */ + .bs-docs-sidebar.affix, + .bs-docs-sidebar.affix-bottom { + width: 213px; + } + .bs-docs-sidebar.affix { + position: fixed; /* Undo the static from mobile first approach */ + top: 20px; + } + .bs-docs-sidebar.affix-bottom { + position: absolute; /* Undo the static from mobile first approach */ + } + .bs-docs-sidebar.affix-bottom .bs-docs-sidenav, + .bs-docs-sidebar.affix .bs-docs-sidenav { + margin-top: 0; + margin-bottom: 0; + } +} +@media (min-width: 1200px) { + /* Widen the fixed sidebar again */ + .bs-docs-sidebar.affix-bottom, + .bs-docs-sidebar.affix { + width: 263px; + } +} + + + + + +/* + * Callouts + * + * Not quite alerts, but custom and helpful notes for folks reading the docs. + * Requires a base and modifier class. + */ + +/* Common styles for all types */ +.bs-callout { + margin: 20px 0; + padding: 20px; + border-left: 3px solid #eee; +} +.bs-callout h4 { + margin-top: 0; + margin-bottom: 5px; +} +.bs-callout p:last-child { + margin-bottom: 0; +} +.bs-callout code { + background-color: #fff; + border-radius: 3px; +} + +/* Variations */ +.bs-callout-danger { + background-color: #fdf7f7; + border-color: #d9534f; +} +.bs-callout-danger h4 { + color: #d9534f; +} +.bs-callout-warning { + background-color: #fcf8f2; + border-color: #f0ad4e; +} +.bs-callout-warning h4 { + color: #f0ad4e; +} +.bs-callout-info { + background-color: #f4f8fa; + border-color: #5bc0de; +} +.bs-callout-info h4 { + color: #5bc0de; +} + + +/* + * Color swatches + * + * Color swatches and associated values for our grayscale and brand colors. + */ + +.color-swatches { + margin: 0 -5px; + overflow: hidden; /* clearfix */ +} +.color-swatch { + float: left; + width: 60px; + height: 60px; + margin: 0 5px; + border-radius: 3px; +} + +@media (min-width: 768px) { + .color-swatch { + width: 100px; + height: 100px; + } +} + +/* Framework colors */ +.color-swatches .gray-darker { background-color: #222; } +.color-swatches .gray-dark { background-color: #333; } +.color-swatches .gray { background-color: #555; } +.color-swatches .gray-light { background-color: #999; } +.color-swatches .gray-lighter { background-color: #eee; } +.color-swatches .brand-primary { background-color: #428bca; } +.color-swatches .brand-success { background-color: #5cb85c; } +.color-swatches .brand-warning { background-color: #f0ad4e; } +.color-swatches .brand-danger { background-color: #d9534f; } +.color-swatches .brand-info { background-color: #5bc0de; } + +/* Docs colors */ +.color-swatches .bs-purple { background-color: @text-color; } +.color-swatches .bs-purple-light { background-color: #c7bfd3; } +.color-swatches .bs-purple-lighter { background-color: #e5e1ea; } +.color-swatches .bs-gray { background-color: #f9f9f9; } + + +/* + * Team members + * + * Avatars, names, and usernames for core team. + */ + +.bs-team .team-member { + line-height: 32px; + color: #555; +} +.bs-team .team-member:hover { + color: #333; + text-decoration: none; +} +.bs-team .github-btn { + float: right; + width: 180px; + height: 20px; + margin-top: 6px; +} +.bs-team img { + float: left; + width: 32px; + margin-right: 10px; + border-radius: 4px; +} + + +/* + * Grid examples + * + * Highlight the grid columns within the docs so folks can see their padding, + * alignment, sizing, etc. + */ + +.show-grid { + margin-bottom: 15px; +} +.show-grid [class^="col-"] { + padding-top: 10px; + padding-bottom: 10px; + background-color: #eee; + background-color: rgba(86,61,124,.15); + border: 1px solid #ddd; + border: 1px solid rgba(86,61,124,.2); +} + + +/* + * Examples + * + * Isolated sections of example content for each component or feature. Usually + * followed by a code snippet. + */ + +.bs-example { + position: relative; + padding: 45px 15px 15px; + margin: 0 -15px 15px; + background-color: #fafafa; + box-shadow: inset 0 3px 6px rgba(0,0,0,.05); + border-color: @gray-lighter #eee #eee; + border-style: solid; + border-width: 1px 0; +} +/* Echo out a label for the example */ +.bs-example:after { + content: "Example"; + position: absolute; + top: 15px; + left: 15px; + font-size: 12px; + font-weight: bold; + color: #bbb; + text-transform: uppercase; + letter-spacing: 1px; +} + +/* Tweak display of the code snippets when following an example */ +.bs-example + .highlight { + margin: -15px -15px 15px; + border-radius: 0; + border-width: 0 0 1px; +} + +/* Make the examples and snippets not full-width */ +@media (min-width: 768px) { + .bs-example { + margin-left: 0; + margin-right: 0; + background-color: #fff; + border-width: 1px; + border-color: #ddd; + border-radius: 4px 4px 0 0; + box-shadow: none; + } + .bs-example + .highlight { + margin-top: -16px; + margin-left: 0; + margin-right: 0; + border-width: 1px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + } +} + +/* Undo width of container */ +.bs-example .container { + width: auto; +} + +/* Tweak content of examples for optimum awesome */ +.bs-example > p:last-child, +.bs-example > ul:last-child, +.bs-example > ol:last-child, +.bs-example > blockquote:last-child, +.bs-example > .form-control:last-child, +.bs-example > .table:last-child, +.bs-example > .navbar:last-child, +.bs-example > .jumbotron:last-child, +.bs-example > .alert:last-child, +.bs-example > .panel:last-child, +.bs-example > .list-group:last-child, +.bs-example > .well:last-child, +.bs-example > .progress:last-child, +.bs-example > .table-responsive:last-child > .table { + margin-bottom: 0; +} +.bs-example > p > .close { + float: none; +} + +/* Typography */ +.bs-example-type .table .type-info { + color: #999; + vertical-align: middle; +} +.bs-example-type .table td { + padding: 15px 0; + border-color: #eee; +} +.bs-example-type .table tr:first-child td { + border-top: 0; +} +.bs-example-type h1, +.bs-example-type h2, +.bs-example-type h3, +.bs-example-type h4, +.bs-example-type h5, +.bs-example-type h6 { + margin: 0; +} + +/* Contextual background colors */ +.bs-example-bg-classes p { + padding: 15px; +} + +/* Images */ +.bs-example > .img-circle, +.bs-example > .img-rounded, +.bs-example > .img-thumbnail { + margin: 5px; +} + +/* Tables */ +.bs-example > .table-responsive > .table { + background-color: #fff; +} + +/* Buttons */ +.bs-example > .btn, +.bs-example > .btn-group { + margin-top: 5px; + margin-bottom: 5px; +} +.bs-example > .btn-toolbar + .btn-toolbar { + margin-top: 10px; +} + +/* Forms */ +.bs-example-control-sizing select, +.bs-example-control-sizing input[type="text"] + input[type="text"] { + margin-top: 10px; +} +.bs-example-form .input-group { + margin-bottom: 10px; +} +.bs-example > textarea.form-control { + resize: vertical; +} + +/* List groups */ +.bs-example > .list-group { + max-width: 400px; +} + +/* Navbars */ +.bs-example .navbar:last-child { + margin-bottom: 0; +} +.bs-navbar-top-example, +.bs-navbar-bottom-example { + z-index: 1; + padding: 0; + overflow: hidden; /* cut the drop shadows off */ +} +.bs-navbar-top-example .navbar-header, +.bs-navbar-bottom-example .navbar-header { + margin-left: 0; +} +.bs-navbar-top-example .navbar-fixed-top, +.bs-navbar-bottom-example .navbar-fixed-bottom { + position: relative; + margin-right: 0; + margin-left: 0; +} +.bs-navbar-top-example { + padding-bottom: 45px; +} +.bs-navbar-top-example:after { + top: auto; + bottom: 15px; +} +.bs-navbar-top-example .navbar-fixed-top { + top: -1px; +} +.bs-navbar-bottom-example { + padding-top: 45px; +} +.bs-navbar-bottom-example .navbar-fixed-bottom { + bottom: -1px; +} +.bs-navbar-bottom-example .navbar { + margin-bottom: 0; +} +@media (min-width: 768px) { + .bs-navbar-top-example .navbar-fixed-top, + .bs-navbar-bottom-example .navbar-fixed-bottom { + position: absolute; + } + .bs-navbar-top-example { + border-radius: 0 0 4px 4px; + } + .bs-navbar-bottom-example { + border-radius: 4px 4px 0 0; + } +} + +/* Pagination */ +.bs-example .pagination { + margin-top: 10px; + margin-bottom: 10px; +} + +/* Pager */ +.bs-example > .pager { + margin-top: 0; +} + +/* Example modals */ +.bs-example-modal { + background-color: #f5f5f5; +} +.bs-example-modal .modal { + position: relative; + top: auto; + right: auto; + bottom: auto; + left: auto; + z-index: 1; + display: block; +} +.bs-example-modal .modal-dialog { + left: auto; + margin-right: auto; + margin-left: auto; +} + +/* Example dropdowns */ +.bs-example > .dropdown > .dropdown-menu { + position: static; + display: block; + margin-bottom: 5px; +} + +/* Example tabbable tabs */ +.bs-example-tabs .nav-tabs { + margin-bottom: 15px; +} + +/* Tooltips */ +.bs-example-tooltips { + text-align: center; +} +.bs-example-tooltips > .btn { + margin-top: 5px; + margin-bottom: 5px; +} + +/* Popovers */ +.bs-example-popover { + padding-bottom: 24px; + background-color: #f9f9f9; +} +.bs-example-popover .popover { + position: relative; + display: block; + float: left; + width: 260px; + margin: 20px; +} + +/* Scrollspy demo on fixed height div */ +.scrollspy-example { + position: relative; + height: 200px; + margin-top: 10px; + overflow: auto; +} + + +/* + * Responsive tests + * + * Generate a set of tests to show the responsive utilities in action. + */ + +/* Responsive (scrollable) doc tables */ +.table-responsive .highlight pre { + white-space: normal; +} + +/* Utility classes table */ +.bs-table th small, +.responsive-utilities th small { + display: block; + font-weight: normal; + color: #999; +} +.responsive-utilities tbody th { + font-weight: normal; +} +.responsive-utilities td { + text-align: center; +} +.responsive-utilities td.is-visible { + color: #468847; + background-color: #dff0d8 !important; +} +.responsive-utilities td.is-hidden { + color: #ccc; + background-color: #f9f9f9 !important; +} + +/* Responsive tests */ +.responsive-utilities-test { + margin-top: 5px; +} +.responsive-utilities-test .col-xs-6 { + margin-bottom: 10px; +} +.responsive-utilities-test span { + display: block; + padding: 15px 10px; + font-size: 14px; + font-weight: bold; + line-height: 1.1; + text-align: center; + border-radius: 4px; +} +.visible-on .col-xs-6 .hidden-xs, +.visible-on .col-xs-6 .hidden-sm, +.visible-on .col-xs-6 .hidden-md, +.visible-on .col-xs-6 .hidden-lg, +.hidden-on .col-xs-6 .hidden-xs, +.hidden-on .col-xs-6 .hidden-sm, +.hidden-on .col-xs-6 .hidden-md, +.hidden-on .col-xs-6 .hidden-lg { + color: #999; + border: 1px solid #ddd; +} +.visible-on .col-xs-6 .visible-xs-block, +.visible-on .col-xs-6 .visible-sm-block, +.visible-on .col-xs-6 .visible-md-block, +.visible-on .col-xs-6 .visible-lg-block, +.hidden-on .col-xs-6 .visible-xs-block, +.hidden-on .col-xs-6 .visible-sm-block, +.hidden-on .col-xs-6 .visible-md-block, +.hidden-on .col-xs-6 .visible-lg-block { + color: #468847; + background-color: #dff0d8; + border: 1px solid #d6e9c6; +} + + +/* + * Glyphicons + * + * Special styles for displaying the icons and their classes in the docs. + */ + +.bs-glyphicons { + margin: 0 -10px 20px; + overflow: hidden; +} +.bs-glyphicons-list { + padding-left: 0; + list-style: none; +} +.bs-glyphicons li { + float: left; + width: 25%; + height: 115px; + padding: 10px; + font-size: 10px; + line-height: 1.4; + text-align: center; + background-color: #f9f9f9; + border: 1px solid #fff; +} +.bs-glyphicons .glyphicon { + margin-top: 5px; + margin-bottom: 10px; + font-size: 24px; +} +.bs-glyphicons .glyphicon-class { + display: block; + text-align: center; + word-wrap: break-word; /* Help out IE10+ with class names */ +} +.bs-glyphicons li:hover { + color: #fff; + background-color: @text-color; +} + +@media (min-width: 768px) { + .bs-glyphicons { + margin-right: 0; + margin-left: 0; + } + .bs-glyphicons li { + width: 12.5%; + font-size: 12px; + } +} + + +/* + * Customizer + * + * Since this is so form control heavy, we have quite a few styles to customize + * the display of inputs, headings, and more. Also included are all the download + * buttons and actions. + */ + +.bs-customizer .toggle { + float: right; + margin-top: 25px; +} + +/* Headings and form contrls */ +.bs-customizer label { + margin-top: 10px; + font-weight: 500; + color: #555; +} +.bs-customizer h2 { + padding-top: 30px; + margin-top: 0; + margin-bottom: 5px; +} +.bs-customizer h3 { + margin-bottom: 0; +} +.bs-customizer h4 { + margin-top: 15px; + margin-bottom: 0; +} +.bs-customizer .bs-callout h4 { + margin-top: 0; /* lame, but due to specificity we have to duplicate */ + margin-bottom: 5px; +} +.bs-customizer input[type="text"] { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + background-color: #fafafa; +} +.bs-customizer .help-block { + margin-bottom: 5px; + font-size: 12px; +} + +/* For the variables, use regular weight */ +#less-section label { + font-weight: normal; +} + +.bs-customizer-input { + float: left; + width: 33.333333%; + padding-right: 15px; + padding-left: 15px; +} + +/* Downloads */ +.bs-customize-download .btn-outline { + padding: 20px; +} + +/* Error handling */ +.bs-customizer-alert { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; + padding: 15px 0; + color: #fff; + background-color: #d9534f; + border-bottom: 1px solid #b94441; + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.25); + box-shadow: inset 0 1px 0 rgba(255,255,255,.25); +} +.bs-customizer-alert .close { + margin-top: -4px; + font-size: 24px; +} +.bs-customizer-alert p { + margin-bottom: 0; +} +.bs-customizer-alert .glyphicon { + margin-right: 5px; +} +.bs-customizer-alert pre { + margin: 10px 0 0; + color: #fff; + background-color: #a83c3a; + border-color: #973634; + -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1); + box-shadow: inset 0 2px 4px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1); +} + + +/* + * Brand guidelines + * + * Extra styles for displaying wordmarks, logos, etc. + */ + +/* Logo series wrapper */ +.bs-brand-logos { + display: table; + width: 100%; + margin-bottom: 15px; + overflow: hidden; + color: @text-color; + background-color: #f9f9f9; + border-radius: 4px; +} + +/* Individual items */ +.bs-brand-item { + padding: 60px 0; + text-align: center; +} +.bs-brand-item + .bs-brand-item { + border-top: 1px solid #fff; +} +.bs-brand-logos .inverse { + color: #fff; + background-color: @text-color; +} + +/* Heading content within */ +.bs-brand-item h1, +.bs-brand-item h3 { + margin-top: 0; + margin-bottom: 0; +} +.bs-brand-item .bs-docs-booticon { + margin-left: auto; + margin-right: auto; +} + +/* Make the icons stand out on what is/isn't okay */ +.bs-brand-item .glyphicon { + width: 30px; + height: 30px; + margin: 10px auto -10px; + line-height: 30px; + color: #fff; + border-radius: 50%; +} +.bs-brand-item .glyphicon-ok { background-color: #5cb85c; } +.bs-brand-item .glyphicon-remove { background-color: #d9534f; } + +@media (min-width: 768px) { + .bs-brand-item { + display: table-cell; + width: 1%; + } + .bs-brand-item + .bs-brand-item { + border-top: 0; + border-left: 1px solid #fff; + } + .bs-brand-item h1 { + font-size: 60px; + } +} + + +/* + * Miscellaneous + * + * Odds and ends for optimum docs display. + */ + +/* Examples gallery: space out content better */ +.bs-examples .thumbnail { + margin-bottom: 10px; +} +.bs-examples h4 { + margin-bottom: 5px; +} +.bs-examples p { + margin-bottom: 20px; +} + +/* Pseudo :focus state for showing how it looks in the docs */ +#focusedInput { + border-color: rgb(204,204,204); /* Restate unfocused value to make CSSLint happy that there's a pre-CSS3 fallback*/ + border-color: rgba(82,168,236,.8); + outline: 0; + outline: thin dotted \9; /* IE6-9 */ + -webkit-box-shadow: 0 0 8px rgba(82,168,236,.6); + box-shadow: 0 0 8px rgba(82,168,236,.6); +} diff --git a/styles/index.less b/styles/index.less new file mode 100644 index 0000000..a5c4b41 --- /dev/null +++ b/styles/index.less @@ -0,0 +1,69 @@ +// +// Site styles +// -------------------------------------------------- + + +// Core variables and mixins +@import "variables.less"; +@import "mixins/index.less"; +@import "bootstrap.less"; +@import "docs.less"; + + +// Theme components +// ---------------------------------------- + +// Typography & Code +@import "webfonts.less"; +@import "blockquote.less"; +@import "highlight.less"; + +// Layout and structure +@import "header.less"; +@import "masthead.less"; +@import "teaser.less"; +@import "footer.less"; +@import "stack.less"; + +// Navigation +@import "main-nav.less"; +@import "navbar-content.less"; +@import "dropdown-inverse.less"; +@import "sidebar.less"; +@import "paginate.less"; + +// Informational +@import "ad.less"; +@import "banner.less"; +@import "callout.less"; +@import "team.less"; + +// Buttons +@import "dismiss.less"; +@import "btn.less"; +@import "btn-outline.less"; + +// Links +@import "anchors.less"; +@import "source-link.less"; + + +// Theme +// ---------------------------------------- + +@import "themes/base.less"; +@import "themes/@{theme}/index.less"; + + +// Vendor +// ---------------------------------------- + +/*@import "vendor/perfect-scrollbar.less";*/ + + +// Utilities (must be last!) +// ---------------------------------------- + + +// Override utilities +@import "utilities/index.less"; diff --git a/styles/mixins/alerts.less b/styles/mixins/alerts.less new file mode 100644 index 0000000..396196f --- /dev/null +++ b/styles/mixins/alerts.less @@ -0,0 +1,14 @@ +// Alerts + +.alert-variant(@background; @border; @text-color) { + background-color: @background; + border-color: @border; + color: @text-color; + + hr { + border-top-color: darken(@border, 5%); + } + .alert-link { + color: darken(@text-color, 10%); + } +} diff --git a/styles/mixins/background-variant.less b/styles/mixins/background-variant.less new file mode 100644 index 0000000..556e490 --- /dev/null +++ b/styles/mixins/background-variant.less @@ -0,0 +1,8 @@ +// Contextual backgrounds + +.bg-variant(@color) { + background-color: @color; + a&:hover { + background-color: darken(@color, 10%); + } +} diff --git a/styles/mixins/border-radius.less b/styles/mixins/border-radius.less new file mode 100644 index 0000000..ca05dbf --- /dev/null +++ b/styles/mixins/border-radius.less @@ -0,0 +1,18 @@ +// Single side border-radius + +.border-top-radius(@radius) { + border-top-right-radius: @radius; + border-top-left-radius: @radius; +} +.border-right-radius(@radius) { + border-bottom-right-radius: @radius; + border-top-right-radius: @radius; +} +.border-bottom-radius(@radius) { + border-bottom-right-radius: @radius; + border-bottom-left-radius: @radius; +} +.border-left-radius(@radius) { + border-bottom-left-radius: @radius; + border-top-left-radius: @radius; +} diff --git a/styles/mixins/button-states.less b/styles/mixins/button-states.less new file mode 100644 index 0000000..7e6a5b9 --- /dev/null +++ b/styles/mixins/button-states.less @@ -0,0 +1,47 @@ +// +// Button States +// -------------------------------------------------- + + +// Button psuedo states +// ------------------------- +// Easily pump out default styles, as well as :hover, :focus, +// :active, and disabled options for all buttons + +.button-pseudo-states(@color, @background, @border) { + color: @color; + background-color: @background; + border-color: @border; + + &:hover, + &:focus, + &:active, + &.active { + background-color: darken(@background, 10%); + border-color: darken(@border, 10%); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus, + &:active, + &.active { + background-color: @background; + border-color: @border + } + } +} +.button-inverse-pseudo-states(@color: #222, @background, @border) { + .button-pseudo-states(@color, @background, @border); + &:hover, + &:focus, + &:active, + &.active { + color: @color; + background-color: darken(@background, 10%); + border-color: darken(@border, 10%); + } +} + diff --git a/styles/mixins/buttons.less b/styles/mixins/buttons.less new file mode 100644 index 0000000..409f8f2 --- /dev/null +++ b/styles/mixins/buttons.less @@ -0,0 +1,50 @@ +// Button variants +// +// Easily pump out default styles, as well as :hover, :focus, :active, +// and disabled options for all buttons + +.button-variant(@color; @background; @border) { + color: @color; + background-color: @background; + border-color: @border; + + &:hover, + &:focus, + &:active, + &.active, + .open > .dropdown-toggle& { + color: @color; + background-color: darken(@background, 10%); + border-color: darken(@border, 12%); + } + &:active, + &.active, + .open > .dropdown-toggle& { + background-image: none; + } + &.disabled, + &[disabled], + fieldset[disabled] & { + &, + &:hover, + &:focus, + &:active, + &.active { + background-color: @background; + border-color: @border; + } + } + + .badge { + color: @background; + background-color: @color; + } +} + +// Button sizes +.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { + padding: @padding-vertical @padding-horizontal; + font-size: @font-size; + line-height: @line-height; + border-radius: @border-radius; +} diff --git a/styles/mixins/center-block.less b/styles/mixins/center-block.less new file mode 100644 index 0000000..d18d6de --- /dev/null +++ b/styles/mixins/center-block.less @@ -0,0 +1,7 @@ +// Center-align a block level element + +.center-block() { + display: block; + margin-left: auto; + margin-right: auto; +} diff --git a/styles/mixins/clearfix.less b/styles/mixins/clearfix.less new file mode 100644 index 0000000..3f7a382 --- /dev/null +++ b/styles/mixins/clearfix.less @@ -0,0 +1,22 @@ +// Clearfix +// +// For modern browsers +// 1. The space content is one way to avoid an Opera bug when the +// contenteditable attribute is included anywhere else in the document. +// Otherwise it causes space to appear at the top and bottom of elements +// that are clearfixed. +// 2. The use of `table` rather than `block` is only necessary if using +// `:before` to contain the top-margins of child elements. +// +// Source: http://nicolasgallagher.com/micro-clearfix-hack/ + +.clearfix() { + &:before, + &:after { + content: " "; // 1 + display: table; // 2 + } + &:after { + clear: both; + } +} diff --git a/styles/mixins/forms.less b/styles/mixins/forms.less new file mode 100644 index 0000000..e36c4a8 --- /dev/null +++ b/styles/mixins/forms.less @@ -0,0 +1,81 @@ +// Form validation states +// +// Used in forms.less to generate the form validation CSS for warnings, errors, +// and successes. + +.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) { + // Color the label and help text + .help-block, + .control-label, + .radio, + .checkbox, + .radio-inline, + .checkbox-inline { + color: @text-color; + } + // Set the border and box shadow on specific inputs to match + .form-control { + border-color: @border-color; + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work + &:focus { + border-color: darken(@border-color, 10%); + @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%); + .box-shadow(@shadow); + } + } + // Set validation states also for addons + .input-group-addon { + color: @text-color; + border-color: @border-color; + background-color: @background-color; + } + // Optional feedback icon + .form-control-feedback { + color: @text-color; + } +} + + +// Form control focus state +// +// Generate a customized focus state and for any input with the specified color, +// which defaults to the `@input-border-focus` variable. +// +// We highly encourage you to not customize the default value, but instead use +// this to tweak colors on an as-needed basis. This aesthetic change is based on +// WebKit's default styles, but applicable to a wider range of browsers. Its +// usability and accessibility should be taken into account with any change. +// +// Example usage: change the default blue border and shadow to white for better +// contrast against a dark gray background. +.form-control-focus(@color: @input-border-focus) { + @color-rgba: rgba(red(@color), green(@color), blue(@color), .6); + &:focus { + border-color: @color; + outline: 0; + .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}"); + } +} + +// Form control sizing +// +// Relative text size, padding, and border-radii changes for form controls. For +// horizontal sizing, wrap controls in the predefined grid classes. `` background color +@input-bg: #fff; +// `` background color +@input-bg-disabled: @gray-lighter; + +// Text color for ``s +@input-color: @gray; +// `` border color +@input-border: #ccc; +// `` border radius +@input-border-radius: @border-radius-base; +// Border color for inputs on focus +@input-border-focus: #66afe9; + +// Placeholder text color +@input-color-placeholder: @gray-light; + +// Default `.form-control` height +@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2); +// Large `.form-control` height +@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2); +// Small `.form-control` height +@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2); + +@legend-color: @gray-dark; +@legend-border-color: #e5e5e5; + +// Background color for textual input addons +@input-group-addon-bg: @gray-lighter; +// Border color for textual input addons +@input-group-addon-border-color: @input-border; + + +// Dropdowns +// ------------------------------------------------- +// Dropdown menu container and contents. + +// Background for the dropdown menu. +@dropdown-bg: #fff; +// Dropdown menu `border-color`. +@dropdown-border: rgba(0,0,0,.15); +// Dropdown menu `border-color` **for IE8**. +@dropdown-fallback-border: #ccc; +// Divider color for between dropdown items. +@dropdown-divider-bg: #e5e5e5; + +// Dropdown link text color. +@dropdown-link-color: @gray-dark; +// Hover color for dropdown links. +@dropdown-link-hover-color: darken(@gray-dark, 5%); +// Hover background for dropdown links. +@dropdown-link-hover-bg: #f5f5f5; + +// Active dropdown menu item text color. +@dropdown-link-active-color: @component-active-color; +// Active dropdown menu item background color. +@dropdown-link-active-bg: @component-active-bg; + +// Disabled dropdown menu item background color. +@dropdown-link-disabled-color: @gray-light; + +// Text color for headers within dropdown menus. +@dropdown-header-color: @gray-light; + +// Note: Deprecated @dropdown-caret-color as of v3.1.0 +@dropdown-caret-color: #000; + + +// Z-index master list +// ------------------------------------------------- +// Warning: Avoid customizing these values. They're used for a bird's eye view +// of components dependent on the z-axis and are designed to all work together. +// ------------------------------------------------- +// Note: These variables are not generated into the Customizer. + +@zindex-navbar: 1000; +@zindex-dropdown: 1000; +@zindex-popover: 1010; +@zindex-tooltip: 1030; +@zindex-navbar-fixed: 1030; +@zindex-modal-background: 1040; +@zindex-modal: 1050; + + +// Media queries breakpoints +// ------------------------------------------------- +// Define the breakpoints at which your layout will +// change, adapting to different screen sizes. + +// Extra small screen / phone +// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1 +@screen-xs: 480px; +@screen-xs-min: @screen-xs; +@screen-phone: @screen-xs-min; + +// Small screen / tablet +// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1 +@screen-sm: 768px; +@screen-sm-min: @screen-sm; +@screen-tablet: @screen-sm-min; + +// Medium screen / desktop +// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1 +@screen-md: 992px; +@screen-md-min: @screen-md; +@screen-desktop: @screen-md-min; + +// Large screen / wide desktop +// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1 +@screen-lg: 1200px; +@screen-lg-min: @screen-lg; +@screen-lg-desktop: @screen-lg-min; + +// So media queries don't overlap when required, provide a maximum +@screen-xs-max: (@screen-sm-min - 1); +@screen-sm-max: (@screen-md-min - 1); +@screen-md-max: (@screen-lg-min - 1); + + +// Grid system +// ------------------------------------------------- +// Define your custom responsive grid. + +// Number of columns in the grid. +@grid-columns: 12; +// Padding between columns. Gets divided in half for the left and right. +@grid-gutter-width: 30px; +// Navbar collapse +// Point at which the navbar becomes uncollapsed. +@grid-float-breakpoint: @screen-sm-min; +// Point at which the navbar begins collapsing. +@grid-float-breakpoint-max: (@grid-float-breakpoint - 1); + + +// Container sizes +// ------------------------------------------------- +// Define the maximum width of `.container` for different screen sizes. + +// Small screen / tablet +@container-tablet: ((720px + @grid-gutter-width)); +// For `@screen-sm-min` and up. +@container-sm: @container-tablet; + +// Medium screen / desktop +@container-desktop: ((940px + @grid-gutter-width)); +// For `@screen-md-min` and up. +@container-md: @container-desktop; + +// Large screen / wide desktop +@container-large-desktop: ((1140px + @grid-gutter-width)); +// For `@screen-lg-min` and up. +@container-lg: @container-large-desktop; + + +// Navbar +// ------------------------------------------------- + +// Navbar typography +@navbar-font-family: 'Assemble SSm A', 'Assemble SSm B', @font-family-sans-serif; + +// Common navbar styles +@navbar-height: 50px; +@navbar-margin-bottom: @line-height-computed; +@navbar-border-radius: @border-radius-base; +@navbar-padding-horizontal: floor((@grid-gutter-width / 2)); +@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2); +@navbar-collapse-max-height: 340px; + +// Default navbar +@navbar-default-color: #777; +@navbar-default-bg: #f8f8f8; +@navbar-default-border: darken(@navbar-default-bg, 6.5%); + +// Navbar links +@navbar-default-link-color: #777; +@navbar-default-link-hover-color: #333; +@navbar-default-link-hover-bg: transparent; +@navbar-default-link-active-color: #555; +@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%); +@navbar-default-link-disabled-color: #ccc; +@navbar-default-link-disabled-bg: transparent; + +// Navbar brand label +@navbar-default-brand-color: @navbar-default-link-color; +@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%); +@navbar-default-brand-hover-bg: transparent; + +// Navbar toggle +@navbar-default-toggle-hover-bg: #ddd; +@navbar-default-toggle-icon-bar-bg: #888; +@navbar-default-toggle-border-color: #ddd; + + +// Inverted navbar +// Reset inverted navbar basics +@navbar-inverse-color: @gray-light; +@navbar-inverse-bg: #222; +@navbar-inverse-border: darken(@navbar-inverse-bg, 10%); + +// Inverted navbar links +@navbar-inverse-link-color: @gray-light; +@navbar-inverse-link-hover-color: #fff; +@navbar-inverse-link-hover-bg: transparent; +@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color; +@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%); +@navbar-inverse-link-disabled-color: #444; +@navbar-inverse-link-disabled-bg: transparent; + +// Inverted navbar brand label +@navbar-inverse-brand-color: @navbar-inverse-link-color; +@navbar-inverse-brand-hover-color: #fff; +@navbar-inverse-brand-hover-bg: transparent; + +// Inverted navbar toggle +@navbar-inverse-toggle-hover-bg: #333; +@navbar-inverse-toggle-icon-bar-bg: #fff; +@navbar-inverse-toggle-border-color: #333; + + +// Navs +// ------------------------------------------------- + +// Shared nav styles +@nav-link-padding: 10px 15px; +@nav-link-hover-bg: @gray-lighter; + +@nav-disabled-link-color: @gray-light; +@nav-disabled-link-hover-color: @gray-light; + +@nav-open-link-hover-color: #fff; + +// Tabs +@nav-tabs-border-color: #ddd; + +@nav-tabs-link-hover-border-color: @gray-lighter; + +@nav-tabs-active-link-hover-bg: @body-bg; +@nav-tabs-active-link-hover-color: @gray; +@nav-tabs-active-link-hover-border-color: #ddd; + +@nav-tabs-justified-link-border-color: #ddd; +@nav-tabs-justified-active-link-border-color: @body-bg; + +// Pills +@nav-pills-border-radius: @border-radius-base; +@nav-pills-active-link-hover-bg: @component-active-bg; +@nav-pills-active-link-hover-color: @component-active-color; + + +// Pagination +// ------------------------------------------------- + +@pagination-color: @link-color; +@pagination-bg: #fff; +@pagination-border: #ddd; + +@pagination-hover-color: @link-hover-color; +@pagination-hover-bg: @gray-lighter; +@pagination-hover-border: #ddd; + +@pagination-active-color: #fff; +@pagination-active-bg: @brand-primary; +@pagination-active-border: @brand-primary; + +@pagination-disabled-color: @gray-light; +@pagination-disabled-bg: #fff; +@pagination-disabled-border: #ddd; + + +// Pager +// ------------------------------------------------- + +@pager-bg: @pagination-bg; +@pager-border: @pagination-border; +@pager-border-radius: 15px; + +@pager-hover-bg: @pagination-hover-bg; + +@pager-active-bg: @pagination-active-bg; +@pager-active-color: @pagination-active-color; + +@pager-disabled-color: @pagination-disabled-color; + + +// Jumbotron +// ------------------------------------------------- + +@jumbotron-padding: 30px; +@jumbotron-color: inherit; +@jumbotron-bg: @gray-lighter; +@jumbotron-heading-color: inherit; +@jumbotron-font-size: ceil((@font-size-base * 1.5)); + + +// Form states and alerts +// ------------------------------------------------- +// Define colors for form feedback states and, by +// default, alerts. + +@state-success-text: #3c763d; +@state-success-bg: #dff0d8; +@state-success-border: darken(spin(@state-success-bg, -10), 5%); + +@state-info-text: #31708f; +@state-info-bg: #d9edf7; +@state-info-border: darken(spin(@state-info-bg, -10), 7%); + +@state-warning-text: #8a6d3b; +@state-warning-bg: #fcf8e3; +@state-warning-border: darken(spin(@state-warning-bg, -10), 5%); + +@state-danger-text: #a94442; +@state-danger-bg: #f2dede; +@state-danger-border: darken(spin(@state-danger-bg, -10), 5%); + + +// Tooltips +// ------------------------------------------------- + +// Tooltip max width +@tooltip-max-width: 200px; +// Tooltip text color +@tooltip-color: #fff; +// Tooltip background color +@tooltip-bg: #000; +@tooltip-opacity: .9; + +// Tooltip arrow width +@tooltip-arrow-width: 5px; +// Tooltip arrow color +@tooltip-arrow-color: @tooltip-bg; + + +// Popovers +// ------------------------------------------------- + +// Popover body background color +@popover-bg: #fff; +// Popover maximum width +@popover-max-width: 276px; +// Popover border color +@popover-border-color: rgba(0,0,0,.2); +// Popover fallback border color +@popover-fallback-border-color: #ccc; + +// Popover title background color +@popover-title-bg: darken(@popover-bg, 3%); + +// Popover arrow width +@popover-arrow-width: 10px; +// Popover arrow color +@popover-arrow-color: #fff; + +// Popover outer arrow width +@popover-arrow-outer-width: (@popover-arrow-width + 1); +// Popover outer arrow color +@popover-arrow-outer-color: fadein(@popover-border-color, 5%); +// Popover outer arrow fallback color +@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%); + + +// Labels +// ------------------------------------------------- + +// Default label background color +@label-default-bg: @gray-light; +// Primary label background color +@label-primary-bg: @brand-primary; +// Success label background color +@label-success-bg: @brand-success; +// Info label background color +@label-info-bg: @brand-info; +// Warning label background color +@label-warning-bg: @brand-warning; +// Danger label background color +@label-danger-bg: @brand-danger; + +// Default label text color +@label-color: #fff; +// Default text color of a linked label +@label-link-hover-color: #fff; + + +// Modals +// ------------------------------------------------- + +// Padding applied to the modal body +@modal-inner-padding: 15px; + +// Padding applied to the modal title +@modal-title-padding: 15px; +// Modal title line-height +@modal-title-line-height: @line-height-base; + +// Background color of modal content area +@modal-content-bg: #fff; +// Modal content border color +@modal-content-border-color: rgba(0,0,0,.2); +// Modal content border color **for IE8** +@modal-content-fallback-border-color: #999; + +// Modal backdrop background color +@modal-backdrop-bg: #000; +// Modal backdrop opacity +@modal-backdrop-opacity: .5; +// Modal header border color +@modal-header-border-color: #e5e5e5; +// Modal footer border color +@modal-footer-border-color: @modal-header-border-color; + +@modal-lg: 900px; +@modal-md: 600px; +@modal-sm: 300px; + + +// Alerts +// ------------------------------------------------- +// Define alert colors, border radius, and padding. + +@alert-padding: 15px; +@alert-border-radius: @border-radius-base; +@alert-link-font-weight: bold; + +@alert-success-bg: @state-success-bg; +@alert-success-text: @state-success-text; +@alert-success-border: @state-success-border; + +@alert-info-bg: @state-info-bg; +@alert-info-text: @state-info-text; +@alert-info-border: @state-info-border; + +@alert-warning-bg: @state-warning-bg; +@alert-warning-text: @state-warning-text; +@alert-warning-border: @state-warning-border; + +@alert-danger-bg: @state-danger-bg; +@alert-danger-text: @state-danger-text; +@alert-danger-border: @state-danger-border; + + +// Progress bars +// ------------------------------------------------- + +// Background color of the whole progress component +@progress-bg: #f5f5f5; +// Progress bar text color +@progress-bar-color: #fff; + +// Default progress bar color +@progress-bar-bg: @brand-primary; +// Success progress bar color +@progress-bar-success-bg: @brand-success; +// Warning progress bar color +@progress-bar-warning-bg: @brand-warning; +// Danger progress bar color +@progress-bar-danger-bg: @brand-danger; +// Info progress bar color +@progress-bar-info-bg: @brand-info; + + +// List group +// ------------------------------------------------- + +// Background color on `.list-group-item` +@list-group-bg: #fff; +// `.list-group-item` border color +@list-group-border: #ddd; +// List group border radius +@list-group-border-radius: @border-radius-base; + +// Background color of single list items on hover +@list-group-hover-bg: #f5f5f5; +// Text color of active list items +@list-group-active-color: @component-active-color; +// Background color of active list items +@list-group-active-bg: @component-active-bg; +// Border color of active list elements +@list-group-active-border: @list-group-active-bg; +// Text color for content within active list items +@list-group-active-text-color: lighten(@list-group-active-bg, 40%); + +// Text color of disabled list items +@list-group-disabled-color: @gray-light; +// Background color of disabled list items +@list-group-disabled-bg: @gray-lighter; +// Text color for content within disabled list items +@list-group-disabled-text-color: @list-group-disabled-color; + +@list-group-link-color: #555; +@list-group-link-hover-color: @list-group-link-color; +@list-group-link-heading-color: #333; + + +// ------------------------------------------- +// Content +// ------------------------------------------- + +@content-gutter: 60px; + + +// Panels +// ------------------------------------------------- + +@panel-bg: #fff; +@panel-body-padding: 15px; +@panel-heading-padding: 10px 15px; +@panel-footer-padding: @panel-heading-padding; +@panel-border-radius: @border-radius-base; + +// Border color for elements within panels +@panel-inner-border: #ddd; +@panel-footer-bg: #f5f5f5; + +@panel-default-text: @gray-dark; +@panel-default-border: #ddd; +@panel-default-heading-bg: #f5f5f5; + +@panel-primary-text: #fff; +@panel-primary-border: @brand-primary; +@panel-primary-heading-bg: @brand-primary; + +@panel-success-text: @state-success-text; +@panel-success-border: @state-success-border; +@panel-success-heading-bg: @state-success-bg; + +@panel-info-text: @state-info-text; +@panel-info-border: @state-info-border; +@panel-info-heading-bg: @state-info-bg; + +@panel-warning-text: @state-warning-text; +@panel-warning-border: @state-warning-border; +@panel-warning-heading-bg: @state-warning-bg; + +@panel-danger-text: @state-danger-text; +@panel-danger-border: @state-danger-border; +@panel-danger-heading-bg: @state-danger-bg; + + +// Thumbnails +// ------------------------------------------------- + +// Padding around the thumbnail image +@thumbnail-padding: 4px; +// Thumbnail background color +@thumbnail-bg: @body-bg; +// Thumbnail border color +@thumbnail-border: #ddd; +// Thumbnail border radius +@thumbnail-border-radius: @border-radius-base; + +// Custom text color for thumbnail captions +@thumbnail-caption-color: @text-color; +// Padding around the thumbnail caption +@thumbnail-caption-padding: 9px; + + +// Wells +// ------------------------------------------------- + +@well-bg: #f5f5f5; +@well-border: darken(@well-bg, 7%); + + +// Badges +// ------------------------------------------------- + +@badge-color: #fff; +// Linked badge text color on hover +@badge-link-hover-color: #fff; +@badge-bg: @gray-light; + +// Badge text color in active nav link +@badge-active-color: @link-color; +// Badge background color in active nav link +@badge-active-bg: #fff; + +@badge-font-weight: bold; +@badge-line-height: 1; +@badge-border-radius: 10px; + + +// Breadcrumbs +// ------------------------------------------------- + +@breadcrumb-padding-vertical: 8px; +@breadcrumb-padding-horizontal: 15px; +// Breadcrumb background color +@breadcrumb-bg: #f5f5f5; +// Breadcrumb text color +@breadcrumb-color: #ccc; +// Text color of current page in the breadcrumb +@breadcrumb-active-color: @gray-light; +// Textual separator for between breadcrumb elements +@breadcrumb-separator: "/"; + + +// Carousel +// ------------------------------------------------- + +@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6); + +@carousel-control-color: #fff; +@carousel-control-width: 15%; +@carousel-control-opacity: .5; +@carousel-control-font-size: 20px; + +@carousel-indicator-active-bg: #fff; +@carousel-indicator-border-color: #fff; + +@carousel-caption-color: #fff; + + +// Close +// ------------------------------------------------- + +@close-font-weight: bold; +@close-color: #000; +@close-text-shadow: 0 1px 0 #fff; + + +// Dismiss +// ------------------------------------------------- + +@dismiss-font-weight: bold; +@dismiss-color: #000; +@dismiss-text-shadow: 0 1px 0 #fff; + + +// Code +// ------------------------------------------------- + +@code-color: #c7254e; +@code-bg: #f9f2f4; + +@kbd-color: #fff; +@kbd-bg: #333; + +@pre-bg: #f5f5f5; +@pre-color: @gray-dark; +@pre-border-color: #ccc; +@pre-scrollable-max-height: 340px; + + +// Type +// ------------------------------------------------- + +// Text muted color +@text-muted: @gray-light; +// Abbreviations and acronyms border color +@abbr-border-color: @gray-light; +// Headings small color +@headings-small-color: @gray-light; +// Blockquote small color +@blockquote-small-color: @gray-light; +// Blockquote font size +@blockquote-font-size: (@font-size-base * 1.25); +// Blockquote border color +@blockquote-border-color: @gray-lighter; +// Page header border color +@page-header-border-color: @gray-lighter; + + +// Miscellaneous +// ------------------------------------------------- + +// Horizontal line color. +@hr-border: @gray-lighter; + +// Horizontal offset for forms and lists. +@component-offset-horizontal: 180px; diff --git a/styles/vendor/bootstrap/alerts.less b/styles/vendor/bootstrap/alerts.less new file mode 100644 index 0000000..3eab066 --- /dev/null +++ b/styles/vendor/bootstrap/alerts.less @@ -0,0 +1,67 @@ +// +// Alerts +// -------------------------------------------------- + + +// Base styles +// ------------------------- + +.alert { + padding: @alert-padding; + margin-bottom: @line-height-computed; + border: 1px solid transparent; + border-radius: @alert-border-radius; + + // Headings for larger alerts + h4 { + margin-top: 0; + // Specified for the h4 to prevent conflicts of changing @headings-color + color: inherit; + } + // Provide class for links that match alerts + .alert-link { + font-weight: @alert-link-font-weight; + } + + // Improve alignment and spacing of inner content + > p, + > ul { + margin-bottom: 0; + } + > p + p { + margin-top: 5px; + } +} + +// Dismissable alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissable { + padding-right: (@alert-padding + 20); + + // Adjust close link position + .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; + } +} + +// Alternate styles +// +// Generate contextual modifier classes for colorizing the alert. + +.alert-success { + .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); +} +.alert-info { + .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); +} +.alert-warning { + .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); +} +.alert-danger { + .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); +} diff --git a/styles/vendor/bootstrap/badges.less b/styles/vendor/bootstrap/badges.less new file mode 100644 index 0000000..20624f3 --- /dev/null +++ b/styles/vendor/bootstrap/badges.less @@ -0,0 +1,55 @@ +// +// Badges +// -------------------------------------------------- + + +// Base class +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: @font-size-small; + font-weight: @badge-font-weight; + color: @badge-color; + line-height: @badge-line-height; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: @badge-bg; + border-radius: @badge-border-radius; + + // Empty badges collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for badges in buttons + .btn & { + position: relative; + top: -1px; + } + .btn-xs & { + top: 0; + padding: 1px 5px; + } + + // Hover state, but only for links + a& { + &:hover, + &:focus { + color: @badge-link-hover-color; + text-decoration: none; + cursor: pointer; + } + } + + // Account for badges in navs + a.list-group-item.active > &, + .nav-pills > .active > a > & { + color: @badge-active-color; + background-color: @badge-active-bg; + } + .nav-pills > li > a > & { + margin-left: 3px; + } +} diff --git a/src/less/bootstrap/bootstrap.less b/styles/vendor/bootstrap/bootstrap.less similarity index 64% rename from src/less/bootstrap/bootstrap.less rename to styles/vendor/bootstrap/bootstrap.less index c73c85c..c36a2c5 100644 --- a/src/less/bootstrap/bootstrap.less +++ b/styles/vendor/bootstrap/bootstrap.less @@ -1,64 +1,45 @@ -/*! - * Bootstrap v3.0.0 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - */ - -// Core variables and mixins -@import "variables.less"; -@import "mixins.less"; - -// Reset +// Reset and dependencies @import "normalize.less"; @import "print.less"; +@import "glyphicons.less"; // Core CSS @import "scaffolding.less"; @import "type.less"; @import "code.less"; @import "grid.less"; - @import "tables.less"; @import "forms.less"; @import "buttons.less"; -// Components: common +// Components @import "component-animations.less"; -@import "glyphicons.less"; @import "dropdowns.less"; -@import "list-group.less"; -@import "panels.less"; -@import "wells.less"; -@import "close.less"; - -// Components: Nav +@import "button-groups.less"; +@import "input-groups.less"; @import "navs.less"; @import "navbar.less"; -@import "button-groups.less"; @import "breadcrumbs.less"; @import "pagination.less"; @import "pager.less"; +@import "labels.less"; +@import "badges.less"; +@import "jumbotron.less"; +@import "thumbnails.less"; +@import "alerts.less"; +@import "progress-bars.less"; +@import "media.less"; +@import "list-group.less"; +@import "panels.less"; +@import "responsive-embed.less"; +@import "wells.less"; +@import "close.less"; -// Components: Popovers +// Components w/ JavaScript @import "modals.less"; @import "tooltip.less"; @import "popovers.less"; - -// Components: Misc -@import "alerts.less"; -@import "thumbnails.less"; -@import "media.less"; -@import "labels.less"; -@import "badges.less"; -@import "progress-bars.less"; -@import "accordion.less"; @import "carousel.less"; -@import "jumbotron.less"; // Utility classes -@import "utilities.less"; // Has to be last to override when necessary @import "responsive-utilities.less"; diff --git a/styles/vendor/bootstrap/breadcrumbs.less b/styles/vendor/bootstrap/breadcrumbs.less new file mode 100644 index 0000000..cb01d50 --- /dev/null +++ b/styles/vendor/bootstrap/breadcrumbs.less @@ -0,0 +1,26 @@ +// +// Breadcrumbs +// -------------------------------------------------- + + +.breadcrumb { + padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; + margin-bottom: @line-height-computed; + list-style: none; + background-color: @breadcrumb-bg; + border-radius: @border-radius-base; + + > li { + display: inline-block; + + + li:before { + content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space + padding: 0 5px; + color: @breadcrumb-color; + } + } + + > .active { + color: @breadcrumb-active-color; + } +} diff --git a/styles/vendor/bootstrap/button-groups.less b/styles/vendor/bootstrap/button-groups.less new file mode 100644 index 0000000..ef11cf1 --- /dev/null +++ b/styles/vendor/bootstrap/button-groups.less @@ -0,0 +1,236 @@ +// +// Button groups +// -------------------------------------------------- + +// Make the div behave like a button +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; // match .btn alignment given font-size hack above + > .btn { + position: relative; + float: left; + // Bring the "active" button to the front + &:hover, + &:focus, + &:active, + &.active { + z-index: 2; + } + &:focus { + // Remove focus outline when dropdown JS adds it after closing the menu + outline: 0; + } + } +} + +// Prevent double borders when buttons are next to each other +.btn-group { + .btn + .btn, + .btn + .btn-group, + .btn-group + .btn, + .btn-group + .btn-group { + margin-left: -1px; + } +} + +// Optional: Group multiple button groups together for a toolbar +.btn-toolbar { + margin-left: -5px; // Offset the first child's margin + &:extend(.clearfix all); + + .btn-group, + .input-group { + float: left; + } + > .btn, + > .btn-group, + > .input-group { + margin-left: 5px; + } +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match +.btn-group > .btn:first-child { + margin-left: 0; + &:not(:last-child):not(.dropdown-toggle) { + .border-right-radius(0); + } +} +// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + .border-left-radius(0); +} + +// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child { + > .btn:last-child, + > .dropdown-toggle { + .border-right-radius(0); + } +} +.btn-group > .btn-group:last-child > .btn:first-child { + .border-left-radius(0); +} + +// On active and open, don't show outline +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + + +// Sizing +// +// Remix the default button sizing classes into new ones for easier manipulation. + +.btn-group-xs > .btn { &:extend(.btn-xs); } +.btn-group-sm > .btn { &:extend(.btn-sm); } +.btn-group-lg > .btn { &:extend(.btn-lg); } + + +// Split button dropdowns +// ---------------------- + +// Give the line between buttons some depth +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} + +// The clickable button for toggling the menu +// Remove the gradient and set the same inset shadow as the :active state +.btn-group.open .dropdown-toggle { + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + + // Show no shadow for `.btn-link` since it has no other button styles. + &.btn-link { + .box-shadow(none); + } +} + + +// Reposition the caret +.btn .caret { + margin-left: 0; +} +// Carets in other button sizes +.btn-lg .caret { + border-width: @caret-width-large @caret-width-large 0; + border-bottom-width: 0; +} +// Upside down carets for .dropup +.dropup .btn-lg .caret { + border-width: 0 @caret-width-large @caret-width-large; +} + + +// Vertical button groups +// ---------------------- + +.btn-group-vertical { + > .btn, + > .btn-group, + > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; + } + + // Clear floats so dropdown menus can be properly placed + > .btn-group { + &:extend(.clearfix all); + > .btn { + float: none; + } + } + + > .btn + .btn, + > .btn + .btn-group, + > .btn-group + .btn, + > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; + } +} + +.btn-group-vertical > .btn { + &:not(:first-child):not(:last-child) { + border-radius: 0; + } + &:first-child:not(:last-child) { + border-top-right-radius: @border-radius-base; + .border-bottom-radius(0); + } + &:last-child:not(:first-child) { + border-bottom-left-radius: @border-radius-base; + .border-top-radius(0); + } +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + .border-bottom-radius(0); + } +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + .border-top-radius(0); +} + + + +// Justified button groups +// ---------------------- + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; + > .btn, + > .btn-group { + float: none; + display: table-cell; + width: 1%; + } + > .btn-group .btn { + width: 100%; + } +} + + +// Checkbox and radio options +// +// In order to support the browser's form validation feedback, powered by the +// `required` attribute, we have to "hide" the inputs via `opacity`. We cannot +// use `display: none;` or `visibility: hidden;` as that also hides the popover. +// This way, we ensure a DOM element is visible to position the popover from. +// +// See https://github.com/twbs/bootstrap/pull/12794 for more. + +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + position: absolute; + z-index: -1; + opacity: 0; +} diff --git a/styles/vendor/bootstrap/buttons.less b/styles/vendor/bootstrap/buttons.less new file mode 100644 index 0000000..d4fc156 --- /dev/null +++ b/styles/vendor/bootstrap/buttons.less @@ -0,0 +1,159 @@ +// +// Buttons +// -------------------------------------------------- + + +// Base styles +// -------------------------------------------------- + +.btn { + display: inline-block; + margin-bottom: 0; // For input.btn + font-weight: @btn-font-weight; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid transparent; + white-space: nowrap; + .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base); + .user-select(none); + + &, + &:active, + &.active { + &:focus { + .tab-focus(); + } + } + + &:hover, + &:focus { + color: @btn-default-color; + text-decoration: none; + } + + &:active, + &.active { + outline: 0; + background-image: none; + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + cursor: not-allowed; + pointer-events: none; // Future-proof disabling of clicks + .opacity(.65); + .box-shadow(none); + } +} + + +// Alternate buttons +// -------------------------------------------------- + +.btn-default { + .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border); +} +.btn-primary { + .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border); +} +// Success appears as green +.btn-success { + .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border); +} +// Info appears as blue-green +.btn-info { + .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border); +} +// Warning appears as orange +.btn-warning { + .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border); +} +// Danger and error appear as red +.btn-danger { + .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); +} + + +// Link buttons +// ------------------------- + +// Make a button look and behave like a link +.btn-link { + color: @link-color; + font-weight: normal; + cursor: pointer; + border-radius: 0; + + &, + &:active, + &[disabled], + fieldset[disabled] & { + background-color: transparent; + .box-shadow(none); + } + &, + &:hover, + &:focus, + &:active { + border-color: transparent; + } + &:hover, + &:focus { + color: @link-hover-color; + text-decoration: underline; + background-color: transparent; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @btn-link-disabled-color; + text-decoration: none; + } + } +} + + +// Button Sizes +// -------------------------------------------------- + +.btn-lg { + // line-height: ensure even-numbered height of button next to large input + .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); +} +.btn-sm { + // line-height: ensure proper height of button next to small input + .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); +} +.btn-xs { + .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small); +} + + +// Block button +// -------------------------------------------------- + +.btn-block { + display: block; + width: 100%; + padding-left: 0; + padding-right: 0; +} + +// Vertically space out multiple block buttons +.btn-block + .btn-block { + margin-top: 5px; +} + +// Specificity overrides +input[type="submit"], +input[type="reset"], +input[type="button"] { + &.btn-block { + width: 100%; + } +} diff --git a/src/less/bootstrap/carousel.less b/styles/vendor/bootstrap/carousel.less similarity index 70% rename from src/less/bootstrap/carousel.less rename to styles/vendor/bootstrap/carousel.less index 3526089..6f50237 100644 --- a/src/less/bootstrap/carousel.less +++ b/styles/vendor/bootstrap/carousel.less @@ -21,7 +21,7 @@ // Account for jankitude on images > img, > a > img { - .img-responsive(); + &:extend(.img-responsive); line-height: 1; } } @@ -69,51 +69,61 @@ top: 0; left: 0; bottom: 0; - width: 15%; - .opacity(.5); - font-size: 20px; + width: @carousel-control-width; + .opacity(@carousel-control-opacity); + font-size: @carousel-control-font-size; color: @carousel-control-color; text-align: center; text-shadow: @carousel-text-shadow; - // We can't have this transition here because webkit cancels the carousel + // We can't have this transition here because WebKit cancels the carousel // animation if you trip this while in the middle of another animation. // Set gradients for backgrounds &.left { #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001)); - background-color: transparent; } &.right { left: auto; right: 0; #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5)); - background-color: transparent; } // Hover/focus state &:hover, &:focus { + outline: 0; color: @carousel-control-color; text-decoration: none; .opacity(.9); } // Toggles - .glyphicon, .icon-prev, - .icon-next { + .icon-next, + .glyphicon-chevron-left, + .glyphicon-chevron-right { position: absolute; top: 50%; - left: 50%; z-index: 5; display: inline-block; + } + .icon-prev, + .glyphicon-chevron-left { + left: 50%; + } + .icon-next, + .glyphicon-chevron-right { + right: 50%; + } + .icon-prev, + .icon-next { width: 20px; height: 20px; margin-top: -10px; margin-left: -10px; font-family: serif; } - // Non-glyphicon toggles + .icon-prev { &:before { content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) @@ -127,14 +137,17 @@ } // Optional indicator pips -// ----------------------------- +// +// Add an unordered list with the following class and add a list item for each +// slide your carousel holds. + .carousel-indicators { position: absolute; bottom: 10px; left: 50%; z-index: 15; - width: 120px; - margin-left: -60px; + width: 60%; + margin-left: -30%; padding-left: 0; list-style: none; text-align: center; @@ -148,6 +161,17 @@ border: 1px solid @carousel-indicator-border-color; border-radius: 10px; cursor: pointer; + + // IE8-9 hack for event handling + // + // Internet Explorer 8-9 does not support clicks on elements without a set + // `background-color`. We cannot use `filter` since that's not viewed as a + // background color by the browser. Thus, a hack is needed. + // + // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we + // set alpha transparency for the best results possible. + background-color: #000 \9; // IE8 + background-color: rgba(0,0,0,0); // IE9 } .active { margin: 0; @@ -178,17 +202,20 @@ // Scale up controls for tablets and up -@media screen and (min-width: @screen-tablet) { +@media screen and (min-width: @screen-sm-min) { // Scale up the controls a smidge - .carousel-control .glyphicon, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - margin-left: -15px; - font-size: 30px; + .carousel-control { + .glyphicon-chevron-left, + .glyphicon-chevron-right, + .icon-prev, + .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } } // Show and left align the captions diff --git a/styles/vendor/bootstrap/close.less b/styles/vendor/bootstrap/close.less new file mode 100644 index 0000000..9b4e74f --- /dev/null +++ b/styles/vendor/bootstrap/close.less @@ -0,0 +1,33 @@ +// +// Close icons +// -------------------------------------------------- + + +.close { + float: right; + font-size: (@font-size-base * 1.5); + font-weight: @close-font-weight; + line-height: 1; + color: @close-color; + text-shadow: @close-text-shadow; + .opacity(.2); + + &:hover, + &:focus { + color: @close-color; + text-decoration: none; + cursor: pointer; + .opacity(.5); + } + + // Additional properties for button version + // iOS requires the button element instead of an anchor tag. + // If you want the anchor version, it requires `href="#"`. + button& { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + } +} diff --git a/src/less/bootstrap/code.less b/styles/vendor/bootstrap/code.less similarity index 68% rename from src/less/bootstrap/code.less rename to styles/vendor/bootstrap/code.less index cd61325..3eed26c 100644 --- a/src/less/bootstrap/code.less +++ b/styles/vendor/bootstrap/code.less @@ -1,11 +1,13 @@ // -// Code (inline and blocK) +// Code (inline and block) // -------------------------------------------------- // Inline and block code styles code, -pre { +kbd, +pre, +samp { font-family: @font-family-monospace; } @@ -16,7 +18,17 @@ code { color: @code-color; background-color: @code-bg; white-space: nowrap; - border-radius: 4px; + border-radius: @border-radius-base; +} + +// User input typically entered via keyboard +kbd { + padding: 2px 4px; + font-size: 90%; + color: @kbd-color; + background-color: @kbd-bg; + border-radius: @border-radius-small; + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); } // Blocks of code @@ -28,28 +40,24 @@ pre { line-height: @line-height-base; word-break: break-all; word-wrap: break-word; - color: @gray-dark; + color: @pre-color; background-color: @pre-bg; border: 1px solid @pre-border-color; border-radius: @border-radius-base; - // Make prettyprint styles more spaced out for readability - &.prettyprint { - margin-bottom: @line-height-computed; - } - // Account for some code outputs that place code tags in pre tags code { padding: 0; + font-size: inherit; color: inherit; white-space: pre-wrap; background-color: transparent; - border: 0; + border-radius: 0; } } // Enable scrollable blocks of code .pre-scrollable { - max-height: 340px; + max-height: @pre-scrollable-max-height; overflow-y: scroll; } diff --git a/styles/vendor/bootstrap/component-animations.less b/styles/vendor/bootstrap/component-animations.less new file mode 100644 index 0000000..9400a0d --- /dev/null +++ b/styles/vendor/bootstrap/component-animations.less @@ -0,0 +1,31 @@ +// +// Component animations +// -------------------------------------------------- + +// Heads up! +// +// We don't use the `.opacity()` mixin here since it causes a bug with text +// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. + +.fade { + opacity: 0; + .transition(opacity .15s linear); + &.in { + opacity: 1; + } +} + +.collapse { + display: none; + + &.in { display: block; } + tr&.in { display: table-row; } + tbody&.in { display: table-row-group; } +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + .transition(height .35s ease); +} diff --git a/styles/vendor/bootstrap/dropdowns.less b/styles/vendor/bootstrap/dropdowns.less new file mode 100644 index 0000000..8d0a6a2 --- /dev/null +++ b/styles/vendor/bootstrap/dropdowns.less @@ -0,0 +1,214 @@ +// +// Dropdown menus +// -------------------------------------------------- + + +// Dropdown arrow/caret +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: @caret-width-base solid; + border-right: @caret-width-base solid transparent; + border-left: @caret-width-base solid transparent; +} + +// The dropdown wrapper (div) +.dropdown { + position: relative; +} + +// Prevent the focus on the dropdown toggle when closing dropdowns +.dropdown-toggle:focus { + outline: 0; +} + +// The dropdown menu (ul) +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: @zindex-dropdown; + display: none; // none by default, but block on "open" of the menu + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; // override default ul + list-style: none; + font-size: @font-size-base; + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + background-color: @dropdown-bg; + border: 1px solid @dropdown-fallback-border; // IE8 fallback + border: 1px solid @dropdown-border; + border-radius: @border-radius-base; + .box-shadow(0 6px 12px rgba(0,0,0,.175)); + background-clip: padding-box; + + // Aligns the dropdown menu to right + // + // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` + &.pull-right { + right: 0; + left: auto; + } + + // Dividers (basically an hr) within the dropdown + .divider { + .nav-divider(@dropdown-divider-bg); + } + + // Links within the dropdown menu + > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: @line-height-base; + color: @dropdown-link-color; + white-space: nowrap; // prevent links from randomly breaking onto new lines + } +} + +// Hover/Focus state +.dropdown-menu > li > a { + &:hover, + &:focus { + text-decoration: none; + color: @dropdown-link-hover-color; + background-color: @dropdown-link-hover-bg; + } +} + +// Active state +.dropdown-menu > .active > a { + &, + &:hover, + &:focus { + color: @dropdown-link-active-color; + text-decoration: none; + outline: 0; + background-color: @dropdown-link-active-bg; + } +} + +// Disabled state +// +// Gray out text and ensure the hover/focus state remains gray + +.dropdown-menu > .disabled > a { + &, + &:hover, + &:focus { + color: @dropdown-link-disabled-color; + } +} +// Nuke hover/focus effects +.dropdown-menu > .disabled > a { + &:hover, + &:focus { + text-decoration: none; + background-color: transparent; + background-image: none; // Remove CSS gradient + .reset-filter(); + cursor: not-allowed; + } +} + +// Open state for the dropdown +.open { + // Show the menu + > .dropdown-menu { + display: block; + } + + // Remove the outline when :focus is triggered + > a { + outline: 0; + } +} + +// Menu positioning +// +// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown +// menu with the parent. +.dropdown-menu-right { + left: auto; // Reset the default from `.dropdown-menu` + right: 0; +} +// With v3, we enabled auto-flipping if you have a dropdown within a right +// aligned nav component. To enable the undoing of that, we provide an override +// to restore the default dropdown menu alignment. +// +// This is only for left-aligning a dropdown menu within a `.navbar-right` or +// `.pull-right` nav component. +.dropdown-menu-left { + left: 0; + right: auto; +} + +// Dropdown section headers +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: @font-size-small; + line-height: @line-height-base; + color: @dropdown-header-color; +} + +// Backdrop to catch body clicks on mobile, etc. +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: (@zindex-dropdown - 10); +} + +// Right aligned dropdowns +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +// Allow for dropdowns to go bottom up (aka, dropup-menu) +// +// Just add .dropup after the standard .dropdown class and you're set, bro. +// TODO: abstract this so that the navbar fixed styles are not placed here? + +.dropup, +.navbar-fixed-bottom .dropdown { + // Reverse the caret + .caret { + border-top: 0; + border-bottom: @caret-width-base solid; + content: ""; + } + // Different positioning for bottom up menu + .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; + } +} + + +// Component alignment +// +// Reiterate per navbar.less and the modified component alignment there. + +@media (min-width: @grid-float-breakpoint) { + .navbar-right { + .dropdown-menu { + .dropdown-menu-right(); + } + // Necessary for overrides of the default right aligned menu. + // Will remove come v4 in all likelihood. + .dropdown-menu-left { + .dropdown-menu-left(); + } + } +} + diff --git a/styles/vendor/bootstrap/forms.less b/styles/vendor/bootstrap/forms.less new file mode 100644 index 0000000..0368c0c --- /dev/null +++ b/styles/vendor/bootstrap/forms.less @@ -0,0 +1,480 @@ +// +// Forms +// -------------------------------------------------- + + +// Normalize non-controls +// +// Restyle and baseline non-control form elements. + +fieldset { + padding: 0; + margin: 0; + border: 0; + // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets, + // so we reset that to ensure it behaves more like a standard block element. + // See https://github.com/twbs/bootstrap/issues/12359. + min-width: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: @line-height-computed; + font-size: (@font-size-base * 1.5); + line-height: inherit; + color: @legend-color; + border: 0; + border-bottom: 1px solid @legend-border-color; +} + +label { + display: inline-block; + max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) + margin-bottom: 5px; + font-weight: bold; +} + + +// Normalize form controls +// +// While most of our form styles require extra classes, some basic normalization +// is required to ensure optimum display with or without those classes to better +// address browser inconsistencies. + +// Override content-box in Normalize (* isn't specific enough) +input[type="search"] { + .box-sizing(border-box); +} + +// Position radios and checkboxes better +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; // IE8-9 + line-height: normal; +} + +// Set the height of file controls to match text inputs +input[type="file"] { + display: block; +} + +// Make range inputs behave like textual form controls +input[type="range"] { + display: block; + width: 100%; +} + +// Make multiple select elements height not fixed +select[multiple], +select[size] { + height: auto; +} + +// Focus for file, radio, and checkbox +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + .tab-focus(); +} + +// Adjust output element +output { + display: block; + padding-top: (@padding-base-vertical + 1); + font-size: @font-size-base; + line-height: @line-height-base; + color: @input-color; +} + + +// Common form controls +// +// Shared size and type resets for form controls. Apply `.form-control` to any +// of the following form controls: +// +// select +// textarea +// input[type="text"] +// input[type="password"] +// input[type="datetime"] +// input[type="datetime-local"] +// input[type="date"] +// input[type="month"] +// input[type="time"] +// input[type="week"] +// input[type="number"] +// input[type="email"] +// input[type="url"] +// input[type="search"] +// input[type="tel"] +// input[type="color"] + +.form-control { + display: block; + width: 100%; + height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) + padding: @padding-base-vertical @padding-base-horizontal; + font-size: @font-size-base; + line-height: @line-height-base; + color: @input-color; + background-color: @input-bg; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid @input-border; + border-radius: @input-border-radius; + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); + .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s"); + + // Customize the `:focus` state to imitate native WebKit styles. + .form-control-focus(); + + // Placeholder + .placeholder(); + + // Disabled and read-only inputs + // + // HTML5 says that controls under a fieldset > legend:first-child won't be + // disabled if the fieldset is disabled. Due to implementation difficulty, we + // don't honor that edge case; we style them as disabled anyway. + &[disabled], + &[readonly], + fieldset[disabled] & { + cursor: not-allowed; + background-color: @input-bg-disabled; + opacity: 1; // iOS fix for unreadable disabled content + } + + // Reset height for `textarea`s + textarea& { + height: auto; + } +} + + +// Search inputs in iOS +// +// This overrides the extra rounded corners on search inputs in iOS so that our +// `.form-control` class can properly style them. Note that this cannot simply +// be added to `.form-control` as it's not specific enough. For details, see +// https://github.com/twbs/bootstrap/issues/11586. + +input[type="search"] { + -webkit-appearance: none; +} + + +// Special styles for iOS date input +// +// In Mobile Safari, date inputs require a pixel line-height that matches the +// given height of the input. Since this fucks up everything else, we have to +// appropriately reset it for Internet Explorer and the size variations. + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: @input-height-base; + // IE8+ misaligns the text within date inputs, so we reset + line-height: @line-height-base ~"\0"; + + &.input-sm { + line-height: @input-height-small; + } + &.input-lg { + line-height: @input-height-large; + } +} + + +// Form groups +// +// Designed to help with the organization and spacing of vertical forms. For +// horizontal forms, use the predefined grid classes. + +.form-group { + margin-bottom: 15px; +} + + +// Checkboxes and radios +// +// Indent the labels to position radios/checkboxes as hanging controls. + +.radio, +.checkbox { + display: block; + min-height: @line-height-computed; // clear the floating input if there is no label text + margin-top: 10px; + margin-bottom: 10px; + + label { + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; + } +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing +} + +// Radios and checkboxes on same line +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; // space out consecutive inline controls +} + +// Apply same disabled cursor tweak as for inputs +// +// Note: Neither radios nor checkboxes can be readonly. +input[type="radio"], +input[type="checkbox"], +.radio, +.radio-inline, +.checkbox, +.checkbox-inline { + &[disabled], + fieldset[disabled] & { + cursor: not-allowed; + } +} + + +// Form control sizing +// +// Build on `.form-control` with modifier classes to decrease or increase the +// height and font-size of form controls. + +.input-sm { + .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); +} + +.input-lg { + .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); +} + + +// Form control feedback states +// +// Apply contextual and semantic states to individual form controls. + +.has-feedback { + // Enable absolute positioning + position: relative; + + // Ensure icons don't overlap text + .form-control { + padding-right: (@input-height-base * 1.25); + } +} +// Feedback icon (requires .glyphicon classes) +.form-control-feedback { + position: absolute; + top: (@line-height-computed + 5); // Height of the `label` and its margin + right: 0; + z-index: 2; // Ensure icon is above input groups + display: block; + width: @input-height-base; + height: @input-height-base; + line-height: @input-height-base; + text-align: center; +} +.input-lg + .form-control-feedback { + width: @input-height-large; + height: @input-height-large; + line-height: @input-height-large; +} +.input-sm + .form-control-feedback { + width: @input-height-small; + height: @input-height-small; + line-height: @input-height-small; +} + +// Feedback states +.has-success { + .form-control-validation(@state-success-text; @state-success-text; @state-success-bg); +} +.has-warning { + .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg); +} +.has-error { + .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg); +} + + +// Static form control text +// +// Apply class to a `p` element to make any string of text align with labels in +// a horizontal form layout. + +.form-control-static { + margin-bottom: 0; // Remove default margin from `p` +} + + +// Help text +// +// Apply to any element you wish to create light text for placement immediately +// below a form control. Use for general help, formatting, or instructional text. + +.help-block { + display: block; // account for any element using help-block + margin-top: 5px; + margin-bottom: 10px; + color: lighten(@text-color, 25%); // lighten the text some for contrast +} + + + +// Inline forms +// +// Make forms appear inline(-block) by adding the `.form-inline` class. Inline +// forms begin stacked on extra small (mobile) devices and then go inline when +// viewports reach <768px. +// +// Requires wrapping inputs and labels with `.form-group` for proper display of +// default HTML form controls and our custom form controls (e.g., input groups). +// +// Heads up! This is mixin-ed into `.navbar-form` in navbars.less. + +.form-inline { + + // Kick in the inline + @media (min-width: @screen-sm-min) { + // Inline-block all the things for "inline" + .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + + // In navbar-form, allow folks to *not* use `.form-group` + .form-control { + display: inline-block; + width: auto; // Prevent labels from stacking above inputs in `.form-group` + vertical-align: middle; + } + + .input-group { + display: inline-table; + vertical-align: middle; + + .input-group-addon, + .input-group-btn, + .form-control { + width: auto; + } + } + + // Input groups need that 100% width though + .input-group > .form-control { + width: 100%; + } + + .control-label { + margin-bottom: 0; + vertical-align: middle; + } + + // Remove default margin on radios/checkboxes that were used for stacking, and + // then undo the floating of radios and checkboxes to match (which also avoids + // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969). + .radio, + .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + padding-left: 0; + vertical-align: middle; + } + .radio input[type="radio"], + .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } + + // Validation states + // + // Reposition the icon because it's now within a grid column and columns have + // `position: relative;` on them. Also accounts for the grid gutter padding. + .has-feedback .form-control-feedback { + top: 0; + } + } +} + + +// Horizontal forms +// +// Horizontal forms are built on grid classes and allow you to create forms with +// labels on the left and inputs on the right. + +.form-horizontal { + + // Consistent vertical alignment of radios and checkboxes + // + // Labels also get some reset styles, but that is scoped to a media query below. + .radio, + .checkbox, + .radio-inline, + .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: (@padding-base-vertical + 1); // Default padding plus a border + } + // Account for padding we're adding to ensure the alignment and of help text + // and other content below items + .radio, + .checkbox { + min-height: (@line-height-computed + (@padding-base-vertical + 1)); + } + + // Make form groups behave like rows + .form-group { + .make-row(); + } + + .form-control-static { + padding-top: (@padding-base-vertical + 1); + padding-bottom: (@padding-base-vertical + 1); + } + + // Reset spacing and right align labels, but scope to media queries so that + // labels on narrow viewports stack the same as a default form example. + @media (min-width: @screen-sm-min) { + .control-label { + text-align: right; + margin-bottom: 0; + padding-top: (@padding-base-vertical + 1); // Default padding plus a border + } + } + + // Validation states + // + // Reposition the icon because it's now within a grid column and columns have + // `position: relative;` on them. Also accounts for the grid gutter padding. + .has-feedback .form-control-feedback { + top: 0; + right: (@grid-gutter-width / 2); + } +} diff --git a/styles/vendor/bootstrap/glyphicons.less b/styles/vendor/bootstrap/glyphicons.less new file mode 100644 index 0000000..789c5e7 --- /dev/null +++ b/styles/vendor/bootstrap/glyphicons.less @@ -0,0 +1,233 @@ +// +// Glyphicons for Bootstrap +// +// Since icons are fonts, they can be placed anywhere text is placed and are +// thus automatically sized to match the surrounding child. To use, create an +// inline element with the appropriate classes, like so: +// +// Star + +// Import the fonts +@font-face { + font-family: 'Glyphicons Halflings'; + src: ~"url('@{icon-font-path}@{icon-font-name}.eot')"; + src: ~"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')", + ~"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')", + ~"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')", + ~"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')"; +} + +// Catchall baseclass +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +// Individual icons +.glyphicon-asterisk { &:before { content: "\2a"; } } +.glyphicon-plus { &:before { content: "\2b"; } } +.glyphicon-euro { &:before { content: "\20ac"; } } +.glyphicon-minus { &:before { content: "\2212"; } } +.glyphicon-cloud { &:before { content: "\2601"; } } +.glyphicon-envelope { &:before { content: "\2709"; } } +.glyphicon-pencil { &:before { content: "\270f"; } } +.glyphicon-glass { &:before { content: "\e001"; } } +.glyphicon-music { &:before { content: "\e002"; } } +.glyphicon-search { &:before { content: "\e003"; } } +.glyphicon-heart { &:before { content: "\e005"; } } +.glyphicon-star { &:before { content: "\e006"; } } +.glyphicon-star-empty { &:before { content: "\e007"; } } +.glyphicon-user { &:before { content: "\e008"; } } +.glyphicon-film { &:before { content: "\e009"; } } +.glyphicon-th-large { &:before { content: "\e010"; } } +.glyphicon-th { &:before { content: "\e011"; } } +.glyphicon-th-list { &:before { content: "\e012"; } } +.glyphicon-ok { &:before { content: "\e013"; } } +.glyphicon-remove { &:before { content: "\e014"; } } +.glyphicon-zoom-in { &:before { content: "\e015"; } } +.glyphicon-zoom-out { &:before { content: "\e016"; } } +.glyphicon-off { &:before { content: "\e017"; } } +.glyphicon-signal { &:before { content: "\e018"; } } +.glyphicon-cog { &:before { content: "\e019"; } } +.glyphicon-trash { &:before { content: "\e020"; } } +.glyphicon-home { &:before { content: "\e021"; } } +.glyphicon-file { &:before { content: "\e022"; } } +.glyphicon-time { &:before { content: "\e023"; } } +.glyphicon-road { &:before { content: "\e024"; } } +.glyphicon-download-alt { &:before { content: "\e025"; } } +.glyphicon-download { &:before { content: "\e026"; } } +.glyphicon-upload { &:before { content: "\e027"; } } +.glyphicon-inbox { &:before { content: "\e028"; } } +.glyphicon-play-circle { &:before { content: "\e029"; } } +.glyphicon-repeat { &:before { content: "\e030"; } } +.glyphicon-refresh { &:before { content: "\e031"; } } +.glyphicon-list-alt { &:before { content: "\e032"; } } +.glyphicon-lock { &:before { content: "\e033"; } } +.glyphicon-flag { &:before { content: "\e034"; } } +.glyphicon-headphones { &:before { content: "\e035"; } } +.glyphicon-volume-off { &:before { content: "\e036"; } } +.glyphicon-volume-down { &:before { content: "\e037"; } } +.glyphicon-volume-up { &:before { content: "\e038"; } } +.glyphicon-qrcode { &:before { content: "\e039"; } } +.glyphicon-barcode { &:before { content: "\e040"; } } +.glyphicon-tag { &:before { content: "\e041"; } } +.glyphicon-tags { &:before { content: "\e042"; } } +.glyphicon-book { &:before { content: "\e043"; } } +.glyphicon-bookmark { &:before { content: "\e044"; } } +.glyphicon-print { &:before { content: "\e045"; } } +.glyphicon-camera { &:before { content: "\e046"; } } +.glyphicon-font { &:before { content: "\e047"; } } +.glyphicon-bold { &:before { content: "\e048"; } } +.glyphicon-italic { &:before { content: "\e049"; } } +.glyphicon-text-height { &:before { content: "\e050"; } } +.glyphicon-text-width { &:before { content: "\e051"; } } +.glyphicon-align-left { &:before { content: "\e052"; } } +.glyphicon-align-center { &:before { content: "\e053"; } } +.glyphicon-align-right { &:before { content: "\e054"; } } +.glyphicon-align-justify { &:before { content: "\e055"; } } +.glyphicon-list { &:before { content: "\e056"; } } +.glyphicon-indent-left { &:before { content: "\e057"; } } +.glyphicon-indent-right { &:before { content: "\e058"; } } +.glyphicon-facetime-video { &:before { content: "\e059"; } } +.glyphicon-picture { &:before { content: "\e060"; } } +.glyphicon-map-marker { &:before { content: "\e062"; } } +.glyphicon-adjust { &:before { content: "\e063"; } } +.glyphicon-tint { &:before { content: "\e064"; } } +.glyphicon-edit { &:before { content: "\e065"; } } +.glyphicon-share { &:before { content: "\e066"; } } +.glyphicon-check { &:before { content: "\e067"; } } +.glyphicon-move { &:before { content: "\e068"; } } +.glyphicon-step-backward { &:before { content: "\e069"; } } +.glyphicon-fast-backward { &:before { content: "\e070"; } } +.glyphicon-backward { &:before { content: "\e071"; } } +.glyphicon-play { &:before { content: "\e072"; } } +.glyphicon-pause { &:before { content: "\e073"; } } +.glyphicon-stop { &:before { content: "\e074"; } } +.glyphicon-forward { &:before { content: "\e075"; } } +.glyphicon-fast-forward { &:before { content: "\e076"; } } +.glyphicon-step-forward { &:before { content: "\e077"; } } +.glyphicon-eject { &:before { content: "\e078"; } } +.glyphicon-chevron-left { &:before { content: "\e079"; } } +.glyphicon-chevron-right { &:before { content: "\e080"; } } +.glyphicon-plus-sign { &:before { content: "\e081"; } } +.glyphicon-minus-sign { &:before { content: "\e082"; } } +.glyphicon-remove-sign { &:before { content: "\e083"; } } +.glyphicon-ok-sign { &:before { content: "\e084"; } } +.glyphicon-question-sign { &:before { content: "\e085"; } } +.glyphicon-info-sign { &:before { content: "\e086"; } } +.glyphicon-screenshot { &:before { content: "\e087"; } } +.glyphicon-remove-circle { &:before { content: "\e088"; } } +.glyphicon-ok-circle { &:before { content: "\e089"; } } +.glyphicon-ban-circle { &:before { content: "\e090"; } } +.glyphicon-arrow-left { &:before { content: "\e091"; } } +.glyphicon-arrow-right { &:before { content: "\e092"; } } +.glyphicon-arrow-up { &:before { content: "\e093"; } } +.glyphicon-arrow-down { &:before { content: "\e094"; } } +.glyphicon-share-alt { &:before { content: "\e095"; } } +.glyphicon-resize-full { &:before { content: "\e096"; } } +.glyphicon-resize-small { &:before { content: "\e097"; } } +.glyphicon-exclamation-sign { &:before { content: "\e101"; } } +.glyphicon-gift { &:before { content: "\e102"; } } +.glyphicon-leaf { &:before { content: "\e103"; } } +.glyphicon-fire { &:before { content: "\e104"; } } +.glyphicon-eye-open { &:before { content: "\e105"; } } +.glyphicon-eye-close { &:before { content: "\e106"; } } +.glyphicon-warning-sign { &:before { content: "\e107"; } } +.glyphicon-plane { &:before { content: "\e108"; } } +.glyphicon-calendar { &:before { content: "\e109"; } } +.glyphicon-random { &:before { content: "\e110"; } } +.glyphicon-comment { &:before { content: "\e111"; } } +.glyphicon-magnet { &:before { content: "\e112"; } } +.glyphicon-chevron-up { &:before { content: "\e113"; } } +.glyphicon-chevron-down { &:before { content: "\e114"; } } +.glyphicon-retweet { &:before { content: "\e115"; } } +.glyphicon-shopping-cart { &:before { content: "\e116"; } } +.glyphicon-folder-close { &:before { content: "\e117"; } } +.glyphicon-folder-open { &:before { content: "\e118"; } } +.glyphicon-resize-vertical { &:before { content: "\e119"; } } +.glyphicon-resize-horizontal { &:before { content: "\e120"; } } +.glyphicon-hdd { &:before { content: "\e121"; } } +.glyphicon-bullhorn { &:before { content: "\e122"; } } +.glyphicon-bell { &:before { content: "\e123"; } } +.glyphicon-certificate { &:before { content: "\e124"; } } +.glyphicon-thumbs-up { &:before { content: "\e125"; } } +.glyphicon-thumbs-down { &:before { content: "\e126"; } } +.glyphicon-hand-right { &:before { content: "\e127"; } } +.glyphicon-hand-left { &:before { content: "\e128"; } } +.glyphicon-hand-up { &:before { content: "\e129"; } } +.glyphicon-hand-down { &:before { content: "\e130"; } } +.glyphicon-circle-arrow-right { &:before { content: "\e131"; } } +.glyphicon-circle-arrow-left { &:before { content: "\e132"; } } +.glyphicon-circle-arrow-up { &:before { content: "\e133"; } } +.glyphicon-circle-arrow-down { &:before { content: "\e134"; } } +.glyphicon-globe { &:before { content: "\e135"; } } +.glyphicon-wrench { &:before { content: "\e136"; } } +.glyphicon-tasks { &:before { content: "\e137"; } } +.glyphicon-filter { &:before { content: "\e138"; } } +.glyphicon-briefcase { &:before { content: "\e139"; } } +.glyphicon-fullscreen { &:before { content: "\e140"; } } +.glyphicon-dashboard { &:before { content: "\e141"; } } +.glyphicon-paperclip { &:before { content: "\e142"; } } +.glyphicon-heart-empty { &:before { content: "\e143"; } } +.glyphicon-link { &:before { content: "\e144"; } } +.glyphicon-phone { &:before { content: "\e145"; } } +.glyphicon-pushpin { &:before { content: "\e146"; } } +.glyphicon-usd { &:before { content: "\e148"; } } +.glyphicon-gbp { &:before { content: "\e149"; } } +.glyphicon-sort { &:before { content: "\e150"; } } +.glyphicon-sort-by-alphabet { &:before { content: "\e151"; } } +.glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } } +.glyphicon-sort-by-order { &:before { content: "\e153"; } } +.glyphicon-sort-by-order-alt { &:before { content: "\e154"; } } +.glyphicon-sort-by-attributes { &:before { content: "\e155"; } } +.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } } +.glyphicon-unchecked { &:before { content: "\e157"; } } +.glyphicon-expand { &:before { content: "\e158"; } } +.glyphicon-collapse-down { &:before { content: "\e159"; } } +.glyphicon-collapse-up { &:before { content: "\e160"; } } +.glyphicon-log-in { &:before { content: "\e161"; } } +.glyphicon-flash { &:before { content: "\e162"; } } +.glyphicon-log-out { &:before { content: "\e163"; } } +.glyphicon-new-window { &:before { content: "\e164"; } } +.glyphicon-record { &:before { content: "\e165"; } } +.glyphicon-save { &:before { content: "\e166"; } } +.glyphicon-open { &:before { content: "\e167"; } } +.glyphicon-saved { &:before { content: "\e168"; } } +.glyphicon-import { &:before { content: "\e169"; } } +.glyphicon-export { &:before { content: "\e170"; } } +.glyphicon-send { &:before { content: "\e171"; } } +.glyphicon-floppy-disk { &:before { content: "\e172"; } } +.glyphicon-floppy-saved { &:before { content: "\e173"; } } +.glyphicon-floppy-remove { &:before { content: "\e174"; } } +.glyphicon-floppy-save { &:before { content: "\e175"; } } +.glyphicon-floppy-open { &:before { content: "\e176"; } } +.glyphicon-credit-card { &:before { content: "\e177"; } } +.glyphicon-transfer { &:before { content: "\e178"; } } +.glyphicon-cutlery { &:before { content: "\e179"; } } +.glyphicon-header { &:before { content: "\e180"; } } +.glyphicon-compressed { &:before { content: "\e181"; } } +.glyphicon-earphone { &:before { content: "\e182"; } } +.glyphicon-phone-alt { &:before { content: "\e183"; } } +.glyphicon-tower { &:before { content: "\e184"; } } +.glyphicon-stats { &:before { content: "\e185"; } } +.glyphicon-sd-video { &:before { content: "\e186"; } } +.glyphicon-hd-video { &:before { content: "\e187"; } } +.glyphicon-subtitles { &:before { content: "\e188"; } } +.glyphicon-sound-stereo { &:before { content: "\e189"; } } +.glyphicon-sound-dolby { &:before { content: "\e190"; } } +.glyphicon-sound-5-1 { &:before { content: "\e191"; } } +.glyphicon-sound-6-1 { &:before { content: "\e192"; } } +.glyphicon-sound-7-1 { &:before { content: "\e193"; } } +.glyphicon-copyright-mark { &:before { content: "\e194"; } } +.glyphicon-registration-mark { &:before { content: "\e195"; } } +.glyphicon-cloud-download { &:before { content: "\e197"; } } +.glyphicon-cloud-upload { &:before { content: "\e198"; } } +.glyphicon-tree-conifer { &:before { content: "\e199"; } } +.glyphicon-tree-deciduous { &:before { content: "\e200"; } } diff --git a/styles/vendor/bootstrap/grid.less b/styles/vendor/bootstrap/grid.less new file mode 100644 index 0000000..e100655 --- /dev/null +++ b/styles/vendor/bootstrap/grid.less @@ -0,0 +1,84 @@ +// +// Grid system +// -------------------------------------------------- + + +// Container widths +// +// Set the container width, and override it for fixed navbars in media queries. + +.container { + .container-fixed(); + + @media (min-width: @screen-sm-min) { + width: @container-sm; + } + @media (min-width: @screen-md-min) { + width: @container-md; + } + @media (min-width: @screen-lg-min) { + width: @container-lg; + } +} + + +// Fluid container +// +// Utilizes the mixin meant for fixed width containers, but without any defined +// width for fluid, full width layouts. + +.container-fluid { + .container-fixed(); +} + + +// Row +// +// Rows contain and clear the floats of your columns. + +.row { + .make-row(); +} + + +// Columns +// +// Common styles for small and large grid columns + +.make-grid-columns(); + + +// Extra small grid +// +// Columns, offsets, pushes, and pulls for extra small devices like +// smartphones. + +.make-grid(xs); + + +// Small grid +// +// Columns, offsets, pushes, and pulls for the small device range, from phones +// to tablets. + +@media (min-width: @screen-sm-min) { + .make-grid(sm); +} + + +// Medium grid +// +// Columns, offsets, pushes, and pulls for the desktop device range. + +@media (min-width: @screen-md-min) { + .make-grid(md); +} + + +// Large grid +// +// Columns, offsets, pushes, and pulls for the large desktop device range. + +@media (min-width: @screen-lg-min) { + .make-grid(lg); +} diff --git a/styles/vendor/bootstrap/input-groups.less b/styles/vendor/bootstrap/input-groups.less new file mode 100644 index 0000000..a111474 --- /dev/null +++ b/styles/vendor/bootstrap/input-groups.less @@ -0,0 +1,162 @@ +// +// Input groups +// -------------------------------------------------- + +// Base styles +// ------------------------- +.input-group { + position: relative; // For dropdowns + display: table; + border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table + + // Undo padding and float of grid classes + &[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; + } + + .form-control { + // Ensure that the input is always above the *appended* addon button for + // proper border colors. + position: relative; + z-index: 2; + + // IE9 fubars the placeholder attribute in text inputs and the arrows on + // select elements in input groups. To fix it, we float the input. Details: + // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855 + float: left; + + width: 100%; + margin-bottom: 0; + } +} + +// Sizing options +// +// Remix the default form control sizing classes into new ones for easier +// manipulation. + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { .input-lg(); } +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { .input-sm(); } + + +// Display as table-cell +// ------------------------- +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; + + &:not(:first-child):not(:last-child) { + border-radius: 0; + } +} +// Addon and addon wrapper for buttons +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; // Match the inputs +} + +// Text input groups +// ------------------------- +.input-group-addon { + padding: @padding-base-vertical @padding-base-horizontal; + font-size: @font-size-base; + font-weight: normal; + line-height: 1; + color: @input-color; + text-align: center; + background-color: @input-group-addon-bg; + border: 1px solid @input-group-addon-border-color; + border-radius: @border-radius-base; + + // Sizing + &.input-sm { + padding: @padding-small-vertical @padding-small-horizontal; + font-size: @font-size-small; + border-radius: @border-radius-small; + } + &.input-lg { + padding: @padding-large-vertical @padding-large-horizontal; + font-size: @font-size-large; + border-radius: @border-radius-large; + } + + // Nuke default margins from checkboxes and radios to vertically center within. + input[type="radio"], + input[type="checkbox"] { + margin-top: 0; + } +} + +// Reset rounded corners +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + .border-right-radius(0); +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + .border-left-radius(0); +} +.input-group-addon:last-child { + border-left: 0; +} + +// Button input groups +// ------------------------- +.input-group-btn { + position: relative; + // Jankily prevent input button groups from wrapping with `white-space` and + // `font-size` in combination with `inline-block` on buttons. + font-size: 0; + white-space: nowrap; + + // Negative margin for spacing, position for bringing hovered/focused/actived + // element above the siblings. + > .btn { + position: relative; + + .btn { + margin-left: -1px; + } + // Bring the "active" button to the front + &:hover, + &:focus, + &:active { + z-index: 2; + } + } + + // Negative margin to only have a 1px border between the two + &:first-child { + > .btn, + > .btn-group { + margin-right: -1px; + } + } + &:last-child { + > .btn, + > .btn-group { + margin-left: -1px; + } + } +} diff --git a/styles/vendor/bootstrap/jumbotron.less b/styles/vendor/bootstrap/jumbotron.less new file mode 100644 index 0000000..27cd8b8 --- /dev/null +++ b/styles/vendor/bootstrap/jumbotron.less @@ -0,0 +1,48 @@ +// +// Jumbotron +// -------------------------------------------------- + + +.jumbotron { + padding: @jumbotron-padding; + margin-bottom: @jumbotron-padding; + color: @jumbotron-color; + background-color: @jumbotron-bg; + + h1, + .h1 { + color: @jumbotron-heading-color; + } + p { + margin-bottom: (@jumbotron-padding / 2); + font-size: @jumbotron-font-size; + font-weight: 200; + } + + > hr { + border-top-color: darken(@jumbotron-bg, 10%); + } + + .container & { + border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container + } + + .container { + max-width: 100%; + } + + @media screen and (min-width: @screen-sm-min) { + padding-top: (@jumbotron-padding * 1.6); + padding-bottom: (@jumbotron-padding * 1.6); + + .container & { + padding-left: (@jumbotron-padding * 2); + padding-right: (@jumbotron-padding * 2); + } + + h1, + .h1 { + font-size: (@font-size-base * 4.5); + } + } +} diff --git a/styles/vendor/bootstrap/labels.less b/styles/vendor/bootstrap/labels.less new file mode 100644 index 0000000..9a5a270 --- /dev/null +++ b/styles/vendor/bootstrap/labels.less @@ -0,0 +1,64 @@ +// +// Labels +// -------------------------------------------------- + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: @label-color; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; + + // Add hover effects, but only for links + a& { + &:hover, + &:focus { + color: @label-link-hover-color; + text-decoration: none; + cursor: pointer; + } + } + + // Empty labels collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for labels in buttons + .btn & { + position: relative; + top: -1px; + } +} + +// Colors +// Contextual variations (linked labels get darker on :hover) + +.label-default { + .label-variant(@label-default-bg); +} + +.label-primary { + .label-variant(@label-primary-bg); +} + +.label-success { + .label-variant(@label-success-bg); +} + +.label-info { + .label-variant(@label-info-bg); +} + +.label-warning { + .label-variant(@label-warning-bg); +} + +.label-danger { + .label-variant(@label-danger-bg); +} diff --git a/styles/vendor/bootstrap/list-group.less b/styles/vendor/bootstrap/list-group.less new file mode 100644 index 0000000..2514389 --- /dev/null +++ b/styles/vendor/bootstrap/list-group.less @@ -0,0 +1,129 @@ +// +// List groups +// -------------------------------------------------- + + +// Base class +// +// Easily usable on
          ,
            , or
            . + +.list-group { + // No need to set list-style: none; since .list-group-item is block level + margin-bottom: 20px; + padding-left: 0; // reset padding because ul and ol +} + + +// Individual list items +// +// Use on `li`s or `div`s within the `.list-group` parent. + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + // Place the border on the list items and negative margin up for better styling + margin-bottom: -1px; + background-color: @list-group-bg; + border: 1px solid @list-group-border; + + // Round the first and last items + &:first-child { + .border-top-radius(@list-group-border-radius); + } + &:last-child { + margin-bottom: 0; + .border-bottom-radius(@list-group-border-radius); + } + + // Align badges within list items + > .badge { + float: right; + } + > .badge + .badge { + margin-right: 5px; + } +} + + +// Linked list items +// +// Use anchor elements instead of `li`s or `div`s to create linked list items. +// Includes an extra `.active` modifier class for showing selected items. + +a.list-group-item { + color: @list-group-link-color; + + .list-group-item-heading { + color: @list-group-link-heading-color; + } + + // Hover state + &:hover, + &:focus { + text-decoration: none; + color: @list-group-link-hover-color; + background-color: @list-group-hover-bg; + } +} + +.list-group-item { + // Disabled state + &.disabled, + &.disabled:hover, + &.disabled:focus { + background-color: @list-group-disabled-bg; + color: @list-group-disabled-color; + + // Force color to inherit for custom content + .list-group-item-heading { + color: inherit; + } + .list-group-item-text { + color: @list-group-disabled-text-color; + } + } + + // Active class on item itself, not parent + &.active, + &.active:hover, + &.active:focus { + z-index: 2; // Place active items above their siblings for proper border styling + color: @list-group-active-color; + background-color: @list-group-active-bg; + border-color: @list-group-active-border; + + // Force color to inherit for custom content + .list-group-item-heading { + color: inherit; + } + .list-group-item-text { + color: @list-group-active-text-color; + } + } +} + + +// Contextual variants +// +// Add modifier classes to change text and background color on individual items. +// Organizationally, this must come after the `:hover` states. + +.list-group-item-variant(success; @state-success-bg; @state-success-text); +.list-group-item-variant(info; @state-info-bg; @state-info-text); +.list-group-item-variant(warning; @state-warning-bg; @state-warning-text); +.list-group-item-variant(danger; @state-danger-bg; @state-danger-text); + + +// Custom content options +// +// Extra classes for creating well-formatted content within `.list-group-item`s. + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} diff --git a/styles/vendor/bootstrap/media.less b/styles/vendor/bootstrap/media.less new file mode 100644 index 0000000..5ad22cd --- /dev/null +++ b/styles/vendor/bootstrap/media.less @@ -0,0 +1,56 @@ +// Media objects +// Source: http://stubbornella.org/content/?p=497 +// -------------------------------------------------- + + +// Common styles +// ------------------------- + +// Clear the floats +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +// Proper spacing between instances of .media +.media, +.media .media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} + +// For images and videos, set to block +.media-object { + display: block; +} + +// Reset margins on headings for tighter default spacing +.media-heading { + margin: 0 0 5px; +} + + +// Media image alignment +// ------------------------- + +.media { + > .pull-left { + margin-right: 10px; + } + > .pull-right { + margin-left: 10px; + } +} + + +// Media list variation +// ------------------------- + +// Undo default ul/ol styles +.media-list { + padding-left: 0; + list-style: none; +} diff --git a/styles/vendor/bootstrap/mixins.less b/styles/vendor/bootstrap/mixins.less new file mode 100644 index 0000000..4432cfc --- /dev/null +++ b/styles/vendor/bootstrap/mixins.less @@ -0,0 +1,943 @@ +// +// Mixins +// -------------------------------------------------- + + +// Utilities +// ------------------------- + +// Clearfix +// Source: http://nicolasgallagher.com/micro-clearfix-hack/ +// +// For modern browsers +// 1. The space content is one way to avoid an Opera bug when the +// contenteditable attribute is included anywhere else in the document. +// Otherwise it causes space to appear at the top and bottom of elements +// that are clearfixed. +// 2. The use of `table` rather than `block` is only necessary if using +// `:before` to contain the top-margins of child elements. +.clearfix() { + &:before, + &:after { + content: " "; // 1 + display: table; // 2 + } + &:after { + clear: both; + } +} + +// WebKit-style focus +.tab-focus() { + // Default + outline: thin dotted; + // WebKit + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +// Center-align a block level element +.center-block() { + display: block; + margin-left: auto; + margin-right: auto; +} + +// Sizing shortcuts +.size(@width; @height) { + width: @width; + height: @height; +} +.square(@size) { + .size(@size; @size); +} + +// Placeholder text +.placeholder(@color: @input-color-placeholder) { + &::-moz-placeholder { color: @color; // Firefox + opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526 + &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+ + &::-webkit-input-placeholder { color: @color; } // Safari and Chrome +} + +// Text overflow +// Requires inline-block or block for proper styling +.text-overflow() { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +// CSS image replacement +// +// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for +// mixins being reused as classes with the same name, this doesn't hold up. As +// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note +// that we cannot chain the mixins together in Less, so they are repeated. +// +// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 + +// Deprecated as of v3.0.1 (will be removed in v4) +.hide-text() { + font: ~"0/0" a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +// New mixin to use as of v3.0.1 +.text-hide() { + .hide-text(); +} + + + +// CSS3 PROPERTIES +// -------------------------------------------------- + +// Single side border-radius +.border-top-radius(@radius) { + border-top-right-radius: @radius; + border-top-left-radius: @radius; +} +.border-right-radius(@radius) { + border-bottom-right-radius: @radius; + border-top-right-radius: @radius; +} +.border-bottom-radius(@radius) { + border-bottom-right-radius: @radius; + border-bottom-left-radius: @radius; +} +.border-left-radius(@radius) { + border-bottom-left-radius: @radius; + border-top-left-radius: @radius; +} + +// Drop shadows +// +// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's +// supported browsers that have box shadow capabilities now support the +// standard `box-shadow` property. +.box-shadow(@shadow) { + -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1 + box-shadow: @shadow; +} + +// Transitions +.transition(@transition) { + -webkit-transition: @transition; + transition: @transition; +} +.transition-property(@transition-property) { + -webkit-transition-property: @transition-property; + transition-property: @transition-property; +} +.transition-delay(@transition-delay) { + -webkit-transition-delay: @transition-delay; + transition-delay: @transition-delay; +} +.transition-duration(@transition-duration) { + -webkit-transition-duration: @transition-duration; + transition-duration: @transition-duration; +} +.transition-transform(@transition) { + -webkit-transition: -webkit-transform @transition; + -moz-transition: -moz-transform @transition; + -o-transition: -o-transform @transition; + transition: transform @transition; +} + +// Transformations +.scale(@ratio) { + -webkit-transform: scale(@ratio); + -ms-transform: scale(@ratio); // IE9 only + transform: scale(@ratio); +} +.scale(@ratioX; @ratioY) { + -webkit-transform: scale(@ratioX, @ratioY); + -ms-transform: scale(@ratioX, @ratioY); // IE9 only + transform: scale(@ratioX, @ratioY); +} +.scaleX(@ratio) { + -webkit-transform: scaleX(@ratio); + -ms-transform: scaleX(@ratio); // IE9 only + transform: scaleX(@ratio); +} +.scaleY(@ratio) { + -webkit-transform: scaleY(@ratio); + -ms-transform: scaleY(@ratio); // IE9 only + transform: scaleY(@ratio); +} +.skew(@x; @y) { + -webkit-transform: skew(@x, @y); + -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+ + transform: skew(@x, @y); +} +.translate(@x; @y) { + -webkit-transform: translate(@x, @y); + -ms-transform: translate(@x, @y); // IE9 only + transform: translate(@x, @y); +} +.translate3d(@x; @y; @z) { + -webkit-transform: translate3d(@x, @y, @z); + transform: translate3d(@x, @y, @z); +} +.rotate(@degrees) { + -webkit-transform: rotate(@degrees); + -ms-transform: rotate(@degrees); // IE9 only + transform: rotate(@degrees); +} +.rotateX(@degrees) { + -webkit-transform: rotateX(@degrees); + -ms-transform: rotateX(@degrees); // IE9 only + transform: rotateX(@degrees); +} +.rotateY(@degrees) { + -webkit-transform: rotateY(@degrees); + -ms-transform: rotateY(@degrees); // IE9 only + transform: rotateY(@degrees); +} +.perspective(@perspective) { + -webkit-perspective: @perspective; + -moz-perspective: @perspective; + perspective: @perspective; +} +.perspective-origin(@perspective) { + -webkit-perspective-origin: @perspective; + -moz-perspective-origin: @perspective; + perspective-origin: @perspective; +} +.transform-origin(@origin) { + -webkit-transform-origin: @origin; + -moz-transform-origin: @origin; + -ms-transform-origin: @origin; // IE9 only + transform-origin: @origin; +} + +// Animations +.animation(@animation) { + -webkit-animation: @animation; + animation: @animation; +} +.animation-name(@name) { + -webkit-animation-name: @name; + animation-name: @name; +} +.animation-duration(@duration) { + -webkit-animation-duration: @duration; + animation-duration: @duration; +} +.animation-timing-function(@timing-function) { + -webkit-animation-timing-function: @timing-function; + animation-timing-function: @timing-function; +} +.animation-delay(@delay) { + -webkit-animation-delay: @delay; + animation-delay: @delay; +} +.animation-iteration-count(@iteration-count) { + -webkit-animation-iteration-count: @iteration-count; + animation-iteration-count: @iteration-count; +} +.animation-direction(@direction) { + -webkit-animation-direction: @direction; + animation-direction: @direction; +} + +// Backface visibility +// Prevent browsers from flickering when using CSS 3D transforms. +// Default value is `visible`, but can be changed to `hidden` +.backface-visibility(@visibility){ + -webkit-backface-visibility: @visibility; + -moz-backface-visibility: @visibility; + backface-visibility: @visibility; +} + +// Box sizing +.box-sizing(@boxmodel) { + -webkit-box-sizing: @boxmodel; + -moz-box-sizing: @boxmodel; + box-sizing: @boxmodel; +} + +// User select +// For selecting text on the page +.user-select(@select) { + -webkit-user-select: @select; + -moz-user-select: @select; + -ms-user-select: @select; // IE10+ + user-select: @select; +} + +// Resize anything +.resizable(@direction) { + resize: @direction; // Options: horizontal, vertical, both + overflow: auto; // Safari fix +} + +// CSS3 Content Columns +.content-columns(@column-count; @column-gap: @grid-gutter-width) { + -webkit-column-count: @column-count; + -moz-column-count: @column-count; + column-count: @column-count; + -webkit-column-gap: @column-gap; + -moz-column-gap: @column-gap; + column-gap: @column-gap; +} + +// Optional hyphenation +.hyphens(@mode: auto) { + word-wrap: break-word; + -webkit-hyphens: @mode; + -moz-hyphens: @mode; + -ms-hyphens: @mode; // IE10+ + -o-hyphens: @mode; + hyphens: @mode; +} + +// Opacity +.opacity(@opacity) { + opacity: @opacity; + // IE8 filter + @opacity-ie: (@opacity * 100); + filter: ~"alpha(opacity=@{opacity-ie})"; +} + + + +// GRADIENTS +// -------------------------------------------------- + +#gradient { + + // Horizontal gradient, from left to right + // + // Creates two color stops, start and end, by specifying a color and position for each color stop. + // Color stops are not available in IE9 and below. + .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { + background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+ + background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ + background-repeat: repeat-x; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down + } + + // Vertical gradient, from top to bottom + // + // Creates two color stops, start and end, by specifying a color and position for each color stop. + // Color stops are not available in IE9 and below. + .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { + background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ + background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ + background-repeat: repeat-x; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down + } + + .directional(@start-color: #555; @end-color: #333; @deg: 45deg) { + background-repeat: repeat-x; + background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+ + background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ + } + .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { + background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); + background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color); + background-repeat: no-repeat; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback + } + .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { + background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color); + background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color); + background-repeat: no-repeat; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback + } + .radial(@inner-color: #555; @outer-color: #333) { + background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color); + background-image: radial-gradient(circle, @inner-color, @outer-color); + background-repeat: no-repeat; + } + .striped(@color: rgba(255,255,255,.15); @angle: 45deg) { + background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); + background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); + } +} + +// Reset filters for IE +// +// When you need to remove a gradient background, do not forget to use this to reset +// the IE filter for IE9 and below. +.reset-filter() { + filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); +} + + + +// Retina images +// +// Short retina mixin for setting background-image and -size + +.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { + background-image: url("@{file-1x}"); + + @media + only screen and (-webkit-min-device-pixel-ratio: 2), + only screen and ( min--moz-device-pixel-ratio: 2), + only screen and ( -o-min-device-pixel-ratio: 2/1), + only screen and ( min-device-pixel-ratio: 2), + only screen and ( min-resolution: 192dpi), + only screen and ( min-resolution: 2dppx) { + background-image: url("@{file-2x}"); + background-size: @width-1x @height-1x; + } +} + + +// Responsive image +// +// Keep images from scaling beyond the width of their parents. + +.img-responsive(@display: block) { + display: @display; + max-width: 100%; // Part 1: Set a maximum relative to the parent + height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching +} + + +// COMPONENT MIXINS +// -------------------------------------------------- + +// Horizontal dividers +// ------------------------- +// Dividers (basically an hr) within dropdowns and nav lists +.nav-divider(@color: #e5e5e5) { + height: 1px; + margin: ((@line-height-computed / 2) - 1) 0; + overflow: hidden; + background-color: @color; +} + +// Panels +// ------------------------- +.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { + border-color: @border; + + & > .panel-heading { + color: @heading-text-color; + background-color: @heading-bg-color; + border-color: @heading-border; + + + .panel-collapse > .panel-body { + border-top-color: @border; + } + } + & > .panel-footer { + + .panel-collapse > .panel-body { + border-bottom-color: @border; + } + } +} + +// Alerts +// ------------------------- +.alert-variant(@background; @border; @text-color) { + background-color: @background; + border-color: @border; + color: @text-color; + + hr { + border-top-color: darken(@border, 5%); + } + .alert-link { + color: darken(@text-color, 10%); + } +} + +// Tables +// ------------------------- +.table-row-variant(@state; @background) { + // Exact selectors below required to override `.table-striped` and prevent + // inheritance to nested tables. + .table > thead > tr, + .table > tbody > tr, + .table > tfoot > tr { + > td.@{state}, + > th.@{state}, + &.@{state} > td, + &.@{state} > th { + background-color: @background; + } + } + + // Hover states for `.table-hover` + // Note: this is not available for cells or rows within `thead` or `tfoot`. + .table-hover > tbody > tr { + > td.@{state}:hover, + > th.@{state}:hover, + &.@{state}:hover > td, + &.@{state}:hover > th { + background-color: darken(@background, 5%); + } + } +} + +// List Groups +// ------------------------- +.list-group-item-variant(@state; @background; @color) { + .list-group-item-@{state} { + color: @color; + background-color: @background; + + a& { + color: @color; + + .list-group-item-heading { color: inherit; } + + &:hover, + &:focus { + color: @color; + background-color: darken(@background, 5%); + } + &.active, + &.active:hover, + &.active:focus { + color: #fff; + background-color: @color; + border-color: @color; + } + } + } +} + +// Button variants +// ------------------------- +// Easily pump out default styles, as well as :hover, :focus, :active, +// and disabled options for all buttons +.button-variant(@color; @background; @border) { + color: @color; + background-color: @background; + border-color: @border; + + &:hover, + &:focus, + &:active, + &.active, + .open .dropdown-toggle& { + color: @color; + background-color: darken(@background, 8%); + border-color: darken(@border, 12%); + } + &:active, + &.active, + .open .dropdown-toggle& { + background-image: none; + } + &.disabled, + &[disabled], + fieldset[disabled] & { + &, + &:hover, + &:focus, + &:active, + &.active { + background-color: @background; + border-color: @border; + } + } + + .badge { + color: @background; + background-color: @color; + } +} + +// Button sizes +// ------------------------- +.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { + padding: @padding-vertical @padding-horizontal; + font-size: @font-size; + line-height: @line-height; + border-radius: @border-radius; +} + +// Pagination +// ------------------------- +.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) { + > li { + > a, + > span { + padding: @padding-vertical @padding-horizontal; + font-size: @font-size; + } + &:first-child { + > a, + > span { + .border-left-radius(@border-radius); + } + } + &:last-child { + > a, + > span { + .border-right-radius(@border-radius); + } + } + } +} + +// Labels +// ------------------------- +.label-variant(@color) { + background-color: @color; + &[href] { + &:hover, + &:focus { + background-color: darken(@color, 10%); + } + } +} + +// Contextual backgrounds +// ------------------------- +.bg-variant(@color) { + background-color: @color; + a&:hover { + background-color: darken(@color, 10%); + } +} + +// Typography +// ------------------------- +.text-emphasis-variant(@color) { + color: @color; + a&:hover { + color: darken(@color, 10%); + } +} + +// Navbar vertical align +// ------------------------- +// Vertically center elements in the navbar. +// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. +.navbar-vertical-align(@element-height) { + margin-top: ((@navbar-height - @element-height) / 2); + margin-bottom: ((@navbar-height - @element-height) / 2); +} + +// Progress bars +// ------------------------- +.progress-bar-variant(@color) { + background-color: @color; + .progress-striped & { + #gradient > .striped(); + } +} + +// Responsive utilities +// ------------------------- +// More easily include all the states for responsive-utilities.less. +.responsive-visibility() { + display: block !important; + table& { display: table; } + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } +} + +.responsive-invisibility() { + display: none !important; +} + + +// Grid System +// ----------- + +// Centered container element +.container-fixed() { + margin-right: auto; + margin-left: auto; + padding-left: (@grid-gutter-width / 2); + padding-right: (@grid-gutter-width / 2); + &:extend(.clearfix all); +} + +// Creates a wrapper for a series of columns +.make-row(@gutter: @grid-gutter-width) { + margin-left: (@gutter / -2); + margin-right: (@gutter / -2); + &:extend(.clearfix all); +} + +// Generate the extra small columns +.make-xs-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + float: left; + width: percentage((@columns / @grid-columns)); + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); +} +.make-xs-column-offset(@columns) { + @media (min-width: @screen-xs-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-xs-column-push(@columns) { + @media (min-width: @screen-xs-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-xs-column-pull(@columns) { + @media (min-width: @screen-xs-min) { + right: percentage((@columns / @grid-columns)); + } +} + + +// Generate the small columns +.make-sm-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + @media (min-width: @screen-sm-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-offset(@columns) { + @media (min-width: @screen-sm-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-push(@columns) { + @media (min-width: @screen-sm-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-pull(@columns) { + @media (min-width: @screen-sm-min) { + right: percentage((@columns / @grid-columns)); + } +} + + +// Generate the medium columns +.make-md-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + @media (min-width: @screen-md-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} +.make-md-column-offset(@columns) { + @media (min-width: @screen-md-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-md-column-push(@columns) { + @media (min-width: @screen-md-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-md-column-pull(@columns) { + @media (min-width: @screen-md-min) { + right: percentage((@columns / @grid-columns)); + } +} + + +// Generate the large columns +.make-lg-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + @media (min-width: @screen-lg-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-offset(@columns) { + @media (min-width: @screen-lg-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-push(@columns) { + @media (min-width: @screen-lg-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-pull(@columns) { + @media (min-width: @screen-lg-min) { + right: percentage((@columns / @grid-columns)); + } +} + + +// Framework grid generation +// +// Used only by Bootstrap to generate the correct number of grid classes given +// any value of `@grid-columns`. + +.make-grid-columns() { + // Common styles for all sizes of grid columns, widths 1-12 + .col(@index) when (@index = 1) { // initial + @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; + .col((@index + 1), @item); + } + .col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo + @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; + .col((@index + 1), ~"@{list}, @{item}"); + } + .col(@index, @list) when (@index > @grid-columns) { // terminal + @{list} { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: (@grid-gutter-width / 2); + padding-right: (@grid-gutter-width / 2); + } + } + .col(1); // kickstart it +} + +.float-grid-columns(@class) { + .col(@index) when (@index = 1) { // initial + @item: ~".col-@{class}-@{index}"; + .col((@index + 1), @item); + } + .col(@index, @list) when (@index =< @grid-columns) { // general + @item: ~".col-@{class}-@{index}"; + .col((@index + 1), ~"@{list}, @{item}"); + } + .col(@index, @list) when (@index > @grid-columns) { // terminal + @{list} { + float: left; + } + } + .col(1); // kickstart it +} + +.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) { + .col-@{class}-@{index} { + width: percentage((@index / @grid-columns)); + } +} +.calc-grid-column(@index, @class, @type) when (@type = push) { + .col-@{class}-push-@{index} { + left: percentage((@index / @grid-columns)); + } +} +.calc-grid-column(@index, @class, @type) when (@type = pull) { + .col-@{class}-pull-@{index} { + right: percentage((@index / @grid-columns)); + } +} +.calc-grid-column(@index, @class, @type) when (@type = offset) { + .col-@{class}-offset-@{index} { + margin-left: percentage((@index / @grid-columns)); + } +} + +// Basic looping in LESS +.loop-grid-columns(@index, @class, @type) when (@index >= 0) { + .calc-grid-column(@index, @class, @type); + // next iteration + .loop-grid-columns((@index - 1), @class, @type); +} + +// Create grid for specific class +.make-grid(@class) { + .float-grid-columns(@class); + .loop-grid-columns(@grid-columns, @class, width); + .loop-grid-columns(@grid-columns, @class, pull); + .loop-grid-columns(@grid-columns, @class, push); + .loop-grid-columns(@grid-columns, @class, offset); +} + +// Form validation states +// +// Used in forms.less to generate the form validation CSS for warnings, errors, +// and successes. + +.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) { + // Color the label and help text + .help-block, + .control-label, + .radio, + .checkbox, + .radio-inline, + .checkbox-inline { + color: @text-color; + } + // Set the border and box shadow on specific inputs to match + .form-control { + border-color: @border-color; + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work + &:focus { + border-color: darken(@border-color, 10%); + @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%); + .box-shadow(@shadow); + } + } + // Set validation states also for addons + .input-group-addon { + color: @text-color; + border-color: @border-color; + background-color: @background-color; + } + // Optional feedback icon + .form-control-feedback { + color: @text-color; + } +} + +// Form control focus state +// +// Generate a customized focus state and for any input with the specified color, +// which defaults to the `@input-focus-border` variable. +// +// We highly encourage you to not customize the default value, but instead use +// this to tweak colors on an as-needed basis. This aesthetic change is based on +// WebKit's default styles, but applicable to a wider range of browsers. Its +// usability and accessibility should be taken into account with any change. +// +// Example usage: change the default blue border and shadow to white for better +// contrast against a dark gray background. + +.form-control-focus(@color: @input-border-focus) { + @color-rgba: rgba(red(@color), green(@color), blue(@color), .6); + &:focus { + border-color: @color; + outline: 0; + .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}"); + } +} + +// Form control sizing +// +// Relative text size, padding, and border-radii changes for form controls. For +// horizontal sizing, wrap controls in the predefined grid classes. `