From e526905f5c330617ea9e48d1d0eecfdfb9dded16 Mon Sep 17 00:00:00 2001 From: Jon Schlinkert Date: Mon, 10 Mar 2014 15:11:08 -0400 Subject: [PATCH 01/81] v0.3.0 Complete refactor. --- .assemblerc | 11 - .bowerrc | 4 +- .gitattributes | 13 +- .gitignore | 64 +- .nojekyll | 0 .travis.yml | 6 - AUTHORS | 2 + Gruntfile.js | 402 +++--- LICENSE-CC | 319 +++++ LICENSE-MIT | 37 +- README.md | 33 - _config.yml | 137 ++ assets/fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes assets/fonts/glyphicons-halflings-regular.svg | 229 +++ assets/fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes bower.json | 24 +- .../docs/Methods.md.hbs => content/API/API.md | 0 .../Methods2.md.hbs => content/API/Files.md | 6 +- .../docs/drafts/FAQ.hbs => content/FAQ.md | 30 + .../cheatsheet.md | 0 .../index.md.hbs => content/contributing.md | 35 +- content/core-concepts-long.md | 86 ++ content/core-concepts.md | 177 +++ .../About.md.hbs => content/docs/About.md | 0 .../docs/Announcements.md | 0 .../docs/Built-in-Variables.md | 2 - .../docs/Cheatsheet-Handlebars.md | 0 .../docs/Cheatsheet-Lo-Dash.md | 62 +- .../docs/Cheatsheet-Markdown.md | 0 .../docs/Collections.md | 6 +- .../docs/Comparison.md | 0 .../Content.md.hbs => content/docs/Content.md | 0 .../Context.md.hbs => content/docs/Context.md | 0 .../docs/Contributors.md | 0 .../docs/Custom-Helpers.md | 16 +- .../docs/Data.md.hbs => content/docs/Data.md | 0 .../docs/Embedding-Code.md | 0 .../Errors.md.hbs => content/docs/Errors.md | 0 .../docs/Extensions.md | 1 + .../docs/External-Libraries.md | 0 .../docs/Grapevine.md | 0 content/docs/Helpers.md | 97 ++ .../docs/Home.md.hbs => content/docs/Home.md | 2 +- .../docs/Idiomatic-Data.md | 0 .../docs/Idiomatic-Templates.md | 0 .../docs/Installation.md | 0 .../docs/Introduction.md | 0 .../docs/JSON.md.hbs => content/docs/JSON.md | 0 .../Layouts.md.hbs => content/docs/Layouts.md | 36 +- .../docs/Markdown-Styling.md | 0 .../docs/Markdown.md | 0 .../docs/Metadata.md | 0 .../Options.md.hbs => content/docs/Options.md | 0 .../Outline.md.hbs => content/docs/Outline.md | 0 .../docs/Overview.md | 0 .../docs/Pages-Arrays.md | 0 .../docs/Pages-Collections.md | 4 +- .../Pages.md.hbs => content/docs/Pages.md | 0 content/docs/Partials.md | 27 + .../docs/Quickstart.md | 0 .../docs/Resources.md | 0 .../docs/Snippets.md | 0 .../Support.md.hbs => content/docs/Support.md | 0 .../docs/Templates-Overview.md | 0 .../docs/Underscore-Mixins.md | 0 .../docs/Who-Uses-Assemble.md | 0 .../docs/Why-Assemble.md | 0 .../docs/Workflows.md | 0 .../docs/YAML-front-matter.md | 2 +- .../docs/YAML.md.hbs => content/docs/YAML.md | 0 content/docs/config-data.md | 49 + .../examples.hbs => content/docs/examples.md | 0 content/docs/getting-started.md | 23 + .../docs/options-assets.md | 0 .../docs/options-collections.md | 0 .../docs/options-data.md | 4 +- .../docs/options-engine.md | 0 .../docs/options-ext.md | 0 .../docs/options-helpers.md | 0 .../docs/options-layout.md | 0 .../docs/options-layoutdir.md | 0 .../docs/options-marked.md | 0 .../docs/options-pages.md | 0 .../docs/options-pagination.md | 0 .../docs/options-partials.md | 0 .../docs/options-permalinks.md | 0 content/getting-started.md | 22 + .../guides/organizing-front-end-projects.md | 42 + .../helpers/code/helper-embed.md | 13 +- content/helpers/code/helper-gist.md | 18 + .../helpers/code/helper-jsfiddle.md | 48 +- .../helpers/collections/helper-after.md | 12 +- .../helpers/collections/helper-any.md | 10 +- .../helpers/collections/helper-before.md | 12 +- .../helpers/collections/helper-eachIndex.md | 10 +- .../collections/helper-eachProperty.md | 10 +- .../helpers/collections/helper-empty.md | 10 +- .../helpers/collections/helper-first.md | 12 +- .../helpers/collections/helper-inArray.md | 12 +- .../helpers/collections/helper-join.md | 16 +- .../helpers/collections/helper-last.md | 10 +- .../helpers/collections/helper-length.md | 12 +- .../helpers/collections/helper-lengthEqual.md | 10 +- .../helpers/collections/helper-sort.md | 8 +- .../helpers/collections/helper-withAfter.md | 12 +- .../helpers/collections/helper-withBefore.md | 12 +- .../helpers/collections/helper-withFirst.md | 12 +- .../helpers/collections/helper-withLast.md | 12 +- .../helpers/collections/helper-withSort.md | 14 +- .../helpers/comparison/helper-and.md | 10 +- .../helpers/comparison/helper-compare.md | 14 +- .../helpers/comparison/helper-contains.md | 7 +- .../helpers/comparison/helper-gt.md | 12 +- .../helpers/comparison/helper-gte.md | 12 +- content/helpers/comparison/helper-if_gt.md | 11 + content/helpers/comparison/helper-if_gteq.md | 10 + .../helpers/comparison/helper-is.md | 17 +- content/helpers/comparison/helper-isnt.md | 24 + content/helpers/comparison/helper-lt.md | 26 + content/helpers/comparison/helper-lte.md | 27 + .../helpers/comparison/helper-or.md | 9 +- .../helpers/comparison/helper-unless_eq.md | 4 +- .../helpers/comparison/helper-unless_gt.md | 7 +- .../helpers/comparison/helper-unless_gteq.md | 7 +- .../helpers/comparison/helper-unless_lt.md | 7 +- .../helpers/comparison/helper-unless_lteq.md | 7 +- .../helpers/content/helper-copy.md | 11 +- .../helpers/content/helper-glob.md | 27 +- .../helpers/content/helper-include.md | 13 +- .../helpers/data/helper-parseJSON.md | 6 +- .../helpers/dates/helper-formatdate.md | 9 +- .../helpers/dates/helper-moment.md | 45 +- .../helpers/dates/helper-now.md | 8 +- .../helpers/dates/helper-timeago.md | 10 +- content/helpers/html/helper-br.md | 19 + content/helpers/html/helper-doctype.md | 48 + .../helpers/html/helper-exticon.md | 9 +- .../helpers/html/helper-ol.md | 11 +- .../helpers/html/helper-ul.md | 11 +- .../helpers/inflections/helper-inflect.md | 9 +- .../helpers/inflections/helper-ordinalize.md | 20 + content/helpers/layout/helper-block.md | 25 + content/helpers/layout/helper-content.md | 27 + content/helpers/layout/helper-extend.md | 150 ++ .../helpers/logging/helper-debug.md | 11 +- .../helpers/logging/helper-expandJSON.md | 11 +- .../helpers/logging/helper-expandYAML.md | 9 +- .../helpers/logging/helper-log.md | 7 +- .../helpers/markdown/helper-markdown.md | 9 +- .../helpers/markdown/helper-md.md | 7 +- content/helpers/math/helper-add.md | 21 + content/helpers/math/helper-ceil.md | 21 + content/helpers/math/helper-divide.md | 21 + content/helpers/math/helper-floor.md | 21 + content/helpers/math/helper-multiply.md | 22 + content/helpers/math/helper-round.md | 21 + content/helpers/math/helper-subtract.md | 21 + content/helpers/math/helper-sum.md | 25 + content/helpers/misc/helper-default.md | 16 + content/helpers/misc/helper-noop.md | 3 + .../helpers/numbers/helper-addCommas.md | 9 +- .../helpers/numbers/helper-toAbbr.md | 9 +- .../helpers/numbers/helper-toExponential.md | 9 +- content/helpers/numbers/helper-toFixed.md | 23 + .../helpers/numbers/helper-toFloat.md | 9 +- .../helpers/numbers/helper-toInt.md | 9 +- .../helpers/numbers/helper-toPrecision.md | 9 +- content/helpers/path/helper-dirname.md | 15 + content/helpers/path/helper-extname.md | 38 + content/helpers/path/helper-relative.md | 23 + .../helpers/readme/helper-authors.md | 4 +- .../helpers/readme/helper-changelog.md | 2 +- .../helpers/readme/helper-travis.md | 19 +- .../helpers/special/helper-aggregate.md | 28 +- .../helpers/special/helper-compose.md | 18 +- .../helpers/strings/helper-capitalizeEach.md | 10 +- .../helpers/strings/helper-capitalizeFirst.md | 10 +- .../helpers/strings/helper-center.md | 10 +- content/helpers/strings/helper-dashify.md | 13 + .../strings/helper-formatPhoneNumber.md | 9 +- content/helpers/strings/helper-hyphenate.md | 14 + .../helpers/strings/helper-lowercase.md | 10 +- .../helpers/strings/helper-occurances.md | 10 +- .../helpers/strings/helper-reverse.md | 10 +- .../helpers/strings/helper-sentence.md | 8 +- content/helpers/strings/helper-titleize.md | 14 + .../helpers/strings/helper-truncate.md | 10 +- content/helpers/strings/helper-uppercase.md | 14 + .../helpers/url/helper-urlParse.md | 10 +- .../helpers/url/helper-urlResolve.md | 13 +- content/introduction.md | 71 + content/outline.md | 39 + content/overview.md | 146 ++ content/plugins/index.md | 48 + .../2014-03/announcing-assemble-v0.5.0.md | 24 + .../assemble-docs-2-0-under-the-hood.md | 9 + content/posts/config-vs-content.md | 100 ++ content/posts/handlebars-subexpressions.md | 25 + data/README.md | 15 + data/button.json | 58 + data/config/contentOpts.yml | 21 + data/contentOpts.yml | 21 + data/core.json | 123 ++ data/helpers.yml | 78 ++ {src/data => data}/jumbotron.yml | 0 data/menu.json | 27 + data/nav.json | 81 ++ data/paginate.json | 14 + data/quotes.yml | 103 ++ data/section.json | 14 + data/team.yml | 18 + {src/data => data}/teaser.yml | 6 +- data/updates.yml | 17 + data/users.yml | 19 + data/utils/README.md | 5 + data/utils/extend-pkg.js | 5 + data/utils/mixins.js | 57 + data/utils/pkg.js | 50 + package.json | 115 +- scripts/.jshintrc | 31 + scripts/application.js | 110 ++ src/content/helpers/code/helper-gist.md | 17 - .../helpers/comparison/helper-if_gt.md | 9 - .../helpers/comparison/helper-if_gteq.md | 9 - src/content/helpers/comparison/helper-isnt.md | 22 - src/content/helpers/comparison/helper-lt.md | 24 - src/content/helpers/comparison/helper-lte.md | 25 - src/content/helpers/html/helper-blockquote.md | 27 - src/content/helpers/html/helper-br.md | 18 - src/content/helpers/html/helper-doctype.md | 42 - src/content/helpers/html/helper-timeline.md | 28 - .../helpers/inflections/helper-ordinalize.md | 19 - src/content/helpers/math/helper-add.md | 19 - src/content/helpers/math/helper-ceil.md | 19 - src/content/helpers/math/helper-divide.md | 19 - src/content/helpers/math/helper-floor.md | 19 - src/content/helpers/math/helper-multiply.md | 20 - src/content/helpers/math/helper-round.md | 19 - src/content/helpers/math/helper-subtract.md | 19 - src/content/helpers/math/helper-sum.md | 23 - src/content/helpers/misc/helper-default.md | 14 - src/content/helpers/misc/helper-noop.md | 3 - src/content/helpers/new-helpers.md | 79 -- src/content/helpers/numbers/helper-toFixed.md | 22 - src/content/helpers/path/_readme.md | 4 - src/content/helpers/path/helper-dirname.md | 14 - src/content/helpers/path/helper-extname.md | 37 - src/content/helpers/path/helper-relative.md | 21 - src/content/helpers/strings/helper-dashify.md | 11 - .../helpers/strings/helper-hyphenate.md | 12 - .../helpers/strings/helper-titleize.md | 12 - .../helpers/strings/helper-uppercase.md | 12 - src/content/helpers/url/_readme.md | 3 - src/data/banner-alt.json | 27 - src/data/banner.yml | 2 - src/data/gallery.json | 82 -- src/data/home.yml | 12 - src/data/keywords.json | 41 - src/data/news.yml | 15 - src/data/repos.json | 742 ---------- src/data/site.yml | 35 - src/data/track.json | 9 - src/extensions/helper-condense.js | 14 - src/extensions/helper-html.js | 58 - src/extensions/helper-updates.js | 29 - src/extensions/helpers.js | 113 -- src/extensions/mixins.js | 86 -- src/less/bootstrap.yml | 210 --- src/less/bootstrap/accordion.less | 31 - src/less/bootstrap/forms.less | 423 ------ src/less/bootstrap/glyphicons.less | 200 --- src/less/bootstrap/grid.less | 204 --- src/less/bootstrap/jumbotron.less | 29 - src/less/bootstrap/mixins.less | 552 -------- src/less/bootstrap/navbar.less | 380 ----- src/less/bootstrap/pagination.less | 108 -- src/less/bootstrap/panels.less | 102 -- src/less/bootstrap/responsive-utilities.less | 119 -- src/less/bootstrap/scaffolding.less | 93 -- src/less/bootstrap/tables.less | 211 --- src/less/bootstrap/thumbnails.less | 42 - src/less/bootstrap/type.less | 232 --- src/less/components/alerts.less | 73 - src/less/components/band.less | 87 -- src/less/components/banner.less | 30 - src/less/components/blockquote.less | 23 - src/less/components/code.less | 164 --- src/less/components/component-docs.less | 6 - src/less/components/fonts.less | 38 - src/less/components/label-groups.less | 39 - src/less/components/markdown.less | 63 - src/less/components/mixins.less | 41 - src/less/components/nav.less | 74 - src/less/components/navbar.less | 81 -- src/less/components/palette.less | 82 -- src/less/components/panels.less | 101 -- src/less/components/scaffolding.less | 31 - src/less/components/tables.less | 91 -- src/less/components/thumbnails.less | 17 - src/less/components/tooltip.less | 71 - src/less/components/type.less | 251 ---- src/less/components/webfonts-assemble-a.less | 55 - src/less/components/webfonts.less | 69 - src/less/docs/docs.less | 793 ----------- src/less/docs/gist-overrides.less | 195 --- src/less/docs/github.css | 129 -- src/less/docs/monokai.css | 124 -- src/less/ghpages.yml | 152 -- src/less/overrides.less | 97 -- src/less/variables.less | 611 -------- structure/_extensions/README.md | 8 + structure/_extensions/helpers/basename.js | 13 + structure/_extensions/helpers/console.js | 19 + structure/_extensions/helpers/content.js | 65 + structure/_extensions/helpers/expand.js | 15 + structure/_extensions/helpers/isActive.js | 32 + structure/_extensions/helpers/isPermalink.js | 13 + structure/_extensions/helpers/join.js | 13 + structure/_extensions/helpers/markdown.js | 30 + structure/_extensions/helpers/news.js | 28 + structure/_extensions/helpers/read.js | 21 + structure/_extensions/helpers/replace.js | 61 + structure/_extensions/helpers/write.js | 40 + structure/_extensions/plugins/README.md | 5 + .../_extensions/plugins/holder-404-avoid.js | 38 + structure/_extensions/plugins/lib/template.js | 6 + structure/_extensions/plugins/lib/utils.js | 56 + structure/_extensions/plugins/link-checker.js | 179 +++ structure/_extensions/plugins/navigation.js | 135 ++ structure/_extensions/plugins/postprocess.js | 37 + structure/includes/ad.hbs | 8 + structure/includes/banner.hbs | 8 + structure/includes/buttons/back-to-top.hbs | 3 + .../buttons}/btn-github-fork-small.hbs | 0 .../includes/buttons}/btn-github-fork.hbs | 4 +- .../buttons}/btn-github-star-small.hbs | 0 .../includes/buttons}/btn-github-star.hbs | 4 +- .../includes/buttons}/btn-social.hbs | 4 + .../includes/buttons}/btn-tweet.hbs | 0 structure/includes/buttons/button-tweet.hbs | 31 + structure/includes/buttons/button.hbs | 1 + structure/includes/buttons/social-buttons.hbs | 20 + structure/includes/buttons/toggle.hbs | 6 + .../includes/colophon.hbs | 2 +- structure/includes/dropdown-menu.hbs | 9 + structure/includes/footer.hbs | 26 + structure/includes/head.hbs | 48 + structure/includes/javascripts.hbs | 32 + structure/includes/jumbotron.hbs | 18 + structure/includes/list.hbs | 32 + structure/includes/masthead.hbs | 10 + structure/includes/nav-main.hbs | 17 + structure/includes/navbar-content.hbs | 35 + structure/includes/navigation.hbs | 3 + structure/includes/paginate.hbs | 7 + .../includes/repo-list.hbs | 0 structure/includes/repos.hbs | 26 + structure/includes/source-link.hbs | 2 + structure/includes/subhead.hbs | 7 + {templates => structure}/includes/teaser.hbs | 0 structure/layouts/README.md | 5 + structure/layouts/base.hbs | 27 + structure/layouts/default.hbs | 25 + structure/layouts/markdown.hbs | 6 + structure/pages/README.md | 13 + structure/pages/about.hbs | 54 + structure/pages/api.hbs | 11 + structure/pages/blog.hbs | 11 + structure/pages/cheatsheet.hbs | 11 + structure/pages/contributing.hbs | 9 + .../docs/index.hbs => structure/pages/docs.md | 3 +- structure/pages/examples.hbs | 50 + structure/pages/getting-started.hbs | 24 + structure/pages/helpers.hbs | 22 + structure/pages/index.hbs | 27 + structure/pages/license.hbs | 10 + structure/pages/plugins.md | 10 + structure/snippets/README.md | 8 + structure/snippets/_robots.txt | 10 + structure/snippets/alexa.hbs | 7 + .../snippets/analytics.hbs | 0 structure/snippets/anchor.js | 4 + structure/snippets/bugherd.hbs | 8 + .../snippets}/click-tracker.hbs | 0 structure/snippets/feed.xml | 26 + structure/snippets/github.js | 32 + structure/snippets/heading.tmpl | 1 + .../snippets/metadata.hbs | 0 .../snippets/segment-io.hbs | 27 +- styles/.csscomb.json | 297 ++++ styles/.csslintrc | 19 + {src/less => styles}/bootstrap/alerts.less | 62 +- {src/less => styles}/bootstrap/badges.less | 26 +- {src/less => styles}/bootstrap/bootstrap.less | 46 +- .../bootstrap/breadcrumbs.less | 9 +- .../bootstrap/button-groups.less | 133 +- {src/less => styles}/bootstrap/buttons.less | 68 +- {src/less => styles}/bootstrap/carousel.less | 73 +- {src/less => styles}/bootstrap/close.less | 2 +- {src/less => styles}/bootstrap/code.less | 30 +- .../bootstrap/component-animations.less | 0 {src/less => styles}/bootstrap/dropdowns.less | 88 +- styles/bootstrap/forms.less | 439 ++++++ styles/bootstrap/glyphicons.less | 233 +++ styles/bootstrap/grid.less | 84 ++ styles/bootstrap/input-groups.less | 162 +++ styles/bootstrap/jumbotron.less | 44 + {src/less => styles}/bootstrap/labels.less | 36 +- .../less => styles}/bootstrap/list-group.less | 71 +- {src/less => styles}/bootstrap/media.less | 0 styles/bootstrap/mixins.less | 943 +++++++++++++ {src/less => styles}/bootstrap/modals.less | 44 +- styles/bootstrap/navbar.less | 644 +++++++++ {src/less => styles}/bootstrap/navs.less | 131 +- {src/less => styles}/bootstrap/normalize.less | 269 ++-- {src/less => styles}/bootstrap/pager.less | 10 +- styles/bootstrap/pagination.less | 88 ++ styles/bootstrap/panels.less | 241 ++++ {src/less => styles}/bootstrap/popovers.less | 24 +- {src/less => styles}/bootstrap/print.less | 11 +- .../bootstrap/progress-bars.less | 49 +- styles/bootstrap/responsive-utilities.less | 92 ++ styles/bootstrap/scaffolding.less | 134 ++ styles/bootstrap/tables.less | 233 +++ styles/bootstrap/theme.less | 247 ++++ styles/bootstrap/thumbnails.less | 36 + {src/less => styles}/bootstrap/tooltip.less | 18 +- styles/bootstrap/type.less | 297 ++++ {src/less => styles}/bootstrap/wells.less | 6 +- styles/components/ad.less | 105 ++ styles/components/anchors.less | 68 + styles/components/banner.less | 16 + styles/components/base.less | 12 + styles/components/blockquote.less | 23 + styles/components/btn-outline.less | 32 + .../components/btn.less | 174 ++- styles/components/callout.less | 51 + styles/components/dismiss.less | 41 + styles/components/dropdown-inverse.less | 94 ++ styles/components/fonts.less | 9 + styles/components/footer.less | 48 + styles/components/header.less | 47 + styles/components/main-nav.less | 60 + {src/less => styles}/components/masthead.less | 46 +- styles/components/navbar-content.less | 231 +++ styles/components/paginate.less | 29 + styles/components/sidebar.less | 156 +++ styles/components/source-link.less | 55 + styles/components/team.less | 25 + {src/less => styles}/components/teaser.less | 5 +- styles/components/webfonts.less | 27 + styles/docs.less | 1244 +++++++++++++++++ styles/examples.less | 5 + styles/index.less | 71 + styles/themes/book-code.less | 58 + styles/themes/book.less | 135 ++ styles/utilities/button-states.less | 47 + styles/utilities/highlight.less | 129 ++ styles/utilities/mixins.less | 64 + styles/utilities/stack.less | 30 + .../utilities}/utilities.less | 20 +- styles/variables.less | 832 +++++++++++ templates/includes/announcements.md.hbs | 2 - templates/includes/banner.hbs | 8 - templates/includes/edit-template-link.hbs | 1 - templates/includes/img.hbs | 10 - templates/includes/javascripts.hbs | 5 - templates/includes/jumbotron.hbs | 16 - templates/includes/layout/footer.hbs | 19 - templates/includes/layout/head.hbs | 43 - templates/includes/layout/masthead-blog.hbs | 20 - .../includes/layout/masthead-boilerplates.hbs | 37 - templates/includes/layout/masthead-docs.hbs | 15 - .../includes/layout/masthead-helpers.hbs | 22 - .../includes/layout/masthead-plugins.hbs | 25 - templates/includes/layout/sidenav-blog.hbs | 1 - .../includes/layout/sidenav-boilerplates.hbs | 8 - templates/includes/layout/sidenav-docs.hbs | 85 -- templates/includes/layout/sidenav-helpers.hbs | 79 -- templates/includes/layout/sidenav-link.hbs | 1 - templates/includes/layout/sidenav-plugins.hbs | 3 - templates/includes/navbar.hbs | 30 - templates/includes/repos.hbs | 89 -- .../includes/snippets/generated-links.md.hbs | 26 - .../snippets/links-manually-defined.md.hbs | 19 - .../includes/snippets/links-template.md.hbs | 10 - templates/includes/snippets/wiki-links.md.hbs | 1 - templates/includes/thumbnail.hbs | 8 - templates/includes/toc.md.hbs | 97 -- templates/layouts/base.hbs | 47 - templates/layouts/blog.hbs | 16 - templates/layouts/default.hbs | 49 - templates/pages/blog/index.hbs | 18 - .../boilerplates/boilerplate-blog.md.hbs | 7 - .../boilerplates/boilerplate-bootstrap.md.hbs | 7 - .../boilerplates/boilerplate-site.md.hbs | 7 - templates/pages/boilerplates/index.md.hbs | 15 - templates/pages/docs/FAQ.md.hbs | 606 -------- templates/pages/docs/Helpers.md.hbs | 66 - templates/pages/docs/Partials.md.hbs | 190 --- templates/pages/docs/layouts.json | 11 - .../pages/docs/sections/docs-about.md.hbs | 12 - .../docs/sections/docs-contributing.md.hbs | 3 - .../pages/docs/sections/docs-examples.md.hbs | 57 - .../docs/sections/docs-getting-started.md.hbs | 13 - .../pages/docs/sections/docs-helpers.md.hbs | 74 - .../sections/docs-how-helpers-work.md.hbs | 20 - .../pages/docs/sections/docs-options.md.hbs | 133 -- .../pages/docs/sections/docs-overview.md.hbs | 21 - .../docs/sections/docs-quick-start.md.hbs | 56 - .../examples/generate-a-list-of-posts.md.hbs | 39 - templates/pages/examples/index.md.hbs | 18 - .../pages/examples/markdown-inline.md.hbs | 30 - templates/pages/examples/task-defaults.md.hbs | 43 - templates/pages/helpers.json | 166 --- templates/pages/helpers/index.hbs | 60 - templates/pages/helpers/toc.md | 141 -- templates/pages/index.hbs | 32 - templates/pages/plugins/index.hbs | 42 - .../tutorials/Automated-Documentation.md | 122 -- .../tutorials/Creating-a-New-Site.md.hbs | 1 - .../tutorials/Expanding-Config-Values.md.hbs | 146 -- .../Generate-Bootstrap-Compatible-Grid.md.hbs | 110 -- .../pages/tutorials/Task-Examples.md.hbs | 45 - .../pages/tutorials/Toggling-Features.md.hbs | 89 -- .../tutorials/Tutorial-HTML-Tables.md.hbs | 272 ---- .../tutorials/Tutorial-Lodash-YFM.md.hbs | 53 - .../tutorials/Tutorial-Mixed-Content.md.hbs | 12 - .../pages/tutorials/Usage-Examples.md.hbs | 83 -- .../pages/tutorials/yfm-lodash-example.md.hbs | 28 - test/fixtures/bar.hbs | 4 + test/fixtures/foo.hbs | 4 + 533 files changed, 14653 insertions(+), 13520 deletions(-) delete mode 100644 .assemblerc create mode 100644 .nojekyll delete mode 100644 .travis.yml create mode 100644 AUTHORS create mode 100644 LICENSE-CC delete mode 100644 README.md create mode 100644 _config.yml create mode 100644 assets/fonts/glyphicons-halflings-regular.eot create mode 100644 assets/fonts/glyphicons-halflings-regular.svg create mode 100644 assets/fonts/glyphicons-halflings-regular.ttf create mode 100644 assets/fonts/glyphicons-halflings-regular.woff rename templates/pages/docs/Methods.md.hbs => content/API/API.md (100%) rename templates/pages/docs/Methods2.md.hbs => content/API/Files.md (95%) rename templates/pages/docs/drafts/FAQ.hbs => content/FAQ.md (88%) rename templates/pages/helpers/Cheatsheet.md.hbs => content/cheatsheet.md (100%) rename templates/pages/contributing/index.md.hbs => content/contributing.md (67%) create mode 100644 content/core-concepts-long.md create mode 100644 content/core-concepts.md rename templates/pages/docs/About.md.hbs => content/docs/About.md (100%) rename templates/pages/docs/Announcements.md.hbs => content/docs/Announcements.md (100%) rename templates/pages/docs/Built-in-Variables.md.hbs => content/docs/Built-in-Variables.md (98%) rename templates/pages/docs/Cheatsheet-Handlebars.md.hbs => content/docs/Cheatsheet-Handlebars.md (100%) rename templates/pages/docs/Cheatsheet-Lo-Dash.md.hbs => content/docs/Cheatsheet-Lo-Dash.md (75%) rename templates/pages/docs/Cheatsheet-Markdown.md.hbs => content/docs/Cheatsheet-Markdown.md (100%) rename templates/pages/docs/Collections.md.hbs => content/docs/Collections.md (97%) rename templates/pages/docs/Comparison.md.hbs => content/docs/Comparison.md (100%) rename templates/pages/docs/Content.md.hbs => content/docs/Content.md (100%) rename templates/pages/docs/Context.md.hbs => content/docs/Context.md (100%) rename templates/pages/docs/Contributors.md.hbs => content/docs/Contributors.md (100%) rename templates/pages/docs/Custom-Helpers.md.hbs => content/docs/Custom-Helpers.md (91%) rename templates/pages/docs/Data.md.hbs => content/docs/Data.md (100%) rename templates/pages/docs/Embedding-Code.md.hbs => content/docs/Embedding-Code.md (100%) rename templates/pages/docs/Errors.md.hbs => content/docs/Errors.md (100%) rename templates/pages/extensions/index.md.hbs => content/docs/Extensions.md (83%) rename templates/pages/docs/External-Libraries.md.hbs => content/docs/External-Libraries.md (100%) rename templates/pages/docs/Grapevine.md.hbs => content/docs/Grapevine.md (100%) create mode 100644 content/docs/Helpers.md rename templates/pages/docs/Home.md.hbs => content/docs/Home.md (98%) rename templates/pages/docs/Idiomatic-Data.md.hbs => content/docs/Idiomatic-Data.md (100%) rename templates/pages/docs/Idiomatic-Templates.md.hbs => content/docs/Idiomatic-Templates.md (100%) rename templates/pages/docs/Installation.md.hbs => content/docs/Installation.md (100%) rename templates/pages/docs/Introduction.md.hbs => content/docs/Introduction.md (100%) rename templates/pages/docs/JSON.md.hbs => content/docs/JSON.md (100%) rename templates/pages/docs/Layouts.md.hbs => content/docs/Layouts.md (95%) rename templates/pages/docs/Markdown-Styling.md.hbs => content/docs/Markdown-Styling.md (100%) rename templates/pages/docs/Markdown.md.hbs => content/docs/Markdown.md (100%) rename templates/pages/docs/Metadata.md.hbs => content/docs/Metadata.md (100%) rename templates/pages/docs/Options.md.hbs => content/docs/Options.md (100%) rename templates/pages/docs/Outline.md.hbs => content/docs/Outline.md (100%) rename templates/pages/docs/Overview.md.hbs => content/docs/Overview.md (100%) rename templates/pages/docs/Pages-Arrays.md.hbs => content/docs/Pages-Arrays.md (100%) rename templates/pages/docs/Pages-Collections.md.hbs => content/docs/Pages-Collections.md (99%) rename templates/pages/docs/Pages.md.hbs => content/docs/Pages.md (100%) create mode 100644 content/docs/Partials.md rename templates/pages/docs/Quickstart.md.hbs => content/docs/Quickstart.md (100%) rename templates/pages/docs/Resources.md.hbs => content/docs/Resources.md (100%) rename templates/pages/docs/Snippets.md.hbs => content/docs/Snippets.md (100%) rename templates/pages/docs/Support.md.hbs => content/docs/Support.md (100%) rename templates/pages/docs/Templates-Overview.md.hbs => content/docs/Templates-Overview.md (100%) rename templates/pages/docs/Underscore-Mixins.md.hbs => content/docs/Underscore-Mixins.md (100%) rename templates/pages/docs/Who-Uses-Assemble.md.hbs => content/docs/Who-Uses-Assemble.md (100%) rename templates/pages/docs/Why-Assemble.md.hbs => content/docs/Why-Assemble.md (100%) rename templates/pages/docs/Workflows.md.hbs => content/docs/Workflows.md (100%) rename templates/pages/docs/YAML-front-matter.md.hbs => content/docs/YAML-front-matter.md (99%) rename templates/pages/docs/YAML.md.hbs => content/docs/YAML.md (100%) create mode 100644 content/docs/config-data.md rename templates/pages/examples.hbs => content/docs/examples.md (100%) create mode 100644 content/docs/getting-started.md rename templates/pages/docs/options-assets.md.hbs => content/docs/options-assets.md (100%) rename templates/pages/docs/options-collections.md.hbs => content/docs/options-collections.md (100%) rename templates/pages/docs/options-data.md.hbs => content/docs/options-data.md (99%) rename templates/pages/docs/options-engine.md.hbs => content/docs/options-engine.md (100%) rename templates/pages/docs/options-ext.md.hbs => content/docs/options-ext.md (100%) rename templates/pages/docs/options-helpers.md.hbs => content/docs/options-helpers.md (100%) rename templates/pages/docs/options-layout.md.hbs => content/docs/options-layout.md (100%) rename templates/pages/docs/options-layoutdir.md.hbs => content/docs/options-layoutdir.md (100%) rename templates/pages/docs/options-marked.md.hbs => content/docs/options-marked.md (100%) rename templates/pages/docs/options-pages.md.hbs => content/docs/options-pages.md (100%) rename templates/pages/docs/options-pagination.md.hbs => content/docs/options-pagination.md (100%) rename templates/pages/docs/options-partials.md.hbs => content/docs/options-partials.md (100%) rename templates/pages/docs/options-permalinks.md.hbs => content/docs/options-permalinks.md (100%) create mode 100644 content/getting-started.md create mode 100644 content/guides/organizing-front-end-projects.md rename {src/content => content}/helpers/code/helper-embed.md (90%) create mode 100644 content/helpers/code/helper-gist.md rename {src/content => content}/helpers/code/helper-jsfiddle.md (57%) rename {src/content => content}/helpers/collections/helper-after.md (56%) rename {src/content => content}/helpers/collections/helper-any.md (60%) rename {src/content => content}/helpers/collections/helper-before.md (53%) rename {src/content => content}/helpers/collections/helper-eachIndex.md (56%) rename {src/content => content}/helpers/collections/helper-eachProperty.md (59%) rename {src/content => content}/helpers/collections/helper-empty.md (63%) rename {src/content => content}/helpers/collections/helper-first.md (67%) rename {src/content => content}/helpers/collections/helper-inArray.md (56%) rename {src/content => content}/helpers/collections/helper-join.md (55%) rename {src/content => content}/helpers/collections/helper-last.md (67%) rename {src/content => content}/helpers/collections/helper-length.md (67%) rename {src/content => content}/helpers/collections/helper-lengthEqual.md (70%) rename {src/content => content}/helpers/collections/helper-sort.md (83%) rename {src/content => content}/helpers/collections/helper-withAfter.md (58%) rename {src/content => content}/helpers/collections/helper-withBefore.md (55%) rename {src/content => content}/helpers/collections/helper-withFirst.md (70%) rename {src/content => content}/helpers/collections/helper-withLast.md (66%) rename {src/content => content}/helpers/collections/helper-withSort.md (77%) rename {src/content => content}/helpers/comparison/helper-and.md (73%) rename {src/content => content}/helpers/comparison/helper-compare.md (72%) rename {src/content => content}/helpers/comparison/helper-contains.md (67%) rename {src/content => content}/helpers/comparison/helper-gt.md (54%) rename {src/content => content}/helpers/comparison/helper-gte.md (53%) create mode 100644 content/helpers/comparison/helper-if_gt.md create mode 100644 content/helpers/comparison/helper-if_gteq.md rename {src/content => content}/helpers/comparison/helper-is.md (84%) create mode 100644 content/helpers/comparison/helper-isnt.md create mode 100644 content/helpers/comparison/helper-lt.md create mode 100644 content/helpers/comparison/helper-lte.md rename {src/content => content}/helpers/comparison/helper-or.md (72%) rename {src/content => content}/helpers/comparison/helper-unless_eq.md (88%) rename {src/content => content}/helpers/comparison/helper-unless_gt.md (63%) rename {src/content => content}/helpers/comparison/helper-unless_gteq.md (51%) rename {src/content => content}/helpers/comparison/helper-unless_lt.md (53%) rename {src/content => content}/helpers/comparison/helper-unless_lteq.md (51%) rename {src/content => content}/helpers/content/helper-copy.md (67%) rename {src/content => content}/helpers/content/helper-glob.md (60%) rename {src/content => content}/helpers/content/helper-include.md (85%) rename {src/content => content}/helpers/data/helper-parseJSON.md (96%) rename {src/content => content}/helpers/dates/helper-formatdate.md (59%) rename {src/content => content}/helpers/dates/helper-moment.md (88%) rename {src/content => content}/helpers/dates/helper-now.md (83%) rename {src/content => content}/helpers/dates/helper-timeago.md (60%) create mode 100644 content/helpers/html/helper-br.md create mode 100644 content/helpers/html/helper-doctype.md rename {src/content => content}/helpers/html/helper-exticon.md (83%) rename {src/content => content}/helpers/html/helper-ol.md (78%) rename {src/content => content}/helpers/html/helper-ul.md (87%) rename {src/content => content}/helpers/inflections/helper-inflect.md (78%) create mode 100644 content/helpers/inflections/helper-ordinalize.md create mode 100644 content/helpers/layout/helper-block.md create mode 100644 content/helpers/layout/helper-content.md create mode 100644 content/helpers/layout/helper-extend.md rename {src/content => content}/helpers/logging/helper-debug.md (77%) rename {src/content => content}/helpers/logging/helper-expandJSON.md (77%) rename {src/content => content}/helpers/logging/helper-expandYAML.md (76%) rename {src/content => content}/helpers/logging/helper-log.md (65%) rename {src/content => content}/helpers/markdown/helper-markdown.md (82%) rename {src/content => content}/helpers/markdown/helper-md.md (58%) create mode 100644 content/helpers/math/helper-add.md create mode 100644 content/helpers/math/helper-ceil.md create mode 100644 content/helpers/math/helper-divide.md create mode 100644 content/helpers/math/helper-floor.md create mode 100644 content/helpers/math/helper-multiply.md create mode 100644 content/helpers/math/helper-round.md create mode 100644 content/helpers/math/helper-subtract.md create mode 100644 content/helpers/math/helper-sum.md create mode 100644 content/helpers/misc/helper-default.md create mode 100644 content/helpers/misc/helper-noop.md rename {src/content => content}/helpers/numbers/helper-addCommas.md (62%) rename {src/content => content}/helpers/numbers/helper-toAbbr.md (56%) rename {src/content => content}/helpers/numbers/helper-toExponential.md (52%) create mode 100644 content/helpers/numbers/helper-toFixed.md rename {src/content => content}/helpers/numbers/helper-toFloat.md (59%) rename {src/content => content}/helpers/numbers/helper-toInt.md (64%) rename {src/content => content}/helpers/numbers/helper-toPrecision.md (60%) create mode 100644 content/helpers/path/helper-dirname.md create mode 100644 content/helpers/path/helper-extname.md create mode 100644 content/helpers/path/helper-relative.md rename {src/content => content}/helpers/readme/helper-authors.md (97%) rename {src/content => content}/helpers/readme/helper-changelog.md (98%) rename {src/content => content}/helpers/readme/helper-travis.md (80%) rename {src/content => content}/helpers/special/helper-aggregate.md (93%) rename {src/content => content}/helpers/special/helper-compose.md (95%) rename {src/content => content}/helpers/strings/helper-capitalizeEach.md (56%) rename {src/content => content}/helpers/strings/helper-capitalizeFirst.md (55%) rename {src/content => content}/helpers/strings/helper-center.md (51%) create mode 100644 content/helpers/strings/helper-dashify.md rename {src/content => content}/helpers/strings/helper-formatPhoneNumber.md (71%) create mode 100644 content/helpers/strings/helper-hyphenate.md rename {src/content => content}/helpers/strings/helper-lowercase.md (51%) rename {src/content => content}/helpers/strings/helper-occurances.md (60%) rename {src/content => content}/helpers/strings/helper-reverse.md (61%) rename {src/content => content}/helpers/strings/helper-sentence.md (60%) create mode 100644 content/helpers/strings/helper-titleize.md rename {src/content => content}/helpers/strings/helper-truncate.md (63%) create mode 100644 content/helpers/strings/helper-uppercase.md rename {src/content => content}/helpers/url/helper-urlParse.md (90%) rename {src/content => content}/helpers/url/helper-urlResolve.md (50%) create mode 100644 content/introduction.md create mode 100644 content/outline.md create mode 100644 content/overview.md create mode 100644 content/plugins/index.md create mode 100644 content/posts/2014-03/announcing-assemble-v0.5.0.md create mode 100644 content/posts/2014-03/assemble-docs-2-0-under-the-hood.md create mode 100644 content/posts/config-vs-content.md create mode 100644 content/posts/handlebars-subexpressions.md create mode 100644 data/README.md create mode 100644 data/button.json create mode 100644 data/config/contentOpts.yml create mode 100644 data/contentOpts.yml create mode 100644 data/core.json create mode 100644 data/helpers.yml rename {src/data => data}/jumbotron.yml (100%) create mode 100644 data/menu.json create mode 100644 data/nav.json create mode 100644 data/paginate.json create mode 100644 data/quotes.yml create mode 100644 data/section.json create mode 100644 data/team.yml rename {src/data => data}/teaser.yml (78%) create mode 100644 data/updates.yml create mode 100644 data/users.yml create mode 100644 data/utils/README.md create mode 100644 data/utils/extend-pkg.js create mode 100644 data/utils/mixins.js create mode 100644 data/utils/pkg.js create mode 100644 scripts/.jshintrc create mode 100644 scripts/application.js delete mode 100644 src/content/helpers/code/helper-gist.md delete mode 100644 src/content/helpers/comparison/helper-if_gt.md delete mode 100644 src/content/helpers/comparison/helper-if_gteq.md delete mode 100644 src/content/helpers/comparison/helper-isnt.md delete mode 100644 src/content/helpers/comparison/helper-lt.md delete mode 100644 src/content/helpers/comparison/helper-lte.md delete mode 100644 src/content/helpers/html/helper-blockquote.md delete mode 100644 src/content/helpers/html/helper-br.md delete mode 100644 src/content/helpers/html/helper-doctype.md delete mode 100644 src/content/helpers/html/helper-timeline.md delete mode 100644 src/content/helpers/inflections/helper-ordinalize.md delete mode 100644 src/content/helpers/math/helper-add.md delete mode 100644 src/content/helpers/math/helper-ceil.md delete mode 100644 src/content/helpers/math/helper-divide.md delete mode 100644 src/content/helpers/math/helper-floor.md delete mode 100644 src/content/helpers/math/helper-multiply.md delete mode 100644 src/content/helpers/math/helper-round.md delete mode 100644 src/content/helpers/math/helper-subtract.md delete mode 100644 src/content/helpers/math/helper-sum.md delete mode 100644 src/content/helpers/misc/helper-default.md delete mode 100644 src/content/helpers/misc/helper-noop.md delete mode 100644 src/content/helpers/new-helpers.md delete mode 100644 src/content/helpers/numbers/helper-toFixed.md delete mode 100644 src/content/helpers/path/_readme.md delete mode 100644 src/content/helpers/path/helper-dirname.md delete mode 100644 src/content/helpers/path/helper-extname.md delete mode 100644 src/content/helpers/path/helper-relative.md delete mode 100644 src/content/helpers/strings/helper-dashify.md delete mode 100644 src/content/helpers/strings/helper-hyphenate.md delete mode 100644 src/content/helpers/strings/helper-titleize.md delete mode 100644 src/content/helpers/strings/helper-uppercase.md delete mode 100644 src/content/helpers/url/_readme.md delete mode 100644 src/data/banner-alt.json delete mode 100644 src/data/banner.yml delete mode 100644 src/data/gallery.json delete mode 100644 src/data/home.yml delete mode 100644 src/data/keywords.json delete mode 100644 src/data/news.yml delete mode 100644 src/data/repos.json delete mode 100644 src/data/site.yml delete mode 100644 src/data/track.json delete mode 100644 src/extensions/helper-condense.js delete mode 100644 src/extensions/helper-html.js delete mode 100644 src/extensions/helper-updates.js delete mode 100644 src/extensions/helpers.js delete mode 100644 src/extensions/mixins.js delete mode 100644 src/less/bootstrap.yml delete mode 100644 src/less/bootstrap/accordion.less delete mode 100644 src/less/bootstrap/forms.less delete mode 100644 src/less/bootstrap/glyphicons.less delete mode 100644 src/less/bootstrap/grid.less delete mode 100644 src/less/bootstrap/jumbotron.less delete mode 100644 src/less/bootstrap/mixins.less delete mode 100644 src/less/bootstrap/navbar.less delete mode 100644 src/less/bootstrap/pagination.less delete mode 100644 src/less/bootstrap/panels.less delete mode 100644 src/less/bootstrap/responsive-utilities.less delete mode 100644 src/less/bootstrap/scaffolding.less delete mode 100644 src/less/bootstrap/tables.less delete mode 100644 src/less/bootstrap/thumbnails.less delete mode 100644 src/less/bootstrap/type.less delete mode 100644 src/less/components/alerts.less delete mode 100644 src/less/components/band.less delete mode 100644 src/less/components/banner.less delete mode 100644 src/less/components/blockquote.less delete mode 100644 src/less/components/code.less delete mode 100644 src/less/components/component-docs.less delete mode 100644 src/less/components/fonts.less delete mode 100644 src/less/components/label-groups.less delete mode 100644 src/less/components/markdown.less delete mode 100644 src/less/components/mixins.less delete mode 100644 src/less/components/nav.less delete mode 100644 src/less/components/navbar.less delete mode 100644 src/less/components/palette.less delete mode 100644 src/less/components/panels.less delete mode 100644 src/less/components/scaffolding.less delete mode 100644 src/less/components/tables.less delete mode 100644 src/less/components/thumbnails.less delete mode 100644 src/less/components/tooltip.less delete mode 100644 src/less/components/type.less delete mode 100644 src/less/components/webfonts-assemble-a.less delete mode 100644 src/less/components/webfonts.less delete mode 100644 src/less/docs/docs.less delete mode 100644 src/less/docs/gist-overrides.less delete mode 100644 src/less/docs/github.css delete mode 100644 src/less/docs/monokai.css delete mode 100644 src/less/ghpages.yml delete mode 100644 src/less/overrides.less delete mode 100644 src/less/variables.less create mode 100644 structure/_extensions/README.md create mode 100644 structure/_extensions/helpers/basename.js create mode 100644 structure/_extensions/helpers/console.js create mode 100644 structure/_extensions/helpers/content.js create mode 100644 structure/_extensions/helpers/expand.js create mode 100644 structure/_extensions/helpers/isActive.js create mode 100644 structure/_extensions/helpers/isPermalink.js create mode 100644 structure/_extensions/helpers/join.js create mode 100644 structure/_extensions/helpers/markdown.js create mode 100644 structure/_extensions/helpers/news.js create mode 100644 structure/_extensions/helpers/read.js create mode 100644 structure/_extensions/helpers/replace.js create mode 100644 structure/_extensions/helpers/write.js create mode 100644 structure/_extensions/plugins/README.md create mode 100644 structure/_extensions/plugins/holder-404-avoid.js create mode 100644 structure/_extensions/plugins/lib/template.js create mode 100644 structure/_extensions/plugins/lib/utils.js create mode 100644 structure/_extensions/plugins/link-checker.js create mode 100644 structure/_extensions/plugins/navigation.js create mode 100644 structure/_extensions/plugins/postprocess.js create mode 100644 structure/includes/ad.hbs create mode 100644 structure/includes/banner.hbs create mode 100644 structure/includes/buttons/back-to-top.hbs rename {templates/includes => structure/includes/buttons}/btn-github-fork-small.hbs (100%) rename {templates/includes => structure/includes/buttons}/btn-github-fork.hbs (80%) rename {templates/includes => structure/includes/buttons}/btn-github-star-small.hbs (100%) rename {templates/includes => structure/includes/buttons}/btn-github-star.hbs (80%) rename {templates/includes => structure/includes/buttons}/btn-social.hbs (93%) rename {templates/includes => structure/includes/buttons}/btn-tweet.hbs (100%) create mode 100644 structure/includes/buttons/button-tweet.hbs create mode 100644 structure/includes/buttons/button.hbs create mode 100644 structure/includes/buttons/social-buttons.hbs create mode 100644 structure/includes/buttons/toggle.hbs rename {templates => structure}/includes/colophon.hbs (78%) create mode 100644 structure/includes/dropdown-menu.hbs create mode 100644 structure/includes/footer.hbs create mode 100644 structure/includes/head.hbs create mode 100644 structure/includes/javascripts.hbs create mode 100644 structure/includes/jumbotron.hbs create mode 100644 structure/includes/list.hbs create mode 100644 structure/includes/masthead.hbs create mode 100644 structure/includes/nav-main.hbs create mode 100644 structure/includes/navbar-content.hbs create mode 100644 structure/includes/navigation.hbs create mode 100644 structure/includes/paginate.hbs rename {templates => structure}/includes/repo-list.hbs (100%) create mode 100644 structure/includes/repos.hbs create mode 100644 structure/includes/source-link.hbs create mode 100644 structure/includes/subhead.hbs rename {templates => structure}/includes/teaser.hbs (100%) create mode 100644 structure/layouts/README.md create mode 100644 structure/layouts/base.hbs create mode 100644 structure/layouts/default.hbs create mode 100644 structure/layouts/markdown.hbs create mode 100644 structure/pages/README.md create mode 100644 structure/pages/about.hbs create mode 100644 structure/pages/api.hbs create mode 100644 structure/pages/blog.hbs create mode 100644 structure/pages/cheatsheet.hbs create mode 100644 structure/pages/contributing.hbs rename templates/pages/docs/index.hbs => structure/pages/docs.md (99%) create mode 100644 structure/pages/examples.hbs create mode 100644 structure/pages/getting-started.hbs create mode 100644 structure/pages/helpers.hbs create mode 100644 structure/pages/index.hbs create mode 100644 structure/pages/license.hbs create mode 100644 structure/pages/plugins.md create mode 100644 structure/snippets/README.md create mode 100644 structure/snippets/_robots.txt create mode 100644 structure/snippets/alexa.hbs rename {templates/includes => structure}/snippets/analytics.hbs (100%) create mode 100644 structure/snippets/anchor.js create mode 100644 structure/snippets/bugherd.hbs rename {templates/includes/layout => structure/snippets}/click-tracker.hbs (100%) create mode 100644 structure/snippets/feed.xml create mode 100644 structure/snippets/github.js create mode 100644 structure/snippets/heading.tmpl rename {templates/includes => structure}/snippets/metadata.hbs (100%) rename {templates/includes => structure}/snippets/segment-io.hbs (95%) create mode 100644 styles/.csscomb.json create mode 100644 styles/.csslintrc rename {src/less => styles}/bootstrap/alerts.less (50%) rename {src/less => styles}/bootstrap/badges.less (71%) rename {src/less => styles}/bootstrap/bootstrap.less (70%) rename {src/less => styles}/bootstrap/breadcrumbs.less (63%) rename {src/less => styles}/bootstrap/button-groups.less (55%) rename {src/less => styles}/bootstrap/buttons.less (57%) rename {src/less => styles}/bootstrap/carousel.less (70%) rename {src/less => styles}/bootstrap/close.less (94%) rename {src/less => styles}/bootstrap/code.less (68%) rename {src/less => styles}/bootstrap/component-animations.less (100%) rename {src/less => styles}/bootstrap/dropdowns.less (63%) create mode 100644 styles/bootstrap/forms.less create mode 100644 styles/bootstrap/glyphicons.less create mode 100644 styles/bootstrap/grid.less create mode 100644 styles/bootstrap/input-groups.less create mode 100644 styles/bootstrap/jumbotron.less rename {src/less => styles}/bootstrap/labels.less (64%) rename {src/less => styles}/bootstrap/list-group.less (59%) rename {src/less => styles}/bootstrap/media.less (100%) create mode 100644 styles/bootstrap/mixins.less rename {src/less => styles}/bootstrap/modals.less (78%) create mode 100644 styles/bootstrap/navbar.less rename {src/less => styles}/bootstrap/navs.less (63%) rename {src/less => styles}/bootstrap/normalize.less (68%) rename {src/less => styles}/bootstrap/pager.less (78%) create mode 100644 styles/bootstrap/pagination.less create mode 100644 styles/bootstrap/panels.less rename {src/less => styles}/bootstrap/popovers.less (89%) rename {src/less => styles}/bootstrap/print.less (89%) rename {src/less => styles}/bootstrap/progress-bars.less (62%) create mode 100644 styles/bootstrap/responsive-utilities.less create mode 100644 styles/bootstrap/scaffolding.less create mode 100644 styles/bootstrap/tables.less create mode 100644 styles/bootstrap/theme.less create mode 100644 styles/bootstrap/thumbnails.less rename {src/less => styles}/bootstrap/tooltip.less (82%) create mode 100644 styles/bootstrap/type.less rename {src/less => styles}/bootstrap/wells.less (87%) create mode 100644 styles/components/ad.less create mode 100644 styles/components/anchors.less create mode 100644 styles/components/banner.less create mode 100644 styles/components/base.less create mode 100644 styles/components/blockquote.less create mode 100644 styles/components/btn-outline.less rename src/less/components/buttons.less => styles/components/btn.less (68%) create mode 100644 styles/components/callout.less create mode 100644 styles/components/dismiss.less create mode 100644 styles/components/dropdown-inverse.less create mode 100644 styles/components/fonts.less create mode 100644 styles/components/footer.less create mode 100644 styles/components/header.less create mode 100644 styles/components/main-nav.less rename {src/less => styles}/components/masthead.less (78%) create mode 100644 styles/components/navbar-content.less create mode 100644 styles/components/paginate.less create mode 100644 styles/components/sidebar.less create mode 100644 styles/components/source-link.less create mode 100644 styles/components/team.less rename {src/less => styles}/components/teaser.less (95%) create mode 100644 styles/components/webfonts.less create mode 100644 styles/docs.less create mode 100644 styles/examples.less create mode 100644 styles/index.less create mode 100644 styles/themes/book-code.less create mode 100644 styles/themes/book.less create mode 100644 styles/utilities/button-states.less create mode 100644 styles/utilities/highlight.less create mode 100644 styles/utilities/mixins.less create mode 100644 styles/utilities/stack.less rename {src/less/bootstrap => styles/utilities}/utilities.less (56%) create mode 100644 styles/variables.less delete mode 100644 templates/includes/announcements.md.hbs delete mode 100644 templates/includes/banner.hbs delete mode 100644 templates/includes/edit-template-link.hbs delete mode 100644 templates/includes/img.hbs delete mode 100644 templates/includes/javascripts.hbs delete mode 100644 templates/includes/jumbotron.hbs delete mode 100644 templates/includes/layout/footer.hbs delete mode 100644 templates/includes/layout/head.hbs delete mode 100644 templates/includes/layout/masthead-blog.hbs delete mode 100644 templates/includes/layout/masthead-boilerplates.hbs delete mode 100644 templates/includes/layout/masthead-docs.hbs delete mode 100644 templates/includes/layout/masthead-helpers.hbs delete mode 100644 templates/includes/layout/masthead-plugins.hbs delete mode 100644 templates/includes/layout/sidenav-blog.hbs delete mode 100644 templates/includes/layout/sidenav-boilerplates.hbs delete mode 100644 templates/includes/layout/sidenav-docs.hbs delete mode 100644 templates/includes/layout/sidenav-helpers.hbs delete mode 100644 templates/includes/layout/sidenav-link.hbs delete mode 100644 templates/includes/layout/sidenav-plugins.hbs delete mode 100644 templates/includes/navbar.hbs delete mode 100644 templates/includes/repos.hbs delete mode 100644 templates/includes/snippets/generated-links.md.hbs delete mode 100644 templates/includes/snippets/links-manually-defined.md.hbs delete mode 100644 templates/includes/snippets/links-template.md.hbs delete mode 100644 templates/includes/snippets/wiki-links.md.hbs delete mode 100644 templates/includes/thumbnail.hbs delete mode 100644 templates/includes/toc.md.hbs delete mode 100644 templates/layouts/base.hbs delete mode 100644 templates/layouts/blog.hbs delete mode 100644 templates/layouts/default.hbs delete mode 100644 templates/pages/blog/index.hbs delete mode 100644 templates/pages/boilerplates/boilerplate-blog.md.hbs delete mode 100644 templates/pages/boilerplates/boilerplate-bootstrap.md.hbs delete mode 100644 templates/pages/boilerplates/boilerplate-site.md.hbs delete mode 100644 templates/pages/boilerplates/index.md.hbs delete mode 100644 templates/pages/docs/FAQ.md.hbs delete mode 100644 templates/pages/docs/Helpers.md.hbs delete mode 100644 templates/pages/docs/Partials.md.hbs delete mode 100644 templates/pages/docs/layouts.json delete mode 100644 templates/pages/docs/sections/docs-about.md.hbs delete mode 100644 templates/pages/docs/sections/docs-contributing.md.hbs delete mode 100644 templates/pages/docs/sections/docs-examples.md.hbs delete mode 100644 templates/pages/docs/sections/docs-getting-started.md.hbs delete mode 100644 templates/pages/docs/sections/docs-helpers.md.hbs delete mode 100644 templates/pages/docs/sections/docs-how-helpers-work.md.hbs delete mode 100644 templates/pages/docs/sections/docs-options.md.hbs delete mode 100644 templates/pages/docs/sections/docs-overview.md.hbs delete mode 100644 templates/pages/docs/sections/docs-quick-start.md.hbs delete mode 100644 templates/pages/examples/generate-a-list-of-posts.md.hbs delete mode 100644 templates/pages/examples/index.md.hbs delete mode 100644 templates/pages/examples/markdown-inline.md.hbs delete mode 100644 templates/pages/examples/task-defaults.md.hbs delete mode 100644 templates/pages/helpers.json delete mode 100644 templates/pages/helpers/index.hbs delete mode 100644 templates/pages/helpers/toc.md delete mode 100644 templates/pages/index.hbs delete mode 100644 templates/pages/plugins/index.hbs delete mode 100644 templates/pages/tutorials/Automated-Documentation.md delete mode 100644 templates/pages/tutorials/Creating-a-New-Site.md.hbs delete mode 100644 templates/pages/tutorials/Expanding-Config-Values.md.hbs delete mode 100644 templates/pages/tutorials/Generate-Bootstrap-Compatible-Grid.md.hbs delete mode 100644 templates/pages/tutorials/Task-Examples.md.hbs delete mode 100644 templates/pages/tutorials/Toggling-Features.md.hbs delete mode 100644 templates/pages/tutorials/Tutorial-HTML-Tables.md.hbs delete mode 100644 templates/pages/tutorials/Tutorial-Lodash-YFM.md.hbs delete mode 100644 templates/pages/tutorials/Tutorial-Mixed-Content.md.hbs delete mode 100644 templates/pages/tutorials/Usage-Examples.md.hbs delete mode 100644 templates/pages/tutorials/yfm-lodash-example.md.hbs create mode 100644 test/fixtures/bar.hbs create mode 100644 test/fixtures/foo.hbs 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/.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..759c2c5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,7 +1,12 @@ -# Set default behaviour, in case users don't have core.autocrlf set. -* text=lf -* text eol=lf -*.* eol=lf +# Enforce Unix newlines +*.* text eol=lf +*.css text eol=lf +*.html text eol=lf +*.js text eol=lf +*.json text eol=lf +*.less text eol=lf +*.md text eol=lf +*.yml text eol=lf *.jpg binary *.gif binary diff --git a/.gitignore b/.gitignore index 076d07c..ba7089e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,53 @@ -# Always-ignore files -npm-debug.log -*.sublime-* +# Numerous always-ignore extensions +.ruby-version +*.diff +*.err +*.orig +*.log +*.rej +*.swo +*.swp *.zip -*.rar -TODO.md +*.vi +*~ -# Always-ignore folders -/docs -_gh_pages -node_modules -src/generate -src/templates/pages/docs/drafts -tasks -temp +# OS or Editor folders +*.esproj +*.sublime-project +*.sublime-workspace +._* +.cache +.DS_Store +.idea +.project +.settings +.tmproj +nbproject +Thumbs.db + +# Komodo +*.komodoproject +.komodotools + +# grunt-html-validation +validation-status.json +validation-report.json + +# Folders to ignore tmp -vendor \ No newline at end of file +temp +TODO.md +vendor +node_modules +bower_components +_gh_pages +_site +_draft + +# Planned +content/blog +content/boilerplates +content/examples +content/tutorials + +build-chain.fw.png \ 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/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..dfb2fe1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,226 +1,296 @@ /* - * Documentation for Assemble: the static site generator and - * component builder for Node.js, Grunt.js and Yeoman. - * https://github.com/assemble/assemble-docs/ + * assemble-docs * - * Copyright (c) 2013, Upstage + * Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors. * Licensed under the MIT license. */ -'use strict'; -module.exports = function (grunt) { +module.exports = function(grunt) { - // Mix local utilities into grunt instance. - grunt.util._.mixin(require('./src/extensions/mixins')); + 'use strict'; - // Report elapsed execution time of grunt tasks. - require('time-grunt')(grunt); + // Force unix-style newlines + grunt.util.linefeed = '\n'; - 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'); - }; + // Initialize mixins + grunt.util._.mixin(require('./data/utils/mixins')); + + /** + * Project configuration. + */ - // Project configuration. grunt.initConfig({ - /** - * Metadata for templates - */ - 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 - - /** - * Process LESS files - */ - less: { + // Project metadata + site : grunt.file.readYAML('_config.yml'), + pkg : grunt.file.readJSON('package.json'), + core : grunt.file.readJSON('data/core.json'), + helpers: grunt.file.readYAML('data/helpers.yml'), + vendor : grunt.file.readJSON('.bowerrc').directory, + + bootstrap: { + js: '<%= vendor %>/bootstrap/dist/js', + }, + + metadata: { + year: '<%= grunt.template.today("yyyy") %>', + banner: [ + '/*!', + ' * <%= site.brand %> v<%= core.version %> <<%= core.homepage %>>', + ' * Copyright 2013-<%= metadata.year %>, <%= site.authors %>.', + ' * Source code licensed under the <%= site.license.source.type %> license.', + ' * Docs licensed under <%= site.license.docs.type %>.', + ' */\n\n' + ].join('\n') + }, + + // Lint JavaScripts + jshint: { options: { - imports: {reference: '<%= ghpages.globals %>'} - }, - main: { - src: ['<%= bootstrap.bundle.docs %>', '<%= ghpages.bundle.docs %>'], - dest: '<%= site.destination %>/assets/css/assemble.css' + jshintrc: '<%= site.scripts %>/.jshintrc' }, - 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' - } + all: [ + 'Gruntfile.js', + '<%= site.scripts %>/*.js', + '<%= site.helpers %>/*.js', + '<%= site.plugins %>/*.js', + '<%= site.utils %>/*.js', + ] }, - /** - * 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' + // Pull down a list of repos from the Assemble org using + // GitHub's API. Resulting JSON is supplied to the templates. + repos: { + namespaced: { + options: {username: 'assemble'}, + files: { + '<%= site.data %>/repos.json': ['repos?page=1&per_page=100'] + } } }, - /** - * Generate the site. - */ + // Build HTML from templates and data assemble: { options: { - today: '<%= grunt.template.today() %>', - production: true, flatten: true, - // plugins: ['assemble-contrib-contextual'], - contextual: { - dest: './temp' + production: false, + assets: '<%= site.public %>', + css: '<%= less.site.dest %>', + + // Metadata + pkg: '<%= pkg %>', + site: '<%= site %>', + core: '<%= core %>', + data: ['<%= site.data %>/*.{json,yml}'], + + // Templates + partials: ['<%= site.includes %>/**/*.hbs', 'structure/snippets/*.hbs'], + layoutdir: '<%= site.layouts %>', + layoutext: '<%= site.layoutext %>', + layout: '<%= site.layout %>', + + // Extensions + plugins: '<%= site.plugins %>', + helpers: ['<%= site.helpers %>/*.js'], + + // 'anchors' plugin > Add anchors markup + // to headings in rendered HTML + anchors: { + template: '<%= site.templates %>/snippets/anchor.js' }, - 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 + + // 'download' plugin > Download docs for + // helpers from GitHub + download: { + repo: 'assemble/handlebars-helpers', + dest: 'tmp/', + files: ['docs/helpers.zip'] + }, + + // 'decompress' plugin > Decompress zip + // file for helper docs + decompress: { + files: ['tmp/helpers.zip'], + dest: 'tmp/helpers/' + }, + + // marked-extras options + marked: { + process: true, + heading: '<%= site.templates %>/snippets/heading.tmpl', + prefix: 'language-' } }, - - /** - * Generate markdown navigation links - */ - links: { + site: { options: { - postprocess: false, - flatten: true, - ext: '.hbs' + content: ['content/helpers/**/*.md'], + // permalinks: { + // structure: ':basename:ext' + // } }, - src: 'templates/includes/snippets/links-template.md.hbs', - dest: 'templates/includes/snippets/generated-links.md.hbs' - }, + files: {'<%= site.dest %>/': ['<%= site.pages %>/*.hbs']} + } + }, - /** - * 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/', - ext: '.html' - } + {expand: true, cwd: '<%= site.dest %>', src: '*.html', dest: '<%= site.dest %>/', ext: '.html'} ] - }, + } + }, - /** - * "Blog" section. - */ - blog: { - options: {layout: 'blog.hbs'}, - files: { - '<%= site.destination %>/blog/': ['templates/pages/blog/*.hbs'] + connect: { + options: { + port: 3000, + livereload: 35729, + hostname: 'localhost' + }, + livereload: { + options: { + open: true, + base: ['<%= site.dest %>'] } + } + }, + + // Compile Less to CSS + less: { + options: { + process: true, + paths: ['styles', 'styles/bootstrap', 'styles/components'] }, + site: { + src: ['styles/index.less'], + dest: '<%= assemble.options.assets %>/css/index.css' + } + }, - /** - * "Helpers" section. - * Uses: templates/pages/helpers.json - */ - helpers: { + csslint: { + strict: { options: { - ext: '.html', - flatten: true, - engine: 'handlebars', - pages: '<%= helpers.pages %>' + csslintrc: 'styles/.csslintrc' }, - src: ['templates/pages/helpers/index.hbs'], - dest: '<%= site.destination %>/helpers/' + src: ['<%= less.site.dest %>'] + } + }, + + csscomb: { + options: { + config: 'styles/.csscomb.json' }, + site: { + src: ['<%= less.site.dest %>'], + dest: '<%= less.site.dest %>' + } + }, - /** - * "Plugins" section. - * Uses: templates/pages/helpers.json - */ - plugins: { - options: { - ext: '.html', - flatten: true, - engine: 'handlebars' - }, - src: ['templates/pages/plugins/index.hbs'], - dest: '<%= site.destination %>/plugins/' + // Remove unused CSS from output. + uncss: { + options: { + ignore: ['#webfonts', '.active'] }, + site: { + src: ['<%= site.dest %>/*.html'], + dest: '<%= less.site.dest %>' + } + }, - /** - * "Boilerplates" section. - */ - boilerplates: { - files: [ - { - expand: true, - cwd: 'templates/pages/boilerplates/', - src: ['*.hbs'], - dest: '<%= site.destination %>/boilerplates/', - ext: '.html' - } - ] + // Minify JavaScripts + uglify: { + options: {banner: '<%= metadata.banner %>'}, + site: { + src: ['<%= site.scripts %>/**/*.js'], + dest: '<%= site.public %>/js/docs.min.js' } }, copy: { - docs: { + // Copy Bootstrap's scripts to local directory + vendor: { + src: '<%= bootstrap.js %>/bootstrap.js', + dest: '<%= site.scripts %>/vendor/bootstrap.js' + }, + // Copy source images, fonts and icons to site `public` directory + assets: { 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 %>/'} + {expand: true, cwd: '<%= site.assets %>', src: '**', dest: '<%= site.public %>/'} ] } }, - // Before generating new files, clean out files from previous build. + // Before generating new files, clean files from previous build. clean: { - ghpages: ['<%= site.destination %>/**/*.html'] + example: ['<%= site.dest %>/**/*.{html,css,js}'] + }, + + // Watch certain files, rebuild when changes are saved. + watch: { + options: {livereload: true}, + site: { + files: [ + '<%= site.content %>/**/*.md', + '<%= site.content %>/_config.yml', + '<%= site.data %>/*.json', + '<%= site.data %>/*.yml', + '<%= site.helpers %>', + '<%= site.styles %>/**/*.less', + '<%= site.templates %>/**/*.hbs', + ], + tasks: ['clean', 'copy', 'less:site', 'assemble'] + } } }); - // Set the base path for Bootstrap LESS library. - grunt.config.set('vendor.base', 'vendor'); + /** + * Load Plugins + */ - // Load npm and local plugins. + // Load npm plugins to provide necessary tasks. grunt.loadNpmTasks('assemble'); grunt.loadNpmTasks('assemble-less'); - require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-connect'); + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-contrib-csslint'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-prettify'); + grunt.loadNpmTasks('grunt-repos'); + grunt.loadNpmTasks('grunt-sync-pkg'); + grunt.loadNpmTasks('grunt-uncss'); + + /** + * Register Tasks + */ + + grunt.registerTask('update', ['repos', 'default']); + + // Runt tests and lint code. + grunt.registerTask('test', ['jshint', 'csslint']); + + // Design-oriented tasks. + grunt.registerTask('design', [ + 'clean', + 'copy', + 'less:site', + 'assemble:site', + 'connect', + 'watch' + ]); - // Default task to be run. + // Default tasks to be run. grunt.registerTask('default', [ - 'clean:ghpages', - 'assemble:helpers', - 'assemble', - 'newer:less', - 'sync' + 'jshint', + 'copy', + 'uglify', + 'less:site', + 'assemble:site', + 'prettify' ]); }; 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 deleted file mode 100644 index 21d81d7..0000000 --- a/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# [Assemble Documentation](http://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. - - -#### [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 diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..c5c134e --- /dev/null +++ b/_config.yml @@ -0,0 +1,137 @@ +# ============================================= +# DEST CONFIG +# ============================================= + +root: _gh_pages +dest: <%= site.root %> +public: <%= site.dest %>/public + + +# ============================================= +# SOURCE CONFIG +# ============================================= + +# Data +data: data +utils: data/utils + +# Assets > fonts, icons, images etc. +assets: assets + +# Styles +styles: styles + +# Scripts +scripts: scripts + +# Content +content: content + +# Templates +templates: structure +pages: <%= site.templates %>/pages +includes: <%= site.templates %>/includes +layouts: <%= site.templates %>/layouts +layoutext: .hbs +layout: default + + +# ============================================= +# EXTENSIONS +# ============================================= + +helpers: <%= site.templates %>/_extensions/helpers +plugins: + # NPM Plugins + # - assemble-contrib-download + # - assemble-contrib-decompress + - assemble-contrib-permalinks + - assemble-contrib-wordcount + + # Local plugins + - <%= site.templates %>/_extensions/plugins/navigation.js + + +# ============================================= +# PROJECT METADATA +# ============================================= + +# Site metadata +brand: ASSEMBLE +title: assemble +authors: "Jon Schlinkert, Brian Woodward, contributors" +lead: Static site generator for Node.js +name: <%= pkg.name %> +version: <%= pkg.version %> +author: <%= pkg.author.name %> +description: <%= pkg.description %> + +# URLs +url: + + # Repo + homepage: <%= pkg.homepage %> + repo: <%= pkg.repository.url %> + issues: <%= pkg.bugs.url %>?state=open + + # Site + public: http://assemble.io/ + 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 +# ============================================= + +analytics: + alexa: false + 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 +# ============================================= + +# Comments +disqus: + enabled: false + shortname: <%= pkg.name %> + +# Social +social: + twitter: + via: jonschlinkert + username: assemblejs + related: jonschlinkert:Assemble core team. + facebook: false + linkedin: false + gplus: false + hn: false + google: false + +# Sharing +sharing: + twitter: false + facebook: false + gplus: false + hn: false + google: false \ No newline at end of file diff --git a/assets/fonts/glyphicons-halflings-regular.eot b/assets/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed GIT binary patch literal 20335 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

!oRptb@n+ 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e GIT binary patch literal 41280 zcmc${2b>$#wLd<0X4JKkMs=IoY9(#guC%-Ix~!LV@5XgawLzwtVoFRi&4B<;Yzzq| z1QHw)z@da0*@PsIyqA!`6G@b6oWOe_b_$P#@)GbXG2Zd-d+unfZAkvV-{LBX3Wc;?Pswd9i3FaAXkSUrx`&zn7GF0_`M^SUUB}0?t9iO6@<@rQX4MYaNTB6W_twTb8q4L*yS58+j!vF z2j3Nh`>lc?ZQXpu)z^G$?&B8=!spQk>+PGb+PGPLztt}YU&eW%aO!9EjS$4lmWxSf0(+a;I;S#pX$!?81r zPxe(ID}q`APM!R3^`f;)g#n@JcY^fY+Km6eDgyYBYd&V!e;1`7xevutA z9r7HC9qK$ZaA-Mx@w`Ku58Zlb*I{&GuRWclsyf4l#;7ri09Ui*6RHTP@wSWT=t=8ZXH=9myY8a)#IAo_0fKca`D z*F~?2UK+h1x;}btbX|01bV+nx^t9+egvQ|i`5yx>jQlJU@$>W=|A&(_6vm%?s-YdZ z;Q!}OV(bZjm;rz1-#tQ;_`j;qrV74A>f+@?>cTDSR3S05S~a&0%~;2e-Lx)tKxMv; z>UNd2#a>sPt?jDVwrIuBoW#0#yDGI^Tpd#fmJh|%fpzVw+(uuGC*n5@{id$Gt`64? z4cEQ9t}YQ*O|3)f+%4<)iFNDnd#1Lkv(9K&&23r(y9;-Z-F4Pkb*g}$v9xK8{LsMY zA#0mgiS=dLRa;x^Cc4QF@cS`UN-jvmR5`U!6_yWe-?)84j5em!#pCPhw)4Fe#va|! zZnVx*=ZWJcj<(n@cz2v_v5abIJ!>cyo0pio;gZ-;tZ<(36Leh_-5IxzZI8{{K6gW6 zdu)4x-!7pFD~8koT#5eCZPkH|w1e-s_?>1Ptd7U)Vh6W_4EWLlv~6{zZD=1ZbGId8 z2P-#E#D*5Ftc$B`-OzS)XhC9oBDQ_O_QVEi33Z3wsXZPV1}}y|p$^c7cTxw?(8S!t zhD+9u?+Ja?*M?4Pzmv$eu#nhpQDe)8rq_KJXZ&sZgaI}%ILH=#(<7WO@OQd+HCi6q zzG5hG9$KFmtiuOO41)3lD~5_fOqg~4V3EZbKGfLxYR$%a-ctNxpiRY5&;@Vp#E_7w zkT-73wkGUcB*ievEJBCIgv|7!MHb)9YG%{FPcKR$HU&+h!zMahw3wx1(~FFb=ajgT z%qfW`HlV-tm%m7{V~3g`k(p2s3i4uku@Dj(1y#tXRXLTFRY#Vo)fv@yP&H*$Z&|fu zwHnqcbawfA;^}-y$tn4eB_4=}ENLa7Skn0dlb+x4dBA$NMe@P+tN3)UA)gG`7`p@g}ksuP_r4esa$Nz(oZ#Y*myhQ zydBZ3YRahfIn`WNYqM$~qdLmPfP*d!c&KGlGHRZ;tf8!hquH$5;L+MytLn+B9c9&> z)%sYg){s}cs-;hDSBj2Uwy&>`sF=@n=M(u{Z@xE|4FyAq?hY~0;1VryOWYj5TSU%f z`^BD|*kB}m6&MwIx%*C_4-Kj)_rGq6J%mIJM#ave| z6W_b;$tSPtXlr}!^3VTT99+%bTYl9u??3I@aP6-itZ}+F;Z~$u6l4`VD`Otmv91d} zER<(S#b#32t`d6j;d0id9}tJcA&h=ofez}MOMLIh@MGecx|6jH@5S#($3Hm!f&3l$ zJD6Q&(h@95us6di-`kyGsRm0GTk_j84vH5XTyyaJs;URwjqa+=zdhYJa8^~?^^8KtwNh&Fei-jtC-6@O7#R52HmK*O{ zb{aZAuyEO0ulKHHb62|T!ydZ}`=7qNxi+xAMLg%B;s5c3YOm_eH`jzt&r4U@9n$wC zpM7|lQe8tUd+7K(@(<((1)oqStP_e*@>*4IMh%tKx(s^5)cTCd4yu8&8t{;8P)(Qv zVE3AU;@u~S9&cl)PcOVYDiH%eQKR|9}_GlobT-NdeEVO-@<}^H#0Y+ z8Q5L)1Y^CPR4l~m!D{tOS)0XjnbmLA4_v#m^vM^Q_j}*d-(&C6IsFf%o!9CIaPl&X zg|#geFV+9@;`eX`hJ?@aA^BN(won6(WNK|j6%Gd{TZs`|W+=eeBozwtMwk^=|gMSwn`IzBM5z3t%CUFVn_xPg)&+-Z}Nm+_k}F^P&%JTTTZ;stRF1+?)Mjd z@9iZ^PjW}`nw`J<%#J^P=9j)n&CF?*>`C{+zjvK zuNOv-VW}N|3CU6jr(;`3FW{u)Z?q=6LBotNQy3JAAabkPmIDEaWZ{fDos*^;yfMJ( zfi(x~V>RAAS`5<>L~AaqQ?lA=oNs!R?p{dTU_il`#v4*K7~%2z>|@S{!3BYEIG}H) z_pxnpX#C#z?d;e^VeztYJHy`@w=?040O^T8t{05-eVK5saD{M-a1YjMP6ciHrCKltrL=JU^%w? z%G&%P`t)e)acuLg*uJ=|U3XVDtKG{fM{{8sGiF08Ye*?QAHB~$=KSRE|D)H310@=Q zQ@pWVr#!_^eBAl$=-)<^As zJhjCaXt;)F)BDM{$J2alXh-S%@f4-CE-W<2@5?O&s9@VPh1%VaGs>!k%%NCOX!q7hU38p|b zovTxd{u+j_eYEZ&L7wLVxj-V2==n%JWNx8UD3m@%8`0O%MTNo`?Y_YEs;F@G1lm<7 z6B|dFie`mXi)&WTk!DpN9@opsy47=}Th&KCR=bk0jD2*^NKaw!Rn)8<*XyrZg3!aP zBWl)*%=02T#&ty@BtHoKp$@D49Dxi+JJ#tozAjnHMJVYQMGK5M)#A~d7;9g-==9M+ zC+sLPnKY*bgA}T+PoUvsAa#550cf*+sDeG+sdP`!3k^+d=n$DPfw7($6FBsXCobH2 zl%02U>xEDJ;>?F$edpDO&Sbv{2MRQk@FosD&zkxl&zG*#jvm#nE9D>W*MI%|7F>mk znUk(EmLpgb1%W{>X`^~fr%;5k(W+UUxg1kH8C5<=T0J^pMJF6Ela21U%bLQaO&%6D zgK<3auK;7Dt%RX3F)~Ql5#33aHxvaxlcG>7)XBT$-NHQKbm2UK)a&JCbx}s`1@%^N z>dh~!^F7)U+zkubO3-P(KsMA2u>BHcpF5E2BUWhiYBd=cmfCW#yk>y{qb^eRN%8a? zI@{~jT2CW}_xYn@Fv={!P(BpIW-dEZ?48L%z4>&$7n?oZ88MY%`Bd7HPGK|A;1YEiG@Keut^O%am$rsLQ0x9U0T7rgScss@?4KCe!Dc zCnPOzoBkzKkurMPR~sJlqu6;PIcA{-F)-Vx|?r? z`d|?X$B)aZ$q&7MOasjecMHWhX;F=^_B*??Sm@K4VoSC+2X&#Y3>A}<3RfGBXENMw zg?V3lkXD^WkCwy`019a$&9s)?Cn=eC2St6RCAO;o}h)=XB2SH>r+jiH(R9}{

PBK;&Wcg|NX{>QR@W3{K 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/glyphicons-halflings-regular.woff b/assets/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 GIT binary patch literal 23320 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 mX4Rts Convenience methods for developing with Assemble - Start by requiring assemble: ```js diff --git a/templates/pages/docs/drafts/FAQ.hbs b/content/FAQ.md similarity index 88% rename from templates/pages/docs/drafts/FAQ.hbs rename to content/FAQ.md index 00f5cc0..408f5f9 100644 --- a/templates/pages/docs/drafts/FAQ.hbs +++ b/content/FAQ.md @@ -1,3 +1,33 @@ +# 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? + +# Data + +* When to use? + - lists + - repetitious code + + +# Context + +* data files, e.g. "functions.json" => {{#nav functions}} + +# Content + + {{#draft}} copied from an answer to an issue diff --git a/templates/pages/helpers/Cheatsheet.md.hbs b/content/cheatsheet.md similarity index 100% rename from templates/pages/helpers/Cheatsheet.md.hbs rename to content/cheatsheet.md diff --git a/templates/pages/contributing/index.md.hbs b/content/contributing.md similarity index 67% rename from templates/pages/contributing/index.md.hbs rename to content/contributing.md index 982c43d..3dc325c 100644 --- a/templates/pages/contributing/index.md.hbs +++ b/content/contributing.md @@ -5,10 +5,9 @@ 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! - -Looking to contribute something to Assemble? **Here's how you can help.** +_This document is based on Bootstrap's excellent CONTRIBUTING.md_ ## Questions @@ -20,35 +19,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 `. +## 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_. 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 * 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 @@ -67,10 +60,4 @@ For example, the Handlebars is not supported as a "language", so you might be te * 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/content/core-concepts-long.md b/content/core-concepts-long.md new file mode 100644 index 0000000..808c643 --- /dev/null +++ b/content/core-concepts-long.md @@ -0,0 +1,86 @@ +* 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 }} + + \ No newline at end of file diff --git a/content/core-concepts.md b/content/core-concepts.md new file mode 100644 index 0000000..0a9c305 --- /dev/null +++ b/content/core-concepts.md @@ -0,0 +1,177 @@ +# 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. + +Assemble is a static + + +## Getting Started + + +### 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 with [permalinks][permalinks] `about/index.html`) +* Partials: document fragments or snippets of code that will be included, inserted or embedded into other templates at build time. + +### Layouts + +A basic layout might look something like this: + +```handlebars + + + + + {{title}} + + + + {{> body }} + + +``` + +### 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. 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 for context, they can also be used for global project configuration and setting options. See the [documentation for data]() 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 \ No newline at end of file diff --git a/templates/pages/docs/About.md.hbs b/content/docs/About.md similarity index 100% rename from templates/pages/docs/About.md.hbs rename to content/docs/About.md diff --git a/templates/pages/docs/Announcements.md.hbs b/content/docs/Announcements.md similarity index 100% rename from templates/pages/docs/Announcements.md.hbs rename to content/docs/Announcements.md diff --git a/templates/pages/docs/Built-in-Variables.md.hbs b/content/docs/Built-in-Variables.md similarity index 98% rename from templates/pages/docs/Built-in-Variables.md.hbs rename to content/docs/Built-in-Variables.md index 753d81d..ef21b7e 100644 --- a/templates/pages/docs/Built-in-Variables.md.hbs +++ b/content/docs/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: diff --git a/templates/pages/docs/Cheatsheet-Handlebars.md.hbs b/content/docs/Cheatsheet-Handlebars.md similarity index 100% rename from templates/pages/docs/Cheatsheet-Handlebars.md.hbs rename to content/docs/Cheatsheet-Handlebars.md diff --git a/templates/pages/docs/Cheatsheet-Lo-Dash.md.hbs b/content/docs/Cheatsheet-Lo-Dash.md similarity index 75% rename from templates/pages/docs/Cheatsheet-Lo-Dash.md.hbs rename to content/docs/Cheatsheet-Lo-Dash.md index 3f4eebc..5c4107b 100644 --- a/templates/pages/docs/Cheatsheet-Lo-Dash.md.hbs +++ b/content/docs/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 = ; +``` \ No newline at end of file diff --git a/templates/pages/docs/Cheatsheet-Markdown.md.hbs b/content/docs/Cheatsheet-Markdown.md similarity index 100% rename from templates/pages/docs/Cheatsheet-Markdown.md.hbs rename to content/docs/Cheatsheet-Markdown.md diff --git a/templates/pages/docs/Collections.md.hbs b/content/docs/Collections.md similarity index 97% rename from templates/pages/docs/Collections.md.hbs rename to content/docs/Collections.md index 444240a..2a96ced 100644 --- a/templates/pages/docs/Collections.md.hbs +++ b/content/docs/Collections.md @@ -66,7 +66,7 @@ assemble: { collections: [ { // the name of the collection - name: 'tags', + title: 'tags', // the order in which to sort sortorder: 'desc' } @@ -86,7 +86,7 @@ assemble: { ], collections: [ { - name: 'pages', + title: 'pages', sortorder: 'desc' } ] @@ -99,4 +99,4 @@ assemble: { ## Related Information -* [FAQ][faq] +* [FAQ][faq] \ No newline at end of file diff --git a/templates/pages/docs/Comparison.md.hbs b/content/docs/Comparison.md similarity index 100% rename from templates/pages/docs/Comparison.md.hbs rename to content/docs/Comparison.md diff --git a/templates/pages/docs/Content.md.hbs b/content/docs/Content.md similarity index 100% rename from templates/pages/docs/Content.md.hbs rename to content/docs/Content.md diff --git a/templates/pages/docs/Context.md.hbs b/content/docs/Context.md similarity index 100% rename from templates/pages/docs/Context.md.hbs rename to content/docs/Context.md diff --git a/templates/pages/docs/Contributors.md.hbs b/content/docs/Contributors.md similarity index 100% rename from templates/pages/docs/Contributors.md.hbs rename to content/docs/Contributors.md diff --git a/templates/pages/docs/Custom-Helpers.md.hbs b/content/docs/Custom-Helpers.md similarity index 91% rename from templates/pages/docs/Custom-Helpers.md.hbs rename to content/docs/Custom-Helpers.md index 5ba0098..42c140d 100644 --- a/templates/pages/docs/Custom-Helpers.md.hbs +++ b/content/docs/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/Data.md.hbs b/content/docs/Data.md similarity index 100% rename from templates/pages/docs/Data.md.hbs rename to content/docs/Data.md diff --git a/templates/pages/docs/Embedding-Code.md.hbs b/content/docs/Embedding-Code.md similarity index 100% rename from templates/pages/docs/Embedding-Code.md.hbs rename to content/docs/Embedding-Code.md diff --git a/templates/pages/docs/Errors.md.hbs b/content/docs/Errors.md similarity index 100% rename from templates/pages/docs/Errors.md.hbs rename to content/docs/Errors.md diff --git a/templates/pages/extensions/index.md.hbs b/content/docs/Extensions.md similarity index 83% rename from templates/pages/extensions/index.md.hbs rename to content/docs/Extensions.md index 23f2839..e650a19 100644 --- a/templates/pages/extensions/index.md.hbs +++ b/content/docs/Extensions.md @@ -1,5 +1,6 @@ --- title: Extensions +published: false --- diff --git a/templates/pages/docs/External-Libraries.md.hbs b/content/docs/External-Libraries.md similarity index 100% rename from templates/pages/docs/External-Libraries.md.hbs rename to content/docs/External-Libraries.md diff --git a/templates/pages/docs/Grapevine.md.hbs b/content/docs/Grapevine.md similarity index 100% rename from templates/pages/docs/Grapevine.md.hbs rename to content/docs/Grapevine.md diff --git a/content/docs/Helpers.md b/content/docs/Helpers.md new file mode 100644 index 0000000..382f2a9 --- /dev/null +++ b/content/docs/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" \ No newline at end of file diff --git a/templates/pages/docs/Home.md.hbs b/content/docs/Home.md similarity index 98% rename from templates/pages/docs/Home.md.hbs rename to content/docs/Home.md index b284dc8..71db505 100644 --- a/templates/pages/docs/Home.md.hbs +++ b/content/docs/Home.md @@ -15,7 +15,7 @@ section: intro * [assemble-bootstrap](https://github.com/assemble/assemble-bootstrap) is a new boilerplate to build Twitter Bootstrap 3.0.0 with Assemble and Grunt.js. No need for Ruby, Jekyll, or running a server to view the docs. This repo is up-to-date and includes qunit and phantomjs tests. -{{> toc.md }} +{{> toc }} ## Community Projects diff --git a/templates/pages/docs/Idiomatic-Data.md.hbs b/content/docs/Idiomatic-Data.md similarity index 100% rename from templates/pages/docs/Idiomatic-Data.md.hbs rename to content/docs/Idiomatic-Data.md diff --git a/templates/pages/docs/Idiomatic-Templates.md.hbs b/content/docs/Idiomatic-Templates.md similarity index 100% rename from templates/pages/docs/Idiomatic-Templates.md.hbs rename to content/docs/Idiomatic-Templates.md diff --git a/templates/pages/docs/Installation.md.hbs b/content/docs/Installation.md similarity index 100% rename from templates/pages/docs/Installation.md.hbs rename to content/docs/Installation.md diff --git a/templates/pages/docs/Introduction.md.hbs b/content/docs/Introduction.md similarity index 100% rename from templates/pages/docs/Introduction.md.hbs rename to content/docs/Introduction.md diff --git a/templates/pages/docs/JSON.md.hbs b/content/docs/JSON.md similarity index 100% rename from templates/pages/docs/JSON.md.hbs rename to content/docs/JSON.md diff --git a/templates/pages/docs/Layouts.md.hbs b/content/docs/Layouts.md similarity index 95% rename from templates/pages/docs/Layouts.md.hbs rename to content/docs/Layouts.md index 87d9398..d0cb5bb 100644 --- a/templates/pages/docs/Layouts.md.hbs +++ b/content/docs/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. @@ -227,19 +231,11 @@ Layouts are optional, but the `\{{> body }}` tag is required for content to be p - \{{> body }} + {{> body }} ``` -## 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 diff --git a/templates/pages/docs/Markdown-Styling.md.hbs b/content/docs/Markdown-Styling.md similarity index 100% rename from templates/pages/docs/Markdown-Styling.md.hbs rename to content/docs/Markdown-Styling.md diff --git a/templates/pages/docs/Markdown.md.hbs b/content/docs/Markdown.md similarity index 100% rename from templates/pages/docs/Markdown.md.hbs rename to content/docs/Markdown.md diff --git a/templates/pages/docs/Metadata.md.hbs b/content/docs/Metadata.md similarity index 100% rename from templates/pages/docs/Metadata.md.hbs rename to content/docs/Metadata.md diff --git a/templates/pages/docs/Options.md.hbs b/content/docs/Options.md similarity index 100% rename from templates/pages/docs/Options.md.hbs rename to content/docs/Options.md diff --git a/templates/pages/docs/Outline.md.hbs b/content/docs/Outline.md similarity index 100% rename from templates/pages/docs/Outline.md.hbs rename to content/docs/Outline.md diff --git a/templates/pages/docs/Overview.md.hbs b/content/docs/Overview.md similarity index 100% rename from templates/pages/docs/Overview.md.hbs rename to content/docs/Overview.md diff --git a/templates/pages/docs/Pages-Arrays.md.hbs b/content/docs/Pages-Arrays.md similarity index 100% rename from templates/pages/docs/Pages-Arrays.md.hbs rename to content/docs/Pages-Arrays.md diff --git a/templates/pages/docs/Pages-Collections.md.hbs b/content/docs/Pages-Collections.md similarity index 99% rename from templates/pages/docs/Pages-Collections.md.hbs rename to content/docs/Pages-Collections.md index 9c1f896..5f07a52 100644 --- a/templates/pages/docs/Pages-Collections.md.hbs +++ b/content/docs/Pages-Collections.md @@ -67,7 +67,7 @@ When we build the project, pages from the `docs` target will render with: ``` -When we build the project, and pages from the `blog` target will render with: +When we build the project, and pages from the `block` target will render with: ```html
    @@ -461,4 +461,4 @@ Add the `pages` object "long-format" to your configuration file, and create sub- } ``` -{{/draft}} +{{/draft}} \ No newline at end of file diff --git a/templates/pages/docs/Pages.md.hbs b/content/docs/Pages.md similarity index 100% rename from templates/pages/docs/Pages.md.hbs rename to content/docs/Pages.md diff --git a/content/docs/Partials.md b/content/docs/Partials.md new file mode 100644 index 0000000..5b06c60 --- /dev/null +++ b/content/docs/Partials.md @@ -0,0 +1,27 @@ +--- +title: Partials + +area: docs +section: templates + +categories: +- templates +tags: +- includes +- partials +--- + +> Like "includes", partials are reusable fragments of code that can be included in a page and rendered + + +## Syntax + +Partials are useful when you have blocks of reusable code that are applicable in different contexts. The `Handlebars.registerPartial` method, which registers a partial, accepts the name of the partial as its first argument and either a _template source string_ or a _compiled template_ as its second argument. + +Accepting a compiled template as the second argument enables you to, for example, use the partial in a loop that outputs a list but also append items to the list later using the partial's template function. + +{{#draft}} +To use a partial from a template, simply include `\{{> partial-name }}`. For example: +{{/draft}} + +#### Also see [options.partials][options-partials] → diff --git a/templates/pages/docs/Quickstart.md.hbs b/content/docs/Quickstart.md similarity index 100% rename from templates/pages/docs/Quickstart.md.hbs rename to content/docs/Quickstart.md diff --git a/templates/pages/docs/Resources.md.hbs b/content/docs/Resources.md similarity index 100% rename from templates/pages/docs/Resources.md.hbs rename to content/docs/Resources.md diff --git a/templates/pages/docs/Snippets.md.hbs b/content/docs/Snippets.md similarity index 100% rename from templates/pages/docs/Snippets.md.hbs rename to content/docs/Snippets.md diff --git a/templates/pages/docs/Support.md.hbs b/content/docs/Support.md similarity index 100% rename from templates/pages/docs/Support.md.hbs rename to content/docs/Support.md diff --git a/templates/pages/docs/Templates-Overview.md.hbs b/content/docs/Templates-Overview.md similarity index 100% rename from templates/pages/docs/Templates-Overview.md.hbs rename to content/docs/Templates-Overview.md diff --git a/templates/pages/docs/Underscore-Mixins.md.hbs b/content/docs/Underscore-Mixins.md similarity index 100% rename from templates/pages/docs/Underscore-Mixins.md.hbs rename to content/docs/Underscore-Mixins.md diff --git a/templates/pages/docs/Who-Uses-Assemble.md.hbs b/content/docs/Who-Uses-Assemble.md similarity index 100% rename from templates/pages/docs/Who-Uses-Assemble.md.hbs rename to content/docs/Who-Uses-Assemble.md diff --git a/templates/pages/docs/Why-Assemble.md.hbs b/content/docs/Why-Assemble.md similarity index 100% rename from templates/pages/docs/Why-Assemble.md.hbs rename to content/docs/Why-Assemble.md diff --git a/templates/pages/docs/Workflows.md.hbs b/content/docs/Workflows.md similarity index 100% rename from templates/pages/docs/Workflows.md.hbs rename to content/docs/Workflows.md diff --git a/templates/pages/docs/YAML-front-matter.md.hbs b/content/docs/YAML-front-matter.md similarity index 99% rename from templates/pages/docs/YAML-front-matter.md.hbs rename to content/docs/YAML-front-matter.md index 9caeccc..9b1adba 100644 --- a/templates/pages/docs/YAML-front-matter.md.hbs +++ b/content/docs/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 diff --git a/templates/pages/docs/YAML.md.hbs b/content/docs/YAML.md similarity index 100% rename from templates/pages/docs/YAML.md.hbs rename to content/docs/YAML.md diff --git a/content/docs/config-data.md b/content/docs/config-data.md new file mode 100644 index 0000000..413d2ab --- /dev/null +++ b/content/docs/config-data.md @@ -0,0 +1,49 @@ +# 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/examples.hbs b/content/docs/examples.md similarity index 100% rename from templates/pages/examples.hbs rename to content/docs/examples.md diff --git a/content/docs/getting-started.md b/content/docs/getting-started.md new file mode 100644 index 0000000..543d373 --- /dev/null +++ b/content/docs/getting-started.md @@ -0,0 +1,23 @@ +# Getting Started + +> Learn how to get up and running with Assemble in a matter of minutes! + +* + +## Generator +The easiest and fastest way to get up and running with Assemble is to use the [Assemble generator](https://github.com/assemble/generator-assemble). + +Install with [npm]() + +```bash +npm i assemble --save +``` + + + + +Depending on how you want to use Assemble, here are a few options for getting started: + +* Use the [Assemble generator](https://github.com/assemble/generator-assemble) to scaffold out your project +* Start a basic Assemble project from scratch +* [Download the latest release](https://github.com/assemble/assemble/archive/v0.4.36.zip) directly from GitHub diff --git a/templates/pages/docs/options-assets.md.hbs b/content/docs/options-assets.md similarity index 100% rename from templates/pages/docs/options-assets.md.hbs rename to content/docs/options-assets.md 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 99% rename from templates/pages/docs/options-data.md.hbs rename to content/docs/options-data.md index 153dea8..e53bf67 100644 --- a/templates/pages/docs/options-data.md.hbs +++ b/content/docs/options-data.md @@ -72,7 +72,7 @@ The result after running `grunt assemble` will be: Add `package.json` to the `data` object: ```js -assemble: { +assemble { myProject: { options: { data: 'package.json' @@ -101,7 +101,7 @@ Assuming we add the following code to our Gruntfile ```js pkg: grunt.file.readJSON('package.json'), -assemble: { +assemble { myProject: { options: { pkg: '<%= pkg %>', 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 100% rename from templates/pages/docs/options-ext.md.hbs rename to content/docs/options-ext.md 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 100% rename from templates/pages/docs/options-layoutdir.md.hbs rename to content/docs/options-layoutdir.md diff --git a/templates/pages/docs/options-marked.md.hbs b/content/docs/options-marked.md similarity index 100% rename from templates/pages/docs/options-marked.md.hbs rename to content/docs/options-marked.md diff --git a/templates/pages/docs/options-pages.md.hbs b/content/docs/options-pages.md similarity index 100% rename from templates/pages/docs/options-pages.md.hbs rename to content/docs/options-pages.md 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 100% rename from templates/pages/docs/options-partials.md.hbs rename to content/docs/options-partials.md 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/content/getting-started.md b/content/getting-started.md new file mode 100644 index 0000000..dc0e605 --- /dev/null +++ b/content/getting-started.md @@ -0,0 +1,22 @@ + +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. + +We're always willing to help new users, so please stop out to [Assemble's GitHub Issues](https://github.com/assemble/assemble/issues) or ask a question on [StackOverflow](http://stackoverflow.com/questions/tagged/assemble) and someone from the core team or our super-supportive community will help you out! + +## Getting Started + +To get started with any new Assemble project, we recommend using the [Yeoman generator for Assemble](https://github.com/assemble/generator-assemble). Before continuing, be sure to have [Yeoman](http://yeoman.io/gettingstarted.html) installed globally, as well as [Bower](https://github.com/bower/bower) and [grunt-cli](https://github.com/gruntjs/grunt-cli), as Yeoman depends heavily on these both libs. + +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 +yo assemble +``` +If all build success you're well on your way to successfully building your first Assemble project! + diff --git a/content/guides/organizing-front-end-projects.md b/content/guides/organizing-front-end-projects.md new file mode 100644 index 0000000..866bd22 --- /dev/null +++ b/content/guides/organizing-front-end-projects.md @@ -0,0 +1,42 @@ +--- +title: Organizing Front-End Projects on GitHub +author: Jon Schlinkert +--- + +> This guide will share helpful insights, conventions and recommendations for effectively starting, organizing, and maintaining front-end projects on GitHub. + +## Getting Started + +* Configuration +* `_gh_pages` +* assets: images, fonts, icons, vendor css and javascripts +* content +* data +* scripts +* styles +* templates + - _drafts + - layouts + - sub-layouts + - pages + - includes (partials) + - snippets +* test +* vendor +* .dotfiles + - .gitignore (remember to add `_drafts` and `vendor`!) + + +## About the Author + +{{! this should be from a data file }} + +A self-proclaimed open-source evangelist, [Jon Schlinkert]() has authored more than 300 code projects on GitHub and NPM since mid-2012. Most of Jon's projects are written in JavaScript, particularly server-side / Node.js, but he has also published projects written in jQuery, CoffeeScript and 10 other languages including, Python, HTML/CSS and Ruby. + +Beyond his own projects, Jon is a maintainer and creator of [Assemble](), Phaser, and Upstage, core contributor and team member for [Less.js](), and regularly makes contributions to other open-source projects. + +More about Jon + +* Judge for [Node Knockout 2013](), a 48-hour Node.js hackathon with contestants worldwide. +* Jon and fellow-Assemble-creator Brian Woodward +* Has given talks about JavaScript, Node.js and Assemble. Always open to new speaking opportunities! \ No newline at end of file diff --git a/src/content/helpers/code/helper-embed.md b/content/helpers/code/helper-embed.md similarity index 90% rename from src/content/helpers/code/helper-embed.md rename to content/helpers/code/helper-embed.md index d7a0d1e..f05fdfd 100644 --- a/src/content/helpers/code/helper-embed.md +++ b/content/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/helpers/code/helper-gist.md b/content/helpers/code/helper-gist.md new file mode 100644 index 0000000..065ab67 --- /dev/null +++ b/content/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: + +```handlebars + +``` diff --git a/src/content/helpers/code/helper-jsfiddle.md b/content/helpers/code/helper-jsfiddle.md similarity index 57% rename from src/content/helpers/code/helper-jsfiddle.md rename to content/helpers/code/helper-jsfiddle.md index f9ca219..68099fe 100644 --- a/src/content/helpers/code/helper-jsfiddle.md +++ b/content/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/helpers/collections/helper-after.md similarity index 56% rename from src/content/helpers/collections/helper-after.md rename to content/helpers/collections/helper-after.md index 31e80d4..3a29561 100644 --- a/src/content/helpers/collections/helper-after.md +++ b/content/helpers/collections/helper-after.md @@ -1,6 +1,8 @@ -#### \{{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: @@ -18,12 +20,12 @@ Data: ``` Template: -```html +```handlebars \{{after collection 5}} ``` Renders to: -```html +```handlebars Leela, Professor Farnsworth, Scruffy ``` diff --git a/src/content/helpers/collections/helper-any.md b/content/helpers/collections/helper-any.md similarity index 60% rename from src/content/helpers/collections/helper-any.md rename to content/helpers/collections/helper-any.md index db649c1..6f99f4d 100644 --- a/src/content/helpers/collections/helper-any.md +++ b/content/helpers/collections/helper-any.md @@ -1,6 +1,8 @@ -#### \{{any}} -_Conditionally render a block if the collection isn't empty. Opposite of `empty`_ -
    Parameters: `none` +## \{{any}} + +> Conditionally render a block if the collection isn't empty. Opposite of `empty` + +Parameters: `none` Data: @@ -9,7 +11,7 @@ Data: ``` Templates: -```html +```handlebars \{{#any collection}} Good news everyone! \{{else}} diff --git a/src/content/helpers/collections/helper-before.md b/content/helpers/collections/helper-before.md similarity index 53% rename from src/content/helpers/collections/helper-before.md rename to content/helpers/collections/helper-before.md index 238645a..067918e 100644 --- a/src/content/helpers/collections/helper-before.md +++ b/content/helpers/collections/helper-before.md @@ -1,6 +1,8 @@ -#### \{{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) +## \{{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: @@ -18,13 +20,13 @@ Data: ``` Template: -```html +```handlebars \{{before collection 5}} ``` Renders to: -```html +```handlebars Amy Wong, Bender, Dr. Zoidberg ``` diff --git a/src/content/helpers/collections/helper-eachIndex.md b/content/helpers/collections/helper-eachIndex.md similarity index 56% rename from src/content/helpers/collections/helper-eachIndex.md rename to content/helpers/collections/helper-eachIndex.md index 474617d..99a89d6 100644 --- a/src/content/helpers/collections/helper-eachIndex.md +++ b/content/helpers/collections/helper-eachIndex.md @@ -1,6 +1,8 @@ -#### \{{eachIndex}} -_Current implementation of the default Handlebars loop helper \{{#each}} adding index (0-based index) to the loop context._ -
    Parameters: `none` +## \{{eachIndex}} + +> Current implementation of the default Handlebars loop helper \{{#each}} adding index (0-based index) to the loop context. + +Parameters: `none` Data: @@ -9,7 +11,7 @@ Data: ``` Template: -```html +```handlebars \{{#eachIndex collection}} \{{this}} is \{{index}} \{{/eachIndex}} diff --git a/src/content/helpers/collections/helper-eachProperty.md b/content/helpers/collections/helper-eachProperty.md similarity index 59% rename from src/content/helpers/collections/helper-eachProperty.md rename to content/helpers/collections/helper-eachProperty.md index 6ce388c..161a03c 100644 --- a/src/content/helpers/collections/helper-eachProperty.md +++ b/content/helpers/collections/helper-eachProperty.md @@ -1,6 +1,8 @@ -#### \{{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: @@ -12,7 +14,7 @@ Data: ``` Template: -```html +```handlebars \{{#eachProperty object}} \{{key}} - \{{value}}
    \{{/eachProperty }} diff --git a/src/content/helpers/collections/helper-empty.md b/content/helpers/collections/helper-empty.md similarity index 63% rename from src/content/helpers/collections/helper-empty.md rename to content/helpers/collections/helper-empty.md index 33a6ac3..ef076f0 100644 --- a/src/content/helpers/collections/helper-empty.md +++ b/content/helpers/collections/helper-empty.md @@ -1,6 +1,8 @@ -#### \{{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: @@ -9,7 +11,7 @@ Data: ``` Template: -```html +```handlebars \{{#empty collection}} Good news everyone! \{{else}} diff --git a/src/content/helpers/collections/helper-first.md b/content/helpers/collections/helper-first.md similarity index 67% rename from src/content/helpers/collections/helper-first.md rename to content/helpers/collections/helper-first.md index 893a4b1..c7eb2a9 100644 --- a/src/content/helpers/collections/helper-first.md +++ b/content/helpers/collections/helper-first.md @@ -1,6 +1,8 @@ -#### \{{first}} -_Returns the first item in a collection._ -
    Parameters: `none` +## \{{first}} + +> Returns the first item in a collection. + +Parameters: `none` Data: @@ -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/src/content/helpers/collections/helper-inArray.md b/content/helpers/collections/helper-inArray.md similarity index 56% rename from src/content/helpers/collections/helper-inArray.md rename to content/helpers/collections/helper-inArray.md index f459f8e..a933c2f 100644 --- a/src/content/helpers/collections/helper-inArray.md +++ b/content/helpers/collections/helper-inArray.md @@ -1,6 +1,8 @@ -#### \{{inArray}} -_Conditionally render a block if a specified value is in the collection._ -
    Parameters: value `string|int` - A value to test against. (Required) +## \{{inArray}} + +> Conditionally render a block if a specified value is in the collection. + +Parameters: value `string|int` - A value to test against. (Required) Data: @@ -9,7 +11,7 @@ Data: ``` Template: -```html +```handlebars \{{#inArray collection "Fry"}} I'm walking on sunshine! \{{else}} @@ -19,7 +21,7 @@ Template: Renders to: -```html +```handlebars I'm walking on sunshine! ``` diff --git a/src/content/helpers/collections/helper-join.md b/content/helpers/collections/helper-join.md similarity index 55% rename from src/content/helpers/collections/helper-join.md rename to content/helpers/collections/helper-join.md index 230447a..2332b4f 100644 --- a/src/content/helpers/collections/helper-join.md +++ b/content/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/helpers/collections/helper-last.md similarity index 67% rename from src/content/helpers/collections/helper-last.md rename to content/helpers/collections/helper-last.md index 362cdee..0851fab 100644 --- a/src/content/helpers/collections/helper-last.md +++ b/content/helpers/collections/helper-last.md @@ -1,6 +1,8 @@ -#### \{{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: @@ -18,7 +20,7 @@ Data: ``` Template: -```html +```handlebars \{{last collection}} ``` diff --git a/src/content/helpers/collections/helper-length.md b/content/helpers/collections/helper-length.md similarity index 67% rename from src/content/helpers/collections/helper-length.md rename to content/helpers/collections/helper-length.md index b1dc740..baaa72c 100644 --- a/src/content/helpers/collections/helper-length.md +++ b/content/helpers/collections/helper-length.md @@ -1,6 +1,8 @@ -#### \{{length}} -_Returns the length of the collection._ -
    Parameters: `none` +## \{{length}} + +> Returns the length of the collection. + +Parameters: `none` Data: @@ -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/helpers/collections/helper-lengthEqual.md similarity index 70% rename from src/content/helpers/collections/helper-lengthEqual.md rename to content/helpers/collections/helper-lengthEqual.md index bcb2435..eb1f307 100644 --- a/src/content/helpers/collections/helper-lengthEqual.md +++ b/content/helpers/collections/helper-lengthEqual.md @@ -1,6 +1,8 @@ -#### \{{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: @@ -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/helpers/collections/helper-sort.md similarity index 83% rename from src/content/helpers/collections/helper-sort.md rename to content/helpers/collections/helper-sort.md index 2e7585b..c550dfd 100644 --- a/src/content/helpers/collections/helper-sort.md +++ b/content/helpers/collections/helper-sort.md @@ -1,5 +1,7 @@ -#### \{{sort}} -_Returns the collection sorted._ +## \{{sort}} + +> Returns the collection sorted. + Parameters: `none` Data: @@ -18,7 +20,7 @@ Data: ``` Template: -```html +```handlebars \{{sort collection}} ``` diff --git a/src/content/helpers/collections/helper-withAfter.md b/content/helpers/collections/helper-withAfter.md similarity index 58% rename from src/content/helpers/collections/helper-withAfter.md rename to content/helpers/collections/helper-withAfter.md index c59863a..e7646e9 100644 --- a/src/content/helpers/collections/helper-withAfter.md +++ b/content/helpers/collections/helper-withAfter.md @@ -1,6 +1,8 @@ -#### \{{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: @@ -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/helpers/collections/helper-withBefore.md similarity index 55% rename from src/content/helpers/collections/helper-withBefore.md rename to content/helpers/collections/helper-withBefore.md index fd3a7a2..ca2cc04 100644 --- a/src/content/helpers/collections/helper-withBefore.md +++ b/content/helpers/collections/helper-withBefore.md @@ -1,6 +1,8 @@ -#### \{{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: @@ -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/helpers/collections/helper-withFirst.md similarity index 70% rename from src/content/helpers/collections/helper-withFirst.md rename to content/helpers/collections/helper-withFirst.md index 9ef45cf..fd6b9cd 100644 --- a/src/content/helpers/collections/helper-withFirst.md +++ b/content/helpers/collections/helper-withFirst.md @@ -1,6 +1,8 @@ -#### \{{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: @@ -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/helpers/collections/helper-withLast.md similarity index 66% rename from src/content/helpers/collections/helper-withLast.md rename to content/helpers/collections/helper-withLast.md index 6404c88..d18d5d8 100644 --- a/src/content/helpers/collections/helper-withLast.md +++ b/content/helpers/collections/helper-withLast.md @@ -1,6 +1,8 @@ -#### \{{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: @@ -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/helpers/collections/helper-withSort.md similarity index 77% rename from src/content/helpers/collections/helper-withSort.md rename to content/helpers/collections/helper-withSort.md index 33e0f79..fc2e3e1 100644 --- a/src/content/helpers/collections/helper-withSort.md +++ b/content/helpers/collections/helper-withSort.md @@ -1,6 +1,8 @@ -#### \{{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: @@ -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/helpers/comparison/helper-and.md similarity index 73% rename from src/content/helpers/comparison/helper-and.md rename to content/helpers/comparison/helper-and.md index 67593c5..fef9360 100644 --- a/src/content/helpers/comparison/helper-and.md +++ b/content/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 +```js great = true 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/helpers/comparison/helper-compare.md similarity index 72% rename from src/content/helpers/comparison/helper-compare.md rename to content/helpers/comparison/helper-compare.md index 2349df9..fa1a7ca 100644 --- a/src/content/helpers/comparison/helper-compare.md +++ b/content/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/helpers/comparison/helper-contains.md similarity index 67% rename from src/content/helpers/comparison/helper-contains.md rename to content/helpers/comparison/helper-contains.md index 61bd6a8..132e202 100644 --- a/src/content/helpers/comparison/helper-contains.md +++ b/content/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/helpers/comparison/helper-gt.md similarity index 54% rename from src/content/helpers/comparison/helper-gt.md rename to content/helpers/comparison/helper-gt.md index ffdcec0..52c01c3 100644 --- a/src/content/helpers/comparison/helper-gt.md +++ b/content/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 +```js 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/helpers/comparison/helper-gte.md similarity index 53% rename from src/content/helpers/comparison/helper-gte.md rename to content/helpers/comparison/helper-gte.md index 3c65583..8f652fe 100644 --- a/src/content/helpers/comparison/helper-gte.md +++ b/content/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 +> 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 number = 5 ``` Template: -```html +```handlebars \{{#gte number 5}} Kiss my shiny metal ass! \{{else}} diff --git a/content/helpers/comparison/helper-if_gt.md b/content/helpers/comparison/helper-if_gt.md new file mode 100644 index 0000000..611de54 --- /dev/null +++ b/content/helpers/comparison/helper-if_gt.md @@ -0,0 +1,11 @@ +## \{{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: Dan Harper \ No newline at end of file diff --git a/content/helpers/comparison/helper-if_gteq.md b/content/helpers/comparison/helper-if_gteq.md new file mode 100644 index 0000000..ff72f3e --- /dev/null +++ b/content/helpers/comparison/helper-if_gteq.md @@ -0,0 +1,10 @@ +## \{{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: Dan Harper \ No newline at end of file diff --git a/src/content/helpers/comparison/helper-is.md b/content/helpers/comparison/helper-is.md similarity index 84% rename from src/content/helpers/comparison/helper-is.md rename to content/helpers/comparison/helper-is.md index 8580a1d..d9ec3bb 100644 --- a/src/content/helpers/comparison/helper-is.md +++ b/content/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,17 @@ page: Renders to: -```html +```handlebars

    About Us

    ``` -#### \{{ifeq}} +## \{{ifeq}} **Alias for `is`. Considering consolidating** _Conditionally render a block if the condition is true (If x = y)._ Parameters: `none` -```html +```handlebars \{{#ifeq x compare=y}} ... \{{/ifeq}} ``` \ No newline at end of file diff --git a/content/helpers/comparison/helper-isnt.md b/content/helpers/comparison/helper-isnt.md new file mode 100644 index 0000000..297f686 --- /dev/null +++ b/content/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/helpers/comparison/helper-lt.md b/content/helpers/comparison/helper-lt.md new file mode 100644 index 0000000..46ef209 --- /dev/null +++ b/content/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/helpers/comparison/helper-lte.md b/content/helpers/comparison/helper-lte.md new file mode 100644 index 0000000..564c600 --- /dev/null +++ b/content/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/helpers/comparison/helper-or.md similarity index 72% rename from src/content/helpers/comparison/helper-or.md rename to content/helpers/comparison/helper-or.md index 69e06cd..0fc0e3a 100644 --- a/src/content/helpers/comparison/helper-or.md +++ b/content/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/helpers/comparison/helper-unless_eq.md similarity index 88% rename from src/content/helpers/comparison/helper-unless_eq.md rename to content/helpers/comparison/helper-unless_eq.md index 0da0dbb..ae3b1a5 100644 --- a/src/content/helpers/comparison/helper-unless_eq.md +++ b/content/helpers/comparison/helper-unless_eq.md @@ -1,4 +1,4 @@ -#### \{{unless_eq}} +## \{{unless_eq}} **Alias for `isnt`** @@ -6,7 +6,7 @@ _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 diff --git a/src/content/helpers/comparison/helper-unless_gt.md b/content/helpers/comparison/helper-unless_gt.md similarity index 63% rename from src/content/helpers/comparison/helper-unless_gt.md rename to content/helpers/comparison/helper-unless_gt.md index 84f1d4b..15c5399 100644 --- a/src/content/helpers/comparison/helper-unless_gt.md +++ b/content/helpers/comparison/helper-unless_gt.md @@ -1,8 +1,9 @@ -#### \{{unless_gt}} -_Unless greater than (Unless x > y)_ +## \{{unless_gt}} + +> Unless greater than (Unless x > y) Parameters: `none` -```html +```handlebars \{{#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/content/helpers/comparison/helper-unless_gteq.md similarity index 51% rename from src/content/helpers/comparison/helper-unless_gteq.md rename to content/helpers/comparison/helper-unless_gteq.md index 701bbfb..eb18c10 100644 --- a/src/content/helpers/comparison/helper-unless_gteq.md +++ b/content/helpers/comparison/helper-unless_gteq.md @@ -1,9 +1,10 @@ -#### \{{unless_gteq}} -_"Unless x >= y". Render block, unless given value is greater than or equal to._ +## \{{unless_gteq}} + +> "Unless x >= y". Render block, unless given value is greater than or equal to. Parameters: `none` -```html +```handlebars \{{#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/content/helpers/comparison/helper-unless_lt.md similarity index 53% rename from src/content/helpers/comparison/helper-unless_lt.md rename to content/helpers/comparison/helper-unless_lt.md index 411fea8..0d3bfe6 100644 --- a/src/content/helpers/comparison/helper-unless_lt.md +++ b/content/helpers/comparison/helper-unless_lt.md @@ -1,9 +1,10 @@ -#### \{{unless_lt}} -_Render block, unless value is less than a given number (Unless x < y)_. +## \{{unless_lt}} + +> Render block, unless value is less than a given number (Unless x < y) Parameters: `none` -```html +```handlebars \{{#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/content/helpers/comparison/helper-unless_lteq.md similarity index 51% rename from src/content/helpers/comparison/helper-unless_lteq.md rename to content/helpers/comparison/helper-unless_lteq.md index d0e8609..dd636b1 100644 --- a/src/content/helpers/comparison/helper-unless_lteq.md +++ b/content/helpers/comparison/helper-unless_lteq.md @@ -1,9 +1,10 @@ -#### \{{unless_lteq}} -_Render block, unless value is less than or equal to a given number (Unless x <= y)_. +## \{{unless_lteq}} + +> Render block, unless value is less than or equal to a given number (Unless x <= y) Parameters: `none` -```html +```handlebars \{{#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/content/helpers/content/helper-copy.md similarity index 67% rename from src/content/helpers/content/helper-copy.md rename to content/helpers/content/helper-copy.md index 5415976..39fcaf4 100644 --- a/src/content/helpers/content/helper-copy.md +++ b/content/helpers/content/helper-copy.md @@ -1,14 +1,17 @@ -#### \{{copy}} -**example helpers, not for actual use!** +## \{{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` + +Parameters: `String`
    Default: `undefined` Example: -```html +```handlebars \{{copy 'a.html' '../dir/b.txt'}} ``` diff --git a/src/content/helpers/content/helper-glob.md b/content/helpers/content/helper-glob.md similarity index 60% rename from src/content/helpers/content/helper-glob.md rename to content/helpers/content/helper-glob.md index 8cdc268..e776eeb 100644 --- a/src/content/helpers/content/helper-glob.md +++ b/content/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/helpers/content/helper-include.md similarity index 85% rename from src/content/helpers/content/helper-include.md rename to content/helpers/content/helper-include.md index 7af7d8c..d6aca1a 100644 --- a/src/content/helpers/content/helper-include.md +++ b/content/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/helpers/data/helper-parseJSON.md similarity index 96% rename from src/content/helpers/data/helper-parseJSON.md rename to content/helpers/data/helper-parseJSON.md index 563645c..9765290 100644 --- a/src/content/helpers/data/helper-parseJSON.md +++ b/content/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/helpers/dates/helper-formatdate.md similarity index 59% rename from src/content/helpers/dates/helper-formatdate.md rename to content/helpers/dates/helper-formatdate.md index 6680f3f..817ce1d 100644 --- a/src/content/helpers/dates/helper-formatdate.md +++ b/content/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/helpers/dates/helper-moment.md similarity index 88% rename from src/content/helpers/dates/helper-moment.md rename to content/helpers/dates/helper-moment.md index 203a91d..f7a3b6d 100644 --- a/src/content/helpers/dates/helper-moment.md +++ b/content/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}} [![NPM version](https://badge.fury.io/js/handlebars-helper-momentjs.png)](http://badge.fury.io/js/handlebars-helper-momentjs) > 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,27 +15,27 @@ 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 +#### Optional YAML Front Matter > YAML front matter is not required, but we'll use it hear to supply our example data for purposes of demonstration: @@ -207,7 +207,6 @@ Results in: Sunday-Friday ``` - #### subtract years ```handlebars @@ -307,19 +306,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 +319,19 @@ 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 +### Author -**Mikko Tapionlinna** +#### Mikko Tapionlinna + [github.com/Arkkimaagi](https://github.com/Arkkimaagi) -## License -Copyright (c) 2013 Mikko Tapionlinna, contributors. -Released under the MIT license - -*** -_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/helpers/dates/helper-now.md similarity index 83% rename from src/content/helpers/dates/helper-now.md rename to content/helpers/dates/helper-now.md index c9a452b..67f95ca 100644 --- a/src/content/helpers/dates/helper-now.md +++ b/content/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/helpers/dates/helper-timeago.md similarity index 60% rename from src/content/helpers/dates/helper-timeago.md rename to content/helpers/dates/helper-timeago.md index b1329dd..851799c 100644 --- a/src/content/helpers/dates/helper-timeago.md +++ b/content/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/helpers/html/helper-br.md b/content/helpers/html/helper-br.md new file mode 100644 index 0000000..41e483f --- /dev/null +++ b/content/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/helpers/html/helper-doctype.md b/content/helpers/html/helper-doctype.md new file mode 100644 index 0000000..01b9823 --- /dev/null +++ b/content/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/helpers/html/helper-exticon.md similarity index 83% rename from src/content/helpers/html/helper-exticon.md rename to content/helpers/html/helper-exticon.md index 5be8286..e03dd8f 100644 --- a/src/content/helpers/html/helper-exticon.md +++ b/content/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'}} @@ -15,7 +16,7 @@ Usage: ``` Output: -```html +```handlebars file.png file.pdf file.doc diff --git a/src/content/helpers/html/helper-ol.md b/content/helpers/html/helper-ol.md similarity index 78% rename from src/content/helpers/html/helper-ol.md rename to content/helpers/html/helper-ol.md index f2fb0c9..7402fe5 100644 --- a/src/content/helpers/html/helper-ol.md +++ b/content/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,7 +8,7 @@ HTML attributes to use on the `ol` element. Data: -```javascript +```js collection = [ name: 'Leela' deliveries: 8021, @@ -20,7 +21,7 @@ collection = [ Template: -```html +```handlebars \{{#ol collection class="deliveries-list"}} \{{name}} - \{{inflect deliveries "delivery" "deliveries" true}} \{{/ol}} @@ -28,7 +29,7 @@ Template: Output: -```html +```handlebars
    1. Leela - 8021 deliveries
    2. Bender - 239 deliveries
    3. diff --git a/src/content/helpers/html/helper-ul.md b/content/helpers/html/helper-ul.md similarity index 87% rename from src/content/helpers/html/helper-ul.md rename to content/helpers/html/helper-ul.md index a928160..96f59fa 100644 --- a/src/content/helpers/html/helper-ul.md +++ b/content/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,7 +8,7 @@ HTML attributes to use on the `ul` element. Data: -```javascript +```js collection = [ name: 'Leela' deliveries: 8021, @@ -20,7 +21,7 @@ collection = [ Template: -```html +```handlebars \{{#ul collection class="deliveries-list"}} \{{name}} - \{{inflect deliveries "delivery" "deliveries" true}} \{{/ul}} @@ -28,7 +29,7 @@ Template: Output: -```html +```handlebars
      • Leela - 8021 deliveries
      • Bender - 239 deliveries
      • diff --git a/src/content/helpers/inflections/helper-inflect.md b/content/helpers/inflections/helper-inflect.md similarity index 78% rename from src/content/helpers/inflections/helper-inflect.md rename to content/helpers/inflections/helper-inflect.md index 0112c2f..9829e54 100644 --- a/src/content/helpers/inflections/helper-inflect.md +++ b/content/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/helpers/inflections/helper-ordinalize.md b/content/helpers/inflections/helper-ordinalize.md new file mode 100644 index 0000000..78e6225 --- /dev/null +++ b/content/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/helpers/layout/helper-block.md b/content/helpers/layout/helper-block.md new file mode 100644 index 0000000..ea86e68 --- /dev/null +++ b/content/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/helpers/layout/helper-content.md b/content/helpers/layout/helper-content.md new file mode 100644 index 0000000..6856f9b --- /dev/null +++ b/content/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/helpers/layout/helper-extend.md b/content/helpers/layout/helper-extend.md new file mode 100644 index 0000000..9ad9d1c --- /dev/null +++ b/content/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/src/content/helpers/logging/helper-debug.md b/content/helpers/logging/helper-debug.md similarity index 77% rename from src/content/helpers/logging/helper-debug.md rename to content/helpers/logging/helper-debug.md index daaf75b..e593d78 100644 --- a/src/content/helpers/logging/helper-debug.md +++ b/content/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/helpers/logging/helper-expandJSON.md similarity index 77% rename from src/content/helpers/logging/helper-expandJSON.md rename to content/helpers/logging/helper-expandJSON.md index c71f635..375fce2 100644 --- a/src/content/helpers/logging/helper-expandJSON.md +++ b/content/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/helpers/logging/helper-expandYAML.md similarity index 76% rename from src/content/helpers/logging/helper-expandYAML.md rename to content/helpers/logging/helper-expandYAML.md index 9d5f628..7164575 100644 --- a/src/content/helpers/logging/helper-expandYAML.md +++ b/content/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/helpers/logging/helper-log.md similarity index 65% rename from src/content/helpers/logging/helper-log.md rename to content/helpers/logging/helper-log.md index 828f3c7..e5e6a5e 100644 --- a/src/content/helpers/logging/helper-log.md +++ b/content/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/helpers/markdown/helper-markdown.md similarity index 82% rename from src/content/helpers/markdown/helper-markdown.md rename to content/helpers/markdown/helper-markdown.md index 09d873a..31026f6 100644 --- a/src/content/helpers/markdown/helper-markdown.md +++ b/content/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/helpers/markdown/helper-md.md similarity index 58% rename from src/content/helpers/markdown/helper-md.md rename to content/helpers/markdown/helper-md.md index a7c4db9..1126603 100644 --- a/src/content/helpers/markdown/helper-md.md +++ b/content/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/helpers/math/helper-add.md b/content/helpers/math/helper-add.md new file mode 100644 index 0000000..a9799bf --- /dev/null +++ b/content/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/helpers/math/helper-ceil.md b/content/helpers/math/helper-ceil.md new file mode 100644 index 0000000..cf2790d --- /dev/null +++ b/content/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/helpers/math/helper-divide.md b/content/helpers/math/helper-divide.md new file mode 100644 index 0000000..c60f134 --- /dev/null +++ b/content/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/helpers/math/helper-floor.md b/content/helpers/math/helper-floor.md new file mode 100644 index 0000000..20548b4 --- /dev/null +++ b/content/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/helpers/math/helper-multiply.md b/content/helpers/math/helper-multiply.md new file mode 100644 index 0000000..c8fc7e6 --- /dev/null +++ b/content/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/helpers/math/helper-round.md b/content/helpers/math/helper-round.md new file mode 100644 index 0000000..2670f7a --- /dev/null +++ b/content/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/helpers/math/helper-subtract.md b/content/helpers/math/helper-subtract.md new file mode 100644 index 0000000..6a764dd --- /dev/null +++ b/content/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/helpers/math/helper-sum.md b/content/helpers/math/helper-sum.md new file mode 100644 index 0000000..a0e9d35 --- /dev/null +++ b/content/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/helpers/misc/helper-default.md b/content/helpers/misc/helper-default.md new file mode 100644 index 0000000..7a6884a --- /dev/null +++ b/content/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/helpers/misc/helper-noop.md b/content/helpers/misc/helper-noop.md new file mode 100644 index 0000000..c72e7b0 --- /dev/null +++ b/content/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/helpers/numbers/helper-addCommas.md similarity index 62% rename from src/content/helpers/numbers/helper-addCommas.md rename to content/helpers/numbers/helper-addCommas.md index b9cc123..42172df 100644 --- a/src/content/helpers/numbers/helper-addCommas.md +++ b/content/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/helpers/numbers/helper-toAbbr.md similarity index 56% rename from src/content/helpers/numbers/helper-toAbbr.md rename to content/helpers/numbers/helper-toAbbr.md index 448773d..761c564 100644 --- a/src/content/helpers/numbers/helper-toAbbr.md +++ b/content/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/helpers/numbers/helper-toExponential.md similarity index 52% rename from src/content/helpers/numbers/helper-toExponential.md rename to content/helpers/numbers/helper-toExponential.md index e9568d8..ff1938d 100644 --- a/src/content/helpers/numbers/helper-toExponential.md +++ b/content/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/helpers/numbers/helper-toFixed.md b/content/helpers/numbers/helper-toFixed.md new file mode 100644 index 0000000..c7e4c75 --- /dev/null +++ b/content/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/helpers/numbers/helper-toFloat.md similarity index 59% rename from src/content/helpers/numbers/helper-toFloat.md rename to content/helpers/numbers/helper-toFloat.md index b68f2cb..fd5b1ed 100644 --- a/src/content/helpers/numbers/helper-toFloat.md +++ b/content/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/helpers/numbers/helper-toInt.md similarity index 64% rename from src/content/helpers/numbers/helper-toInt.md rename to content/helpers/numbers/helper-toInt.md index 8e349f3..5e412fa 100644 --- a/src/content/helpers/numbers/helper-toInt.md +++ b/content/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/helpers/numbers/helper-toPrecision.md similarity index 60% rename from src/content/helpers/numbers/helper-toPrecision.md rename to content/helpers/numbers/helper-toPrecision.md index 297d21f..bc0a3da 100644 --- a/src/content/helpers/numbers/helper-toPrecision.md +++ b/content/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/helpers/path/helper-dirname.md b/content/helpers/path/helper-dirname.md new file mode 100644 index 0000000..86e95d7 --- /dev/null +++ b/content/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/helpers/path/helper-extname.md b/content/helpers/path/helper-extname.md new file mode 100644 index 0000000..25b8281 --- /dev/null +++ b/content/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/helpers/path/helper-relative.md b/content/helpers/path/helper-relative.md new file mode 100644 index 0000000..60d7258 --- /dev/null +++ b/content/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/helpers/readme/helper-authors.md similarity index 97% rename from src/content/helpers/readme/helper-authors.md rename to content/helpers/readme/helper-authors.md index f56549f..6a55f49 100644 --- a/src/content/helpers/readme/helper-authors.md +++ b/content/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/helpers/readme/helper-changelog.md similarity index 98% rename from src/content/helpers/readme/helper-changelog.md rename to content/helpers/readme/helper-changelog.md index f7b40e9..8eeb897 100644 --- a/src/content/helpers/readme/helper-changelog.md +++ b/content/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/helpers/readme/helper-travis.md similarity index 80% rename from src/content/helpers/readme/helper-travis.md rename to content/helpers/readme/helper-travis.md index aa8d3ab..159786c 100644 --- a/src/content/helpers/readme/helper-travis.md +++ b/content/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/helpers/special/helper-aggregate.md similarity index 93% rename from src/content/helpers/special/helper-aggregate.md rename to content/helpers/special/helper-aggregate.md index 0a85435..4626715 100644 --- a/src/content/helpers/special/helper-aggregate.md +++ b/content/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/helpers/special/helper-compose.md similarity index 95% rename from src/content/helpers/special/helper-compose.md rename to content/helpers/special/helper-compose.md index 121df23..c55e974 100644 --- a/src/content/helpers/special/helper-compose.md +++ b/content/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/helpers/strings/helper-capitalizeEach.md similarity index 56% rename from src/content/helpers/strings/helper-capitalizeEach.md rename to content/helpers/strings/helper-capitalizeEach.md index 3c8dfbd..1da0c9c 100644 --- a/src/content/helpers/strings/helper-capitalizeEach.md +++ b/content/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/helpers/strings/helper-capitalizeFirst.md similarity index 55% rename from src/content/helpers/strings/helper-capitalizeFirst.md rename to content/helpers/strings/helper-capitalizeFirst.md index 3a7f18f..91f9706 100644 --- a/src/content/helpers/strings/helper-capitalizeFirst.md +++ b/content/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/helpers/strings/helper-center.md similarity index 51% rename from src/content/helpers/strings/helper-center.md rename to content/helpers/strings/helper-center.md index 8b3a6dd..9e9a1d9 100644 --- a/src/content/helpers/strings/helper-center.md +++ b/content/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/helpers/strings/helper-dashify.md b/content/helpers/strings/helper-dashify.md new file mode 100644 index 0000000..ad542cb --- /dev/null +++ b/content/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/helpers/strings/helper-formatPhoneNumber.md similarity index 71% rename from src/content/helpers/strings/helper-formatPhoneNumber.md rename to content/helpers/strings/helper-formatPhoneNumber.md index f34f933..e3116a4 100644 --- a/src/content/helpers/strings/helper-formatPhoneNumber.md +++ b/content/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/helpers/strings/helper-hyphenate.md b/content/helpers/strings/helper-hyphenate.md new file mode 100644 index 0000000..d8ff42f --- /dev/null +++ b/content/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/helpers/strings/helper-lowercase.md similarity index 51% rename from src/content/helpers/strings/helper-lowercase.md rename to content/helpers/strings/helper-lowercase.md index 9977c4f..7a380ce 100644 --- a/src/content/helpers/strings/helper-lowercase.md +++ b/content/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/helpers/strings/helper-occurances.md similarity index 60% rename from src/content/helpers/strings/helper-occurances.md rename to content/helpers/strings/helper-occurances.md index 9ae5f55..a155737 100644 --- a/src/content/helpers/strings/helper-occurances.md +++ b/content/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/helpers/strings/helper-reverse.md similarity index 61% rename from src/content/helpers/strings/helper-reverse.md rename to content/helpers/strings/helper-reverse.md index 7a27a58..1490361 100644 --- a/src/content/helpers/strings/helper-reverse.md +++ b/content/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/helpers/strings/helper-sentence.md similarity index 60% rename from src/content/helpers/strings/helper-sentence.md rename to content/helpers/strings/helper-sentence.md index dfd053a..6971e1b 100644 --- a/src/content/helpers/strings/helper-sentence.md +++ b/content/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/helpers/strings/helper-titleize.md b/content/helpers/strings/helper-titleize.md new file mode 100644 index 0000000..5109fb3 --- /dev/null +++ b/content/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/helpers/strings/helper-truncate.md similarity index 63% rename from src/content/helpers/strings/helper-truncate.md rename to content/helpers/strings/helper-truncate.md index 9e007bd..8235ba5 100644 --- a/src/content/helpers/strings/helper-truncate.md +++ b/content/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/helpers/strings/helper-uppercase.md b/content/helpers/strings/helper-uppercase.md new file mode 100644 index 0000000..0960978 --- /dev/null +++ b/content/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/helpers/url/helper-urlParse.md similarity index 90% rename from src/content/helpers/url/helper-urlParse.md rename to content/helpers/url/helper-urlParse.md index e13d654..3637531 100644 --- a/src/content/helpers/url/helper-urlParse.md +++ b/content/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/helpers/url/helper-urlResolve.md similarity index 50% rename from src/content/helpers/url/helper-urlResolve.md rename to content/helpers/url/helper-urlResolve.md index e29465d..6b13ab5 100644 --- a/src/content/helpers/url/helper-urlResolve.md +++ b/content/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/introduction.md b/content/introduction.md new file mode 100644 index 0000000..aacbe9a --- /dev/null +++ b/content/introduction.md @@ -0,0 +1,71 @@ +# Introduction + +> Get familiarized with the basic building blocks of Assemble. + +Assemble makes it easy to combine templates, content and data to produce any kind of resulting documents, including web pages, web components, blog posts, and so on. + + + + +## Getting started + + + + +## Building blocks + +* Data +* Content +* Structure +* Behavior +* Styles + + +## Terminology + +### Data + +#### Configuration + +#### Context + + +### Structure + +#### Template + + +A [template](http://en.wikipedia.org/wiki/Template) is a standardized non-executable file type used by computer software as a pre-formatted example on which to base other files, especially documents. + +In other contexts, a template can be described as: + +* a stencil, pattern or overlay used in graphic arts (drawing, painting, etc.) and sewing to replicate letters, shapes or designs +* a pre-developed page layout in electronic or paper media used to make new pages with a similar design, pattern, or style +* Form letter, a predefined letter which retains its primary intent when individually customised with variable data or text. + + +## Project Organization + +#### 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. + +#### Boilerplate + +> "Boiler plate" originally referred to the maker's label used to identify the builder of steam boilers. + +* **Boilerplate code**, refers to sections of code that have to be included in many places with little or no alteration. +* **Boilerplate prototype**, a broadly working prototype that is constructed from cheaper or simpler materials. This was often applied to unarmoured tanks made of only soft steel, but it has also been applied to non-flyable engineering demonstrations of aircraft or spacecraft, built on simple steel frames rather than lightweight aerospace materials. +* **Boilerplate contract**, standard form contract between two parties that does not allow for negotiation +* **Boilerplate text**, any text that is or can be reused in new contexts or applications without being changed much from the original + + + + +# Core Concepts + +## Primary + + + +## Secondary \ No newline at end of file diff --git a/content/outline.md b/content/outline.md new file mode 100644 index 0000000..774808b --- /dev/null +++ b/content/outline.md @@ -0,0 +1,39 @@ +# Assemble + +> + +## Why Assemble? + ++ What is Assemble ++ How can it help? + +*** + +## Getting Started + +### Installation + ++ Get Assemble (download, install, clone) + +### Usage + + + +*** + +## Blog + +*** + +## Documentation + ++ Usage ++ API + +*** + +## FAQ + +*** + +## Contributing \ No newline at end of file diff --git a/content/overview.md b/content/overview.md new file mode 100644 index 0000000..75ee27f --- /dev/null +++ b/content/overview.md @@ -0,0 +1,146 @@ +## Getting Started + +> What is Assemble? + +* About +* History + +## Where does Assemble fit in the build chain? + +> Assemble has Grunt and Gulp plugins, Yeoman generators, lots of boilerplates and many example projects from the core team and the community! + +* Generator +* Build system + - Minifying => Assemble (via plugins and helpers) + - Linting + - Compiling, rendering => Assemble (core strength) +* Server + +## Why use Assemble? + +* Unique strengths +* Main focus +* Easy to use +* Configurable and extensible +* Many boilerplates, examples, great community / ecosystem +* Target users +* Use cases + +Related + +* Project showcase +* Who uses Assemble? +* Community + +## How do I get started? + +* Installation +* 5-minute getting started video +* Getting started guide +* Getting started tutorials (topical) +* Examples +* Boilerplates +* Generators: Initializing a new project +* Running Assemble the first time + +Related + +* Migration tools (Harp, Metalsmith, Jekyll, Wintersmith, ) +* Live projects / examples + +## Overview: Core concepts + +* Configuration + - Defaults + - Global config +* Templates + - template variables + - layouts + - pages + - includes + - template helpers +* Data +* Content + +### Related concepts + +> These things "dial in", but they aren't in the same room. + +* Logic +* Styling + +## Usage + +* Configure +* Extend +* Build + + +## Development + +### Extending Assemble + +* Helpers: manipulate templates, data and content +* Mixins: manipulate config values +* Plugins: extend Assemble's core functionality +* Middleware + +### API + +* Utilities +* Plugins +* Middleware +* Helpers + +## FAQ + +* + +## Features +Gulp +Grunt + +* **Configuration AND convention**. Assemble is highly extensible, so tinkerers and power users will find many ways to add new features or augment existing functionality. For those who prefer the ease-of-use of opinionated systems like Jekyll or Harp, [grab a boilerplate](#TODO) or run [one of our generators](#TODO) and let Yeoman do the work, so you can spend less time on figuring out how to organize the project. +* Not only can Assemble, ahem... well, assemble, but also minification, concatenation, cache-busting and post-processing. Beyond that, Assemble's core functionality is infinitely extensible via plugins and middleware. + +## Conventions + +* Project organization + +## Project Goals + +* Near-term (current release): User experience +* Optimization / speed + +## Contributing + +* Pull requests +* Bugs / Issues +* Feature requests + +## Community + +* GitHub +* Google+ +* StackOvervlow +* IRC + + +## Handlebars Templates + +Assemble's default template engine, Handlebars.js, uses a syntax characterized by double-curly-braces, `{{foo}}`, affectionately reffered to as mustaches. The most basic handlebars template is a simple identifier (Handlebars.js calls these "Handlebars expressions"): + +```handlebars +

        {{title}}

        +``` +To use this + + +Here are some of the highlights. + +* Basic Variables: `{{title}}` +* Function expressions: +* Block expressions: +* Subexpressions: +* Partials: +* Helpers: diff --git a/content/plugins/index.md b/content/plugins/index.md new file mode 100644 index 0000000..d65cedc --- /dev/null +++ b/content/plugins/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/content/posts/2014-03/announcing-assemble-v0.5.0.md b/content/posts/2014-03/announcing-assemble-v0.5.0.md new file mode 100644 index 0000000..44a7d16 --- /dev/null +++ b/content/posts/2014-03/announcing-assemble-v0.5.0.md @@ -0,0 +1,24 @@ +# Assemble v0.5.0 + +> Faster, Smarter, Assemblier + + +## Improvements + + +## New Features + + +## Deprecations + + +## Docs + + +## API: Assemble for Hackers + + +## Related + +* [Assemble Docs 2.0: Under the Hood]() +* [Brief Guide to Assemble v0.5.0]() \ No newline at end of file diff --git a/content/posts/2014-03/assemble-docs-2-0-under-the-hood.md b/content/posts/2014-03/assemble-docs-2-0-under-the-hood.md new file mode 100644 index 0000000..09fe0cc --- /dev/null +++ b/content/posts/2014-03/assemble-docs-2-0-under-the-hood.md @@ -0,0 +1,9 @@ +# Assemble Docs 2.0: Under the Hood + +> + + +* Use sub-expressions to toggle between permalinks and "regular" links +* How to concatenate 110 pages into one, divided into 15 sections +* Dynamically generate nav links +* "Edit Source" links \ No newline at end of file diff --git a/content/posts/config-vs-content.md b/content/posts/config-vs-content.md new file mode 100644 index 0000000..03a53b5 --- /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? +--- + +I have 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..335d1dc --- /dev/null +++ b/content/posts/handlebars-subexpressions.md @@ -0,0 +1,25 @@ +--- +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)}}`. 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/button.json b/data/button.json new file mode 100644 index 0000000..5d8062f --- /dev/null +++ b/data/button.json @@ -0,0 +1,58 @@ +[ + { + "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/config/contentOpts.yml b/data/config/contentOpts.yml new file mode 100644 index 0000000..e07990b --- /dev/null +++ b/data/config/contentOpts.yml @@ -0,0 +1,21 @@ +# ============================================= +# Options for the {{md}} helper +# ============================================= + + +# Information about the source file? +origin: true + +# Partial to prepend to each markdown file after +# it is converted to HTML by the {{md}} helper + +# This is the name of the partial used in the +# 'Edit this source' poposvers +prepend: source-link + +# Partial to append to each markdown file after +# it is converted to HTML by the {{md}} helper. +# Here, we're using this feature to append a +# link to the source file + +append: null \ No newline at end of file diff --git a/data/contentOpts.yml b/data/contentOpts.yml new file mode 100644 index 0000000..e07990b --- /dev/null +++ b/data/contentOpts.yml @@ -0,0 +1,21 @@ +# ============================================= +# Options for the {{md}} helper +# ============================================= + + +# Information about the source file? +origin: true + +# Partial to prepend to each markdown file after +# it is converted to HTML by the {{md}} helper + +# This is the name of the partial used in the +# 'Edit this source' poposvers +prepend: source-link + +# Partial to append to each markdown file after +# it is converted to HTML by the {{md}} helper. +# Here, we're using this feature to append a +# link to the source file + +append: null \ No newline at end of file diff --git a/data/core.json b/data/core.json new file mode 100644 index 0000000..78cc55e --- /dev/null +++ b/data/core.json @@ -0,0 +1,123 @@ +{ + "name": "assemble", + "description": "Static site generator for Grunt.js, Yeoman and Node.js. 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.", + "version": "0.4.36", + "homepage": "http://assemble.io", + "author": { + "name": "Assemble", + "url": "https://github.com/assemble/assemble" + }, + "contributors": [ + { + "name": "Brian Woodward", + "url": "https://github.com/doowb" + }, + { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/assemble/assemble.git" + }, + "bugs": { + "url": "git://github.com/assemble/assemble/issues" + }, + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/assemble/assemble/blob/master/LICENSE-MIT" + } + ], + "main": "./lib/assemble", + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "grunt mochaTest" + }, + "dependencies": { + "assemble-handlebars": "~0.2.0", + "assemble-yaml": "~0.1.5", + "inflection": "~1.2.6", + "lodash": "~1.3.1", + "resolve-dep": "~0.1.1", + "underscore.string": "~2.3.3", + "async": "~0.2.9" + }, + "devDependencies": { + "chai": "~1.8.1", + "frep": "~0.1.2", + "grunt": "0.4.2", + "grunt-contrib-clean": "~0.5.0", + "grunt-contrib-jshint": "~0.7.1", + "grunt-mocha-test": "~0.7.0", + "grunt-prettify": "~0.3.1", + "grunt-readme": "~0.4.0", + "grunt-release": "0.6.0", + "grunt-repos": "~0.1.2", + "grunt-sync-pkg": "~0.1.1", + "handlebars-helper-eachitems": "~0.1.2", + "pretty": "~0.1.1", + "time-grunt": "~0.1.2" + }, + "keywords": [ + "blog generator", + "boilerplate", + "boilerplates", + "bootstrap", + "build and deployment", + "build bootstrap", + "components", + "generator", + "grunt blog", + "grunt pages", + "grunt site generator", + "grunt static site generator", + "grunt static site", + "grunt static", + "grunt task", + "grunt", + "gruntplugin", + "handlebars", + "handlebars-helper-eachitems", + "helpers", + "javascript static site generator", + "jekyll alternative", + "jekyll static", + "jekyll", + "node blog", + "node jekyll", + "node static site generator", + "node.js static site generator", + "partial", + "partials", + "scaffold", + "scaffolds", + "site blog generator", + "site builder", + "site generator", + "site generators", + "static blog", + "static HTML", + "static site build", + "static site builder", + "static site generator", + "static site generators", + "static site", + "static website", + "static", + "templates", + "templating", + "yaml front matter", + "yeoman generator", + "yeoman site", + "yeoman static site generator", + "yeoman static site", + "yeoman" + ], + "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/helpers.yml b/data/helpers.yml new file mode 100644 index 0000000..8f5d70b --- /dev/null +++ b/data/helpers.yml @@ -0,0 +1,78 @@ +#=========================================== +# Helpers docs config +#=========================================== + +published: + collections: + title: Collections + files: "content/helpers/collections/*.md" + + code: + title: Code + files: "content/helpers/code/*.md" + + comparison: + title: Comparison + files: "content/helpers/comparison/*.md" + + content: + title: Content + files: "content/helpers/content/*.md" + + data: + title: Data + files: "content/helpers/data/*.md" + + dates: + title: Dates + files: "content/helpers/dates/*.md" + + html: + title: HTML + files: "content/helpers/html/*.md" + + inflections: + title: Inflections + files: "content/helpers/inflections/*.md" + + logging: + title: Logging + files: "content/helpers/logging/*.md" + + markdown: + title: Markdown + files: "content/helpers/markdown/*.md" + + math: + title: Math + files: "content/helpers/math/*.md" + + misc: + title: Misc + files: "content/helpers/misc/*.md" + + numbers: + title: Numbers + files: "content/helpers/numbers/*.md" + + path: + title: Path + files: "content/helpers/path/*.md" + + strings: + title: Strings + files: "content/helpers/strings/*.md" + + url: + title: URL + files: "content/helpers/url/*.md" + + +unpublished: + readme: + title: Readme + files: "content/helpers/readme/*.md" + + special: + title: Special + files: "content/helpers/special/*.md" \ No newline at end of file diff --git a/src/data/jumbotron.yml b/data/jumbotron.yml similarity index 100% rename from src/data/jumbotron.yml rename to data/jumbotron.yml 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.json b/data/nav.json new file mode 100644 index 0000000..218122e --- /dev/null +++ b/data/nav.json @@ -0,0 +1,81 @@ +{ + "main": { + "list": [ + { + "modifier": "nav navbar-nav", + "items": [ + { + "published": true, + "url": "getting-started", + "text": "Getting Started" + }, + { + "published": true, + "url": "examples", + "text": "Examples" + }, + { + "published": true, + "url": "helpers", + "text": "Helpers" + }, + { + "published": false, + "url": "docs", + "text": "Docs" + }, + { + "published": false, + "url": "api", + "text": "API" + } + ] + }, + { + "modifier": "nav navbar-nav navbar-right", + "items": [ + { + "published": false, + "url": "blog", + "text": "Blog" + }, + { + "published": true, + "url": "about", + "text": "About" + }, + { + "dropdown": true, + "modifier": "dropdown-menu", + "text": "GitHub", + "items": [ + { + "published": true, + "url": "<%= site.repo %>", + "text": "Docs repo" + }, + { + "published": true, + "url": "<%= site.issues %>", + "text": "Docs issues" + }, + { + "divider": true + }, + { + "published": true, + "url": "<%= assemble.repo %>", + "text": "Assemble repo" + }, + { + "published": true, + "url": "<%= assemble.issues %>", + "text": "Assemble issues" + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/data/paginate.json b/data/paginate.json new file mode 100644 index 0000000..43acbc8 --- /dev/null +++ b/data/paginate.json @@ -0,0 +1,14 @@ +{ + "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/quotes.yml b/data/quotes.yml new file mode 100644 index 0000000..d707d9d --- /dev/null +++ b/data/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/section.json b/data/section.json new file mode 100644 index 0000000..7c52cb9 --- /dev/null +++ b/data/section.json @@ -0,0 +1,14 @@ +{ + "blog": { + "enabled": false + }, + "plugins": { + "enabled": true + }, + "helpers": { + "enabled": true + }, + "cheatsheet": { + "enabled": true + } +} \ No newline at end of file diff --git a/data/team.yml b/data/team.yml new file mode 100644 index 0000000..d08910e --- /dev/null +++ b/data/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/src/data/teaser.yml b/data/teaser.yml similarity index 78% rename from src/data/teaser.yml rename to data/teaser.yml index 52c0eb9..3e406a8 100644 --- a/src/data/teaser.yml +++ b/data/teaser.yml @@ -1,9 +1,9 @@ # teaser banner, directly below masthead masthead: title: Assemble - subtitle: "The static site generator for Node.js, Grunt.js and Yeoman." + subtitle: "The static site generator for Node.js." linkable: true - modifier: "" + modifier: url: "https://github.com/h5bp/Effeckt.css" # Bottom teaser @@ -15,5 +15,5 @@ footer: link: "#" modifier: "banner-inverse banner-large" static: true - subtitle: "" + subtitle: title: "

        Get started with some examples.

        " diff --git a/data/updates.yml b/data/updates.yml new file mode 100644 index 0000000..446ed7d --- /dev/null +++ b/data/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/users.yml b/data/users.yml new file mode 100644 index 0000000..7d961ee --- /dev/null +++ b/data/users.yml @@ -0,0 +1,19 @@ +# ------- 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* + + +- url: http://www.foo.com/ + image: bar.png +- url: http://www.baz.com/ + image: quux.png \ 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/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/mixins.js b/data/utils/mixins.js new file mode 100644 index 0000000..48122cc --- /dev/null +++ b/data/utils/mixins.js @@ -0,0 +1,57 @@ + +var url = require('url'); + +/** + * 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 + */ +exports.hostname = function(str) { + return url.parse(str).hostname; +}; + + +/** + * 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 + */ + +exports.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/utils/pkg.js b/data/utils/pkg.js new file mode 100644 index 0000000..343c71a --- /dev/null +++ b/data/utils/pkg.js @@ -0,0 +1,50 @@ +/** + * package.json + */ + +// Node.js +var path = require('path'); + +// node_modules +var grunt = require('grunt'); +var _ = require('lodash'); + +// Config +var cwd = path.join.bind(null, __dirname, '../'); + +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 b = new Buffer(resp.content, 'base64'); + var pkg = { + name: resp.name, + text: b.toString() + }; + var contents = JSON.parse(pkg.text, 'utf-8'); + grunt.log.ok('Saved:'.yellow, dest); + + // Extend package.json with custom properties + contents = _.extend(contents, require('./extend-pkg')); + grunt.file.write(dest, JSON.stringify(contents, null, 2)); + } + }); +}; + +getPackageFile(cwd('core.json')); diff --git a/package.json b/package.json index 6fc8bd7..d3e255d 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-book", + "version": "0.1.0", + "description": "Boilerplate and theme for building a book or documentation with 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,79 @@ "licenses": [ { "type": "MIT", - "url": "https://github.com/assemble/assemble-docs/blob/master/LICENSE-MIT" + "url": "https://github.com/sellside/assemble-book/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/sellside/assemble-book" }, "bugs": { - "url": "https://github.com/assemble/assemble-docs/issues" - }, - "engines": { - "node": ">= 0.8.0" + "url": "https://github.com/sellside/assemble-book/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", + "assemble": "~0.4.36", + "assemble-contrib-anchors": "~0.1.2", + "assemble-contrib-decompress": "~0.1.0", + "assemble-contrib-download": "~0.1.2", + "assemble-contrib-permalinks": "~0.3.4", + "assemble-less": "~0.7.0", + "chalk": "~0.4.0", + "cheerio": "~0.13.1", + "fs-utils": "~0.3.6", + "github": "~0.1.14", + "gray-matter": "~0.2.8", + "grunt": "~0.4.2", + "grunt-contrib-clean": "~0.5.0", + "grunt-contrib-connect": "~0.7.0", + "grunt-contrib-copy": "~0.5.0", + "grunt-contrib-csslint": "~0.2.0", + "grunt-contrib-jshint": "~0.8.0", + "grunt-contrib-uglify": "~0.4.0", + "grunt-contrib-watch": "~0.5.3", + "grunt-csscomb": "~2.0.1", + "grunt-prettify": "~0.3.4", + "grunt-repos": "~0.1.2", + "grunt-sync-pkg": "~0.1.2", + "grunt-uncss": "~0.2.0", + "handlebars-helper-autolink": "~0.1.1", + "handlebars-helper-disqus": "~0.1.1", + "handlebars-helper-feed": "~0.1.1", + "handlebars-helper-ghbtns": "~0.1.0", + "handlebars-helper-isactive": "~0.1.0", + "handlebars-helper-rel": "~0.1.0", "handlebars-helper-slugify": "~0.2.0", - "handlebars-helper-partial": "~0.1.1" + "handlebars-helper-track": "~0.1.0", + "lodash": "~2.4.1", + "marked": "0.3.0", + "marked-extras": "~0.2.2", + "request": "~2.34.0", + "template": "~0.1.5" }, "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", + "boilerplate", + "docs", + "documentation", + "handlebars-helper-autolink", + "handlebars-helper-disqus", + "handlebars-helper-feed", + "handlebars-helper-ghbtns", + "handlebars-helper-isactive", + "handlebars-helper-prettify", + "handlebars-helper-rel", "handlebars-helper-slugify", - "handlebars-helper-partial" - ] + "handlebars-helper-track", + "theme" + ], + "dependencies": { + "chalk": "~0.4.0", + "lodash": "~2.4.1", + "highlight.js": "~8.0.0" + } } diff --git a/scripts/.jshintrc b/scripts/.jshintrc new file mode 100644 index 0000000..28748b9 --- /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, + "latedef": true, + "laxbreak": true, + "newcap": true, + "noarg": true, + "node": true, + "sub": true, + "undef": true, + "unused": true, + "validthis": true, + "jquery": 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..82f8cc9 --- /dev/null +++ b/scripts/application.js @@ -0,0 +1,110 @@ +/*! + * Adapted from Bootstrap docs JavaScript + */ + +!(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(); + }); + + // Keep popovers open when hovered + $('.source-link').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/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/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/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/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* + diff --git a/structure/includes/head.hbs b/structure/includes/head.hbs new file mode 100644 index 0000000..2d1e271 --- /dev/null +++ b/structure/includes/head.hbs @@ -0,0 +1,48 @@ + + + + + + + + {{default title (titleize basename)}} | {{site.title}} » {{site.description}} + + + + + + + + + + + + + + + +{{!-- Google Analytics --}} +{{#if production}} + {{> analytics }} +{{/if}} + +{{!-- Add JSON-LD metadata. TODO: update metadata to conform better to Google standards. --}} +{{> metadata }} \ No newline at end of file diff --git a/structure/includes/javascripts.hbs b/structure/includes/javascripts.hbs new file mode 100644 index 0000000..ff28320 --- /dev/null +++ b/structure/includes/javascripts.hbs @@ -0,0 +1,32 @@ + + + +{{#production}}{{/production}} + + + + + + +{{#if site.analytics.google.enabled}} + + +{{/if}} \ No newline at end of file diff --git a/structure/includes/jumbotron.hbs b/structure/includes/jumbotron.hbs new file mode 100644 index 0000000..ca98f89 --- /dev/null +++ b/structure/includes/jumbotron.hbs @@ -0,0 +1,18 @@ +
        +
        +
        +
        +

        {{{uppercase heading}}}

        +

        {{{lead}}}

        +

        {{{btn.text}}}

        +
        +
        + +
        +
        +
        +
        \ No newline at end of file diff --git a/structure/includes/list.hbs b/structure/includes/list.hbs new file mode 100644 index 0000000..71879e9 --- /dev/null +++ b/structure/includes/list.hbs @@ -0,0 +1,32 @@ +{{#each list}} +
          + {{#each items}} + {{#if published}} +
        • + {{text}} +
        • + {{/if}} + {{#if external}} +
        • {{text}}
        • + {{/if}} + {{#if dropdown}} + + {{/if}} + {{#if divider}} +
        • + {{/if}} + {{/each}} +
        +{{/each}} diff --git a/structure/includes/masthead.hbs b/structure/includes/masthead.hbs new file mode 100644 index 0000000..a389807 --- /dev/null +++ b/structure/includes/masthead.hbs @@ -0,0 +1,10 @@ +
        +
        +

        Assemble

        +

        {{{site.description}}}

        +

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

        +
        +
        diff --git a/structure/includes/nav-main.hbs b/structure/includes/nav-main.hbs new file mode 100644 index 0000000..48f2a7e --- /dev/null +++ b/structure/includes/nav-main.hbs @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/structure/includes/navbar-content.hbs b/structure/includes/navbar-content.hbs new file mode 100644 index 0000000..7ab76df --- /dev/null +++ b/structure/includes/navbar-content.hbs @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/structure/includes/navigation.hbs b/structure/includes/navigation.hbs new file mode 100644 index 0000000..e8ac163 --- /dev/null +++ b/structure/includes/navigation.hbs @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/structure/includes/paginate.hbs b/structure/includes/paginate.hbs new file mode 100644 index 0000000..97bfedf --- /dev/null +++ b/structure/includes/paginate.hbs @@ -0,0 +1,7 @@ + + {{#if prev}} + {{text}} + {{else}} + {{text}} + {{/if}} + \ No newline at end of file diff --git a/templates/includes/repo-list.hbs b/structure/includes/repo-list.hbs similarity index 100% rename from templates/includes/repo-list.hbs rename to structure/includes/repo-list.hbs diff --git a/structure/includes/repos.hbs b/structure/includes/repos.hbs new file mode 100644 index 0000000..46b4ad8 --- /dev/null +++ b/structure/includes/repos.hbs @@ -0,0 +1,26 @@ + + + +
          + {{#each repos}} + + {{/each}} +
        \ No newline at end of file diff --git a/structure/includes/source-link.hbs b/structure/includes/source-link.hbs new file mode 100644 index 0000000..475d923 --- /dev/null +++ b/structure/includes/source-link.hbs @@ -0,0 +1,2 @@ +{{! 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. }} + \ No newline at end of file diff --git a/structure/includes/subhead.hbs b/structure/includes/subhead.hbs new file mode 100644 index 0000000..f2e372d --- /dev/null +++ b/structure/includes/subhead.hbs @@ -0,0 +1,7 @@ +
        +
        +

        {{ title }}

        +

        {{ lead }}

        + {{!> ads }} +
        +
        \ No newline at end of file diff --git a/templates/includes/teaser.hbs b/structure/includes/teaser.hbs similarity index 100% rename from templates/includes/teaser.hbs rename to structure/includes/teaser.hbs diff --git a/structure/layouts/README.md b/structure/layouts/README.md new file mode 100644 index 0000000..c5cfac3 --- /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. \ No newline at end of file diff --git a/structure/layouts/base.hbs b/structure/layouts/base.hbs new file mode 100644 index 0000000..8de0b66 --- /dev/null +++ b/structure/layouts/base.hbs @@ -0,0 +1,27 @@ + + + + {{> head }} + + + + {{> nav-main }} + + + {{#is slug "index"}} + {{> jumbotron jumbotron }} + {{> teaser teaser }} + {{/is}} + + +
        + {{> body }} +
        + + + {{> footer }} + + + {{> javascripts }} + + diff --git a/structure/layouts/default.hbs b/structure/layouts/default.hbs new file mode 100644 index 0000000..8f33ec0 --- /dev/null +++ b/structure/layouts/default.hbs @@ -0,0 +1,25 @@ +--- +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/markdown.hbs b/structure/layouts/markdown.hbs new file mode 100644 index 0000000..3a08d43 --- /dev/null +++ b/structure/layouts/markdown.hbs @@ -0,0 +1,6 @@ +--- +layout: default +--- +{{#markdown}} +{{> body }} +{{/markdown}} \ No newline at end of file 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..a1b0124 --- /dev/null +++ b/structure/pages/about.hbs @@ -0,0 +1,54 @@ +--- +title: About +slug: about +lead: "Learn about the history of assemble, meet the core team, and check out the ever-growing community resources." +--- + +{{!-- History +================================================== --}} +
        + + {{md 'history'}} +
        + + +{{!-- Team +================================================== --}} +
        + +

        assemble 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 Assemble 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 Assemble 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..78bc4de --- /dev/null +++ b/structure/pages/blog.hbs @@ -0,0 +1,11 @@ +--- +published: false + +title: Blog +slug: blog +lead: Coming soon. +--- + +
        + Coming soon. +
        \ 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..2fa3fea --- /dev/null +++ b/structure/pages/helpers.hbs @@ -0,0 +1,22 @@ +--- +title: Helpers +slug: helpers +--- + +{{> navbar-content }} + +{{#each helpers.published}} + +
        + + {{#if files}} + {{#each (expand files)}} + + {{success '>> Reading:' (basename .)}} {{! log a success message }} + {{content (basename .)}} + {{/each}} + {{/if}} +
        +{{/each}} diff --git a/structure/pages/index.hbs b/structure/pages/index.hbs new file mode 100644 index 0000000..14681ca --- /dev/null +++ b/structure/pages/index.hbs @@ -0,0 +1,27 @@ +--- +layout: base +title: Home +slug: index +lead: Welcome to Assemble.io! +--- + +{{!-- Getting started +================================================== --}} +
        + + {{md 'getting-started'}} +
        + +{{#news updates.recent}} + {{date}}: {{#join commentary ' · '}}{{.}}{{/join}} +{{/news}} + +
          +
        • 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/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/anchor.js b/structure/snippets/anchor.js new file mode 100644 index 0000000..ae30b9a --- /dev/null +++ b/structure/snippets/anchor.js @@ -0,0 +1,4 @@ +module.exports = [ + '', + '', +].join('\n'); \ No newline at end of file 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..d1e7bca --- /dev/null +++ b/structure/snippets/feed.xml @@ -0,0 +1,26 @@ + + + + + + {{site.title}} + {{datetime}} + {{site.homepage}} + {{#core.authors}} + + {{name}} + {{email}} + + {{/core.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/templates/includes/snippets/metadata.hbs b/structure/snippets/metadata.hbs similarity index 100% rename from templates/includes/snippets/metadata.hbs rename to structure/snippets/metadata.hbs 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/styles/.csscomb.json b/styles/.csscomb.json new file mode 100644 index 0000000..c3d0c08 --- /dev/null +++ b/styles/.csscomb.json @@ -0,0 +1,297 @@ +{ + "always-semicolon": true, + "block-indent": 2, + "colon-space": true, + "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": true, + "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..005b862 --- /dev/null +++ b/styles/.csslintrc @@ -0,0 +1,19 @@ +{ + "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 +} diff --git a/src/less/bootstrap/alerts.less b/styles/bootstrap/alerts.less similarity index 50% rename from src/less/bootstrap/alerts.less rename to styles/bootstrap/alerts.less index 66aa6cf..3eab066 100644 --- a/src/less/bootstrap/alerts.less +++ b/styles/bootstrap/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/src/less/bootstrap/badges.less b/styles/bootstrap/badges.less similarity index 71% rename from src/less/bootstrap/badges.less rename to styles/bootstrap/badges.less index b0764ef..56828ca 100644 --- a/src/less/bootstrap/badges.less +++ b/styles/bootstrap/badges.less @@ -9,19 +9,29 @@ min-width: 10px; padding: 3px 7px; font-size: @font-size-small; - font-weight: bold; + font-weight: @badge-font-weight; color: @badge-color; - line-height: 1; - vertical-align: middle; + line-height: @badge-line-height; + vertical-align: baseline; white-space: nowrap; text-align: center; background-color: @badge-bg; - border-radius: 10px; + border-radius: @badge-border-radius; - // Empty labels/badges collapse + // 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 @@ -34,12 +44,6 @@ a.badge { } } -// Quick fix for labels/badges in buttons -.btn .badge { - position: relative; - top: -1px; - } - // Account for counters in navs a.list-group-item.active > .badge, .nav-pills > .active > a > .badge { diff --git a/src/less/bootstrap/bootstrap.less b/styles/bootstrap/bootstrap.less similarity index 70% rename from src/less/bootstrap/bootstrap.less rename to styles/bootstrap/bootstrap.less index c73c85c..bcc992a 100644 --- a/src/less/bootstrap/bootstrap.less +++ b/styles/bootstrap/bootstrap.less @@ -1,13 +1,3 @@ -/*! - * 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"; @@ -21,44 +11,38 @@ @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 "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/src/less/bootstrap/breadcrumbs.less b/styles/bootstrap/breadcrumbs.less similarity index 63% rename from src/less/bootstrap/breadcrumbs.less rename to styles/bootstrap/breadcrumbs.less index 92643d1..cb01d50 100644 --- a/src/less/bootstrap/breadcrumbs.less +++ b/styles/bootstrap/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/bootstrap/button-groups.less similarity index 55% rename from src/less/bootstrap/button-groups.less rename to styles/bootstrap/button-groups.less index 69dfd87..27eb796 100644 --- a/src/less/bootstrap/button-groups.less +++ b/styles/bootstrap/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: none; + } } } // 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,22 @@ .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"] { +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { display: none; } diff --git a/src/less/bootstrap/buttons.less b/styles/bootstrap/buttons.less similarity index 57% rename from src/less/bootstrap/buttons.less rename to styles/bootstrap/buttons.less index b8bbfc6..d4fc156 100644 --- a/src/less/bootstrap/buttons.less +++ b/styles/bootstrap/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/src/less/bootstrap/carousel.less b/styles/bootstrap/carousel.less similarity index 70% rename from src/less/bootstrap/carousel.less rename to styles/bootstrap/carousel.less index 3526089..e3fb8a2 100644 --- a/src/less/bootstrap/carousel.less +++ b/styles/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: none; 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/src/less/bootstrap/close.less b/styles/bootstrap/close.less similarity index 94% rename from src/less/bootstrap/close.less rename to styles/bootstrap/close.less index f915667..9b4e74f 100644 --- a/src/less/bootstrap/close.less +++ b/styles/bootstrap/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/src/less/bootstrap/code.less b/styles/bootstrap/code.less similarity index 68% rename from src/less/bootstrap/code.less rename to styles/bootstrap/code.less index cd61325..3eed26c 100644 --- a/src/less/bootstrap/code.less +++ b/styles/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/src/less/bootstrap/component-animations.less b/styles/bootstrap/component-animations.less similarity index 100% rename from src/less/bootstrap/component-animations.less rename to styles/bootstrap/component-animations.less diff --git a/src/less/bootstrap/dropdowns.less b/styles/bootstrap/dropdowns.less similarity index 63% rename from src/less/bootstrap/dropdowns.less rename to styles/bootstrap/dropdowns.less index 938e682..f165165 100644 --- a/src/less/bootstrap/dropdowns.less +++ b/styles/bootstrap/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,17 @@ padding: 5px 0; margin: 2px 0 0; // override default ul list-style: none; + font-size: @font-size-base; 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 +71,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 +88,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 +116,6 @@ } // Open state for the dropdown -// --------------------------- .open { // Show the menu > .dropdown-menu { @@ -120,46 +128,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 +192,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/bootstrap/forms.less b/styles/bootstrap/forms.less new file mode 100644 index 0000000..24cb0da --- /dev/null +++ b/styles/bootstrap/forms.less @@ -0,0 +1,439 @@ +// +// 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; + 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. + +input[type="date"] { + line-height: @input-height-base; +} + + +// 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; + padding-left: 20px; + label { + display: inline; + 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; + display: block; + width: @input-height-base; + height: @input-height-base; + line-height: @input-height-base; + text-align: center; + } +} + +// 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 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 labels, radios, and checkboxes + .control-label, + .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); + } + + // Only right align form labels here when the columns stop stacking + @media (min-width: @screen-sm-min) { + .control-label { + text-align: right; + } + } + + // 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/bootstrap/glyphicons.less b/styles/bootstrap/glyphicons.less new file mode 100644 index 0000000..789c5e7 --- /dev/null +++ b/styles/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/bootstrap/grid.less b/styles/bootstrap/grid.less new file mode 100644 index 0000000..e100655 --- /dev/null +++ b/styles/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/bootstrap/input-groups.less b/styles/bootstrap/input-groups.less new file mode 100644 index 0000000..a111474 --- /dev/null +++ b/styles/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/bootstrap/jumbotron.less b/styles/bootstrap/jumbotron.less new file mode 100644 index 0000000..a15e169 --- /dev/null +++ b/styles/bootstrap/jumbotron.less @@ -0,0 +1,44 @@ +// +// 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; + } + + .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/bootstrap/labels.less similarity index 64% rename from src/less/bootstrap/labels.less rename to styles/bootstrap/labels.less index 7ee7ee6..5db1ed1 100644 --- a/src/less/bootstrap/labels.less +++ b/styles/bootstrap/labels.less @@ -4,15 +4,14 @@ .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 @@ -22,25 +21,44 @@ 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/bootstrap/list-group.less similarity index 59% rename from src/less/bootstrap/list-group.less rename to styles/bootstrap/list-group.less index ad6ac96..3343f8e 100644 --- a/src/less/bootstrap/list-group.less +++ b/styles/bootstrap/list-group.less @@ -2,67 +2,61 @@ // 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, @@ -72,7 +66,9 @@ a.list-group-item { } // 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 +79,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/bootstrap/media.less similarity index 100% rename from src/less/bootstrap/media.less rename to styles/bootstrap/media.less diff --git a/styles/bootstrap/mixins.less b/styles/bootstrap/mixins.less new file mode 100644 index 0000000..4432cfc --- /dev/null +++ b/styles/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. `` 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 +// ------------------------------------------------- + +// Basics of a navbar +@navbar-height: 80px; +@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; + +@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 elements on hover +@list-group-hover-bg: #f5f5f5; +// Text color of active list elements +@list-group-active-color: @component-active-color; +// Background color of active list elements +@list-group-active-bg: @component-active-bg; +// Border color of active list elements +@list-group-active-border: @list-group-active-bg; +@list-group-active-text-color: lighten(@list-group-active-bg, 40%); + +@list-group-link-color: #555; +@list-group-link-heading-color: #333; + + +// Panels +// ------------------------------------------------- + +@panel-bg: #fff; +@panel-body-padding: 15px; +@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/templates/includes/announcements.md.hbs b/templates/includes/announcements.md.hbs deleted file mode 100644 index cf837e8..0000000 --- a/templates/includes/announcements.md.hbs +++ /dev/null @@ -1,2 +0,0 @@ -* [Effeckt uses Assemble!](https://github.com/h5bp/Effeckt.css) - a h5bp project focused on "UI-less, performant transitions & animations". If you haven't seen it, definitely check it out, it's pretty awesome. -* [assemble-bootstrap](https://github.com/assemble/assemble-bootstrap) is a new boilerplate to build Twitter Bootstrap 3.0.0 with Assemble and Grunt.js. No need for Ruby, Jekyll, or running a server to view the docs. This repo is up-to-date and includes qunit and phantomjs tests. diff --git a/templates/includes/banner.hbs b/templates/includes/banner.hbs deleted file mode 100644 index 8946aa3..0000000 --- a/templates/includes/banner.hbs +++ /dev/null @@ -1,8 +0,0 @@ ---- -component: banner ---- - \ No newline at end of file diff --git a/templates/includes/edit-template-link.hbs b/templates/includes/edit-template-link.hbs deleted file mode 100644 index 89a541a..0000000 --- a/templates/includes/edit-template-link.hbs +++ /dev/null @@ -1 +0,0 @@ -Edit this page \ No newline at end of file diff --git a/templates/includes/img.hbs b/templates/includes/img.hbs deleted file mode 100644 index 49ad43d..0000000 --- a/templates/includes/img.hbs +++ /dev/null @@ -1,10 +0,0 @@ ---- -class: image ---- -{{#if alt}}{{alt}}{{else}}{{title}}{{/if}} \ No newline at end of file diff --git a/templates/includes/javascripts.hbs b/templates/includes/javascripts.hbs deleted file mode 100644 index 61b9160..0000000 --- a/templates/includes/javascripts.hbs +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/templates/includes/jumbotron.hbs b/templates/includes/jumbotron.hbs deleted file mode 100644 index 707bd3d..0000000 --- a/templates/includes/jumbotron.hbs +++ /dev/null @@ -1,16 +0,0 @@ -{{! Jumbotron component -================================================== }} -
            -
            -
            -
            -

            {{{uppercase heading}}}

            -

            {{{lead}}}

            -

            {{{btn.text}}}

            -
            -
            - -
            -
            -
            -
            diff --git a/templates/includes/layout/footer.hbs b/templates/includes/layout/footer.hbs deleted file mode 100644 index d2edcdf..0000000 --- a/templates/includes/layout/footer.hbs +++ /dev/null @@ -1,19 +0,0 @@ -
            - - {{!-- Special styles for GitHub Buttons - =========================================== --}} - - - {{!-- GITHUB BUTTONS (right aligned) - =========================================== --}} - {{> btn-github-star }} - {{> btn-github-fork }} - -

            Find an error? Let us know →

            -
            diff --git a/templates/includes/layout/head.hbs b/templates/includes/layout/head.hbs deleted file mode 100644 index 988e9df..0000000 --- a/templates/includes/layout/head.hbs +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - {{default title page.basename}} | Assemble - - - - - - -{{#unless cheatsheet}} - -{{/unless}} - -{{#if cheatsheet}} - -{{/if}} - - - - - - - - - - - - - - -{{!-- Google Analytics --}} -{{> analytics }} - -{{!-- Add JSON-LD metadata. TODO: update metadata to conform better to Google standards. --}} -{{> metadata }} diff --git a/templates/includes/layout/masthead-blog.hbs b/templates/includes/layout/masthead-blog.hbs deleted file mode 100644 index 12d9d37..0000000 --- a/templates/includes/layout/masthead-blog.hbs +++ /dev/null @@ -1,20 +0,0 @@ - -{{!-- MASTHEAD -=================================== --}} -
            -
            -
            -
            -

            {{default area "Docs"}} / {{default title area}}

            -
            -
            -
            -
            diff --git a/templates/includes/layout/masthead-boilerplates.hbs b/templates/includes/layout/masthead-boilerplates.hbs deleted file mode 100644 index 2b48058..0000000 --- a/templates/includes/layout/masthead-boilerplates.hbs +++ /dev/null @@ -1,37 +0,0 @@ - - - -{{!-- MASTHEAD -=================================== --}} -
            -
            -
            -
            -

            {{#if title}} BOILERPLATES /  {{ title }} {{else}} BOILERPLATES {{/if}}

            -
            -
            -
            -
            diff --git a/templates/includes/layout/masthead-docs.hbs b/templates/includes/layout/masthead-docs.hbs deleted file mode 100644 index 9e6b079..0000000 --- a/templates/includes/layout/masthead-docs.hbs +++ /dev/null @@ -1,15 +0,0 @@ -{{!-- MASTHEAD -=================================== --}} -
            -
            -
            -
            - {{> btn-tweet }} -

            - Docs /  - {{default section this.basename}} -

            -
            -
            -
            -
            \ No newline at end of file diff --git a/templates/includes/layout/masthead-helpers.hbs b/templates/includes/layout/masthead-helpers.hbs deleted file mode 100644 index c775d74..0000000 --- a/templates/includes/layout/masthead-helpers.hbs +++ /dev/null @@ -1,22 +0,0 @@ -{{!#is area 'helpers'}} - -{{!-- MASTHEAD -=================================== --}} -
            -
            -
            -
            -

            {{default area "Docs"}} / {{default title area}}

            -
            -
            -
            -
            -{{!/is}} \ No newline at end of file diff --git a/templates/includes/layout/masthead-plugins.hbs b/templates/includes/layout/masthead-plugins.hbs deleted file mode 100644 index cdc5d40..0000000 --- a/templates/includes/layout/masthead-plugins.hbs +++ /dev/null @@ -1,25 +0,0 @@ -{{!#is area 'helpers'}} - -{{!-- MASTHEAD -=================================== --}} -
            -
            -
            -
            -

            {{default area "Docs"}} / {{default title area}}

            -
            -
            -
            -
            -{{!/is}} \ No newline at end of file diff --git a/templates/includes/layout/sidenav-blog.hbs b/templates/includes/layout/sidenav-blog.hbs deleted file mode 100644 index 988f6f1..0000000 --- a/templates/includes/layout/sidenav-blog.hbs +++ /dev/null @@ -1 +0,0 @@ -{{! }} \ No newline at end of file diff --git a/templates/includes/layout/sidenav-boilerplates.hbs b/templates/includes/layout/sidenav-boilerplates.hbs deleted file mode 100644 index 51b7d82..0000000 --- a/templates/includes/layout/sidenav-boilerplates.hbs +++ /dev/null @@ -1,8 +0,0 @@ - - Boilerplates - - \ No newline at end of file diff --git a/templates/includes/layout/sidenav-docs.hbs b/templates/includes/layout/sidenav-docs.hbs deleted file mode 100644 index 84f0c2b..0000000 --- a/templates/includes/layout/sidenav-docs.hbs +++ /dev/null @@ -1,85 +0,0 @@ - - - - - Getting Started - - - - - - Templates - - - - - - Data - - - - - - Configuration - - - - - - Content - - - - - - Development - - diff --git a/templates/includes/layout/sidenav-helpers.hbs b/templates/includes/layout/sidenav-helpers.hbs deleted file mode 100644 index 7c8fd6b..0000000 --- a/templates/includes/layout/sidenav-helpers.hbs +++ /dev/null @@ -1,79 +0,0 @@ - - -{{!TODO: add sections for swig filters and lodash mixins }} - -{{! }} - - - Special Helpers - - - - - - - Categories - - - - - - - - - - - - - - - - - - diff --git a/templates/includes/layout/sidenav-link.hbs b/templates/includes/layout/sidenav-link.hbs deleted file mode 100644 index 3415097..0000000 --- a/templates/includes/layout/sidenav-link.hbs +++ /dev/null @@ -1 +0,0 @@ - click-tracker }}>{{data.title}} diff --git a/templates/includes/layout/sidenav-plugins.hbs b/templates/includes/layout/sidenav-plugins.hbs deleted file mode 100644 index a84d504..0000000 --- a/templates/includes/layout/sidenav-plugins.hbs +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/templates/includes/navbar.hbs b/templates/includes/navbar.hbs deleted file mode 100644 index 6a7ce1b..0000000 --- a/templates/includes/navbar.hbs +++ /dev/null @@ -1,30 +0,0 @@ ---- -component: navbar ---- - \ No newline at end of file diff --git a/templates/includes/repos.hbs b/templates/includes/repos.hbs deleted file mode 100644 index 31803be..0000000 --- a/templates/includes/repos.hbs +++ /dev/null @@ -1,89 +0,0 @@ - - - -
              - {{#each repos}} - {{#gt watchers 4}} -
            1. - -
            2. - {{/gt}} - {{/each}} -
            \ No newline at end of file diff --git a/templates/includes/snippets/generated-links.md.hbs b/templates/includes/snippets/generated-links.md.hbs deleted file mode 100644 index a7b632d..0000000 --- a/templates/includes/snippets/generated-links.md.hbs +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -[handlebars-helpers]: http://github.com/assemble/handlebars-helpers "Extensive collection of Handlebars helpers" -[boilerplates]: https://github.com/assemble/assemble-boilerplates "Assemble Boilerplates" -[yfm]: YAML-front-matter.html "YAML Front Matter" - - - - -[handlebars]: http://handlebarsjs.com - - - - -[files]: http://gruntjs.com/configuring-tasks#files -[lodash]: http://gruntjs.com/configuring-tasks#templates -[targets]: http://gruntjs.com/configuring-tasks#task-configuration-and-targets -[tasks-and-targets]: http://gruntjs.com/configuring-tasks#task-configuration-and-targets -[files-object]: http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically diff --git a/templates/includes/snippets/links-manually-defined.md.hbs b/templates/includes/snippets/links-manually-defined.md.hbs deleted file mode 100644 index 6437c03..0000000 --- a/templates/includes/snippets/links-manually-defined.md.hbs +++ /dev/null @@ -1,19 +0,0 @@ -{{!-- Manually defined links (mostly for convenience aliases) --}} - -[handlebars-helpers]: http://github.com/assemble/handlebars-helpers "Extensive collection of Handlebars helpers" -[boilerplates]: https://github.com/assemble/assemble-boilerplates "Assemble Boilerplates" -[yfm]: YAML-front-matter.html "YAML Front Matter" - - -{{!-- External Links --}} - -[handlebars]: http://handlebarsjs.com - - -{{!-- Grunt.js Links --}} - -[files]: http://gruntjs.com/configuring-tasks#files -[lodash]: http://gruntjs.com/configuring-tasks#templates -[targets]: http://gruntjs.com/configuring-tasks#task-configuration-and-targets -[tasks-and-targets]: http://gruntjs.com/configuring-tasks#task-configuration-and-targets -[files-object]: http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically diff --git a/templates/includes/snippets/links-template.md.hbs b/templates/includes/snippets/links-template.md.hbs deleted file mode 100644 index cfdaf1b..0000000 --- a/templates/includes/snippets/links-template.md.hbs +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: false ---- -{{!-- This is hacky but it works. The "generate-links" helper scans the docs directory to automatically generate links for the documentation. --}} - -{{!-- the helper --}} -{{generate-links 'src/templates/pages/docs/*.md.hbs'}} - -{{!-- add links that aren't picked up by helper --}} -{{> links-manually-defined.md }} \ No newline at end of file diff --git a/templates/includes/snippets/wiki-links.md.hbs b/templates/includes/snippets/wiki-links.md.hbs deleted file mode 100644 index f0d6b77..0000000 --- a/templates/includes/snippets/wiki-links.md.hbs +++ /dev/null @@ -1 +0,0 @@ -{{links-wiki "src/templates/pages/docs/*.*"}} diff --git a/templates/includes/thumbnail.hbs b/templates/includes/thumbnail.hbs deleted file mode 100644 index 46e443a..0000000 --- a/templates/includes/thumbnail.hbs +++ /dev/null @@ -1,8 +0,0 @@ ---- -component: thumbnails ---- - diff --git a/templates/includes/toc.md.hbs b/templates/includes/toc.md.hbs deleted file mode 100644 index 8c5b98d..0000000 --- a/templates/includes/toc.md.hbs +++ /dev/null @@ -1,97 +0,0 @@ -## Getting Started - -* [About][about] -* [FAQ][faq] -* [Installation][installation] -* [Quickstart][quickstart] -* [Resources][resources] - -## Configuration - -{{#draft}}* [Gruntfile][]{{/draft}} -{{#draft}}* [Assemble Configuration][configuration]{{/draft}} - -* [Built-In Variables][built-in-variables] -* [Options Overview][options] - * [options.assets][options-assets] - * [options.collections][options-collections] - * [options.data][options-data] - * [options.engine][options-engine] - * [options.ext][options-ext] - * [options.helpers][options-helpers] - * [options.layout][options-layout] - * [options.layoutdir][options-layoutdir] - * [options.marked][options-marked] - * [options.partials][options-partials] - -{{#draft}} * [options.pagination][options-pagination]{{/draft}} -{{#draft}} * [options.permalinks][options-permalinks]{{/draft}} - -## Data - -* [Context][context] -* [Data][data] - * [YAML Front Matter][yaml-front-matter] - * [YAML data][yaml] - -{{#draft}} * [JSON][json]{{/draft}} -{{#draft}} * [Metadata][]{{/draft}} -{{#draft}} * [Idiomatic Data][idiomatic-data]{{/draft}} - - -## Templates - -* [Templates Overview][templates-overview] -* [Custom helpers][custom-helpers] -* [Helpers][helpers] -* [Layouts][layouts] -* [Pages][pages] -* [Pages Collections][pages-collections] -* [Partials][partials] - -{{#draft}} * [Idiomatic Templates][]{{/draft}} - - -## Content - -{{#draft}}* [Content][]{{/draft}} - -* [Markdown][markdown] - - -## Boilerplates - -* [Resources][resources] -* [All boilerplates](https://github.com/assemble/assemble-boilerplates) -* [Creating a Basic Site](https://github.com/assemble/assemble-boilerplate-basic) -* [Generate a README, wiki or markdown documentation](https://github.com/assemble/assemble-boilerplate-readme) -* [Create sitemap](https://github.com/assemble/assemble-boilerplate-sitemap) - -{{#draft}}* [Cheatsheet Boilerplate](https://github.com/upstage/cheatsheet){{/draft}} -{{#draft}}* [Dynamic Grid](https://github.com/assemble/assemble-boilerplate){{/draft}} -{{#draft}}* [Dynamic Table](https://github.com/assemble/assemble-boilerplate){{/draft}} -{{#draft}}* [Generate Forms][]{{/draft}} - -## Development - -* [Methods][methods] - - -{{#draft}} -## Contributing - -* [Contributing to Assemble][contributing] -* [Extending Assemble][extending-assemble] -{{/draft}} - -## Other - -* [External Libraries][external-libraries] - - -## Related Projects - -* [assemble-less](https://github.com/assemble/assemble-less) -{{#draft}}* [Extending Assemble][]{{/draft}} - - diff --git a/templates/layouts/base.hbs b/templates/layouts/base.hbs deleted file mode 100644 index 2aa57b0..0000000 --- a/templates/layouts/base.hbs +++ /dev/null @@ -1,47 +0,0 @@ -{{#prettify}} - - - - {{> head }} - - - - - {{!-- global navigation - =================================== --}} - {{> navbar }} - - - {{!-- masthead - =================================== --}} - {{#is area 'docs'}} - {{> masthead-docs }} - {{/is}} - {{#is area 'plugins'}} - {{> masthead-plugins }} - {{/is}} - {{#is area 'helpers'}} - {{> masthead-helpers }} - {{/is}} - {{#is area 'blog'}} - {{> masthead-blog }} - {{/is}} - {{#is area 'boilerplates'}} - {{> masthead-boilerplates }} - {{/is}} - - - {{!-- content - =================================== --}} - {{> body }} - - - {{!-- footer scripts - =================================== --}} - {{> javascripts }} - - - -{{/prettify}} \ No newline at end of file diff --git a/templates/layouts/blog.hbs b/templates/layouts/blog.hbs deleted file mode 100644 index 44791a2..0000000 --- a/templates/layouts/blog.hbs +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: default.hbs ---- - - - -
            - {{> body }} -
            \ No newline at end of file diff --git a/templates/layouts/default.hbs b/templates/layouts/default.hbs deleted file mode 100644 index 129ab58..0000000 --- a/templates/layouts/default.hbs +++ /dev/null @@ -1,49 +0,0 @@ ---- -layout: base.hbs ---- - -{{!-- page content -=================================== --}} -
            -
            - - {{!-- side navigation - =================================== --}} -
            - -
            - - {{!> edit-template-link }} - - {{! main content - =================================== }} -
            -
            -

            {{page.title}}

            - {{#markdown}} - {{> body }} {{> generated-links.md }} - {{/markdown}} -
            - -

            See the template for this page →

            - {{> footer }} -
            -
            -
            -
            diff --git a/templates/pages/blog/index.hbs b/templates/pages/blog/index.hbs deleted file mode 100644 index 71a3eb2..0000000 --- a/templates/pages/blog/index.hbs +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Blog - -area: blog ---- - -
            -
            - -

            In progress...

            -

            We expect the blog to be up and running any day now. Please check back soon!

            - - {{!md "src/content/blog/*.md"}} - -
            -
            Comment block here
            -
            - diff --git a/templates/pages/boilerplates/boilerplate-blog.md.hbs b/templates/pages/boilerplates/boilerplate-blog.md.hbs deleted file mode 100644 index d249b18..0000000 --- a/templates/pages/boilerplates/boilerplate-blog.md.hbs +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Blog Boilerplate - -area: boilerplates ---- - -> Docs coming soon... \ No newline at end of file diff --git a/templates/pages/boilerplates/boilerplate-bootstrap.md.hbs b/templates/pages/boilerplates/boilerplate-bootstrap.md.hbs deleted file mode 100644 index aef9954..0000000 --- a/templates/pages/boilerplates/boilerplate-bootstrap.md.hbs +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Bootstrap Boilerplate - -area: boilerplates ---- - -> Docs coming soon... \ No newline at end of file diff --git a/templates/pages/boilerplates/boilerplate-site.md.hbs b/templates/pages/boilerplates/boilerplate-site.md.hbs deleted file mode 100644 index e1f753d..0000000 --- a/templates/pages/boilerplates/boilerplate-site.md.hbs +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Website Boilerplate - -area: boilerplates ---- - -> Docs coming soon... \ No newline at end of file diff --git a/templates/pages/boilerplates/index.md.hbs b/templates/pages/boilerplates/index.md.hbs deleted file mode 100644 index 31df555..0000000 --- a/templates/pages/boilerplates/index.md.hbs +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Coming Soon! -section: boilerplates -layout: default.hbs -published: false ---- - -> While you're waiting, check out the [assemble generator →](https://github.com/assemble/grunt-init-assemble) for Assemble. - - -
            -
            -
            - -{{!md 'src/templates/pages/boilerplates/toc.md'}} diff --git a/templates/pages/docs/FAQ.md.hbs b/templates/pages/docs/FAQ.md.hbs deleted file mode 100644 index a4dc664..0000000 --- a/templates/pages/docs/FAQ.md.hbs +++ /dev/null @@ -1,606 +0,0 @@ ---- -title: FAQ - -area: docs -section: getting started ---- -{{#todo}} -* pretty links -* list categories, by page -* list categories for a given/specific page -* list categories for "this" page -* list pages for each category -* generate links to/from each page in each category -{{/todo}} - -## Source files for the Docs -On each page of Assemble's live documentation you will find a "See the templates for this page" link, so you can take a look behind the curtains and get a peek at how we build our own docs. Of course, you can also fork or download the entire project if you want to go deeper with it (or make a pull request, you thoughtful and charitable community member you!). - - -## Generating a list from a collection -The simplest way to generate a list from a collection is to create a block expression using the name of the collection, and the collection items inside. - - -### Collection items from "all pages" -To generate a list of [categories][options-collections] for all [pages][pages] in a [target][targets], add the following block expression to a page or a [layout][layouts] (depending on whether or not you want the list to render to a _specified page/pages_ or _all_ pages): - -```html -

            All Categories

            -
              -\{{#categories}} -
            • \{{category}}
            • -\{{/categories}} -
            -``` -Now, if two of the pages in your target have categories defined as such: - -```html ---- -title: Page One -categories: -- apples -- oranges ---- -``` -and - -```html ---- -title: Page Two -categories: -- grapes -- bananas -- coconuts ---- -``` - -The generated output will be a basic list containing the merged values from the `categories` collection of each page: - -```html -

            All Categories

            -
              -
            • apples
            • -
            • bananas
            • -
            • coconuts
            • -
            • grapes
            • -
            • oranges
            • -
            -``` - - -### Collection items on a given page -To generate a list of [categories][options-collections] for a page, you would add the following to the page on which you want to generate the list: - -```html -\{{#page.categories}} - \{{.}} -\{{/page.categories}} -``` -Or you can use the `\{{#each page.categories}}...\{{/each}}` block expression with the name of the collection as a variable to get the list of pages in the current [target][targets]. - - - -## Dynamically building navigation -Following the previous example, you can use the `\{{#each}}...\{{/each}}` block expression with the [pages][pages] variable to get the list of pages in the current [target][targets]. - -Then, using the `\{{#is}}...\{{/is}}` comparison helper from the [handlebars-helpers][handlebars-helpers] library, you can dynamically build navigation items by comparing a property (or properties) from the YAML front matter for each page in the list with the given values. - -In other words, the `is` helper will ask: "does this page have a 'getting started' section? If 'true', then add the page as a list item, otherwise skip it". For example, this example shows two different sections being generated: - -```handlebars -

            Getting Started

            -\{{#each pages}} - \{{#is data.section "getting started"}} -
          1. \{{data.title}}
          2. - \{{/is}} -\{{/each}} - -

            Configuration

            -\{{#each pages}} - \{{#is data.section "configuration"}} -
          3. \{{data.title}}
          4. - \{{/is}} -\{{/each}} -``` - -Any pages with `section: getting-started` in the YAML front matter will render in the first list, and pages with `section: configuration` will render in the second list. - -\{{#todo}} update the docs once [Pages Arrays][pages-array] can achieve this as well.\{{/todo}} - - - -## Adding "active" links to navigation items -If you want to add `class="active"` to a navigation item for the "current page", you can achieve this using the `\{{#is}}...\{{/is}}` [comparison helper](https://github.com/assemble/handlebars-helpers#comparisons-equal-helpers) from the [handlebars-helpers][handlebars-helpers] library. - - -### Using YFM properties -You can achieve this using many different variables, but a relatively easy one is to compare the _[basename][built-in-variables] of the current page_ to the _given value_: - -```html - -``` -_The above example is from the navbar in [assemble-bootstrap](https://github.com/assemble/assemble-bootstrap)._ - - -### Without YFM -However, if you don't use YFM (or don't want to use properties from YFM to create active links), you can compare the _destination of the current page_ to the _destination of the linked page_ to get a truthy or falsy value. - -```html -\{{#is page.dest this.dest}} class="active"\{{/is}} -``` - -**The trick** with using this method is that the context must be correct for it to work. So if you are dynamically generating nav items, as in the [Dynamically build navigation][#dynamically-build-navigation] example, you will need to use `../../` to access the context of `pages` being generated: - -```html -

            Getting Started

            -\{{#each pages}} - \{{#is data.section "getting started"}} - - \{{data.title}} - - \{{/is}} -\{{/each}} -``` - - -## Generating relative paths for links -To get the relative path from the _destination of the current page_ to the _destination of the linked page_, the [\{{relative}}](https://github.com/assemble/handlebars-helpers#relative) helper works quite well: - -```html -\{{relative page.dest this.dest}} -``` - -As with the previous example, if you nest templates the context must be adjusted for this to work: - -```html -

            Getting Started

            -\{{#each pages}} - \{{#is data.section "getting started"}} - - \{{data.title}} - - \{{/is}} -\{{/each}} -``` - -{{#draft}} -#### "Titleizing" strings - -We can even go a step further and make the rendered titles propercase: - -```html - -``` -which renders to: - -```html - -``` - -```handlebars - -``` - -## Grunt conventions - -If you're not familiar with Grunt, here are some very high level FAQs to get you oriented: - -* Grunt itself is a "task runner", which means that Grunt will run whatever tasks you need for your project. -* Grunt tasks are configured in the `Gruntfile.js` of your project -* Each task in the Gruntfile is powered by a Grunt "plugin" -* Plugins are typically external to the Gruntfile, but not always. If you develop a very small plugin for a specific project and you want to store it in the Gruntfile, go for it. -* You can either `npm install` plugins or add your own locally. -* When adding a plugin via `npm install`, you must register the task using `grunt.loadNpmTasks('assemble');` outside of the `grunt.initConfig({...}):` object. -* If you develop a Grunt plugin or otherwise add one locally, the convention is to store the plugin in the `./tasks` directory of your project. -* Local plugins are registered with `grunt.loadTasks('tasks');` outside of the `grunt.initConfig({...}):` object. -* Each task can have one or more [targets][targets] -* Each target can have a different configuration for dynamically building `src` and `dest` files lists. -* Options can be defined at both the task-level and the target-level. -* Options defined at the target level will typically override options defined at the task level. This can be modified with custom programming. - - -### [Target][targets] - -Please read [Task Configuration and Targets][tasks-targets] on the Grunt website for more information. - -Grunt offers a ton of flexibility regarding how task and targets are configured, and Assemble takes full advantage of this. Each target in a task can have a completely different configuration. Options and files can be defined specifically for each target, while also inheriting options defined at the task level. - -Throughout the Assemble docs, anytime we refere to a target(s), we are refering specifically to the targets you have configured in the Assemble task in your Gruntfile. For example, the following task is configured with three targets, "docs", "blog", and "site": - -In the following example, the `assemble` task is configured with three targets: - -```js -assemble: { - docs: { - 'docs/': 'src/docs/*.hbs' - }, - blog: { - 'articles/': 'src/posts/*.hbs' - }, - site: { - 'site/': 'src/pages/*.hbs' - } -} -``` - -This is just one aspect of Grunt's conventions that we have found to be extremely useful and powerful. Oftentimes we see developers looking for overly complicated workarounds to difficult issues that could very easily be solved by just adding another target to the assemble task (or even by adding another supplemental task). - - - -### "Current Target" - -Throughout Assemble's docs, when you see the term "current target", this refers to the _context of the target currently being run_. - -If we use the targets from the previous section as an example, if you run `grunt assemble:docs`, then the `docs` target would be the "current target". If you run `grunt assemble` and each target is executed successively (`docs`, `blog` and `site`), then "current target" would refer to the output that you should expect to see from files specified in a given target. - -For example, [collections][collections] will only render with _collection items from files defined in the current target_. So when `\{{#each pages}}...\{{/each}}` is used to render a list of pages, only the pages that are specified in the currently running target will be included in the collection. If we again use the targets from the previous section as an example, if we assume that the layout used by the `site` target contains `\{{#each pages}}...\{{/each}}`, then after running `grunt assemble` we will find that files in the `site/` directory will include the list of pages defined in the `site` target (and only in the `site` target). - -This is what is meant by "current target". - - -### Files Configuration - -Please read [Building the Files Object Dynamically][files-object] on the Grunt website for more information. - -Grunt offers a few different options for dynamically building files lists. Throughout this documentation you will see the following concepts referred to repeatedly, so this is good information to have: - -#### "src-dest" format - -```js -assemble: { - options: {}, - blog: { - options: {}, - src: 'src/templates/posts/*.hbs', - dest: 'dest/posts/' - } -} -``` - -#### "files-object" format - -```js -assemble: { - options: {}, - docs: { - options: {}, - files: { - 'dest/posts/': ['src/templates/posts/*.hbs'], - 'dest/archives/': ['src/templates/archives/*.hbs'] - } - } -} -``` - -#### "files-array" format - -This format allows multiple src-dest files mappings for a target, and each mapping may have additional options defined for it allowing a higher level of granularity. - -```js -assemble: { - options: {}, - blog: { - options: {}, - // additional options/properties may be defined in each mapping - files: [ - { - expand: true, - flatten: true, - cwd: 'src/templates/posts', - src: ['*.hbs'], - dest: 'dest/posts/', - ext: '.html' - }, - { - expand: true, - flatten: true, - cwd: 'src/templates/archives', - src: ['*.hbs'], - dest: 'dest/archives/', - ext: '.html' - } - ] - } -} -``` - - -[tasks-targets]: http://gruntjs.com/configuring-tasks#task-configuration-and-targets -[files-object]: http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically - - -## Introduction to Assemble - -> Beginner's guide to using Assemble for building web projects, sites or components. - - - -Dead simple site and component generator, built from the ground up as a [Grunt.js](http://gruntjs.com/) plugin. - - -> Assemble makes it dead simple to build modular sites and components from **templates** and **data**. - -> Assemble is an "opinion aware" site generator that makes it dead simple to build sites and components - -With Assemble, you can use any directory structure and any naming conventions you want. - - -Just add templates and data and Assemble will produce a fully-grown - -Assemble is an easy-bake oven for web projects. - -Just water it with templates and data and Assemble will produce a fully-grown - -## What differentiates Assemble from other site builders? -Assemble was designed from the ground up as a plugin to [Grunt.js](http://gruntjs.com/), the fantastic JavaScript "task runner". So Assemble follows the same conventions as hundreds of other Grunt plugins, providing you with the flexibility to configure your build process however you want, _with or without Assemble_. - -Assemble also offers strong conventions for working with templates and data. For example, your project might include a few of the following concepts in some form: - -Raw templates and data - -Processes templates and data -YAML, YAML Front-Matter, JSON -Markdown, external (dedicated files) or inline (embedded in HTML). -raw templates, Handlebars, HTML, plain text, markdown - -generated content -can be any extension - - - -(representing the raw form of a website) - -runs it through Textile or Markdown and Liquid converters, and spits out a complete, static website suitable for serving with Apache or your favorite web server. This is also the engine behind "GitHub Pages":http://pages.github.com, which you can use to host your project's page or blog right here from GitHub. - -See examples for plain HTML and CSS, scaffolds, client-side templates, mock-data, CSS pre-processors, markdown, YAML, JSON, sensible configuration defaults and a Grunt.js build system to make it work. - -Assemble is great for gh-pages, documentation, static sites, mocking etc. - -Get the rocks out of your socks. Assemble helps you quickly launch static web projects by emphasizing a strong separation of concerns between structure, style, content and configuration. - - - - - -## Separation of Concerns - -Assemble brings order to web projects by showing you how to separate structure, styling, content, data and behavior. - -### Everything is a Component - -Strictly keep structure (markup), presentation (styling), and behavior (scripting) apart, and try to keep the interaction between the three to an absolute minimum. - -That is, make sure documents and templates contain only HTML and HTML that is solely serving structural purposes. Move everything presentational into style sheets, and everything behavioral into scripts. - -In addition, keep the contact area as small as possible by linking as few style sheets and scripts as possible from documents and templates. - -Separating structure from presentation from behavior is important for maintenance reasons. It is always more expensive to change HTML documents and templates than it is to update style sheets and scripts. - - - -HTML, CSS and JavaScript. The language of the web" - -Most web projects involve - - a lot of JavaScript, one of the first things you learn is to stop tying your data to the DOM. It's all too easy to create JavaScript applications that end up as tangled piles of jQuery selectors and callbacks, all trying frantically to keep data in sync between the HTML UI, your JavaScript logic, and the database on your server. For rich client-side applications, a more structured approach is often helpful. - -With Backbone, you represent your data as Models, which can be created, validated, destroyed, and saved to the server. Whenever a UI action causes an attribute of a model to change, the model triggers a "change" event; all the Views that display the model's state can be notified of the change, so that they are able to respond accordingly, re-rendering themselves with the new information. In a finished Backbone app, you don't have to write the glue code that looks into the DOM to find an element with a specific id, and update the HTML manually — when the model changes, the views simply update themselves. - -If you're new here, and aren't yet quite sure what Backbone is for, start by browsing the list of Backbone-based projects. - -Many of the examples that follow are runnable. Click the play button to execute them. - - - - - -## Overview - -In a nutshell, assemble was designed to simplify - - - - -## Conventions - -Assemble allows you to use your own conventions for just about everything, including folder structure and file names. Bearing this in mind, it's easiest to explain how to get the most out of assemble if we establish a common dialog using the following conventions: - -* The "assets" folder contains CSS, JavaScripts, images, fonts, icons and so on. We'll talk about this more later, but in general assets can be found in the `dest/assets` folder. -* Projects have one or more locations for `src` and `dest` files. -* "Templates" refers to structural code, which includes HTML, Mustache, Handlebars or any other templating library. - - - - -assume the following structure - -use a generic example, following these assumptions: - - -Everyone likes to organize their projects differently. Sure, there is a ton of value in standardizing folder structures, documentation methodologies, an so on. But there is also a ton of value in creativity and change. The bottom line is that you should be able to decide how to organize your own project. - -So bearing in mind that assemble honors this and allows you to use your own conventions, - - - -# Assemble - -Assemble a [Node.js]() application and [Grunt.js]() plugin used to generate web components, pages, themes, sites, or documentation. By default, the output of Assemble is formatted as HTML pages, but templates can be used to build files with just about any extension. `sitemap.xml` is a common example, and this README was generated from templates. - - -Assemble provides: -* Speed: Assemble builds pages quickly. -* Live previews. Assemble includes a standalone doc server, making it trivial to preview your docs as you write. -* Modern markup. Assemble's generated documentation is an attractive, functional web application with real URLs and graceful fallbacks for spiders and other agents that can't run JavaScript. -* Flexible template engine support. Assemble was originally designed to use Handlebars by default, but it is not tied to any particular engine or preprocessor. You can use it with any engine that supports.................. [TODO]. - - - -## Configurable Conventions - -As a philosophy, Assemble does not force opinions on you, freeing you to use your own conventions for most things, including: -* How and where configuration data is stored -* Terminology for variables ("global" variables, page variables or component variables, and so on) -* Folder structure and file naming conventions. -* Template engine: by default, Assemble -* Content format: Assemble reads in data as text and parses it using your template engine of choice. So however you want to write your content is up to you. However, out of the box you can easily store content in any of the following formats and Assemble will build it: `.md|.markdown`, YAML front matter, `.yaml`, `.json`, `.txt`, `.html`, `.mustache|.hbs|.handlebars` (any arbitrary handlebars/mustache extension). - - - - - - - - -it can be used easily and productively on non-YUI code - - -## Summary - -To get the most out of Assemble it's important to first understand the role that Assemble plays within the context of a broader web development process. Depending on the team or environment you work in, you might use some or all of the following elements: - -* Design process -* A development process - - - - - -To establish context, - - -In a nutshell, here are the major - and where Assemble fits into that picture. - - - -Assemble is really just the here are the basic building blocks that Assemble works with to : - -* Templates basically are blocks of code (HTML, text, markdown, etc.) which, like pieces of a puzzle, will eventually be put together by Assemble. -* Variables are used inside templates as placeholders that will eventually be replaced with real data - -## Templates and Variables - -Let's start by creating a template, which can be any kind of markdown, text, xml or markup (such as HTML) we want it to be. For this example our template is going to be HTML, and since we're feeling creative, let's call it `my-template.tmpl`, and focusing only on the `head` of our HTML document let's add template variables for `title` and `author` so that we can later replace them with real data: - -```handlebars - - - - \{{title}} - - - - - -``` - -Handlebars.js is the default template engine in Assemble, so our variables are wrapped in "Handlebars expressions": `\{{` and `}}`. Given that our template is in Handlebars format, let's also change the file extension to `.hbs`, so our template is now named: `my-template.hbs`. - - -## Data - -Now that it's time to add data, things get more interesting. Assembles allows you to work with several data formats inside your templates: - -* [JSON]() files, such as `my-data.json` -* [YAML]() files, such as `my-data.yml` -* [YAML Front-Matter](), embedded directly inside the template itself - -The best part is that you can mix and match these formats however you want. - -### JSON - -When working with "external" data files, if we: - -a. name our file the same as our template, and -b. add the path to the data file to the `options.data` object in the `assemble` task - -then Assemble will pick it up and use it automatically. - -Here is an example of what we might put inside of `my-template.json` to populate our template with data. - -```json -{ - "title": "Assemble", - "author": "Brian Woodward" -} -``` - -Here is the same in YAML format: `my-template.yml` - -```yaml -title: Assemble -author: Brian Woodward -``` - -And this template: - -`my-template.hbs` - -```handlebars -

            \{{ title }}

            -``` - -Or, in cases where we only require simple metadata we can use YAML Front-matter to eliminate the need for an external data file: - -```yaml ---- -title: Assemble -author: Brian Woodward ---- - -

            \{{ title }}

            -``` - -Furthermore, we can optionally use underscore templates in the YAML front-matter to translate external variables into data inside the content: - -```handlebars ---- -title: <%= some.title.variable %> -author: Brian Woodward ---- - -

            \{{ title }}

            -

            \{{ author }}

            -``` - -Outputs: - -```html -

            Assemble

            -

            Brian Woodward

            -``` -{{/draft}} \ No newline at end of file diff --git a/templates/pages/docs/Helpers.md.hbs b/templates/pages/docs/Helpers.md.hbs deleted file mode 100644 index ab03e5f..0000000 --- a/templates/pages/docs/Helpers.md.hbs +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Helpers - -area: docs -section: templates ---- - -## Built-in Helpers - -Assemble includes the [handlebars-helpers][handlebars-helpers] library as a dependency, so more than **100 Handlebars helpers** from that library are available by default. - -### Also see [Custom Helpers][custom-helpers] | [grunt-init-assemble-helper](https://github.com/assemble/grunt-init-assemble-helper) | [grunt-init-assemble-helper](https://github.com/assemble/grunt-init-assemble-helper) → - -### 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]}}` - - -Many additional helpers are available in the following categories: - -* `assemble` -* `collections` -* `comparisons` -* `dates` -* `file` -* `html` -* `inflections` -* `logging` -* `markdown` -* `math` -* `miscellaneous` -* `numbers` -* `objects` -* `path` -* `special` -* `strings` -* `url` - -> Visit the [helper documentation](http://assemble.io/helpers/) to learn more → - - -## Related info - -* [Custom Helpers][custom-helpers] -* [Underscore Mixins](http://github.com/assemble/underscore-mixins "Underscore Mixins") -* [Templates][templates-overview] -* [handlebars-helpers Github repo][handlebars-helpers] -* [Handlebarsjs.com Block Helpers](http://handlebarsjs.com/block_helpers.html "Block Helpers") -* [Treehouse Blog, Handlebars.js Part 2: Partials and Helpers](http://blog.teamtreehouse.com/handlebars-js-part-2-partials-and-helpers) -* [NetTuts+: An Introduction to Handlebars](http://net.tutsplus.com/tutorials/javascript-ajax/introduction-to-handlebars/) - -[handlebars-helpers]: http://github.com/assemble/handlebars-helpers "Extensive collection of Handlebars helpers" - diff --git a/templates/pages/docs/Partials.md.hbs b/templates/pages/docs/Partials.md.hbs deleted file mode 100644 index 0a6f45c..0000000 --- a/templates/pages/docs/Partials.md.hbs +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Partials - -area: docs -section: templates - -categories: -- templates -tags: -- includes -- partials - -logo: - URL: media/images/logo.png - classes: - - logo - - main - width: 80 - height: 40 - title: Assemble This! - -hide-partial-YFM: - class: "" ---- - -> Like "includes", partials are reusable fragments of code that can be included in a page and rendered. Partials are useful when you have blocks of reusable code that are applicable in different contexts. - -## Assemble, Mustache, Handlebars and Partials - -Partials are a part of the [Mustache template language](http://mustache.github.io/) of which Handlebars is superset. More information about partials in general can be found in the [Mustache documentation](http://mustache.github.io/mustache.5.html). Assemble, when used with the [Handlebars](http://handlebarsjs.com/) engine, allows partials to be defined and used. - -## An Example with Handlebars - -Let us consider a simple partial as an example that would be used to generate an HTML `img` tag: - -`img.hbs` -```html -\{{#if alt}}\{{alt}}\{{else}}\{{title}}\{{/if}} -``` - -As you can see, Handlebars tags are used as placeholders for inserting various properties. For example, the `\{{URL}}` tag will insert a property `URL` from the current context. - -Now that we have defined a partial, we can include the partial in a template via the standard Mustache syntax `\{{> [partial-name w/o extension]}}`. Using our `img.hbs` partial example above and the following HTML template: - -`header.html` -```html ---- -{{#logo}} -logo: - URL: {{URL}} - classes: - {{#classes}} - - {{.}} - {{/classes}} - width: {{width}} - height: {{height}} - title: {{title}} -{{/logo}} ---- -
            - \{{#page.logo}} - \{{> img}} - \{{/page.logo}} -
            -``` -Assemble would produce the following output: - -```html -
            - {{#logo}} - {{> img}} - {{/logo}} -
            -``` - -Note that we enclosed our `\{{> img}}` partial invocation inside the `\{{#page.logo}} .. \{{/page.logo}}` section to setup the context in which the partial properties will be evaluated. In this case they are coming from the YAML front matter we defined in `header.html`, though the context can be set via the many methods supported by Assemble and Handlebars. - -Handlebars provides a more convenient syntax for invoking a partial with a given context via `\{{> [partial-name] [context]}}`. Thus, we could change our `header.html` template as follows: - -`header.html` -```html ---- -{{#logo}} -logo: - URL: {{URL}} - classes: - {{#classes}} - - {{.}} - {{/classes}} - width: {{width}} - height: {{height}} - title: {{title}} -{{/logo}} ---- -
            - \{{> img page.logo}} -
            -``` -and Assemble would produce the same output as above. With this syntax, the desired context in which to evaluate the partial is passed explicitly as a paramter to the partial. - -## Configuration - -To use partials in Assemble, we must specify where partials can be found in the configuration options for the `assemble` Grunt task: - -`Gruntfile.js` -```js - assemble: { - options: { - - // setup default partials locations - partials: ['templates/includes/**/*.{hbs,md}'] - } - } -``` - -as well as within a collection's options: - -`Gruntfile.js` -```js - assemble: { - - my-collection: { - options: { - partials: ['my-collection/templates/partials/**/*.{hbs,md}'] - } - } - } -``` - -## YAML Front Matter in Partials - -Though partials can have YAML front matter, currently in Handlebars there is a [known issue](https://github.com/wycats/handlebars.js/pull/182) which causes the YAML front matter in a partial to be ignored if the partial is invoked within *any* context. Thus, the following updated `img.hbs` partial from above with YAML front matter: - -`img.hbs` -```html ---- -class: image ---- -\{{#if alt}}\{{alt}}\{{else}}\{{title}}\{{/if}} -``` - -would produce the same output as above, neglecting to add on the `\{{class}}` property as listed in the partial. - -Fortunately Assemble provides two helpers which will merge the partial's YAML front matter into the context and give the expected results: - -* [handlebars-helper-partial](https://github.com/helpers/handlebars-helper-partial) -* [handlebars-helper-include](https://github.com/helpers/handlebars-helper-include) - -So taking our updated example partial, we could use the Assemble `partial` helper in the following way to be sure our partial's YAML front matter data is merged into the overall context when evaluated: - -`header.html` -```html -
            - \{{partial 'img' page.logo}} -
            -``` - -Note how when using the `\{{partial}}` helper we must put the name of the partial to include in quotes. - -Finally, Assemble would produce the following output: - -```html -
            - {{partial 'img' page.logo}} -
            -``` -with the partial's own YAML front matter included in the context, producing the extra `image` class attribute value. - -## Partials in Handlebars Specifics - -The `Handlebars.registerPartial` method, which registers a partial, accepts the name of the partial as its first argument and either a _template source string_ or a _compiled template_ as its second argument. Accepting a compiled template as the second argument enables you to, for example, use the partial in a loop that outputs a list but also append items to the list later using the partial's template function. For an example of this, check out the [handlebars-helpers-include](https://github.com/helpers/handlebars-helper-include/blob/master/index.js) code. - - -{{#draft}} -To use a partial from a template, simply include `\{{> partial-name }}`. For example: -{{/draft}} - -#### Also see [options.partials][options-partials] → diff --git a/templates/pages/docs/layouts.json b/templates/pages/docs/layouts.json deleted file mode 100644 index e65171d..0000000 --- a/templates/pages/docs/layouts.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "layouts": { - "data": { - "area": "docs", - "title": "Layouts", - "section": "templates" - }, - "content": "\nThis is a test.", - "filename": "layouts.html" - } -} \ No newline at end of file diff --git a/templates/pages/docs/sections/docs-about.md.hbs b/templates/pages/docs/sections/docs-about.md.hbs deleted file mode 100644 index 939cf0c..0000000 --- a/templates/pages/docs/sections/docs-about.md.hbs +++ /dev/null @@ -1,12 +0,0 @@ - -> The goal of Assemble is to offer: - -* Conventions for building and maintaining static sites and UI pattern libraries, using HTML, CSS/LESS/SASS, client-side templates and structured data -* Patterns for highly reusable layouts, pages, includes/partials, "snippets" and so on -* Strategies for externalizing metadata, data and content into maintainable formats, such as markdown, JSON, YAML, text, HTML and others -* Ability to use simple JSON or YAML to configure and define the structure of entire projects, static sites or component libraries -* Configurable and extensible enough for programmers, but easy for non-programmers to learn and use. - - -## Coming Soon! -+ [Upstage](http://github.com/upstage): COMING SOON! We are preparing to launch a library of seriously high quality UI components, each constructed following the same conventions we encourage with Assemble. diff --git a/templates/pages/docs/sections/docs-contributing.md.hbs b/templates/pages/docs/sections/docs-contributing.md.hbs deleted file mode 100644 index 85a1a86..0000000 --- a/templates/pages/docs/sections/docs-contributing.md.hbs +++ /dev/null @@ -1,3 +0,0 @@ -Want to help make Assemble even better? All constructive feedback and contributions are welcome, so please consider contributing! We can always use help creating, tests, documentation or resolving [Issues](https://github.com/assemble/assemble/issues), but if you have other ideas for how you can help, Brian and I would love to hear them! - -### [Visit Issues](https://github.com/assemble/assemble/issues) diff --git a/templates/pages/docs/sections/docs-examples.md.hbs b/templates/pages/docs/sections/docs-examples.md.hbs deleted file mode 100644 index cfc660b..0000000 --- a/templates/pages/docs/sections/docs-examples.md.hbs +++ /dev/null @@ -1,57 +0,0 @@ - -#### Compile Handlebars templates - -Simple example of using data files in both `.json` and `.yml` format to build Handlebars templates. - -```javascript -assemble: { - docs: { - options: { - data: 'src/data/**/*.{json,yml}' - }, - files: { - 'dist/': ['src/templates/**/*.hbs'] - } - } -} -``` - -#### Generate a markdown README - -The example shows how you can use Assemble to generate a markdown formatted readme from Handlebars templates. - -```javascript -assemble: { - readme: { - options: { - flatten: true, - partials: 'src/content/*.hbs', - data: 'package.json', - ext: '' - }, - src: 'src/templates/README.md.hbs', - dest: './' - } -} -``` -Visit the [assemble-examples-readme](http://github.com/assemble/assemble-examples-readme) repo to see a working example. - - -#### Generate `.xml` sitemap - -You can generate a sitemap from a static data source, such as `sitemap.json`, or use Assemble's built-in `pages` and `page` variables to automatically generate a sitemap from all pages in a target. - -```javascript -assemble: { - options: { - flatten: true, - data: 'src/sitemap.json', - ext: '.xml' - }, - component: { - files: { - 'Sitemap.xml': ['src/sitemap.hbs'] - } - } -} -``` diff --git a/templates/pages/docs/sections/docs-getting-started.md.hbs b/templates/pages/docs/sections/docs-getting-started.md.hbs deleted file mode 100644 index 41f16db..0000000 --- a/templates/pages/docs/sections/docs-getting-started.md.hbs +++ /dev/null @@ -1,13 +0,0 @@ - -This plugin requires Grunt `{{package.devDependencies.grunt}}`. If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command: - -```shell -npm install assemble --save-dev -``` - -Once the plugin has been installed, it may be enabled inside your [Gruntfile][Getting Started] with this line of JavaScript: - -```js -grunt.loadNpmTasks('assemble'); -``` - diff --git a/templates/pages/docs/sections/docs-helpers.md.hbs b/templates/pages/docs/sections/docs-helpers.md.hbs deleted file mode 100644 index 5ecc928..0000000 --- a/templates/pages/docs/sections/docs-helpers.md.hbs +++ /dev/null @@ -1,74 +0,0 @@ -## Markdown helpers - -> Markdown helpers only work with [assemble](https://github.com/assemble/assemble), Grunt.js plugin for generating sites. - -{{md 'src/content/helpers/markdown/*.*'}} - - -## Code helpers -{{!> helpers-code.md }} - - -## Path helpers -{{!> helpers-path.md }} - - -## URL helpers -{{!> helpers-url.md }} - - -## File helpers -{{!> helpers-file.md }} - - -## README helpers -{{!> helpers-readme.md }} - - -## HTML helpers -{{!> helpers-html.md }} - - -## String helpers -{{!> helpers-strings.md }} - - -## Collections helpers -{{!> helpers-collections.md }} - - -## Math helpers -{{!> helpers-math.md }} - - -## Numbers helpers -{{!> helpers-numbers.md }} - - -## Comparisons: "equal" helpers -{{!> helpers-comparisons-equal.md }} - - -## Comparisons: "greater than" helpers -{{!> helpers-comparisons-greater.md }} - - -## Comparisons: "less than" helpers -{{!> helpers-comparisons-less.md }} - - -## Dates helpers -{{!> helpers-dates.md }} - - -## Inflections helpers -{{!> helpers-inflections.md }} - - -## Logging helpers -{{!> helpers-logging.md }} - - -## Miscellaneous helpers -{{!> helpers-misc.md }} - diff --git a/templates/pages/docs/sections/docs-how-helpers-work.md.hbs b/templates/pages/docs/sections/docs-how-helpers-work.md.hbs deleted file mode 100644 index bafdcd8..0000000 --- a/templates/pages/docs/sections/docs-how-helpers-work.md.hbs +++ /dev/null @@ -1,20 +0,0 @@ -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.js](https://github.com/wycats/handlebars.js) is currently the default template library for [assemble](http://github.com/assemble/assemble). - -### Creating Helpers - -> Contributions welcome! Please consider adding your own helpers to this library. - -Handlebars is advantageous over other templating libraries when it comes to creating your own 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. - -Handlebars allows two different kinds of helpers: - -* **Expression helpers** are basically 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. -* **Block helpers** There are a few block helpers included by default with Handlebars, `\{{#each}}`, `\{{#if}}` and `\{{#unless}}`. Custom block helpers are registered the same way as exptression helpers, but the difference is that Handlebars will pass the contents of the block compiled into a function to the helper. - -Also, if you use Assemble be sure to visit the [assemble docs](https://github.com/assemble/assemble/wiki/Helpers) to learn about registering custom helpers. diff --git a/templates/pages/docs/sections/docs-options.md.hbs b/templates/pages/docs/sections/docs-options.md.hbs deleted file mode 100644 index adc34f1..0000000 --- a/templates/pages/docs/sections/docs-options.md.hbs +++ /dev/null @@ -1,133 +0,0 @@ -See the [Options]({{url.wiki.options}}) section on the Wiki for more information. - -#### assets -Type: `String` -Default: `undefined` - -Used with the `\{{assets}}` variable to resolve the relative path from the _dest file_ to the _assets_ folder. - -#### data -Type: `Object|Array` -Default: `src/data` - -Retrieves data from any specified `JSON` and/or `YAML` files to populate the templates when rendered. Data gets passed through the `data` object to the options on the assemble task, then to the context in your templates. - -Also useful for specifying [configuration][config] data, such as when to render certain templates. For example: - -Also see: [YAML front matter][yaml] - -#### layout -Type: `String` -Default: `undefined` - -If set, this defines the layout file to use for the [task or target][tasks-and-targets]. However, when specifying a layout, unlike Jekyll, _Assemble requires a file extension_ since you are not limited to using a single file type. - -[tasks-and-targets]: http://gruntjs.com/configuring-tasks#task-configuration-and-targets - -#### partials -Type: `Object|Array` -Default: `undefined` - -Specifies the Handlebars partials files, or paths to the directories of files to be used. - -#### helpers -Type: `Object|Array` -Default: [helper-lib](http://github.com/assemble/helper-lib) - -Path defined to a directory of custom helpers to use with the specified template engine. Assemble currently includes more than **[100+ built-in Handlebars helpers]({{url.helpers.repo}})**, since Handlebars is the default engine for Assemble. - -#### engine -Type: `Object|Array` -Default: [helper-lib](http://github.com/assemble/helper-lib) - -Path defined to a directory of custom helpers to use with the specified template engine. Assemble currently includes more than **[100+ built-in Handlebars helpers]({{url.helpers.repo}})**, since Handlebars is the default engine for Assemble. - -#### ext -Type: `String` -Default: `.html` - -Specify the file extension for destination files. Example: - -More [info about ext][options]. - -#### flatten -Type: `Boolean` -Default: `false` - -Remove anything after (and including) the first "." in the destination path, then append this value. In other words, when files are generated from different source folders this "flattens" them into the same destination directory. See [building the files object dynamically][files-object] for more information on `files` formats. - - -## Custom "Options Variables" - -You can add any custom variables directly to the options block: - -```javascript -assemble { - myProject: { - options: { - custom_option1: 'value', - custom_option2: 'value' - }, - files: { - 'dest': ['src/templates*.hbs'] - } - } -} -``` -This offers a great deal of flexibility, but it's also something that should be done sparingly because your tasks and targets can get out of hand pretty quickly. - -### Usage Examples - -Here are a couple of common use cases for custom options variables: - -### development stages - -Add custom variables for development stages, such as `dev` and `prod`: - -```javascript -assemble { - myProject: { - options: { - dev: true, - prod: false - }, - files: { - 'dest': ['src/templates*.hbs'] - } - } -} -``` - -Then we can wrap sections in our templates with these contexts to include or exclude content based on truthy or falsy evalution of the `dev` and `prod` variables. - -``` hbs -\{{#dev}} - -\{{/dev}} -\{{#prod}} - -\{{/prod}} -``` - -#### version consistency - -Get or set metadata to/from `package.json`: - -``` javascript -pkg: grunt.file.readJSON('package.json'), - -assemble { - myProject: { - options: { - version: '<%= pkg.version %>' - }, - files: { - 'dest': ['src/templates*.hbs'] - } - } -} -``` -Used in our templates like this: `\{{version}}` - -**NOTE**: It's worth noting that you can accomplish the same end goal by using the `options.data` object instead of creating a custom "options variable". See the [options.data](https://github.com/assemble/assemble/wiki/Options) page in the wiki for more detail. - diff --git a/templates/pages/docs/sections/docs-overview.md.hbs b/templates/pages/docs/sections/docs-overview.md.hbs deleted file mode 100644 index a23029c..0000000 --- a/templates/pages/docs/sections/docs-overview.md.hbs +++ /dev/null @@ -1,21 +0,0 @@ -In your project's Gruntfile, add a section named `assemble` to the data object passed into `grunt.initConfig()`. - -```js -grunt.initConfig({ - assemble: { - options: { - // Task-specific options go here. - }, - your_target: { - // Target-specific file lists and/or options go here. - } - } -}); -grunt.loadNpmTasks('assemble'); - -grunt.registerTask('default', [ - 'jshint', - 'assemble' -]); -``` -Task targets, files and options may be specified according to the grunt [Configuring tasks](http://gruntjs.com/configuring-tasks) guide. diff --git a/templates/pages/docs/sections/docs-quick-start.md.hbs b/templates/pages/docs/sections/docs-quick-start.md.hbs deleted file mode 100644 index 867ed27..0000000 --- a/templates/pages/docs/sections/docs-quick-start.md.hbs +++ /dev/null @@ -1,56 +0,0 @@ -This plugin requires Grunt `{{ package.devDependencies.grunt }}` - -If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command: - -```shell -npm install assemble --save-dev -``` - -Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript: - -```js -grunt.loadNpmTasks('assemble'); -``` - -When completed, you'll be able to run the various `grunt` commands provided: - -#### build - `grunt assemble` -Runs the `{{package.name}}` task to rebuild the project. {{ meta.build_requires }} - -#### test - `grunt test` -Runs jshint on JavaScripts and mocha unit tests on {{ meta.file_types }}. - -#### watch - `grunt watch` -Requires [grunt-contrib-watch](https://github.com/gruntjs/grunt-contrib-watch), `npm i grunt-contrib-watch`. This is a convenience task for watching files and automatically re-building them whenever you save. Requires the [grunt-contrib-watch](http://github.com/gruntjs/grunt-contrib-watch) Grunt plugin. - -Should you encounter problems with installing dependencies or running the `grunt` commands, be sure to first uninstall any previous versions (global and local) you may have installed, and then rerun `npm install`. - - -*** - -## HELPERS - -For linting and testing this project uses Grunt `{{ docs.devDependencies.grunt }}`, but Grunt is **not required** to use the helpers. Check out the [Getting Started](http://gruntjs.com/getting-started) guide to learn more about Grunt. - -```shell -npm install helper-lib --save -``` -Once helper-lib has been installed, it may be used within your application with the following JavaScript: - -```js -var handlebars = require('Handlebars'); -var helpers = require('helper-lib'); -helpers.register(Handlebars); -``` - -Now your handlebars instance will have access to the helpers. - -### Features unique to helper-lib - -Some helpers offer useful functionality that is unique to this project, such as: - -* File globbing using [minimatch](https://github.com/isaacs/minimatch) patterns -* Access to [assemble](https://github.com/assemble/assemble) options. -* Ability to render either markdown or HTML conditionally based on the file extension of the generated file. - -Lots more... \ No newline at end of file diff --git a/templates/pages/examples/generate-a-list-of-posts.md.hbs b/templates/pages/examples/generate-a-list-of-posts.md.hbs deleted file mode 100644 index dd96778..0000000 --- a/templates/pages/examples/generate-a-list-of-posts.md.hbs +++ /dev/null @@ -1,39 +0,0 @@ -## Render a "list" of Posts - -```html ---- -title: Blog -posts: ['src/posts/2013_05_10.md.hbs', 'src/posts/2013_05_12.md.hbs'] ---- - - -

            This is a simple blog

            - -\{{#each posts}} -

            \{{md this}}

            -\{{/each}} -``` - - -The `md` helper also accepts globbing patterns, so the following could also be used: - -```html ---- -title: Posts from May, 2013 -posts: ['src/posts/2013_05_*.md.hbs'] ---- - - - -\{{#each posts}} -

            \{{md this}}

            -\{{/each}} -``` - -{{#todo}} -* how to truncate posts using helpers -{{/todo}} \ No newline at end of file diff --git a/templates/pages/examples/index.md.hbs b/templates/pages/examples/index.md.hbs deleted file mode 100644 index 44b74d2..0000000 --- a/templates/pages/examples/index.md.hbs +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Examples -section: examples -published: false ---- - -> Hopefully you find the examples useful. If you think of a way to improve them, or would like to request another example [please let us know](https://github.com/assemble/assemble/issues). - - -**Contributions are always welcome!** - - -{{> btn-github-star }} -{{> btn-github-fork }} - - -{{! TOC partials are found in ./src/templates/partials}} -{{!> examples-toc.md }} diff --git a/templates/pages/examples/markdown-inline.md.hbs b/templates/pages/examples/markdown-inline.md.hbs deleted file mode 100644 index 204ca18..0000000 --- a/templates/pages/examples/markdown-inline.md.hbs +++ /dev/null @@ -1,30 +0,0 @@ -#### Write "inline" markdown -The `\{{#markdown}}\{{/markdown}}` block expression allows markdown to be written "inline" with any HTML and handlebars content. - -Example: - -```handlebars -\{{#markdown}} -# 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 - - -### Pretty links -[Visit Assemble](\{{url.assemble.repo}}) - - -### Even Prettier links -Embed handlebars templates to make them even prettier. - -\{{#page.links}} -[\{{text}}](\{{href}}) -\{{/page.links}} - -\{{/markdown}}\{{! /end markdown}} -``` diff --git a/templates/pages/examples/task-defaults.md.hbs b/templates/pages/examples/task-defaults.md.hbs deleted file mode 100644 index 8e295db..0000000 --- a/templates/pages/examples/task-defaults.md.hbs +++ /dev/null @@ -1,43 +0,0 @@ -### Task defaults -Task targets, files and options may be specified according to the grunt [Configuring tasks](\{{url.wiki.tasks}}) guide. - -#### Build templates - -```javascript -assemble: { - templates: { - files: { - 'index.html': ['index.hbs'] - } - } -} -``` - -#### Build multiple specified files individually - -You can specify multiple `destination: [source]` items in `files`. - -```javascript -assemble: { - gh_pages: { - files: { - 'docs': ['getting-started.hbs'], - '.': ['index.hbs'] - } - } -} -``` - -#### Build directory of files - -Grunt supports filename expansion (also know as globbing) via the built-in [node-glob][node-glob] and [minimatch][minimatch] libraries. So Templates may be used in filepaths or glob patterns. - -```javascript -assemble: { - project: { - files: { - '.': ['templates/*.hbs'] - } - } -} -``` diff --git a/templates/pages/helpers.json b/templates/pages/helpers.json deleted file mode 100644 index c702892..0000000 --- a/templates/pages/helpers.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "layout": "helpers.hbs", - "area": "helpers", - "pages": [ - { - "data": { - "area": "<%= helpers.area %>", - "title": "Compose" - }, - "content": "\n{{md 'src/content/helpers/special/helper-compose.md'}}", - "filename": "helper-compose" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Aggregate" - }, - "content": "\n{{md 'src/content/helpers/special/helper-aggregate.md'}}", - "filename": "helper-aggregate" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Comparison" - }, - "content": "\n{{md 'src/content/helpers/comparison/*.md'}}", - "filename": "helpers-comparison" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Code" - }, - "content": "\n{{md 'src/content/helpers/code/*.md'}}", - "filename": "helpers-code" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Collections" - }, - "content": "\n{{md 'src/content/helpers/collections/*.md'}}", - "filename": "helpers-collections" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Comparison" - }, - "content": "\n{{md 'src/content/helpers/comparison/*.md'}}", - "filename": "helpers-comparison" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Content" - }, - "content": "\n{{md 'src/content/helpers/content/*.md'}}", - "filename": "helpers-content" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Data" - }, - "content": "\n{{md 'src/content/helpers/data/*.md'}}", - "filename": "helpers-data" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Dates" - }, - "content": "\n{{md 'src/content/helpers/dates/*.md'}}", - "filename": "helpers-dates" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "HTML" - }, - "content": "\n{{md 'src/content/helpers/html/*.md'}}", - "filename": "helpers-html" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Inflections" - }, - "content": "\n{{md 'src/content/helpers/inflections/*.md'}}", - "filename": "helpers-inflections" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Logging" - }, - "content": "\n{{md 'src/content/helpers/logging/*.md'}}", - "filename": "helpers-logging" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Markdown" - }, - "content": "\n{{md 'src/content/helpers/markdown/*.md'}}", - "filename": "helpers-markdown" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Math" - }, - "content": "\n{{md 'src/content/helpers/math/*.md'}}", - "filename": "helpers-math" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Misc" - }, - "content": "\n{{md 'src/content/helpers/misc/*.md'}}", - "filename": "helpers-misc" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Numbers" - }, - "content": "\n{{md 'src/content/helpers/numbers/*.md'}}", - "filename": "helpers-numbers" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Path" - }, - "content": "\n{{md 'src/content/helpers/path/*.md'}}", - "filename": "helpers-path" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Readme" - }, - "content": "\n{{md 'src/content/helpers/readme/*.md'}}", - "filename": "helpers-readme" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "Strings" - }, - "content": "\n{{md 'src/content/helpers/strings/*.md'}}", - "filename": "helpers-strings" - }, - { - "data": { - "area": "<%= helpers.area %>", - "title": "URL" - }, - "content": "\n{{md 'src/content/helpers/url/*.md'}}", - "filename": "helpers-url" - } - ] -} \ No newline at end of file diff --git a/templates/pages/helpers/index.hbs b/templates/pages/helpers/index.hbs deleted file mode 100644 index d396e23..0000000 --- a/templates/pages/helpers/index.hbs +++ /dev/null @@ -1,60 +0,0 @@ ---- -area: helpers -title: Overview -section: helpers ---- - -> 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). **Contributors are welcome!** - -Get the [helper generator →](https://github.com/assemble/grunt-init-helper) for Assemble. - - -## Highlighted 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 native [assemble](https://github.com/assemble/assemble) options. -* Helper options can be defined using Assemble task or target options. For example, in the Gruntfile for your project you can define indentation level for the [\{{prettify}}](https://github.com/helpers/helper-prettify) helper like this: `assemble: { options: { prettify: { indent: 2 }}}` -* Ability to render either markdown or HTML conditionally, based on the file extension of the generated file. -* Many more features... - - -## Contributing - -The simplest way to contribute is to show your support by starring the project! - -## Using Custom Helpers - -> Contributors welcome! Please consider adding your helpers to this library! - -Handlebars makes it pretty 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. - - - -## 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.js](https://github.com/wycats/handlebars.js) is currently the default template library for [assemble](http://github.com/assemble/assemble). - -### Helper types - -Handlebars allows two different kinds of helpers: - -* **Expression helpers** are basically 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. -* **Block helpers** There are a few block helpers included by default with Handlebars, `\{{#each}}`, `\{{#if}}` and `\{{#unless}}`. Custom block helpers are registered the same way as exptression helpers, but the difference is that Handlebars will pass the contents of the block compiled into a function to the helper. - -Learn about [adding custom helpers](http://assemble.io/docs/Custom-Helpers.html) to Assemble. - - -> Thanks to Dan Harper and Elving Rodriquez! Many 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/) - - -{{#draft}} -{{md 'src/templates/pages/helpers/toc.md'}} -{{/draft}} \ No newline at end of file diff --git a/templates/pages/helpers/toc.md b/templates/pages/helpers/toc.md deleted file mode 100644 index 413a309..0000000 --- a/templates/pages/helpers/toc.md +++ /dev/null @@ -1,141 +0,0 @@ -{{#draft}} -## Table of Contents - - -### [Code](#code) -* [\{{embed}}](#embed) -* [\{{gist}}](#gist) -* [\{{jsfiddle}}](#jsfiddle) - - [Embedding the fiddle](#embedding-the-fiddle) - - [Examples](#examples) - - [Optional tabs](#optional-tabs) - - [Changing skins](#changing-skins) - -### [Collections](#collections) -* [\{{first}}](#first) -* [\{{withFirst}}](#withfirst) -* [\{{last}}](#last) -* [\{{withLast}}](#withlast) -* [\{{after}}](#after) -* [\{{withAfter}}](#withafter) -* [\{{before}}](#before) -* [\{{withBefore}}](#withbefore) -* [\{{join}}](#join) -* [\{{sort}}](#sort) -* [\{{withSort}}](#withsort) -* [\{{length}}](#length) -* [\{{lengthEqual}}](#lengthequal) -* [\{{empty}}](#empty) -* [\{{any}}](#any) -* [\{{inArray}}](#inarray) -* [\{{eachIndex}}](#eachindex) -* [\{{eachProperty}}](#eachproperty) - -### [Comparisons: Equal](#comparisons-equal) -* [\{{is}}](#is) -* [\{{if_eq}}](#if_eq) -* [\{{isnt}}](#isnt) -* [\{{or}}](#or) -* [\{{and}}](#and) -* [\{{unless_eq}}](#unless_eq) - -### [Comparisons: Greater Than](#comparisons-greater-than) -* [\{{if_gt}}](#if_gt) -* [\{{gt}}](#gt) -* [\{{unless_gt}}](#unless_gt) -* [\{{if_gteq}}](#if_gteq) -* [\{{gte}}](#gte) -* [\{{unless_gteq}}](#unless_gteq) - -### [Comparisons: Less Than](#comparisons-less-than) -* [\{{lt}}](#lt) -* [\{{lte}}](#lte) -* [\{{unless_lt}}](#unless_lt) -* [\{{unless_lteq}}](#unless_lteq) - -### [Dates](#dates) -* [\{{formatDate}}](#formatdate) -* [\{{now}}](#now) -* [\{{timeago}}](#timeago) - -### [File](#file) -* [\{{include}}](#include) -* [\{{glob}}](#glob) -* [\{{copy}}](#copy) - -### [HTML](#html) -* [\{{gist}}](#gist) -* [\{{blockquote}}](#blockquote) -* [\{{timeline}}](#timeline) -* [\{{exticon}}](#exticon) -* [\{{ul}}](#ul) -* [\{{ol}}](#ol) -* [\{{br}}](#br) - -### [Inflections](#inflections) -* [\{{inflect}}](#inflect) -* [\{{ordinalize}}](#ordinalize) - -### [Logging](#logging) -* [\{{log}}](#log) -* [\{{debug}}](#debug) -* [\{{expandJSON}}](#expandjson) -* [\{{expandYAML}}](#expandyaml) - -### [Math](#math) -* [\{{add}}](#add) -* [\{{subtract}}](#subtract) -* [\{{divide}}](#divide) -* [\{{multiply}}](#multiply) -* [\{{floor}}](#floor) -* [\{{ceil}}](#ceil) -* [\{{round}}](#round) -* [\{{sum}}](#sum) - -### [Miscellaneous](#miscellaneous) -* [\{{default}}](#default) -* [\{{noop}}](#noop) - -### [Numbers](#numbers) -* [\{{toFixed}}](#tofixed) -* [\{{toPrecision}}](#toprecision) -* [\{{toExponential}}](#toexponential) -* [\{{toInt}}](#toint) -* [\{{toFloat}}](#tofloat) -* [\{{toAbbr}}](#toabbr) -* [\{{addCommas}}](#addcommas) - -### [Path](#path) -* [\{{relative}}](#relative) -* [\{{extname}}](#extname) -* [\{{dirname}}](#dirname) - -#### [README Helpers](#readme-helpers) -* [\{{authors}}](#authors) -* [\{{travis}}](#travis) -* [\{{travis-badge}}](#travis-badge) -* [\{{changelog}}](#changelog) - -### [Strings](#strings) -* [\{{occurrences}}](#occurrences) -* [\{{hyphenate}}](#hyphenate) -* [\{{dashify}}](#dashify) -* [\{{lowercase}}](#lowercase) -* [\{{uppercase}}](#uppercase) -* [\{{capitalizeFirst}}](#capitalizefirst) -* [\{{capitalizeEach}}](#capitalizeeach) -* [\{{titleize}}](#titleize) -* [\{{sentence}}](#sentence) -* [\{{reverse}}](#reverse) -* [\{{truncate}}](#truncate) -* [\{{center}}](#center) -* [\{{formatPhoneNumber}}](#formatphonenumber) - -### [URL](#url) -* [\{{url_resolve}}](#url_resolve) -* [\{{url_parse}}](#url_parse) - -### [Special](#special) - -{{/draft}} - diff --git a/templates/pages/index.hbs b/templates/pages/index.hbs deleted file mode 100644 index 57799f0..0000000 --- a/templates/pages/index.hbs +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Home -description: <%= pkg.description %> -layout: base.hbs ---- -{{! .jumbotron component -================================ }} -{{> jumbotron jumbotron }} - - -{{! .teaser component -================================ }} -{{> teaser teaser }} - - -{{! page content -================================ }} -
            -
            - -
            -
            - - -{{! .banner component -================================ }} -{{> banner banner }} - diff --git a/templates/pages/plugins/index.hbs b/templates/pages/plugins/index.hbs deleted file mode 100644 index 527768b..0000000 --- a/templates/pages/plugins/index.hbs +++ /dev/null @@ -1,42 +0,0 @@ ---- -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 headings in generated html using Cheerio.js. -* [assemble-contrib-permalinks](https://github.com/assemble/assemble-contrib-permalinks): Permalinks plugin for Assemble, the static site generator for Grunt.js, Yeoman and Node.js. This plugin enables powerful and configurable URI patterns, [Moment.js](http://momentjs.com/) for parsing dates, much more. -* [assemble-contrib-sitemap](https://github.com/assemble/assemble-contrib-sitemap): Sitemap generator plugin for Assemble. -* [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-toc](https://github.com/assemble/assemble-contrib-toc): Assemble plugin for creating a Table of Contents (TOC) in generated html using Cheerio.js. - -## Community Plugins - -* [assemble-markdown-data](https://github.com/adjohnson916/assemble-markdown-data): An Assemble plugin for automatic parsing of markdown in data. -* [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/tutorials/Automated-Documentation.md b/templates/pages/tutorials/Automated-Documentation.md deleted file mode 100644 index 70204c1..0000000 --- a/templates/pages/tutorials/Automated-Documentation.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -published: false ---- -## Overview - -Using a simple Grunt.js workflow, we will: - -1. Run the [grunt-github-api](https://github.com/JeffHerb/grunt-github-api/) task to pull down and agreggate README content _for a number of repositories at once_ from GitHub's API -2. Run the [Assemble](http://assemble.io) task to "distill", organize and transform the README content into stylish HTML documentation _that is better than the sum of its parts_. - - -### The Gruntfile - -```js -module.exports = function(grunt) { - grunt.initConfig({ - - github: { - options: { - filters: {'type': 'public'} - }, - readme: { - src: '/repos/assemble/assemble/readme', - dest: 'readme.json' - } - }, - - // Templates - assemble: { - readme: { - options: { - helpers: 'helper-decode.js' - }, - src: ['index.hbs'], - dest: 'index.html' - } - } - - }); - - // Load npm and local plugins. - grunt.loadNpmTasks('assemble'); - grunt.loadNpmTasks('grunt-github-api'); - - // Default task to be run. - grunt.registerTask('default', ['github', 'assemble']); -}; -``` - -#### 1. Uses `github` task to get "content" - -GitHub's API (as you know) allows you to retrieve the contents of files in a repo as base64 formatted content. - -#### 2. Decodes base64 to utf8 - -So I created this basic helper to decode the base64 content returned from the API: - -```js -Handlebars.registerHelper('decode', function(encoded) { - return new Handlebars.SafeString(new Buffer(encoded || '', 'base64').toString('utf8')); -}); -``` - - -## Who would use this? - -Mostly big projects, or projects that are planning for bigness. - -Designers or developers who: -* manage documentation for more than one GitHub project -* manage lots of documentation that is spread across multiple repos -* Already use Grunt.js (or Assemble) on their projectsl - -## Why do this? - -If we can make this process smooth enough, fast enough, and with very little to _zero_ abstraction between the content, metadata and the documentation that is generated by this process, then in theory this will not only ease the burden of maintaining documentation for users or organizations with large numbers of repositories, but it will also encourage new and interesting ways of maintaining documentation that were previously impractical or even undesireable but are now more effective than current methods. - -For example: - -* Frameworks consisting of components, each with separate repositories, can easily allow each component to maintain its own documentation (for users of the component) while also easily aggregating and organizing the documentation (for users of the framework) - - new make it easier for GitHub users or organizations to maintain documentation. - -economies of scope and scale -Challenges: - -* **One README per target**. As it stands, the [grunt-github-api](https://github.com/JeffHerb/grunt-github-api/) task requires a separate target for each README we wish to pull down. We will need to make some adjustments to allow more than one readme per target -* **base64 encoding**: content is returned from GitHub with `base64` encoding. We need to convert this to `utf8`. -* **Very little metadata**. When we pull down the - - -markdown-formatted -decode - we will automate the process of , and then documentations from and converting and generating This is the basic workflow that I'm using to create a proof of concept for automating the process of generating documentation from lots of repos at once. - - - -# Overview - - -We use two (maybe three) Grunt tasks to automate this entire process: - -* first we - - - -* - -and this template: - -```html -\{{decode readme.content}} -``` -#### - -At present, the way the proof-of concept is setup when you run `grunt`, the `github` task just pulls down a specified readme from GitHub, and then Assemble decodes it and converts the decoded markdown into HTML. It works nicely, the entire process just takes a couple of seconds, and when I pull down 5 or 6 readme's there is very little impact on the total time - since the initial handshake takes most of the time. - - So it's only kind-of, sort of, almost really cool. - -- using the "github" task you created, a user can pull down README content for an arbitrary number of repos from GitHub's API -- next, using the repo name as the uniqe id, any package.json files are matched up with the content re for metadata -- and a "matching" JSON object content along with the and content from I created some helpers and templates that use the metadata documentation for a repo or even a collection of repos, diff --git a/templates/pages/tutorials/Creating-a-New-Site.md.hbs b/templates/pages/tutorials/Creating-a-New-Site.md.hbs deleted file mode 100644 index cb82a64..0000000 --- a/templates/pages/tutorials/Creating-a-New-Site.md.hbs +++ /dev/null @@ -1 +0,0 @@ -TODO... \ No newline at end of file diff --git a/templates/pages/tutorials/Expanding-Config-Values.md.hbs b/templates/pages/tutorials/Expanding-Config-Values.md.hbs deleted file mode 100644 index 5acb22f..0000000 --- a/templates/pages/tutorials/Expanding-Config-Values.md.hbs +++ /dev/null @@ -1,146 +0,0 @@ -# Expanding Config Values - -> Use Lo-Dash Templates in the data context and expand config values from within the Grunfile: - - -TODO: overview - - -## Example Usage - - -### Variable paths - -First, inside our Gruntfile let's define some `src`/`dest` paths in a _reusable_ way (and with -creative license), so that we do not have to keep re-defining these same paths throughout the -project. To keep it simple we'll just define a few paths, but this could get much larger in -reality: - -``` js -// Project configuration. -grunt.initConfig({ - - // We will define our paths here, with this user-defined object "build" - build: { - data: 'src/templates/data', - pages: 'src/templates/pages', - includes: ['src/templates/includes', 'src/templates/snippets'] - } - // Now, the build paths can now be used in Lo-Dash templates - assemble: { - blog: { - options: { - data: ['<%= build.data %>/*.{json,yml}'] - partials: ['<%= build.includes %>/**/*.hbs'] - }, - files: { - 'posts/': ['<%= build.pages %>/*.hbs'] - } - } - } -} -``` - - -Then in page yaml header: - -```yaml ---- -content: - docs: <%= paths.content %>/docs.md ---- -``` - -Then in the handlebars: - -```html -{{md content.docs}} -``` - - -```json -{ - "paths": { - "content": "<%= docs.content.src %>" - } -} -``` - -TODO: finish example - -``` js -assemble: { - options: { - // todo - }, - file: { - // todo - } -} -``` - -Lo-Dash templates also work in YFM, JSON or YAML files. - -## Usage Examples - - -### `assemble.options` - -Given we have the following in our Gruntfile: -``` js -assemble: { - options: { - bower: '<%= grunt.file.readJSON("bower.json") %>', - } -} -``` - -We could then use the custom `bower` variable in templates like this: - -``` html -{{bower.name}} -``` - -or like this: - -``` html ---- -component: <%= bower.name %> ---- -{{component}} -``` - -Alternatively we can define the `bower` variable directly in the YFM of a page: - -``` html ---- -bower: <%= grunt.file.readJSON("bower.json") %> ---- -``` - -And use it in templates like this: -``` html ---- -bower: <%= grunt.file.readJSON("bower.json") %> -component: <%= bower.name %> ---- -{{component}} -``` -or this: - -``` html ---- -bower: <%= grunt.file.readJSON("bower.json") %> ---- -{{bower.name}} -``` - -or this: - -``` html ---- -component: <%= grunt.file.readJSON("bower.json").name %> ---- -{{component}} -``` - diff --git a/templates/pages/tutorials/Generate-Bootstrap-Compatible-Grid.md.hbs b/templates/pages/tutorials/Generate-Bootstrap-Compatible-Grid.md.hbs deleted file mode 100644 index be62be4..0000000 --- a/templates/pages/tutorials/Generate-Bootstrap-Compatible-Grid.md.hbs +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Grid ---- -## Example Projects -Browse the [examples][assemble-examples] folder to get a better idea of what Assemble can do. To build the examples run `grunt examples`. - - -### Build Bootstrap's Grid with JSON or YAML -This example shows how to use JSON and handlebars templates to manipulate Bootstrap's grid system. We only have to define the grid one time using templates, then we can updated the grid columns, rows, and even content from a JSON or YAML file. - - -**Screenshot** -The finished result of the example project looks like this: - -[![grid](https://github.com/assemble/assemble/blob/master/examples/advanced/dest/assets/grid.png?raw=true)][exampleGrid] - - -*** - -This is what our handlebars grid looks like. **_No really, this tiny snippet of code "expands" into the entire grid!_**: - -```html -\{{#grid.container}} -
            - \{{#rows}} -
            - \{{#columns}} -
            \{{md content}}
            - \{{/columns}} -
            - \{{/rows}} -
            -\{{/grid.container}} -``` - -Next, we need to pass configuration data to our grid, here we will show examples for `grid.yml` or `grid.json`, but we could also use [YAML Front Matter][yaml-front-matter]. - -**YAML version** - -This is the data for our grid, written in YAML (`grid.yml`): - -```yaml -container: - rows: - - columns: - - width: 4 - heading: Overview - content: <%= content %>/overview.md - - width: 4 - heading: Getting Started - content: <%= content %>/getting-started.md - - width: 4 - heading: Basics - content: <%= content %>/basics.md - - columns: - - width: 6 - heading: Templates - content: <%= content %>/templates.md - - width: 6 - heading: Advanced - content: <%= content %>/advanced.md -``` - -**JSON version** - -And the same configuration writtin in JSON (`grid.json`) instead: - -```json -{ - "container": { - "rows": [ - { - "columns": [ - { - "width": 4, - "heading": "Overview", - "content": "<%= content %>/overview.md" - }, - { - "width": 4, - "heading": "Getting Started", - "content": "<%= content %>/getting-started.md" - }, - { - "width": 4, - "heading": "Basics", - "content": "<%= content %>/basics.md" - } - ] - }, - { - "columns": [ - { - "width": 6, - "heading": "Templates", - "content": "<%= content %>/templates.md" - }, - { - "width": 6, - "heading": "Advanced", - "content": "<%= content %>/advanced.md" - } - ] - } - ] - } -} -``` - -If you're satisfied with the default `src` and `dest` paths in the `assemble`, simply run `grunt assemble` to compile the grid to static HTML. Or run `grunt watch` to continuously watch files and automatically re-build when changes occur. \ No newline at end of file diff --git a/templates/pages/tutorials/Task-Examples.md.hbs b/templates/pages/tutorials/Task-Examples.md.hbs deleted file mode 100644 index dde3c51..0000000 --- a/templates/pages/tutorials/Task-Examples.md.hbs +++ /dev/null @@ -1,45 +0,0 @@ -### Using Default Options - -TODO... this needs to be corrected and updated. - -``` js -// Project configuration. -grunt.initConfig({ - assemble: { - options: { - assets: 'test/dist/assets', - data: 'test/src/data/*.json', - layout: 'test/src/templates/layouts/default.hbs', - partials: [ - 'test/src/templates/partials/*.hbs', - 'test/src/templates/snippets/*.hbs' - ] - }, - files: { - 'test/dist': ['test/src/templates/pages/*.hbs'] - } - } -}); -``` - -### Custom Options -Use underscore templates and customize options. - -``` js -// Project configuration. -grunt.initConfig({ - assemble: { - project: { - options: { - assets: '<%= dest.assets %>', - data: '<%= src.data %>/*.json', - layout: '<%= src.layouts %>/layout.hbs', - partials: '<%= src.partials %>/*.hbs' - }, - files: { - 'dest': '<%= src.pages %>/*.hbs', - } - } - } -}); -``` diff --git a/templates/pages/tutorials/Toggling-Features.md.hbs b/templates/pages/tutorials/Toggling-Features.md.hbs deleted file mode 100644 index c10eae3..0000000 --- a/templates/pages/tutorials/Toggling-Features.md.hbs +++ /dev/null @@ -1,89 +0,0 @@ -feature-toggling using underscore templates, json and handlebars - -First, let's say we want to enable/disable nav items, we might create a file called `nav-items.json` and add the `enabled` property for each nav item, like this: - -```json -{ - "global-navbar": [ - { - "text": "Themes", - "enabled": true, - "href": "./themes.html" - }, - { - "text": "Components", - "enabled": true, - "href": "./components.html" - }, - { - "text": "Sellers", - "enabled": false, - "href": "./start-selling.html" - }, - { - "text": "Domains", - "enabled": false, - "href": "./domains.html" - } - ] -} -``` -and we would implement handlebars templates that take advantage of the `enabled` property: - -```html -{{#if enabled}}
          5. {{text}}
          6. {{/if}} -``` - -This is a nice approach for very simple use cases, but it's not maintainable for features that are pervasive throughout the system. In these cases it would be desirable to have a single place to selectively enable or disable a feature, leaving the rest for the build process to figure out. - -**The Solution** - -Below is the contents of `site.json`. In this example, we are going to use the `features` property to selectively enable/disable features site-wide: - -```json -{ - "domain": "themestack.io", - "brand": "themestack", - "company": "Themestack Inc.", - "homepage": "http://themestack.io", - "slogan": " Welcome to Themestack! Get themes built on Twitter Bootstrap, with features for developers.", - "year": "2013", - "analytics": { - "google-analytics-id": "NA" - }, - "features": { - "domains-enabled": false, - "vendors-enabled": false, - "currencies-enabled": false - } -} -``` - -This `site.features` object gives us a single place to turn a feature on or off, but for it to work, the true/false for each feature must be calculated with the correct context across each area of the system where the feature appears. We accomplish this with underscore templates, as with the "Domains" and "Sellers" nav items in the example below: - -```json -{ - "global-navbar": [ - { - "text": "Themes", - "enabled": true, - "href": "./themes.html" - }, - { - "text": "Components", - "enabled": true, - "href": "./components.html" - }, - { - "text": "Sellers", - "enabled": "<%= site.features.sellers-enabled %>", - "href": "./start-selling.html" - }, - { - "text": "Domains", - "enabled": "<%= site.features.domains-enabled %>", - "href": "./domains.html" - } - ] -} -``` diff --git a/templates/pages/tutorials/Tutorial-HTML-Tables.md.hbs b/templates/pages/tutorials/Tutorial-HTML-Tables.md.hbs deleted file mode 100644 index bdc3eb7..0000000 --- a/templates/pages/tutorials/Tutorial-HTML-Tables.md.hbs +++ /dev/null @@ -1,272 +0,0 @@ -# Tables - -Stuff to add: - * `each` versus a single item. Data must be in an array for each. - * context: for data, context is established by name of the json file, but for templates the file name is irrelevant and context is set by handlebars markup _inside the file_. - * The name of the partial must match the name of the file. - - -Here you will learn how to create a handlebars "partial" for tables, `table.mustache`. The partial will allow you to easily add tables to your markup, while dynamically controlling the number of rows and cells in each table with external data. - - -This tutorial will cover: - - * Handlebars partials, `table.mustache`, `row.mustache`, and `cell.mustache` (we're learning partials here, so partials make the most sense) - * Creating mock data using **json** or **yaml** for our tables (`table.json`) - * Compiling our partials with Grunt.js. - - -Let's begin. - - - -### Table Partials - -We're going to split the code for our tables into three separate files, each representing a handlebars partials: `table.mustache`, `row.mustache`, and `cell.mustache`. Go ahead and create these empty files now. - - -**Our "base" table** - -Inside the first partial, `table.mustache`, add some markup for a regular HTML table, and inside the table body insert a reference to our row **partial**, `\{{> row }}`. This will be used to insert our rows dynamically when we have some data. As a sidenote, after the tutorial feel free to remove the "inner partials" and replace them with HTML if you wish. - -```html - - - - \{{> row }} - -
            -``` - - -**Title and classes** - -Now let's add a **title** above the table and let's add the class, `.table`, as well as a placeholder for a additional "modifier" classes which we'll call `\{{modifier}}` (in this example, we're using classes from the Bootstrap framework, but you can use any classes that work for you). Here is what you should have so far. - -```html -

            \{{title}}

            - - - \{{> row }} - -
            -``` - - -**Handlebars Section Tag for Context** - -Next, we wrap the table in the handlebars section tag, `\{{#table}}`, in order to set context for the table. This allows our table to access the data contained in `table.json`, which we will create a little later: - -```html -\{{#table}} -

            \{{title}}

            - - - \{{> row }} - -
            -\{{/table}} -``` - - - -### Row Partial - -Create a file named `row.mustache`, add another `\{{modifier}}` placeholder so that we can modify our rows with whatever classes we need later on, and add the `\{{> cells }}` partial for our cells: - -```html - - \{{> cells }} - -``` - -This works well if we're only going to have one row in our table, but we need to make sure our partial will accomodate any arbitrary number of rows we decided to add to our data. So let's wrap the row in the handlebars `each` helper tag, so that _each row_ we define in our data is displayed. We're also going to use the plural, rows, because it will make more sense when we're adding data for our rows. - -```html -\{{#each rows}} - - - -\{{/each}} -``` - -**TIP**: Handlebars (mustache) tags work the same as HTML, we open and close with the same tag. So `\{{#each}}` closes with `\{{/each}}`, regardless of what other "attributes" are contained inside the `each` tag. - - - -### Cell Partial - -Inside `cell.mustache` create the markup for our cells. Add another `\{{modifier}}` placeholder for our classes, and wrap the cell in the `each` section tag so that we can add cells as needed: - -```html -\{{#each cells}} - \{{cell}} -\{{/each}} -``` - - -## Data - - - - - -**Data** - -Create the file `table.json`, and add some properties to represent the data we need. We need to make sure that we match the properties to the handlebars templates we created earlier, so let's take an inventory. - -We have three **partials**, nested as follows: - * `table.mustache` - * `row.mustache` - * `cell.mustache` - -When we create our data model, we need to ensure that the objects are nested the same way. Since our first object is `table`, we might think that our data should look like this: - -```json -{ - "table": { - // other data - } -} -``` -but we don't need to directly add `table` as a property in our data, because the context for the `table` object will be set by the file itself (or rather by the _name_ of the file itself), `table.json`. So what we really want is something like this: - -```json -// table.json -{ - // rows and cells -} -``` - -We also need our properties to match up with the templates themselves, which can get confusing, so let's review this before we create the rest of the data model: - -We have a partial for our tables, which references the `row` partial, and inside that we reference the `cell` partial. - -```html - - - - \{{> row }} - -
            - - -\{{#each rows}} - - \{{> cell }} - -\{{/each}} - - -\{{#each cells}} - \{{cell}} -\{{/each}} -``` - -Remember that we named the partials using the **singular form** and we reference the data objects using the **plural form**, so here is what our data model should look like initially: - -```json -// table.json -{ - "rows": [ - { - "cells": [ ] - } - ] -} -``` -Which correctly maps to the data model we created in our templates: - - * `table` (context established by the file name, **table.json**) - * `row` - * `cell` - -We also have an array of rows and an array of cells, allowing us to define any number of rows or cells we require. And because we used the `each` section tag in our templates, all of our rows and cells will be automatically compiled and rendered properly for us. - - -Let's add more data to bring this together, and let's also add properties to match up with the `\{{modifier}}` and `\{{title}}` templates we created: - -```json -{ - "title": "Important Table", - "modifier": "table-condensed table-striped", - "rows": [ - { - "modifier": "", - "cells": [ {"cell": "One"}, {"cell": "Two"}, {"cell": "Three"}, {"cell": "Four"} ] - }, - { - "modifier": "error", - "cells": [ {"cell": "One"}, {"cell": "Two"}, {"cell": "Three"}, {"cell": "Four"} ] - } - ] -} -``` - - - - - -## Other tips - -### If - -Make certain parts of the markup such as titles conditional, like this - -```html -\{{#if title}}

            \{{title}}

            \{{/if}} -``` - -This will ensure that an empty `

            ` isn't rendered in the output if no title exists. - - - -### Multiple Tables - -Add data for multiple tables in `table.json`, and wrap them in an array: - -```json -[ - { - "title": "First Table", - "modifier": "table-striped", - "rows": [ - { - "modifier": "success", - "row": { "cell1": "One", "cell2": "Two", "cell3": "Three", "cell4": "Four" } - }, - { - "modifier": "error", - "row": { "cell1": "One", "cell2": "Two", "cell3": "Three", "cell4": "Four" } - } - ] - }, - { - "title": "Second Table", - "modifier": "table-striped", - "rows": [ - { - "modifier": "success", - "row": { "cell1": "One", "cell2": "Two", "cell3": "Three", "cell4": "Four" } - }, - { - "modifier": "error", - "row": { "cell1": "One", "cell2": "Two", "cell3": "Three", "cell4": "Four" } - } - ] - } -] -``` - -Now to use this data, we must go back to the table partial, `table.mustache`, and wrap the table with the `each` handlebars section tag so that the array of tables can be accessed. - -```html -\{{#each table}} -

            \{{title}}

            - - - \{{> row }} - -
            -\{{/each}} -``` \ No newline at end of file diff --git a/templates/pages/tutorials/Tutorial-Lodash-YFM.md.hbs b/templates/pages/tutorials/Tutorial-Lodash-YFM.md.hbs deleted file mode 100644 index 9115ccb..0000000 --- a/templates/pages/tutorials/Tutorial-Lodash-YFM.md.hbs +++ /dev/null @@ -1,53 +0,0 @@ -This will allow partials and handlebars tags to be more flexible and DRY. - -For example, given that our YFM has `page.title` : - -```yaml ---- -page: - title: Bootstrap ---- -``` -For which the yaml front matter is: - -```html -

            {{page.title}}

            -``` - - -Now, if you are visiting a theme, you might want page title to be the name of the theme, so you could duplicate the same information in every page, like this: - - -```yaml ---- -page: - title: Bootstrap - -theme: - name: Bootstrap ---- -``` -and this: - -```html -

            {{theme.name}}

            -``` - -But if the two properties will always share the same value, a better way to do it is to use Lo-Dash templates: - -and process templates in yaml front matter like this: - -```yaml ---- -page: - title: {{theme.name}} -theme: - name: Bootstrap ---- -``` - - -```html -

            {{page.title}}

            -

            {{theme.name}}

            -``` \ No newline at end of file diff --git a/templates/pages/tutorials/Tutorial-Mixed-Content.md.hbs b/templates/pages/tutorials/Tutorial-Mixed-Content.md.hbs deleted file mode 100644 index 4bb0a3f..0000000 --- a/templates/pages/tutorials/Tutorial-Mixed-Content.md.hbs +++ /dev/null @@ -1,12 +0,0 @@ -### Mixed content: Markdown and HTML together - -Consider the following scenario: - -* Your page content and/or blog posts will be written in [markdown][markdown] format -* You want to embed Handlebars templates in your markdown content for certain types of metadata, such as links, date/time, etc. -* Your page [layouts][layouts] are made from HTML and Handlebars templates -* Your end goal is for all of your markdown content to be rendered to HTML in the output. - - and you want your need to compile some markdown files to HTML, and you want to use other markdown files as "includes" or "partials" inside other markdown files, in which case you want the markdown files to be rendered _as markdown_ in the output. You may even want to embed Handlebars templates inside your markdown files to be parsed and compiled. - - diff --git a/templates/pages/tutorials/Usage-Examples.md.hbs b/templates/pages/tutorials/Usage-Examples.md.hbs deleted file mode 100644 index acaeb2b..0000000 --- a/templates/pages/tutorials/Usage-Examples.md.hbs +++ /dev/null @@ -1,83 +0,0 @@ -### Usage Examples - -Here are some examples of how you can customize the Assemble task for different use cases. Visit the [assemble-examples][] repo to see more example projects. - -```js -assemble: { - // "global" task-level options - options: { - flatten: true - data: 'src/data/global/**/*.{yml,json}' // "global" data - }, - - docs: { - // target-level options - options: { - assets: 'dist/docs/assets', - layout: 'templates/layouts/docs-layout.hbs' - partials: [ - 'templates/docs/partials/*.hbs', - 'templates/docs/snippets/*.hbs' - ], - data: 'src/data/docs/**/*.{yml,json}', - ext: '.html' - }, - 'docs/': [ - 'templates/docs/pages/**/*.md.hbs', - 'templates/docs/pages/**/*.hbs' - ] - }, - - components: { - options: { - assets: 'dist/docs/assets', - layout: 'templates/layouts/component-layout.hbs' - partials: [ - 'templates/docs/partials/*.hbs', - 'templates/docs/snippets/*.hbs' - ], - data: 'src/data/**/*.{yml,json}' - }, - files: { - // Here we build "partials" and "snippets" into pages - // but we still specify these in options.partials since - // some partials "pull in" other partials. - 'docs/components/': [ - 'templates/partials/**/*.hbs', - 'templates/snippets/**/*.hbs' - ] - } - }, - - blog: { - options: { - assets: 'dist/blog/assets', - layout: 'templates/layouts/blog-layout.hbs' - partials: [ - 'templates/blog/posts/*.md', // posts as partials - 'templates/blog/partials/*.hbs', - 'templates/blog/snippets/*.hbs' - ], - data: 'src/data/blog/**/*.{yml,json}' - }, - src: ['templates/blog/pages/**/*.md.hbs'], // markdown "templates" - dest: 'dist/' - }, - - readme: { - options: { - data: 'path/to/readme.yml' - }, - './': ['path/to/readme.md.hbs'] - }, - - glob_to_multiple: { - expand: true, - flatten: true, - cwd: 'path/to/templates', - src: ['**/*.hbs'], - dest: 'path/to/dest/', - ext: '.md' - } -} -``` \ No newline at end of file diff --git a/templates/pages/tutorials/yfm-lodash-example.md.hbs b/templates/pages/tutorials/yfm-lodash-example.md.hbs deleted file mode 100644 index 7830970..0000000 --- a/templates/pages/tutorials/yfm-lodash-example.md.hbs +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Some Tutorials -something: <%= _.readJSON("package.json") %> -word: <%= _.uppercase(title) %> -else: <%= _.expand(something) %> -posts: ['README.md'] ---- -{{! MASTHEAD -================================================== }} -
            -
            -
            -
            -

            {{ uppercase title }}

            -
            -
            -
            -
            -
            -
            - {{else}} -

            {{ word }}

            - - {{#each posts}} -

            {{md this}}

            - {{/each}} -
            -
            \ No newline at end of file diff --git a/test/fixtures/bar.hbs b/test/fixtures/bar.hbs new file mode 100644 index 0000000..283d1b8 --- /dev/null +++ b/test/fixtures/bar.hbs @@ -0,0 +1,4 @@ +--- +title: Bar +--- +

            {{title}}

            \ No newline at end of file diff --git a/test/fixtures/foo.hbs b/test/fixtures/foo.hbs new file mode 100644 index 0000000..cfc26cb --- /dev/null +++ b/test/fixtures/foo.hbs @@ -0,0 +1,4 @@ +--- +title: Foo +--- +

            {{title}}

            \ No newline at end of file From 56a7ac2ae315cc2a32867b7cb05fbfbba2a2b908 Mon Sep 17 00:00:00 2001 From: Jon Schlinkert Date: Mon, 10 Mar 2014 16:51:59 -0400 Subject: [PATCH 02/81] formatting --- Gruntfile.js | 2 +- package.json | 12 ++++++------ structure/_extensions/helpers/markdown.js | 1 + structure/_extensions/helpers/read.js | 1 + structure/_extensions/helpers/replace.js | 1 + structure/_extensions/helpers/write.js | 1 + structure/_extensions/plugins/link-checker.js | 1 + 7 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index dfb2fe1..ebb5af2 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -52,9 +52,9 @@ module.exports = function(grunt) { }, all: [ 'Gruntfile.js', - '<%= site.scripts %>/*.js', '<%= site.helpers %>/*.js', '<%= site.plugins %>/*.js', + '<%= site.scripts %>/*.js', '<%= site.utils %>/*.js', ] }, diff --git a/package.json b/package.json index d3e255d..d3f4bfc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "assemble-book", + "name": "assemble-docs", "version": "0.1.0", - "description": "Boilerplate and theme for building a book or documentation with Assemble.", + "description": "Documentation for Assemble.", "homepage": "http://assemble.io", "author": { "name": "Jon Schlinkert", @@ -20,7 +20,7 @@ "licenses": [ { "type": "MIT", - "url": "https://github.com/sellside/assemble-book/blob/master/LICENSE-MIT" + "url": "https://github.com/assemble/assemble-docs/blob/master/LICENSE-MIT" }, { "type": "Creative Commons Attribution 3.0 Unported License", @@ -29,14 +29,14 @@ ], "repository": { "type": "git", - "url": "https://github.com/sellside/assemble-book" + "url": "https://github.com/assemble/assemble-docs" }, "bugs": { - "url": "https://github.com/sellside/assemble-book/issues" + "url": "https://github.com/assemble/assemble-docs/issues" }, "main": "index.js", "devDependencies": { - "assemble": "~0.4.36", + "assemble": "git://github.com/assemble/assemble.git#v0.5.0", "assemble-contrib-anchors": "~0.1.2", "assemble-contrib-decompress": "~0.1.0", "assemble-contrib-download": "~0.1.2", diff --git a/structure/_extensions/helpers/markdown.js b/structure/_extensions/helpers/markdown.js index 242c6e1..89900c3 100644 --- a/structure/_extensions/helpers/markdown.js +++ b/structure/_extensions/helpers/markdown.js @@ -3,6 +3,7 @@ * Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors * Licensed under the MIT License (MIT). */ + 'use strict'; var marked = require('marked'); diff --git a/structure/_extensions/helpers/read.js b/structure/_extensions/helpers/read.js index 6720100..9a24000 100644 --- a/structure/_extensions/helpers/read.js +++ b/structure/_extensions/helpers/read.js @@ -3,6 +3,7 @@ * Copyright (c) 2014 Jon Schlinkert * Licensed under the MIT License (MIT). */ + 'use strict'; var path = require('path'); diff --git a/structure/_extensions/helpers/replace.js b/structure/_extensions/helpers/replace.js index 8aafc97..f2ca713 100644 --- a/structure/_extensions/helpers/replace.js +++ b/structure/_extensions/helpers/replace.js @@ -3,6 +3,7 @@ * Copyright (c) 2014 Jon Schlinkert * Licensed under the MIT License (MIT). */ + 'use strict'; var path = require('path'); diff --git a/structure/_extensions/helpers/write.js b/structure/_extensions/helpers/write.js index f9ab668..9180271 100644 --- a/structure/_extensions/helpers/write.js +++ b/structure/_extensions/helpers/write.js @@ -3,6 +3,7 @@ * Copyright (c) 2014 Jon Schlinkert * Licensed under the MIT License (MIT). */ + 'use strict'; var path = require('path'); diff --git a/structure/_extensions/plugins/link-checker.js b/structure/_extensions/plugins/link-checker.js index 7e68444..2caee9a 100644 --- a/structure/_extensions/plugins/link-checker.js +++ b/structure/_extensions/plugins/link-checker.js @@ -1,3 +1,4 @@ + var options = { stage: 'render:post:page' }; From f75947483c8168a8e81d12df9e665d0f6a22e65d Mon Sep 17 00:00:00 2001 From: Patrick Burtchaell Date: Wed, 12 Mar 2014 11:43:10 -0500 Subject: [PATCH 03/81] Update Options.md - Removed a few extra empty lines here and there - Remove options.removeHbsWhiespace - Add short examples to YFM options - Move "YFM Custom Options" from H2 to an H3 - Rewrite example in the "custom variables" option --- content/docs/Options.md | 99 +++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 48 deletions(-) diff --git a/content/docs/Options.md b/content/docs/Options.md index 9c43a30..5338bfb 100644 --- a/content/docs/Options.md +++ b/content/docs/Options.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 From d4643ef634ce239cb17a17d1f6754ede2c2bcb93 Mon Sep 17 00:00:00 2001 From: Patrick Burtchaell Date: Wed, 12 Mar 2014 11:56:21 -0500 Subject: [PATCH 04/81] Update options-layoutdir.md - Make examples more straightforward - Add more context to the recommended naming scheme --- content/docs/options-layoutdir.md | 78 +++++++++++++++---------------- 1 file changed, 37 insertions(+), 41 deletions(-) diff --git a/content/docs/options-layoutdir.md b/content/docs/options-layoutdir.md index 3a84a12..f4560bf 100644 --- a/content/docs/options-layoutdir.md +++ 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` Date: Wed, 12 Mar 2014 12:21:53 -0500 Subject: [PATCH 05/81] Update Markdown.md - Merge "Include external content" example with "Markdown Includes" example. - Clean up the "Markdown block expression example" --- content/docs/Markdown.md | 78 +++++++--------------------------------- 1 file changed, 13 insertions(+), 65 deletions(-) diff --git a/content/docs/Markdown.md b/content/docs/Markdown.md index 666717b..0b2db39 100644 --- a/content/docs/Markdown.md +++ b/content/docs/Markdown.md @@ -18,24 +18,17 @@ tags: 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: +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"). -* Write entire documents in markdown, and choose where and when to compile them to HTML -* Write document fragments in markdown, so they can be "included" or used as partials within other larger documents -* Write sections of markdown directly inside HTML documents (referred to as "inline markdown") +### Markdown expression - -### "Include" extenal content Use the markdown expression, `\{{md}}`, to enable importing of external markdown content. -**Example #1: using full path** - ```handlebars -\{{md ../path/to/content.md}} +\{{md "../path/to/content.md"}} ``` -**Example #2: using variables** -Or use a variable instead of setting the path directly inside the template. For example you can add the content variable to the [YAML Front-Matter](https://github.com/assemble/assemble/wiki/YAML-Front-Matter): +Alternatively, you can add the content variable to the [YAML Front Matter][options#yaml-font-matter-options] (YFM) of a page. ```yaml --- @@ -45,75 +38,34 @@ content: ../path/to/content.md --- ``` -then use it like this: +This will allow you to just use just `content` in the markdown expression, the path will be pulled from YFM. ```handlebars \{{md content}} ``` -### Markdown "includes" - -Using the `\{{md}}` markdown helper, you can import markdown formatted content from another file, and render it to HTML. For example: - -Assuming we have a file named `index.hbs`, and we add the following: - -```handlebars -\{{md '../path/to/content.md'}} -``` - -And give that `content.md` contains the following: - -```markdown -# Getting Started -Lorem Ipsum... -``` - -When we run `grunt assemble`, a file named `index.html` will be rendered containing: - -```html -

            Getting Started

            -Lorem Ipsum... -``` - -The same can be accomplished by specifying the path to the file in the YAML Front Matter: - -```handlebars ---- -content: ../path/to/content.md ---- - -\{{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 -

            My Site

            +
            \{{#markdown}} -## Inline Markdown is awesome +## But Inline Markdown is awesome -> this is markdown content +> This is markdown content -* useful for simple content -* great for blog posts -* easier on the eyes than angle brackets -* even links look prettier +* 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) -### Even Prettier links - -Embed handlebars templates to make them even prettier. - -\{{#page.links}} -[\{{text}}](\{{href}}) -\{{/page.links}} - \{{/markdown}} ``` @@ -125,7 +77,3 @@ In a layout, can also wrap the `\{{> body }}` tag with the `\{{#markdown}}...\{{ \{{> body }} \{{/markdown}} ``` - -## Related Information - -* [options.marked][options-markded] \ No newline at end of file From 0ee0271dae6e542621a8d289de3edffa284d7fbe Mon Sep 17 00:00:00 2001 From: Patrick Burtchaell Date: Wed, 12 Mar 2014 12:24:29 -0500 Subject: [PATCH 06/81] Add description to options-partials.md --- content/docs/options-partials.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/docs/options-partials.md b/content/docs/options-partials.md index e681ae5..f0cb81f 100644 --- a/content/docs/options-partials.md +++ 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. From eb086471032be8bab18b19331f6345d48c9264ba Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Thu, 13 Mar 2014 18:53:31 -0400 Subject: [PATCH 07/81] organize some document stubs --- content/docs/Workflows.md | 9 - content/{ => getting-started}/FAQ.md | 0 content/{ => getting-started}/contributing.md | 0 .../core-concepts-long.md | 0 .../{ => getting-started}/core-concepts.md | 47 +++- .../{ => getting-started}/getting-started.md | 0 content/{ => getting-started}/introduction.md | 0 content/{ => getting-started}/overview.md | 43 ++++ content/guides/understanding-context.md | 200 ++++++++++++++++++ content/outline.md | 39 ---- 10 files changed, 282 insertions(+), 56 deletions(-) delete mode 100644 content/docs/Workflows.md rename content/{ => getting-started}/FAQ.md (100%) rename content/{ => getting-started}/contributing.md (100%) rename content/{ => getting-started}/core-concepts-long.md (100%) rename content/{ => getting-started}/core-concepts.md (75%) rename content/{ => getting-started}/getting-started.md (100%) rename content/{ => getting-started}/introduction.md (100%) rename content/{ => getting-started}/overview.md (91%) create mode 100644 content/guides/understanding-context.md delete mode 100644 content/outline.md diff --git a/content/docs/Workflows.md b/content/docs/Workflows.md deleted file mode 100644 index 91a65eb..0000000 --- a/content/docs/Workflows.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Workflows - -area: docs - -published: false ---- - -{{! TODO }} \ No newline at end of file diff --git a/content/FAQ.md b/content/getting-started/FAQ.md similarity index 100% rename from content/FAQ.md rename to content/getting-started/FAQ.md diff --git a/content/contributing.md b/content/getting-started/contributing.md similarity index 100% rename from content/contributing.md rename to content/getting-started/contributing.md diff --git a/content/core-concepts-long.md b/content/getting-started/core-concepts-long.md similarity index 100% rename from content/core-concepts-long.md rename to content/getting-started/core-concepts-long.md diff --git a/content/core-concepts.md b/content/getting-started/core-concepts.md similarity index 75% rename from content/core-concepts.md rename to content/getting-started/core-concepts.md index 0a9c305..2b54026 100644 --- a/content/core-concepts.md +++ b/content/getting-started/core-concepts.md @@ -2,11 +2,28 @@ > 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 is a static - +_(WIP)_ ## Getting Started +* Installation (TODO) +* Brief Example (TODO) + + +```handlebars + + + + + + {{title}} + + + + {{> body }} + + +``` ### Core Concepts @@ -23,19 +40,22 @@ Assemble is a static 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 with [permalinks][permalinks] `about/index.html`) -* Partials: document fragments or snippets of code that will be included, inserted or embedded into other templates at build time. +* **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 -A basic layout might look something like this: +Since layouts are used to "wrap" other pages with common elements, a basic layout might look something like this: ```handlebars + {{title}} @@ -45,6 +65,17 @@ A basic layout might look something like this: ``` +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_. @@ -108,7 +139,7 @@ Now, to actually use the partial, add the `{{> head }}` template to the `head` s ## Content -> Content is usually written in an easy-to-read plain text format such as markdown. Assemble can be extended to convert any format. +> 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: @@ -161,7 +192,7 @@ Which results in: ``` -Beyond using data files for context, they can also be used for global project configuration and setting options. See the [documentation for data]() to learn more. +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 diff --git a/content/getting-started.md b/content/getting-started/getting-started.md similarity index 100% rename from content/getting-started.md rename to content/getting-started/getting-started.md diff --git a/content/introduction.md b/content/getting-started/introduction.md similarity index 100% rename from content/introduction.md rename to content/getting-started/introduction.md diff --git a/content/overview.md b/content/getting-started/overview.md similarity index 91% rename from content/overview.md rename to content/getting-started/overview.md index 75ee27f..d7f5ad9 100644 --- a/content/overview.md +++ b/content/getting-started/overview.md @@ -144,3 +144,46 @@ Here are some of the highlights. * Subexpressions: * Partials: * Helpers: + + + + +# Assemble + +> + +## Why Assemble? + ++ What is Assemble ++ How can it help? + +*** + +## Getting Started + +### Installation + ++ Get Assemble (download, install, clone) + +### Usage + + + +*** + +## Blog + +*** + +## Documentation + ++ Usage ++ API + +*** + +## FAQ + +*** + +## Contributing \ No newline at end of file diff --git a/content/guides/understanding-context.md b/content/guides/understanding-context.md new file mode 100644 index 0000000..e8933fe --- /dev/null +++ b/content/guides/understanding-context.md @@ -0,0 +1,200 @@ +--- +title: Understanding Context + +area: docs +section: templates +--- + +> The goal of this guide is to help clarify how context works with Handlebars. + +_(WIP)_ + +* Variables +* Block expressions +* Helpers +* Block helpers +* Subexpressions +* Nesting and inheritance + + +## Overview + +When working with Handlebars, context can be tricky. + +Given that we have: + +```html +--- +foo: Some info +--- +``` + + +* `{{data.foo}}`: YAML front matter +* `{{this.foo}}` +* `{{page.foo}}` +* `{{foo}}` +* `{{../foo}}` + + +### Conventions used in this guide + +For the rest of this guide, we're going to assume that our config looks something like this: + +```js +assemble: { + options: { + layout: 'templates/default.hbs' + }, + site: { + // files are listed explictly for the purposes of demonstration + files: { + '_gh_pages/': [ + 'templates/pages/index.hbs', + 'templates/pages/about.hbs', + 'templates/pages/contact.hbs', + 'templates/pages/blog.hbs' + ] + } + } +} +``` + +Let's also assume that each of our 4 pages has [YAML front matter][YAML-front-matter] that looks something like this: + +In `index.hbs`: + +```html +--- +title: Home +--- +``` + +In `about.hbs`: + +```html +--- +title: About Us +--- +``` + +In `contact.hbs`: + +```html +--- +title: Contact Us +--- +``` + +In `blog.hbs`: + +```html +--- +title: Blog +--- +``` + +## The Challenge + +Before we dive into the solutions, let's discuss the challenges in order clarify what we're trying to accomplish. + +By the end of this guide, we should have a basic understanding of: + +1. How context works with Handlebars. +2. How context works in Assemble, as well as how context works in: + * [Pages][Pages] + * [Layouts][Layouts] + * [YAML Front Matter][YAML-front-matter] + + +## Pages + +You really won't understand how context works in Handlebars until you spend some time playing around with collections. So let's jump right into it and add a `pages` collection to `index.hbs`: + +```html +--- +title: Home +--- +

            {{title}}

            + + +``` + +Will result in: + +```html +

            Home

            + + +``` + +**Why are the titles missing?** + +As you can see, the title rendered only in the `

            `, but none of the page titles rendered in our nav block. The reason is that the context we used inside the `{{#each pages}}` block was incorrect. The solution is going to take a little explaining, so let's do one more experiment to help create a 360 degree view of what's happening. + +Let's change our templates and run the build again. This time we'll add `../` to the `{{title}}` inside the `{{#each pages}}` block: + +```html +--- +title: Home +--- +

            {{title}}

            + + +``` + + +* **A: The context is wrong**: + + +## Layouts + + +```html +--- +title: YAML Front Matter +--- +

            {{title}}

            + +{{#each pages}} + {{{title}}} +{{/each}} +``` + + +```html +--- +title: Pages Collection +tags: +- pages +--- + +``` + + diff --git a/content/outline.md b/content/outline.md deleted file mode 100644 index 774808b..0000000 --- a/content/outline.md +++ /dev/null @@ -1,39 +0,0 @@ -# Assemble - -> - -## Why Assemble? - -+ What is Assemble -+ How can it help? - -*** - -## Getting Started - -### Installation - -+ Get Assemble (download, install, clone) - -### Usage - - - -*** - -## Blog - -*** - -## Documentation - -+ Usage -+ API - -*** - -## FAQ - -*** - -## Contributing \ No newline at end of file From 63eb043be54d75a1b3fa2e6807576697d57d41c7 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Thu, 13 Mar 2014 18:53:39 -0400 Subject: [PATCH 08/81] start using .assemblerc --- _config.yml => .assemblerc.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename _config.yml => .assemblerc.yml (100%) diff --git a/_config.yml b/.assemblerc.yml similarity index 100% rename from _config.yml rename to .assemblerc.yml From a2000d3777aa3aee73b9707e7bb19f3fd2e0fa94 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Thu, 13 Mar 2014 18:54:05 -0400 Subject: [PATCH 09/81] add some users to users.yml --- data/users.yml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/data/users.yml b/data/users.yml index 7d961ee..ed6c086 100644 --- a/data/users.yml +++ b/data/users.yml @@ -13,7 +13,18 @@ # came before you and add your name to the *bottom* -- url: http://www.foo.com/ - image: bar.png -- url: http://www.baz.com/ - image: quux.png \ No newline at end of file +- name: Zurb Ink + url: + image: +- name: Zurb Foundation + url: + image: +- name: Less.js + url: + image: +- name: Zurb Ink + url: + image: +- name: Topcoat + url: + image: From 32da36e2a6c783a5d816636c6ca9c708747206e8 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Thu, 13 Mar 2014 18:55:02 -0400 Subject: [PATCH 10/81] minor code styling, helper docs revisions for consistency --- Gruntfile.js | 2 +- content/helpers/code/helper-gist.md | 2 +- content/helpers/collections/helper-after.md | 4 +- content/helpers/collections/helper-any.md | 4 +- content/helpers/collections/helper-before.md | 4 +- .../helpers/collections/helper-eachIndex.md | 4 +- .../collections/helper-eachProperty.md | 4 +- content/helpers/collections/helper-empty.md | 4 +- content/helpers/collections/helper-first.md | 4 +- content/helpers/collections/helper-inArray.md | 4 +- content/helpers/collections/helper-last.md | 4 +- content/helpers/collections/helper-length.md | 4 +- .../helpers/collections/helper-lengthEqual.md | 4 +- content/helpers/collections/helper-sort.md | 4 +- .../helpers/collections/helper-withAfter.md | 4 +- .../helpers/collections/helper-withBefore.md | 4 +- .../helpers/collections/helper-withFirst.md | 4 +- .../helpers/collections/helper-withLast.md | 4 +- .../helpers/collections/helper-withSort.md | 4 +- content/helpers/comparison/helper-and.md | 4 +- content/helpers/comparison/helper-gt.md | 2 +- content/helpers/comparison/helper-gte.md | 2 +- content/helpers/comparison/helper-if_gt.md | 4 +- content/helpers/comparison/helper-if_gteq.md | 4 +- content/helpers/comparison/helper-ifeq.md | 13 ++ content/helpers/comparison/helper-is.md | 11 -- .../helpers/comparison/helper-unless_eq.md | 4 +- .../helpers/comparison/helper-unless_gt.md | 4 +- .../helpers/comparison/helper-unless_gteq.md | 4 +- .../helpers/comparison/helper-unless_lt.md | 4 +- .../helpers/comparison/helper-unless_lteq.md | 4 +- content/helpers/content/helper-copy.md | 11 +- content/helpers/content/helper-glob.md | 10 +- content/helpers/dates/helper-moment.md | 12 +- content/helpers/html/helper-exticon.md | 2 +- content/helpers/html/helper-ol.md | 6 +- content/helpers/html/helper-ul.md | 6 +- package.json | 5 +- structure/pages/helpers.hbs | 4 +- styles/themes/book-code.less | 1 + styles/utilities/highlight.less | 116 ++++++++++++++---- 41 files changed, 192 insertions(+), 113 deletions(-) create mode 100644 content/helpers/comparison/helper-ifeq.md diff --git a/Gruntfile.js b/Gruntfile.js index ebb5af2..ffe296d 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -23,7 +23,7 @@ module.exports = function(grunt) { grunt.initConfig({ // Project metadata - site : grunt.file.readYAML('_config.yml'), + site : grunt.file.readYAML('.assemblerc.yml'), pkg : grunt.file.readJSON('package.json'), core : grunt.file.readJSON('data/core.json'), helpers: grunt.file.readYAML('data/helpers.yml'), diff --git a/content/helpers/code/helper-gist.md b/content/helpers/code/helper-gist.md index 065ab67..7eafa1a 100644 --- a/content/helpers/code/helper-gist.md +++ b/content/helpers/code/helper-gist.md @@ -13,6 +13,6 @@ Example: ``` Output: -```handlebars +```html ``` diff --git a/content/helpers/collections/helper-after.md b/content/helpers/collections/helper-after.md index 3a29561..27179d7 100644 --- a/content/helpers/collections/helper-after.md +++ b/content/helpers/collections/helper-after.md @@ -6,8 +6,8 @@ Parameters: count `int` - How many items to omit from the beginning. (Required) Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", diff --git a/content/helpers/collections/helper-any.md b/content/helpers/collections/helper-any.md index 6f99f4d..473699b 100644 --- a/content/helpers/collections/helper-any.md +++ b/content/helpers/collections/helper-any.md @@ -6,8 +6,8 @@ Parameters: `none` Data: -```json -"collection": ["Professor Farnswor"] +```js +var collection = ["Professor Farnswor"]; ``` Templates: diff --git a/content/helpers/collections/helper-before.md b/content/helpers/collections/helper-before.md index 067918e..e29dc3b 100644 --- a/content/helpers/collections/helper-before.md +++ b/content/helpers/collections/helper-before.md @@ -6,8 +6,8 @@ Parameters: count `int` - How many items to omit from the end. (Required) Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", diff --git a/content/helpers/collections/helper-eachIndex.md b/content/helpers/collections/helper-eachIndex.md index 99a89d6..e80f8f2 100644 --- a/content/helpers/collections/helper-eachIndex.md +++ b/content/helpers/collections/helper-eachIndex.md @@ -6,8 +6,8 @@ Parameters: `none` Data: -```json -"collection": ["Professor Farnsworth", "Fry", "Bend"] +```js +var collection = ["Professor Farnsworth", "Fry", "Bend"] ``` Template: diff --git a/content/helpers/collections/helper-eachProperty.md b/content/helpers/collections/helper-eachProperty.md index 161a03c..6933e7a 100644 --- a/content/helpers/collections/helper-eachProperty.md +++ b/content/helpers/collections/helper-eachProperty.md @@ -6,8 +6,8 @@ Parameters: `none` Data: -```json -"collection": { +```js +var collection = { "one": 1, "two": 2 } diff --git a/content/helpers/collections/helper-empty.md b/content/helpers/collections/helper-empty.md index ef076f0..28b296a 100644 --- a/content/helpers/collections/helper-empty.md +++ b/content/helpers/collections/helper-empty.md @@ -6,8 +6,8 @@ Parameters: `none` Data: -```json -"collection": [] +```js +var collection = [] ``` Template: diff --git a/content/helpers/collections/helper-first.md b/content/helpers/collections/helper-first.md index c7eb2a9..088dc12 100644 --- a/content/helpers/collections/helper-first.md +++ b/content/helpers/collections/helper-first.md @@ -6,8 +6,8 @@ Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", diff --git a/content/helpers/collections/helper-inArray.md b/content/helpers/collections/helper-inArray.md index a933c2f..20b63f2 100644 --- a/content/helpers/collections/helper-inArray.md +++ b/content/helpers/collections/helper-inArray.md @@ -6,8 +6,8 @@ Parameters: value `string|int` - A value to test against. (Required) Data: -```json -"collection": ["Professor Farnsworth", "Fry", "Bend"] +```js +var collection = ["Professor Farnsworth", "Fry", "Bend"] ``` Template: diff --git a/content/helpers/collections/helper-last.md b/content/helpers/collections/helper-last.md index 0851fab..73abbfc 100644 --- a/content/helpers/collections/helper-last.md +++ b/content/helpers/collections/helper-last.md @@ -6,8 +6,8 @@ Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", diff --git a/content/helpers/collections/helper-length.md b/content/helpers/collections/helper-length.md index baaa72c..13fd08a 100644 --- a/content/helpers/collections/helper-length.md +++ b/content/helpers/collections/helper-length.md @@ -6,8 +6,8 @@ Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", diff --git a/content/helpers/collections/helper-lengthEqual.md b/content/helpers/collections/helper-lengthEqual.md index eb1f307..0a0aa6d 100644 --- a/content/helpers/collections/helper-lengthEqual.md +++ b/content/helpers/collections/helper-lengthEqual.md @@ -6,8 +6,8 @@ Parameters: length `int` - The value to test against. (Required) Data: -```json -"collection": [ +```js +var collection = [ { "name": "Leela", "deliveries": 8021 diff --git a/content/helpers/collections/helper-sort.md b/content/helpers/collections/helper-sort.md index c550dfd..47d9ba8 100644 --- a/content/helpers/collections/helper-sort.md +++ b/content/helpers/collections/helper-sort.md @@ -6,8 +6,8 @@ Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", diff --git a/content/helpers/collections/helper-withAfter.md b/content/helpers/collections/helper-withAfter.md index e7646e9..acce4dc 100644 --- a/content/helpers/collections/helper-withAfter.md +++ b/content/helpers/collections/helper-withAfter.md @@ -6,8 +6,8 @@ Parameters: count `int` - How many items to omit from the beginning. (Required) Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", diff --git a/content/helpers/collections/helper-withBefore.md b/content/helpers/collections/helper-withBefore.md index ca2cc04..0b41678 100644 --- a/content/helpers/collections/helper-withBefore.md +++ b/content/helpers/collections/helper-withBefore.md @@ -6,8 +6,8 @@ Parameters: count `int` - How many items to omit from the end. (Required) Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", diff --git a/content/helpers/collections/helper-withFirst.md b/content/helpers/collections/helper-withFirst.md index fd6b9cd..d5cbc08 100644 --- a/content/helpers/collections/helper-withFirst.md +++ b/content/helpers/collections/helper-withFirst.md @@ -6,8 +6,8 @@ Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", diff --git a/content/helpers/collections/helper-withLast.md b/content/helpers/collections/helper-withLast.md index d18d5d8..25f62fc 100644 --- a/content/helpers/collections/helper-withLast.md +++ b/content/helpers/collections/helper-withLast.md @@ -6,8 +6,8 @@ Parameters: `none` Data: -```json -"collection": [ +```js +var collection = [ "Amy Wong", "Bender", "Dr. Zoidberg", diff --git a/content/helpers/collections/helper-withSort.md b/content/helpers/collections/helper-withSort.md index fc2e3e1..587c98d 100644 --- a/content/helpers/collections/helper-withSort.md +++ b/content/helpers/collections/helper-withSort.md @@ -6,8 +6,8 @@ Parameters: field `string` - String name of the field or property to sort by. (O Data: -```json -"collection": [ +```js +var collection = [ { "name": "Leela", "deliveries": 8021 diff --git a/content/helpers/comparison/helper-and.md b/content/helpers/comparison/helper-and.md index fef9360..78b3ac7 100644 --- a/content/helpers/comparison/helper-and.md +++ b/content/helpers/comparison/helper-and.md @@ -7,8 +7,8 @@ Parameters: values `string|int` - the values to test against. Data: ```js -great = true -magnificent = true +var great = true +var magnificent = true ``` Template: diff --git a/content/helpers/comparison/helper-gt.md b/content/helpers/comparison/helper-gt.md index 52c01c3..af3e916 100644 --- a/content/helpers/comparison/helper-gt.md +++ b/content/helpers/comparison/helper-gt.md @@ -7,7 +7,7 @@ Parameters: value `string|int` - the value to test against. Data: ```js -number = 5 +var number = 5 ``` Template: diff --git a/content/helpers/comparison/helper-gte.md b/content/helpers/comparison/helper-gte.md index 8f652fe..6fe78c3 100644 --- a/content/helpers/comparison/helper-gte.md +++ b/content/helpers/comparison/helper-gte.md @@ -5,7 +5,7 @@ Parameters: value `string|int` - the value to test against. ```js -number = 5 +var number = 5 ``` Template: diff --git a/content/helpers/comparison/helper-if_gt.md b/content/helpers/comparison/helper-if_gt.md index 611de54..a2ad73b 100644 --- a/content/helpers/comparison/helper-if_gt.md +++ b/content/helpers/comparison/helper-if_gt.md @@ -8,4 +8,6 @@ Parameters: `none` \{{#if_gt x compare=y}} ... \{{/if_gt}} ``` -Author: Dan Harper \ No newline at end of file +#### Author + ++ [@danharper](http://github.com/danharper) diff --git a/content/helpers/comparison/helper-if_gteq.md b/content/helpers/comparison/helper-if_gteq.md index ff72f3e..9fbb1cb 100644 --- a/content/helpers/comparison/helper-if_gteq.md +++ b/content/helpers/comparison/helper-if_gteq.md @@ -7,4 +7,6 @@ Parameters: `none` \{{#if_gteq x compare=y}} ... \{{/if_gteq}} ``` -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/helpers/comparison/helper-ifeq.md b/content/helpers/comparison/helper-ifeq.md new file mode 100644 index 0000000..634e686 --- /dev/null +++ b/content/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/content/helpers/comparison/helper-is.md b/content/helpers/comparison/helper-is.md index d9ec3bb..d01c2a7 100644 --- a/content/helpers/comparison/helper-is.md +++ b/content/helpers/comparison/helper-is.md @@ -54,15 +54,4 @@ Renders to: ```handlebars

            About Us

            -``` - -## \{{ifeq}} -**Alias for `is`. Considering consolidating** - -_Conditionally render a block if the condition is true (If x = y)._ - -Parameters: `none` - -```handlebars -\{{#ifeq x compare=y}} ... \{{/ifeq}} ``` \ No newline at end of file diff --git a/content/helpers/comparison/helper-unless_eq.md b/content/helpers/comparison/helper-unless_eq.md index ae3b1a5..b446951 100644 --- a/content/helpers/comparison/helper-unless_eq.md +++ b/content/helpers/comparison/helper-unless_eq.md @@ -9,4 +9,6 @@ Parameters: `none` ```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/helpers/comparison/helper-unless_gt.md b/content/helpers/comparison/helper-unless_gt.md index 15c5399..5314cd0 100644 --- a/content/helpers/comparison/helper-unless_gt.md +++ b/content/helpers/comparison/helper-unless_gt.md @@ -6,4 +6,6 @@ Parameters: `none` ```handlebars \{{#unless_gt x compare=y}} ... \{{/unless_gt}} ``` -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/helpers/comparison/helper-unless_gteq.md b/content/helpers/comparison/helper-unless_gteq.md index eb18c10..bd87044 100644 --- a/content/helpers/comparison/helper-unless_gteq.md +++ b/content/helpers/comparison/helper-unless_gteq.md @@ -7,4 +7,6 @@ Parameters: `none` ```handlebars \{{#unless_gteq x compare=y}} ... \{{/unless_gteq}} ``` -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/helpers/comparison/helper-unless_lt.md b/content/helpers/comparison/helper-unless_lt.md index 0d3bfe6..2352e32 100644 --- a/content/helpers/comparison/helper-unless_lt.md +++ b/content/helpers/comparison/helper-unless_lt.md @@ -7,4 +7,6 @@ Parameters: `none` ```handlebars \{{#unless_lt x compare=y}} ... \{{/unless_lt}} ``` -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/helpers/comparison/helper-unless_lteq.md b/content/helpers/comparison/helper-unless_lteq.md index dd636b1..3c24a20 100644 --- a/content/helpers/comparison/helper-unless_lteq.md +++ b/content/helpers/comparison/helper-unless_lteq.md @@ -7,4 +7,6 @@ Parameters: `none` ```handlebars \{{#unless_lteq x compare=y}} ... \{{/unless_lteq}} ``` -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/helpers/content/helper-copy.md b/content/helpers/content/helper-copy.md index 39fcaf4..c29b951 100644 --- a/content/helpers/content/helper-copy.md +++ b/content/helpers/content/helper-copy.md @@ -1,10 +1,8 @@ ## \{{copy}} -> **example helpers, not for actual use!** +> Example helper, copies file A to path B. -Why do this? The goal is to inspire other concepts that build from this one. - -_Example helper, copies file A to path B._ +**example helpers, use at your own risk!** Parameters: `String`
            Default: `undefined` @@ -12,6 +10,5 @@ Parameters: `String` Example: ```handlebars -\{{copy 'a.html' '../dir/b.txt'}} -``` - +\{{copy "a.html" "../dir/b.txt"}} +``` \ No newline at end of file diff --git a/content/helpers/content/helper-glob.md b/content/helpers/content/helper-glob.md index e776eeb..d4c83ba 100644 --- a/content/helpers/content/helper-glob.md +++ b/content/helpers/content/helper-glob.md @@ -10,8 +10,8 @@ Parameters: `String` Examples: ```handlebars -\{{glob 'src/files/*.md'}} -\{{glob 'src/files/*.{txt,md}'}} +\{{glob "src/files/*.md"}} +\{{glob "src/files/*.{txt,md}"}} ``` {{#draft}} @@ -45,7 +45,7 @@ href: The ```handlebars -\{{globWithContext './src/**/test.md' href}} +\{{globWithContext "src/**/test.md" href}} ``` Data (context): @@ -59,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/content/helpers/dates/helper-moment.md b/content/helpers/dates/helper-moment.md index f7a3b6d..7e435d4 100644 --- a/content/helpers/dates/helper-moment.md +++ b/content/helpers/dates/helper-moment.md @@ -35,9 +35,8 @@ Also, the handlebars syntax does not allow you pass certain values (like arrays ### Usage Examples -#### Optional YAML Front Matter -> 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: @@ -322,11 +321,10 @@ The event will last 3 hours ### 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 +### Author -+ [github.com/Arkkimaagi](https://github.com/Arkkimaagi) ++ [@Arkkimaagi](https://github.com/Arkkimaagi) ### License diff --git a/content/helpers/html/helper-exticon.md b/content/helpers/html/helper-exticon.md index e03dd8f..10d52fb 100644 --- a/content/helpers/html/helper-exticon.md +++ b/content/helpers/html/helper-exticon.md @@ -16,7 +16,7 @@ Usage: ``` Output: -```handlebars +```html file.png file.pdf file.doc diff --git a/content/helpers/html/helper-ol.md b/content/helpers/html/helper-ol.md index 7402fe5..67591a7 100644 --- a/content/helpers/html/helper-ol.md +++ b/content/helpers/html/helper-ol.md @@ -9,14 +9,14 @@ HTML attributes to use on the `ol` element. Data: ```js -collection = [ +var collection = [ name: 'Leela' deliveries: 8021, name: 'Bender' deliveries: 239, name: 'Fry' deliveries: 1 -] +]; ``` Template: @@ -29,7 +29,7 @@ Template: Output: -```handlebars +```html
            1. Leela - 8021 deliveries
            2. Bender - 239 deliveries
            3. diff --git a/content/helpers/html/helper-ul.md b/content/helpers/html/helper-ul.md index 96f59fa..f7c6b1e 100644 --- a/content/helpers/html/helper-ul.md +++ b/content/helpers/html/helper-ul.md @@ -9,14 +9,14 @@ HTML attributes to use on the `ul` element. Data: ```js -collection = [ +var collection = [ name: 'Leela' deliveries: 8021, name: 'Bender' deliveries: 239, name: 'Fry' deliveries: 1 -] +]; ``` Template: @@ -29,7 +29,7 @@ Template: Output: -```handlebars +```html
              • Leela - 8021 deliveries
              • Bender - 239 deliveries
              • diff --git a/package.json b/package.json index d3f4bfc..c7e1857 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ }, "main": "index.js", "devDependencies": { - "assemble": "git://github.com/assemble/assemble.git#v0.5.0", + "assemble": "~0.4.37", "assemble-contrib-anchors": "~0.1.2", "assemble-contrib-decompress": "~0.1.0", "assemble-contrib-download": "~0.1.2", @@ -93,6 +93,7 @@ "dependencies": { "chalk": "~0.4.0", "lodash": "~2.4.1", - "highlight.js": "~8.0.0" + "highlight.js": "~8.0.0", + "underscore.string": "~2.3.3" } } diff --git a/structure/pages/helpers.hbs b/structure/pages/helpers.hbs index 2fa3fea..6f31ca8 100644 --- a/structure/pages/helpers.hbs +++ b/structure/pages/helpers.hbs @@ -16,7 +16,9 @@ slug: helpers {{success '>> Reading:' (basename .)}} {{! log a success message }} {{content (basename .)}} + +
                {{/each}} {{/if}}
            -{{/each}} +{{/each}} \ No newline at end of file diff --git a/styles/themes/book-code.less b/styles/themes/book-code.less index 567ed31..385ad4f 100644 --- a/styles/themes/book-code.less +++ b/styles/themes/book-code.less @@ -4,6 +4,7 @@ .book { pre code { + color: #333; background: transparent; } diff --git a/styles/utilities/highlight.less b/styles/utilities/highlight.less index 2394db3..1446ebc 100644 --- a/styles/utilities/highlight.less +++ b/styles/utilities/highlight.less @@ -1,26 +1,66 @@ -/* +// +// 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 -github.com style (c) Vasily Polovnyov -*/ pre code { display: block; padding: 0.5em; - color: #333; - background: #f8f8ff; + color: @gray-dark; + background: @example-bg; } -.lang-html { - .language-comment { - margin-top: 10px; - } +.xml { + color: @gray-dark; } + .language-comment, .language-template_comment, .diff .language-header, .language-javadoc { - color: #998; + color: @language-comment; font-style: italic; } @@ -30,28 +70,28 @@ pre code { .language-subst, .language-request, .language-status { - color: #333; + color: @gray-dark; font-weight: bold } .language-number, .language-hexcolor, .ruby .language-constant { - color: #099; + color: @language-constant; } .language-string, .language-tag .language-value, .language-phpdoc, .tex .language-formula { - color: #d14; + color: @language-formula; } .language-title, .language-id, .coffeescript .language-params, .scss .language-preprocessor { - color: #900; + color: @language-preprocessor; font-weight: bold; } @@ -66,7 +106,7 @@ pre code { .haskell .language-type, .vhdl .language-literal, .tex .language-command { - color: #458; + color: @language-command; font-weight: bold; } @@ -74,18 +114,18 @@ pre code { .language-tag .language-title, .language-rules .language-property, .django .language-tag .language-keyword { - color: #000080; + color: @language-keyword; font-weight: normal; } .language-attribute, .language-variable, .lisp .language-body { - color: #008080; + color: @language-variable; } .language-regexp { - color: #009926; + color: @language-regexp; } .language-symbol, @@ -93,13 +133,13 @@ pre code { .lisp .language-keyword, .tex .language-special, .language-prompt { - color: #990073; + color: @language-prompt; } .language-built_in, .lisp .language-title, .clojure .language-built_in { - color: #0086b3; + color: @language-diff-bg; } .language-preprocessor, @@ -108,22 +148,46 @@ pre code { .language-doctype, .language-shebang, .language-cdata { - color: #999; + color: @language-doctype; font-weight: bold; } .language-deletion { - background: #fdd; + background: @language-deletion; } .language-addition { - background: #dfd; + background: @language-addition; } .diff .language-change { - background: #0086b3; + background: @language-diff-bg; } .language-chunk { - color: #aaa; -} \ No newline at end of file + 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; + } + } +} From 3c56a359f565132b2013de74d11b17f0ea1d3208 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Thu, 13 Mar 2014 19:14:22 -0400 Subject: [PATCH 11/81] merging in updates from master --- content/docs/Collections.md | 4 +- content/docs/Layouts.md | 2 +- content/docs/Pages-Collections.md | 2 +- content/docs/Partials.md | 171 +++++++++++++++++++++++++++++- content/docs/options-data.md | 4 +- 5 files changed, 173 insertions(+), 10 deletions(-) diff --git a/content/docs/Collections.md b/content/docs/Collections.md index 2a96ced..12b6975 100644 --- a/content/docs/Collections.md +++ b/content/docs/Collections.md @@ -66,7 +66,7 @@ assemble: { collections: [ { // the name of the collection - title: 'tags', + name: 'tags', // the order in which to sort sortorder: 'desc' } @@ -86,7 +86,7 @@ assemble: { ], collections: [ { - title: 'pages', + name: 'pages', sortorder: 'desc' } ] diff --git a/content/docs/Layouts.md b/content/docs/Layouts.md index d0cb5bb..4bf6462 100644 --- a/content/docs/Layouts.md +++ b/content/docs/Layouts.md @@ -231,7 +231,7 @@ Layouts are optional, but the `\{{> body }}` tag is required for content to be p - {{> body }} + \{{> body }} ``` diff --git a/content/docs/Pages-Collections.md b/content/docs/Pages-Collections.md index 40973e0..7b23cfa 100644 --- a/content/docs/Pages-Collections.md +++ b/content/docs/Pages-Collections.md @@ -67,7 +67,7 @@ When we build the project, pages from the `docs` target will render with:
        ``` -When we build the project, and pages from the `block` target will render with: +When we build the project, and pages from the `blog` target will render with: ```html
          diff --git a/content/docs/Partials.md b/content/docs/Partials.md index 5b06c60..0a6f45c 100644 --- a/content/docs/Partials.md +++ b/content/docs/Partials.md @@ -9,16 +9,179 @@ categories: tags: - includes - partials + +logo: + URL: media/images/logo.png + classes: + - logo + - main + width: 80 + height: 40 + title: Assemble This! + +hide-partial-YFM: + class: "" +--- + +> Like "includes", partials are reusable fragments of code that can be included in a page and rendered. Partials are useful when you have blocks of reusable code that are applicable in different contexts. + +## Assemble, Mustache, Handlebars and Partials + +Partials are a part of the [Mustache template language](http://mustache.github.io/) of which Handlebars is superset. More information about partials in general can be found in the [Mustache documentation](http://mustache.github.io/mustache.5.html). Assemble, when used with the [Handlebars](http://handlebarsjs.com/) engine, allows partials to be defined and used. + +## An Example with Handlebars + +Let us consider a simple partial as an example that would be used to generate an HTML `img` tag: + +`img.hbs` +```html +\{{#if alt}}\{{alt}}\{{else}}\{{title}}\{{/if}} +``` + +As you can see, Handlebars tags are used as placeholders for inserting various properties. For example, the `\{{URL}}` tag will insert a property `URL` from the current context. + +Now that we have defined a partial, we can include the partial in a template via the standard Mustache syntax `\{{> [partial-name w/o extension]}}`. Using our `img.hbs` partial example above and the following HTML template: + +`header.html` +```html +--- +{{#logo}} +logo: + URL: {{URL}} + classes: + {{#classes}} + - {{.}} + {{/classes}} + width: {{width}} + height: {{height}} + title: {{title}} +{{/logo}} +--- +
          + \{{#page.logo}} + \{{> img}} + \{{/page.logo}} +
          +``` +Assemble would produce the following output: + +```html +
          + {{#logo}} + {{> img}} + {{/logo}} +
          +``` + +Note that we enclosed our `\{{> img}}` partial invocation inside the `\{{#page.logo}} .. \{{/page.logo}}` section to setup the context in which the partial properties will be evaluated. In this case they are coming from the YAML front matter we defined in `header.html`, though the context can be set via the many methods supported by Assemble and Handlebars. + +Handlebars provides a more convenient syntax for invoking a partial with a given context via `\{{> [partial-name] [context]}}`. Thus, we could change our `header.html` template as follows: + +`header.html` +```html --- +{{#logo}} +logo: + URL: {{URL}} + classes: + {{#classes}} + - {{.}} + {{/classes}} + width: {{width}} + height: {{height}} + title: {{title}} +{{/logo}} +--- +
          + \{{> img page.logo}} +
          +``` +and Assemble would produce the same output as above. With this syntax, the desired context in which to evaluate the partial is passed explicitly as a paramter to the partial. + +## Configuration + +To use partials in Assemble, we must specify where partials can be found in the configuration options for the `assemble` Grunt task: + +`Gruntfile.js` +```js + assemble: { + options: { + + // setup default partials locations + partials: ['templates/includes/**/*.{hbs,md}'] + } + } +``` + +as well as within a collection's options: + +`Gruntfile.js` +```js + assemble: { + + my-collection: { + options: { + partials: ['my-collection/templates/partials/**/*.{hbs,md}'] + } + } + } +``` + +## YAML Front Matter in Partials + +Though partials can have YAML front matter, currently in Handlebars there is a [known issue](https://github.com/wycats/handlebars.js/pull/182) which causes the YAML front matter in a partial to be ignored if the partial is invoked within *any* context. Thus, the following updated `img.hbs` partial from above with YAML front matter: + +`img.hbs` +```html +--- +class: image +--- +\{{#if alt}}\{{alt}}\{{else}}\{{title}}\{{/if}} +``` + +would produce the same output as above, neglecting to add on the `\{{class}}` property as listed in the partial. + +Fortunately Assemble provides two helpers which will merge the partial's YAML front matter into the context and give the expected results: + +* [handlebars-helper-partial](https://github.com/helpers/handlebars-helper-partial) +* [handlebars-helper-include](https://github.com/helpers/handlebars-helper-include) + +So taking our updated example partial, we could use the Assemble `partial` helper in the following way to be sure our partial's YAML front matter data is merged into the overall context when evaluated: + +`header.html` +```html +
          + \{{partial 'img' page.logo}} +
          +``` + +Note how when using the `\{{partial}}` helper we must put the name of the partial to include in quotes. -> Like "includes", partials are reusable fragments of code that can be included in a page and rendered +Finally, Assemble would produce the following output: +```html +
          + {{partial 'img' page.logo}} +
          +``` +with the partial's own YAML front matter included in the context, producing the extra `image` class attribute value. -## Syntax +## Partials in Handlebars Specifics -Partials are useful when you have blocks of reusable code that are applicable in different contexts. The `Handlebars.registerPartial` method, which registers a partial, accepts the name of the partial as its first argument and either a _template source string_ or a _compiled template_ as its second argument. +The `Handlebars.registerPartial` method, which registers a partial, accepts the name of the partial as its first argument and either a _template source string_ or a _compiled template_ as its second argument. Accepting a compiled template as the second argument enables you to, for example, use the partial in a loop that outputs a list but also append items to the list later using the partial's template function. For an example of this, check out the [handlebars-helpers-include](https://github.com/helpers/handlebars-helper-include/blob/master/index.js) code. -Accepting a compiled template as the second argument enables you to, for example, use the partial in a loop that outputs a list but also append items to the list later using the partial's template function. {{#draft}} To use a partial from a template, simply include `\{{> partial-name }}`. For example: diff --git a/content/docs/options-data.md b/content/docs/options-data.md index e53bf67..153dea8 100644 --- a/content/docs/options-data.md +++ b/content/docs/options-data.md @@ -72,7 +72,7 @@ The result after running `grunt assemble` will be: Add `package.json` to the `data` object: ```js -assemble { +assemble: { myProject: { options: { data: 'package.json' @@ -101,7 +101,7 @@ Assuming we add the following code to our Gruntfile ```js pkg: grunt.file.readJSON('package.json'), -assemble { +assemble: { myProject: { options: { pkg: '<%= pkg %>', From a08bee400df4020f3815f85eef3e00a223529b7a Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Thu, 13 Mar 2014 20:39:31 -0400 Subject: [PATCH 12/81] more content starters --- .../boilerplates/boilerplate-blog.md | 8 ++++ .../boilerplates/boilerplate-bootstrap.md | 8 ++++ .../boilerplates/boilerplate-site.md | 8 ++++ content/getting-started/boilerplates/index.md | 15 +++++++ .../examples/generate-a-list-of-posts.md | 39 +++++++++++++++++ content/getting-started/examples/index.md | 18 ++++++++ .../examples/markdown-inline.md | 30 +++++++++++++ .../getting-started/examples/task-defaults.md | 43 +++++++++++++++++++ 8 files changed, 169 insertions(+) create mode 100644 content/getting-started/boilerplates/boilerplate-blog.md create mode 100644 content/getting-started/boilerplates/boilerplate-bootstrap.md create mode 100644 content/getting-started/boilerplates/boilerplate-site.md create mode 100644 content/getting-started/boilerplates/index.md create mode 100644 content/getting-started/examples/generate-a-list-of-posts.md create mode 100644 content/getting-started/examples/index.md create mode 100644 content/getting-started/examples/markdown-inline.md create mode 100644 content/getting-started/examples/task-defaults.md diff --git a/content/getting-started/boilerplates/boilerplate-blog.md b/content/getting-started/boilerplates/boilerplate-blog.md new file mode 100644 index 0000000..6fb8cc8 --- /dev/null +++ b/content/getting-started/boilerplates/boilerplate-blog.md @@ -0,0 +1,8 @@ +--- +title: Blog Boilerplate + +area: boilerplates +published: false +--- + +> Docs coming soon... \ No newline at end of file diff --git a/content/getting-started/boilerplates/boilerplate-bootstrap.md b/content/getting-started/boilerplates/boilerplate-bootstrap.md new file mode 100644 index 0000000..6eca02a --- /dev/null +++ b/content/getting-started/boilerplates/boilerplate-bootstrap.md @@ -0,0 +1,8 @@ +--- +title: Bootstrap Boilerplate + +area: boilerplates +published: false +--- + +> Docs coming soon... \ No newline at end of file diff --git a/content/getting-started/boilerplates/boilerplate-site.md b/content/getting-started/boilerplates/boilerplate-site.md new file mode 100644 index 0000000..da2f49f --- /dev/null +++ b/content/getting-started/boilerplates/boilerplate-site.md @@ -0,0 +1,8 @@ +--- +title: Website Boilerplate + +area: boilerplates +published: false +--- + +> Docs coming soon... \ No newline at end of file diff --git a/content/getting-started/boilerplates/index.md b/content/getting-started/boilerplates/index.md new file mode 100644 index 0000000..5ff14f4 --- /dev/null +++ b/content/getting-started/boilerplates/index.md @@ -0,0 +1,15 @@ +--- +title: Coming Soon! +section: boilerplates +layout: default +published: false +--- + +> While you're waiting, check out the [assemble generator →](https://github.com/assemble/grunt-init-assemble) for Assemble. + + +
          +
          +
          + +{{!md 'src/templates/pages/boilerplates/toc.md'}} diff --git a/content/getting-started/examples/generate-a-list-of-posts.md b/content/getting-started/examples/generate-a-list-of-posts.md new file mode 100644 index 0000000..dd96778 --- /dev/null +++ b/content/getting-started/examples/generate-a-list-of-posts.md @@ -0,0 +1,39 @@ +## Render a "list" of Posts + +```html +--- +title: Blog +posts: ['src/posts/2013_05_10.md.hbs', 'src/posts/2013_05_12.md.hbs'] +--- + + +

          This is a simple blog

          + +\{{#each posts}} +

          \{{md this}}

          +\{{/each}} +``` + + +The `md` helper also accepts globbing patterns, so the following could also be used: + +```html +--- +title: Posts from May, 2013 +posts: ['src/posts/2013_05_*.md.hbs'] +--- + + + +\{{#each posts}} +

          \{{md this}}

          +\{{/each}} +``` + +{{#todo}} +* how to truncate posts using helpers +{{/todo}} \ No newline at end of file diff --git a/content/getting-started/examples/index.md b/content/getting-started/examples/index.md new file mode 100644 index 0000000..44b74d2 --- /dev/null +++ b/content/getting-started/examples/index.md @@ -0,0 +1,18 @@ +--- +title: Examples +section: examples +published: false +--- + +> Hopefully you find the examples useful. If you think of a way to improve them, or would like to request another example [please let us know](https://github.com/assemble/assemble/issues). + + +**Contributions are always welcome!** + + +{{> btn-github-star }} +{{> btn-github-fork }} + + +{{! TOC partials are found in ./src/templates/partials}} +{{!> examples-toc.md }} diff --git a/content/getting-started/examples/markdown-inline.md b/content/getting-started/examples/markdown-inline.md new file mode 100644 index 0000000..204ca18 --- /dev/null +++ b/content/getting-started/examples/markdown-inline.md @@ -0,0 +1,30 @@ +#### Write "inline" markdown +The `\{{#markdown}}\{{/markdown}}` block expression allows markdown to be written "inline" with any HTML and handlebars content. + +Example: + +```handlebars +\{{#markdown}} +# 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 + + +### Pretty links +[Visit Assemble](\{{url.assemble.repo}}) + + +### Even Prettier links +Embed handlebars templates to make them even prettier. + +\{{#page.links}} +[\{{text}}](\{{href}}) +\{{/page.links}} + +\{{/markdown}}\{{! /end markdown}} +``` diff --git a/content/getting-started/examples/task-defaults.md b/content/getting-started/examples/task-defaults.md new file mode 100644 index 0000000..8e295db --- /dev/null +++ b/content/getting-started/examples/task-defaults.md @@ -0,0 +1,43 @@ +### Task defaults +Task targets, files and options may be specified according to the grunt [Configuring tasks](\{{url.wiki.tasks}}) guide. + +#### Build templates + +```javascript +assemble: { + templates: { + files: { + 'index.html': ['index.hbs'] + } + } +} +``` + +#### Build multiple specified files individually + +You can specify multiple `destination: [source]` items in `files`. + +```javascript +assemble: { + gh_pages: { + files: { + 'docs': ['getting-started.hbs'], + '.': ['index.hbs'] + } + } +} +``` + +#### Build directory of files + +Grunt supports filename expansion (also know as globbing) via the built-in [node-glob][node-glob] and [minimatch][minimatch] libraries. So Templates may be used in filepaths or glob patterns. + +```javascript +assemble: { + project: { + files: { + '.': ['templates/*.hbs'] + } + } +} +``` From a93e503737cba75053c2030953b779fe91be00ef Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Thu, 13 Mar 2014 20:40:46 -0400 Subject: [PATCH 13/81] converts some json files to yaml to make them easier to read. also adds comments to these files to help others understand what's happening in the code. --- data/features.yml | 17 ++++++ data/nav.json | 81 ------------------------- data/nav.yml | 114 ++++++++++++++++++++++++++++++++++++ data/section.json | 14 ----- structure/includes/list.hbs | 6 +- 5 files changed, 134 insertions(+), 98 deletions(-) create mode 100644 data/features.yml delete mode 100644 data/nav.json create mode 100644 data/nav.yml delete mode 100644 data/section.json diff --git a/data/features.yml b/data/features.yml new file mode 100644 index 0000000..335d785 --- /dev/null +++ b/data/features.yml @@ -0,0 +1,17 @@ +# ============================================= +# SITE SECTIONS +# ============================================= + +# If "true" the section is enabled in the navigation +# please keep sections in alphabetical order. +about: true +api: true +blog: false +cheatsheet: true +docs: true +examples: true +getting_started: true +guides: true +helpers: true +plugins: true +tutorials: true \ No newline at end of file diff --git a/data/nav.json b/data/nav.json deleted file mode 100644 index 218122e..0000000 --- a/data/nav.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "main": { - "list": [ - { - "modifier": "nav navbar-nav", - "items": [ - { - "published": true, - "url": "getting-started", - "text": "Getting Started" - }, - { - "published": true, - "url": "examples", - "text": "Examples" - }, - { - "published": true, - "url": "helpers", - "text": "Helpers" - }, - { - "published": false, - "url": "docs", - "text": "Docs" - }, - { - "published": false, - "url": "api", - "text": "API" - } - ] - }, - { - "modifier": "nav navbar-nav navbar-right", - "items": [ - { - "published": false, - "url": "blog", - "text": "Blog" - }, - { - "published": true, - "url": "about", - "text": "About" - }, - { - "dropdown": true, - "modifier": "dropdown-menu", - "text": "GitHub", - "items": [ - { - "published": true, - "url": "<%= site.repo %>", - "text": "Docs repo" - }, - { - "published": true, - "url": "<%= site.issues %>", - "text": "Docs issues" - }, - { - "divider": true - }, - { - "published": true, - "url": "<%= assemble.repo %>", - "text": "Assemble repo" - }, - { - "published": 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..d55604f --- /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 + text: Blog + + # `About` link + - enabled: <%= features.about %> + url: about + 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/section.json b/data/section.json deleted file mode 100644 index 7c52cb9..0000000 --- a/data/section.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "blog": { - "enabled": false - }, - "plugins": { - "enabled": true - }, - "helpers": { - "enabled": true - }, - "cheatsheet": { - "enabled": true - } -} \ No newline at end of file diff --git a/structure/includes/list.hbs b/structure/includes/list.hbs index 71879e9..bb00eb2 100644 --- a/structure/includes/list.hbs +++ b/structure/includes/list.hbs @@ -1,7 +1,7 @@ -{{#each list}} +{{#each navigation}}
            {{#each items}} - {{#if published}} + {{#if enabled}}
          • {{text}}
          • @@ -14,7 +14,7 @@ {{text}}
              {{#each items}} - {{#if published}} + {{#if enabled}}
            • {{text}}
            • {{/if}} {{#if divider}} From 388ae8554d75337e49c17aa0901878cae365a9f5 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Fri, 14 Mar 2014 10:52:16 -0400 Subject: [PATCH 14/81] convert some json files to yaml for readability/commenting, organization --- Gruntfile.js | 6 +- content/helpers/lodash/lodash.md | 26 +++++++++ data/contentOpts.yml | 21 ------- data/helpers.yml | 2 +- data/{config/contentOpts.yml => inline.yml} | 11 ++-- data/paginate.json | 14 ----- data/paginate.yml | 15 +++++ package.json | 15 +++-- structure/_extensions/helpers/console.js | 6 ++ structure/_extensions/helpers/content.js | 65 --------------------- structure/_extensions/helpers/git.js | 35 +++++++++++ structure/_extensions/helpers/inline.js | 38 ++++++++++++ structure/_extensions/helpers/read.js | 14 ++--- structure/includes/docs.hbs | 20 +++++++ structure/includes/source-link.hbs | 2 +- structure/pages/helpers.hbs | 19 +----- 16 files changed, 163 insertions(+), 146 deletions(-) create mode 100644 content/helpers/lodash/lodash.md delete mode 100644 data/contentOpts.yml rename data/{config/contentOpts.yml => inline.yml} (70%) delete mode 100644 data/paginate.json create mode 100644 data/paginate.yml delete mode 100644 structure/_extensions/helpers/content.js create mode 100644 structure/_extensions/helpers/git.js create mode 100644 structure/_extensions/helpers/inline.js create mode 100644 structure/includes/docs.hbs diff --git a/Gruntfile.js b/Gruntfile.js index ffe296d..f14b605 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -233,11 +233,9 @@ module.exports = function(grunt) { options: {livereload: true}, site: { files: [ - '<%= site.content %>/**/*.md', - '<%= site.content %>/_config.yml', - '<%= site.data %>/*.json', - '<%= site.data %>/*.yml', '<%= site.helpers %>', + '<%= site.data %>/*.{yml,json}', + '<%= site.content %>/**/*.md', '<%= site.styles %>/**/*.less', '<%= site.templates %>/**/*.hbs', ], diff --git a/content/helpers/lodash/lodash.md b/content/helpers/lodash/lodash.md new file mode 100644 index 0000000..fa39dde --- /dev/null +++ b/content/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/data/contentOpts.yml b/data/contentOpts.yml deleted file mode 100644 index e07990b..0000000 --- a/data/contentOpts.yml +++ /dev/null @@ -1,21 +0,0 @@ -# ============================================= -# Options for the {{md}} helper -# ============================================= - - -# Information about the source file? -origin: true - -# Partial to prepend to each markdown file after -# it is converted to HTML by the {{md}} helper - -# This is the name of the partial used in the -# 'Edit this source' poposvers -prepend: source-link - -# Partial to append to each markdown file after -# it is converted to HTML by the {{md}} helper. -# Here, we're using this feature to append a -# link to the source file - -append: null \ No newline at end of file diff --git a/data/helpers.yml b/data/helpers.yml index 8f5d70b..5326fd7 100644 --- a/data/helpers.yml +++ b/data/helpers.yml @@ -1,5 +1,5 @@ #=========================================== -# Helpers docs config +# HELPERS DOCS CONFIG #=========================================== published: diff --git a/data/config/contentOpts.yml b/data/inline.yml similarity index 70% rename from data/config/contentOpts.yml rename to data/inline.yml index e07990b..710558e 100644 --- a/data/config/contentOpts.yml +++ b/data/inline.yml @@ -1,21 +1,18 @@ # ============================================= -# Options for the {{md}} helper +# 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 {{md}} helper +# it is converted to HTML by the {{inline}} helper # This is the name of the partial used in the # 'Edit this source' poposvers prepend: source-link # Partial to append to each markdown file after -# it is converted to HTML by the {{md}} helper. +# it is converted to HTML by the {{inline}} helper. # Here, we're using this feature to append a -# link to the source file - -append: null \ No newline at end of file +# link to the source file \ No newline at end of file diff --git a/data/paginate.json b/data/paginate.json deleted file mode 100644 index 43acbc8..0000000 --- a/data/paginate.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "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/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/package.json b/package.json index c7e1857..bb8854a 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "grunt-sync-pkg": "~0.1.2", "grunt-uncss": "~0.2.0", "handlebars-helper-autolink": "~0.1.1", + "handlebars-helper-br": "~0.1.0", "handlebars-helper-disqus": "~0.1.1", "handlebars-helper-feed": "~0.1.1", "handlebars-helper-ghbtns": "~0.1.0", @@ -68,11 +69,14 @@ "handlebars-helper-rel": "~0.1.0", "handlebars-helper-slugify": "~0.2.0", "handlebars-helper-track": "~0.1.0", + "highlight.js": "~8.0.0", "lodash": "~2.4.1", "marked": "0.3.0", "marked-extras": "~0.2.2", "request": "~2.34.0", - "template": "~0.1.5" + "template": "~0.1.5", + "underscore.string": "~2.3.3", + "shelljs": "~0.2.6" }, "keywords": [ "assemble", @@ -80,6 +84,7 @@ "docs", "documentation", "handlebars-helper-autolink", + "handlebars-helper-br", "handlebars-helper-disqus", "handlebars-helper-feed", "handlebars-helper-ghbtns", @@ -89,11 +94,5 @@ "handlebars-helper-slugify", "handlebars-helper-track", "theme" - ], - "dependencies": { - "chalk": "~0.4.0", - "lodash": "~2.4.1", - "highlight.js": "~8.0.0", - "underscore.string": "~2.3.3" - } + ] } diff --git a/structure/_extensions/helpers/console.js b/structure/_extensions/helpers/console.js index b532df5..dd66447 100644 --- a/structure/_extensions/helpers/console.js +++ b/structure/_extensions/helpers/console.js @@ -16,4 +16,10 @@ module.exports.register = function (Handlebars) { Handlebars.registerHelper("warn", function(msg, context) { console.log(chalk.yellow(msg), context); }); + + Handlebars.registerHelper("fail", function(msg, context) { + console.log(chalk.red(msg), context); + }); + + }; \ No newline at end of file diff --git a/structure/_extensions/helpers/content.js b/structure/_extensions/helpers/content.js deleted file mode 100644 index 9fdf160..0000000 --- a/structure/_extensions/helpers/content.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Handlebars Helper: {{content}} - * Copyright (c) 2014 Jon Schlinkert - * Licensed under the MIT License (MIT). - */ -'use strict'; - -var file = require('fs-utils'); -var marked = require('marked'); -var extras = require('marked-extras'); -var matter = require('gray-matter'); -var _ = require('lodash'); - - -module.exports.register = function (Handlebars, options) { - options = options || {}; - options.marked = options.marked || {}; - - // Add `contentOpts` to the options. - var contentOpts = options.contentOpts || {}; - - // Initialize `marked-extras` - extras.init(options.marked); - - // Extend defaults from `marked-extras` with Gruntfile options - var markedOpts = _.extend({}, extras.markedDefaults, options.marked); - - // Set marked.js options - marked.setOptions(markedOpts); - - Handlebars.registerHelper('content', function(name, context, opts) { - opts = opts || {}; - - _.extend(opts, opts.hash || {}); - - var filepath = this; - var str = file.readFileSync(filepath); - var page = matter(str); - var content = page.content; - var metadata = page.context; - - var data = Handlebars.createFrame({filepath: filepath}); - - // Prepend or append any content in the given partial to the output - _.extend(contentOpts, context.data.root.contentOpts || {}); - - var append = ''; - var prepend = ''; - - if(contentOpts.prepend) { - prepend = Handlebars.partials[contentOpts.prepend]; - } - if(contentOpts.append) { - append = Handlebars.partials[contentOpts.append]; - } - - _.defaults(metadata, context.data.root); - var sections = [prepend, content, append].join('\n\n'); - - var fn = Handlebars.compile(sections); - var output = fn(metadata, {data: data}); - - return new Handlebars.SafeString(marked(output)); - }); -}; diff --git a/structure/_extensions/helpers/git.js b/structure/_extensions/helpers/git.js new file mode 100644 index 0000000..8b73a83 --- /dev/null +++ b/structure/_extensions/helpers/git.js @@ -0,0 +1,35 @@ +/** + * Handlebars Helpers: {{expand}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +'use strict'; + +var shell = require('shelljs'); +var origin = require('remote-origin-url'); +var branch = shell.exec('git rev-parse --abbrev-ref HEAD', {silent:true}).output; +var url = origin.url().replace(/\.git$/, ''); + + + +module.exports.register = function (Handlebars) { + + /** + * Current branch of the project's git repository + * @return {String} + */ + + Handlebars.registerHelper("branch", function() { + return branch; + }); + + /** + * Remote origin url of the project's git repository. + * @return {String} + */ + + Handlebars.registerHelper("origin", function() { + return url; + }); +}; diff --git a/structure/_extensions/helpers/inline.js b/structure/_extensions/helpers/inline.js new file mode 100644 index 0000000..410b667 --- /dev/null +++ b/structure/_extensions/helpers/inline.js @@ -0,0 +1,38 @@ +/** + * Handlebars Helper: {{inline}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ +'use strict'; + +var matter = require('gray-matter'); +var _ = require('lodash'); + + +module.exports.register = function (Handlebars, options) { + options = options || {}; + + // Add `inline` to assemble's options. + var inline = options.inline || {}; + + + Handlebars.registerHelper('inline', function(filepath, context) { + var append = '', + prepend = ''; + + var page = matter.read(filepath); + var data = Handlebars.createFrame({filepath: filepath}); + + _.extend(inline, context.data.root.inline || {}); + + // 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] : ''; + + _.defaults(page.context, context.data.root); + 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); + }); +}; \ No newline at end of file diff --git a/structure/_extensions/helpers/read.js b/structure/_extensions/helpers/read.js index 9a24000..dee35b1 100644 --- a/structure/_extensions/helpers/read.js +++ b/structure/_extensions/helpers/read.js @@ -6,17 +6,15 @@ 'use strict'; -var path = require('path'); var matter = require('gray-matter'); -var file = require('fs-utils'); +var _ = require('lodash'); module.exports.register = function (Handlebars) { - Handlebars.registerHelper("read", function(filepath) { - var str = file.readFileSync(path.resolve(filepath)); - - // Use gray-matter to parse content in case YAML front matter - // exists and needs to be stripped. - return new Handlebars.SafeString(matter(str).content + '\n'); + Handlebars.registerHelper("read", function(filepath, context) { + 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)); }); }; \ No newline at end of file diff --git a/structure/includes/docs.hbs b/structure/includes/docs.hbs new file mode 100644 index 0000000..4d23200 --- /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}} + + {{br 2}} + {{/each}} + +
              +{{/each}} \ No newline at end of file diff --git a/structure/includes/source-link.hbs b/structure/includes/source-link.hbs index 475d923..702e653 100644 --- a/structure/includes/source-link.hbs +++ b/structure/includes/source-link.hbs @@ -1,2 +1,2 @@ {{! 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. }} - \ No newline at end of file + \ No newline at end of file diff --git a/structure/pages/helpers.hbs b/structure/pages/helpers.hbs index 6f31ca8..20ee21a 100644 --- a/structure/pages/helpers.hbs +++ b/structure/pages/helpers.hbs @@ -5,20 +5,5 @@ slug: helpers {{> navbar-content }} -{{#each helpers.published}} - -
              - - {{#if files}} - {{#each (expand files)}} - - {{success '>> Reading:' (basename .)}} {{! log a success message }} - {{content (basename .)}} - -
              - {{/each}} - {{/if}} -
              -{{/each}} \ No newline at end of file + +{{> docs helpers.published }} \ No newline at end of file From f0582a77eeb4a77c030e6c4fea0a0008e51f2d54 Mon Sep 17 00:00:00 2001 From: Patrick Burtchaell Date: Fri, 14 Mar 2014 14:11:14 -0500 Subject: [PATCH 15/81] Add examples to options-marked.md --- content/docs/options-marked.md | 35 ++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/content/docs/options-marked.md b/content/docs/options-marked.md index 9ad78e2..066cb12 100644 --- a/content/docs/options-marked.md +++ b/content/docs/options-marked.md @@ -7,7 +7,7 @@ section: configuration ## options.marked -Assemble uses [Marked.js][marked] for processing markdown. Any options from marked can be defined on the `marked` object in the assemble options. This is an example of using all options: +Assemble uses [Marked.js][marked] for processing markdown. Any options from marked can be defined on the `marked` object in the assemble options. ```js assemble: { @@ -40,14 +40,18 @@ assemble: { } ``` -_Please visit the [Marked.js][marked] project to learn more about available options._ (the following is from the [Marked.js][marked] readme). - ### gfm Type: `Boolean` Default: `true` Enable [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown). +```js +options: { + gfm: true | false +} +``` + ### highlight Type: `Function` @@ -72,13 +76,27 @@ Type: `String` Type: `Boolean` Default: `true` -Enable GFM [tables](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables). This option requires the `gfm` option to be true. +To use [tables](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables), ensure that GFM is true. + +```js +options: { + gfm: true, + tables: true +} +``` ### breaks Type: `Boolean` Default: `false` -Enable GFM [line breaks](https://help.github.com/articles/github-flavored-markdown#newlines). This option requires the `gfm` option to be true. +To use [line breaks](https://help.github.com/articles/github-flavored-markdown#newlines), ensure that GFM is true. + +```js +options: { + gfm: true, + breaks: true +} +``` ### pedantic Type: `Boolean` @@ -102,7 +120,7 @@ Use smarter list behavior than the original markdown. May eventually be default Type: `Boolean` Default: `false` -Use "smart" typograhic punctuation for things like quotes and dashes. +Use "smart" punctuation for things like quotes and dashes. ### langPrefix Type: `String` @@ -110,9 +128,10 @@ Default: `lang-` Set the prefix for code block classes. +### More options +Please visit the [Marked.js][marked] project to learn more about available options. #### Marked License - -Marked Copyright (c) 2011-2013, Christopher Jeffrey. (MIT License). See the Marked.js [LICENSE](https://github.com/chjj/marked/blob/master/LICENSE) and [repo][marked] for more info. +Copyright (c) 2011-2014, Christopher Jeffrey. [Licensed MIT](https://github.com/chjj/marked/blob/master/LICENSE). [marked]: https://github.com/chjj/marked "Marked Repo on GitHub" From 258339bb791c97d7b363986f896b7c349b83c185 Mon Sep 17 00:00:00 2001 From: Patrick Burtchaell Date: Fri, 14 Mar 2014 14:12:30 -0500 Subject: [PATCH 16/81] Remove extra space --- content/docs/Overview.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/content/docs/Overview.md b/content/docs/Overview.md index 634275d..c751ff8 100644 --- a/content/docs/Overview.md +++ b/content/docs/Overview.md @@ -19,9 +19,3 @@ That's right, _slackers_. Assemble can make you even more lazy, because it's jus If you haven't tried out assemble, give it a shot. Assemble can be used just for building Handlebars templates if that's all you need for a project. Assemble was created to be a site builder, so it can do orders of magnitude more than Grunt tasks for building templates - - - - - - From 2119ed2fdc94904887425c64c8318cbbf20f5783 Mon Sep 17 00:00:00 2001 From: Patrick Burtchaell Date: Fri, 14 Mar 2014 14:12:53 -0500 Subject: [PATCH 17/81] Remove extra space --- content/docs/Cheatsheet-Handlebars.md | 2 -- content/docs/Cheatsheet-Markdown.md | 2 -- 2 files changed, 4 deletions(-) diff --git a/content/docs/Cheatsheet-Handlebars.md b/content/docs/Cheatsheet-Handlebars.md index a7de8e2..4cdc674 100644 --- a/content/docs/Cheatsheet-Handlebars.md +++ b/content/docs/Cheatsheet-Handlebars.md @@ -311,5 +311,3 @@ TODO: My name is \{{name}}. ``` - - diff --git a/content/docs/Cheatsheet-Markdown.md b/content/docs/Cheatsheet-Markdown.md index 0e5325f..1ee20cc 100644 --- a/content/docs/Cheatsheet-Markdown.md +++ b/content/docs/Cheatsheet-Markdown.md @@ -22,5 +22,3 @@ or just make a comment on [the Gist](https://gist.github.com/jonschlinkert/58546 {{gist "5854601"}} - - From 63e6b051a2ba65796d989087740e09cddc2d1ec1 Mon Sep 17 00:00:00 2001 From: Patrick Burtchaell Date: Fri, 14 Mar 2014 14:13:53 -0500 Subject: [PATCH 18/81] Initial commit of updated Intro and Getting Started Guide --- content/getting-started.md | 23 ++++++++++++--- content/introduction.md | 59 ++++++++++++++++---------------------- 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/content/getting-started.md b/content/getting-started.md index dc0e605..78d68b1 100644 --- a/content/getting-started.md +++ b/content/getting-started.md @@ -1,11 +1,13 @@ - 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. -We're always willing to help new users, so please stop out to [Assemble's GitHub Issues](https://github.com/assemble/assemble/issues) or ask a question on [StackOverflow](http://stackoverflow.com/questions/tagged/assemble) and someone from the core team or our super-supportive community will help you out! +## 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! -## Getting Started +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). Before continuing, be sure to have [Yeoman](http://yeoman.io/gettingstarted.html) installed globally, as well as [Bower](https://github.com/bower/bower) and [grunt-cli](https://github.com/gruntjs/grunt-cli), as Yeoman depends heavily on these both libs. +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: @@ -16,7 +18,20 @@ 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 diff --git a/content/introduction.md b/content/introduction.md index aacbe9a..444c462 100644 --- a/content/introduction.md +++ b/content/introduction.md @@ -1,16 +1,13 @@ # Introduction +> Become familiar with the basics of Assemble. -> Get familiarized with the basic building blocks of Assemble. - -Assemble makes it easy to combine templates, content and data to produce any kind of resulting documents, including web pages, web components, blog posts, and so on. - - - +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. ## Getting started +Visit the [Getting Started Guide][getting-started] for information on how to install, setup and configure your first Assemble project. If you are unfamiliar with [Grunt.js][Grunt] and [Gulp.js][Gulp], two task runners for which Assemble plugins are available, view their getting started guides. Although an in-dept understanding of these tools is not required, it is important to be familiar with the configuration of your entire stack, not just Assemble. - - +[Grunt]: http:// "Grunt.js Getting Started Guide" +[Gulp]: http:// "Gulp.js Getting Started Guide" ## Building blocks @@ -20,52 +17,44 @@ Assemble makes it easy to combine templates, content and data to produce any kin * Behavior * Styles - ## Terminology ### Data +Data is pieces of information. Assemble accepts two types of data: [JSON][JSON] (JavaScript Object Notation) and [YAML][YAML]. -#### Configuration - -#### Context - +[JSON]: http://json.org "JSON Homepage" +[YAML]: http://yaml.org "YAML Hompage" -### Structure +### 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. -#### Template +[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. -A [template](http://en.wikipedia.org/wiki/Template) is a standardized non-executable file type used by computer software as a pre-formatted example on which to base other files, especially documents. +You can learn more about configuration in the [Options][docs/options] documentation. -In other contexts, a template can be described as: +#### Plugin -* a stencil, pattern or overlay used in graphic arts (drawing, painting, etc.) and sewing to replicate letters, shapes or designs -* a pre-developed page layout in electronic or paper media used to make new pages with a similar design, pattern, or style -* Form letter, a predefined letter which retains its primary intent when individually customised with variable data or text. +#### 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. -## Project Organization +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. +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. -> "Boiler plate" originally referred to the maker's label used to identify the builder of steam boilers. - -* **Boilerplate code**, refers to sections of code that have to be included in many places with little or no alteration. -* **Boilerplate prototype**, a broadly working prototype that is constructed from cheaper or simpler materials. This was often applied to unarmoured tanks made of only soft steel, but it has also been applied to non-flyable engineering demonstrations of aircraft or spacecraft, built on simple steel frames rather than lightweight aerospace materials. -* **Boilerplate contract**, standard form contract between two parties that does not allow for negotiation -* **Boilerplate text**, any text that is or can be reused in new contexts or applications without being changed much from the original - - - +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. # Core Concepts ## Primary - - -## Secondary \ No newline at end of file +## Secondary From 3ef9fe507f1337c2131d63b80e95b76cbf5bf1b2 Mon Sep 17 00:00:00 2001 From: Patrick Burtchaell Date: Fri, 14 Mar 2014 14:14:13 -0500 Subject: [PATCH 19/81] Add trailing new line --- content/cheatsheet.md | 2 +- content/core-concepts-long.md | 2 +- content/core-concepts.md | 2 +- content/docs/Announcements.md | 2 +- content/docs/Cheatsheet-Lo-Dash.md | 2 +- content/docs/Collections.md | 2 +- content/docs/Comparison.md | 2 +- content/docs/Context.md | 2 +- content/docs/Contributors.md | 2 +- content/docs/Errors.md | 1 - content/docs/Helpers.md | 2 +- content/docs/Idiomatic-Data.md | 2 +- content/docs/JSON.md | 2 +- content/docs/Layouts.md | 2 +- content/docs/Markdown-Styling.md | 1 - content/docs/Metadata.md | 2 +- content/docs/Outline.md | 2 +- content/docs/Pages-Collections.md | 2 +- content/docs/Quickstart.md | 2 +- content/docs/Snippets.md | 2 +- content/docs/Support.md | 2 +- content/docs/Templates-Overview.md | 1 - content/docs/Who-Uses-Assemble.md | 2 +- content/docs/Why-Assemble.md | 2 +- content/docs/Workflows.md | 2 +- content/docs/YAML-front-matter.md | 1 - content/docs/config-data.md | 1 - content/docs/options-assets.md | 2 +- content/docs/options-ext.md | 2 +- content/docs/options-pages.md | 2 -- content/guides/organizing-front-end-projects.md | 2 +- content/outline.md | 2 +- structure/layouts/README.md | 2 +- structure/layouts/default.hbs | 2 +- structure/layouts/markdown.hbs | 2 +- 35 files changed, 29 insertions(+), 36 deletions(-) diff --git a/content/cheatsheet.md b/content/cheatsheet.md index 4f70920..068a9c9 100644 --- a/content/cheatsheet.md +++ b/content/cheatsheet.md @@ -4,4 +4,4 @@ title: Helpers Cheatsheet published: true --- -{{!}} \ No newline at end of file +{{!}} diff --git a/content/core-concepts-long.md b/content/core-concepts-long.md index 808c643..fbda294 100644 --- a/content/core-concepts-long.md +++ b/content/core-concepts-long.md @@ -83,4 +83,4 @@ A basic layout might look something like this: \{{> body }} - \ No newline at end of file + diff --git a/content/core-concepts.md b/content/core-concepts.md index 0a9c305..a17d53f 100644 --- a/content/core-concepts.md +++ b/content/core-concepts.md @@ -174,4 +174,4 @@ _TODO_ [permalinks]: https://github.com/assemble/assemble-contrib-permalinks -[helpers]: https://github.com/assemble/assemble-docs/tree/master/src/content/helpers \ No newline at end of file +[helpers]: https://github.com/assemble/assemble-docs/tree/master/src/content/helpers diff --git a/content/docs/Announcements.md b/content/docs/Announcements.md index 534afc4..3d11b1d 100644 --- a/content/docs/Announcements.md +++ b/content/docs/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/docs/Cheatsheet-Lo-Dash.md b/content/docs/Cheatsheet-Lo-Dash.md index 5c4107b..40de0da 100644 --- a/content/docs/Cheatsheet-Lo-Dash.md +++ b/content/docs/Cheatsheet-Lo-Dash.md @@ -66,4 +66,4 @@ Precompiling your templates can be a big help when debugging errors you can't re ```js JST.project = ; -``` \ No newline at end of file +``` diff --git a/content/docs/Collections.md b/content/docs/Collections.md index 2a96ced..2f5e7e4 100644 --- a/content/docs/Collections.md +++ b/content/docs/Collections.md @@ -99,4 +99,4 @@ assemble: { ## Related Information -* [FAQ][faq] \ No newline at end of file +* [FAQ][faq] diff --git a/content/docs/Comparison.md b/content/docs/Comparison.md index 6f7bae1..abb276c 100644 --- a/content/docs/Comparison.md +++ b/content/docs/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/content/docs/Context.md b/content/docs/Context.md index c6c4f9e..c3bbf7b 100644 --- a/content/docs/Context.md +++ b/content/docs/Context.md @@ -154,4 +154,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/content/docs/Contributors.md b/content/docs/Contributors.md index 41d10dc..d3c4314 100644 --- a/content/docs/Contributors.md +++ b/content/docs/Contributors.md @@ -3,4 +3,4 @@ title: Contributors area: docs --- -{{#todo}}{{/todo}} \ No newline at end of file +{{#todo}}{{/todo}} diff --git a/content/docs/Errors.md b/content/docs/Errors.md index 525050f..5429d1c 100644 --- a/content/docs/Errors.md +++ b/content/docs/Errors.md @@ -26,4 +26,3 @@ The [assemble/handlebars-helpers](https://github.com/assemble/handlebars-helpers In addition to the existing documentation, issues that have been created to track the discussion, and potential solutions listed above, we are currently documenting all the "reserved" variables and what they do in the documentation. This should be available any day now (as of 7/15/2013) Other feedback or contributions are encouraged. Visit either the [handlebars-helpers issues](https://github.com/assemble/handlebars-helpers/issues) or the [assemble issues](https://github.com/assemble/assemble/issues) to add your voice to the conversation. - diff --git a/content/docs/Helpers.md b/content/docs/Helpers.md index 382f2a9..335913c 100644 --- a/content/docs/Helpers.md +++ b/content/docs/Helpers.md @@ -94,4 +94,4 @@ We'd like to express our gratitude to Dan Harper, Elving Rodriquez! A number of 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" \ No newline at end of file +[handlebars-helpers]: http://github.com/assemble/handlebars-helpers "Extensive collection of Handlebars helpers" diff --git a/content/docs/Idiomatic-Data.md b/content/docs/Idiomatic-Data.md index d54807b..78b40f9 100644 --- a/content/docs/Idiomatic-Data.md +++ b/content/docs/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/content/docs/JSON.md b/content/docs/JSON.md index ac53856..fdaf743 100644 --- a/content/docs/JSON.md +++ b/content/docs/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/content/docs/Layouts.md b/content/docs/Layouts.md index d0cb5bb..fb6561e 100644 --- a/content/docs/Layouts.md +++ b/content/docs/Layouts.md @@ -636,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/content/docs/Markdown-Styling.md b/content/docs/Markdown-Styling.md index 99044d1..0091ee4 100644 --- a/content/docs/Markdown-Styling.md +++ b/content/docs/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/Metadata.md b/content/docs/Metadata.md index 83e0115..af1fb76 100644 --- a/content/docs/Metadata.md +++ b/content/docs/Metadata.md @@ -7,4 +7,4 @@ section: data published: false --- -{{! metadata }} \ No newline at end of file +{{! metadata }} diff --git a/content/docs/Outline.md b/content/docs/Outline.md index 8d8ff73..c1b0a0c 100644 --- a/content/docs/Outline.md +++ b/content/docs/Outline.md @@ -196,4 +196,4 @@ The rendered output will be:
    -``` \ No newline at end of file +``` diff --git a/content/docs/Pages-Collections.md b/content/docs/Pages-Collections.md index 5f07a52..2fcc347 100644 --- a/content/docs/Pages-Collections.md +++ b/content/docs/Pages-Collections.md @@ -461,4 +461,4 @@ Add the `pages` object "long-format" to your configuration file, and create sub- } ``` -{{/draft}} \ No newline at end of file +{{/draft}} diff --git a/content/docs/Quickstart.md b/content/docs/Quickstart.md index 7514110..f274516 100644 --- a/content/docs/Quickstart.md +++ b/content/docs/Quickstart.md @@ -58,4 +58,4 @@ Ideally, you should start with a nice clean Gruntfile and a brand new `src` dire Have fun! -#### Also see [Resources][resources] → \ No newline at end of file +#### Also see [Resources][resources] → diff --git a/content/docs/Snippets.md b/content/docs/Snippets.md index cdb021c..33372a0 100644 --- a/content/docs/Snippets.md +++ b/content/docs/Snippets.md @@ -9,4 +9,4 @@ published: false --- -{{!}} \ No newline at end of file +{{!}} diff --git a/content/docs/Support.md b/content/docs/Support.md index 7e12fd9..d36fc03 100644 --- a/content/docs/Support.md +++ b/content/docs/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/content/docs/Templates-Overview.md b/content/docs/Templates-Overview.md index 5338ae5..378baed 100644 --- a/content/docs/Templates-Overview.md +++ b/content/docs/Templates-Overview.md @@ -474,4 +474,3 @@ reusable blocks of code which are not * [Partials][partials] * [Layouts][layouts] * [Helpers][helpers] - diff --git a/content/docs/Who-Uses-Assemble.md b/content/docs/Who-Uses-Assemble.md index 639a214..24db534 100644 --- a/content/docs/Who-Uses-Assemble.md +++ b/content/docs/Who-Uses-Assemble.md @@ -22,4 +22,4 @@ If you're new to Assemble, it might help to see how actual projects are using it * h5bp/Effeckt * LESS/Less.js: [lesscss.org](http://lesscss.org) * Gruntjs.com: ??? -* Upstage: \ No newline at end of file +* Upstage: diff --git a/content/docs/Why-Assemble.md b/content/docs/Why-Assemble.md index 980cf84..19b59f9 100644 --- a/content/docs/Why-Assemble.md +++ b/content/docs/Why-Assemble.md @@ -53,4 +53,4 @@ 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 diff --git a/content/docs/Workflows.md b/content/docs/Workflows.md index 91a65eb..81a3800 100644 --- a/content/docs/Workflows.md +++ b/content/docs/Workflows.md @@ -6,4 +6,4 @@ area: docs published: false --- -{{! TODO }} \ No newline at end of file +{{! TODO }} diff --git a/content/docs/YAML-front-matter.md b/content/docs/YAML-front-matter.md index 9b1adba..919d42f 100644 --- a/content/docs/YAML-front-matter.md +++ b/content/docs/YAML-front-matter.md @@ -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/content/docs/config-data.md b/content/docs/config-data.md index 413d2ab..8e6d4f0 100644 --- a/content/docs/config-data.md +++ b/content/docs/config-data.md @@ -46,4 +46,3 @@ pages: <%= config.templates %>/pages includes: <%= config.templates %>/includes layouts: <%= config.templates %>/layouts ``` - diff --git a/content/docs/options-assets.md b/content/docs/options-assets.md index c9db3fc..f6aaa0a 100644 --- a/content/docs/options-assets.md +++ 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/content/docs/options-ext.md b/content/docs/options-ext.md index 6537b80..5d08173 100644 --- a/content/docs/options-ext.md +++ b/content/docs/options-ext.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/content/docs/options-pages.md b/content/docs/options-pages.md index 4cb5dc8..07f4809 100644 --- a/content/docs/options-pages.md +++ b/content/docs/options-pages.md @@ -36,5 +36,3 @@ layout: base-layout.hbs \{{> navbar }} \{{> body }} ``` - - diff --git a/content/guides/organizing-front-end-projects.md b/content/guides/organizing-front-end-projects.md index 866bd22..22f9d7a 100644 --- a/content/guides/organizing-front-end-projects.md +++ b/content/guides/organizing-front-end-projects.md @@ -39,4 +39,4 @@ More about Jon * Judge for [Node Knockout 2013](), a 48-hour Node.js hackathon with contestants worldwide. * Jon and fellow-Assemble-creator Brian Woodward -* Has given talks about JavaScript, Node.js and Assemble. Always open to new speaking opportunities! \ No newline at end of file +* Has given talks about JavaScript, Node.js and Assemble. Always open to new speaking opportunities! diff --git a/content/outline.md b/content/outline.md index 774808b..fb64534 100644 --- a/content/outline.md +++ b/content/outline.md @@ -36,4 +36,4 @@ *** -## Contributing \ No newline at end of file +## Contributing diff --git a/structure/layouts/README.md b/structure/layouts/README.md index c5cfac3..5526322 100644 --- a/structure/layouts/README.md +++ b/structure/layouts/README.md @@ -2,4 +2,4 @@ > 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. \ No newline at end of file +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/default.hbs b/structure/layouts/default.hbs index 8f33ec0..a024ebd 100644 --- a/structure/layouts/default.hbs +++ b/structure/layouts/default.hbs @@ -22,4 +22,4 @@ layout: base {{> paginate paginate.next }} {{/is}} - \ No newline at end of file + diff --git a/structure/layouts/markdown.hbs b/structure/layouts/markdown.hbs index 3a08d43..10b127b 100644 --- a/structure/layouts/markdown.hbs +++ b/structure/layouts/markdown.hbs @@ -3,4 +3,4 @@ layout: default --- {{#markdown}} {{> body }} -{{/markdown}} \ No newline at end of file +{{/markdown}} From efff26939dfb2a764fe92e61b487381f9fb5cba7 Mon Sep 17 00:00:00 2001 From: Pavel Binar Date: Sat, 15 Mar 2014 14:42:32 +0100 Subject: [PATCH 20/81] Add remote-origin-url into package.json required by git helper --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index bb8854a..acac374 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,8 @@ "request": "~2.34.0", "template": "~0.1.5", "underscore.string": "~2.3.3", - "shelljs": "~0.2.6" + "shelljs": "~0.2.6", + "remote-origin-url": "^0.2.1" }, "keywords": [ "assemble", From 52526fddff5b6de947ced137b3876451e5ace665 Mon Sep 17 00:00:00 2001 From: Pavel Binar Date: Sat, 15 Mar 2014 17:24:29 +0100 Subject: [PATCH 21/81] add Typeplate to users list --- data/users.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/users.yml b/data/users.yml index ed6c086..0ffba95 100644 --- a/data/users.yml +++ b/data/users.yml @@ -28,3 +28,6 @@ - name: Topcoat url: image: +- name: Typeplate + url: https://github.com/typeplate/typeplate.github.io + image: From 1946451b6e307f0b5ff82d6f2bbf4c76be55951b Mon Sep 17 00:00:00 2001 From: Pavel Binar Date: Mon, 17 Mar 2014 19:41:10 +0100 Subject: [PATCH 22/81] update assemble users data --- data/users.yml | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/data/users.yml b/data/users.yml index 0ffba95..f7abc92 100644 --- a/data/users.yml +++ b/data/users.yml @@ -12,22 +12,23 @@ # 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 - url: + url: https://github.com/zurb/ink/blob/master/Gruntfile.js image: - name: Zurb Foundation - url: + url: https://github.com/zurb/foundation/blob/master/Gruntfile.js image: -- name: Less.js - url: +- name: Typeplate + url: https://github.com/typeplate/typeplate.github.io/blob/master/Gruntfile.js image: -- name: Zurb Ink - url: +- name: Effeckt.css + url: https://github.com/h5bp/Effeckt.css/blob/master/Gruntfile.js image: -- name: Topcoat - url: +- name: Less.js + url: https://github.com/less/less-docs/blob/master/Gruntfile.js image: -- name: Typeplate - url: https://github.com/typeplate/typeplate.github.io +- name: Topcoat + url: https://github.com/topcoat/topcoat-grunt-telemetry/blob/master/Gruntfile.js image: From a8eace394ce8d7b4b297df1778d61e40998a4038 Mon Sep 17 00:00:00 2001 From: Pavel Binar Date: Mon, 17 Mar 2014 19:53:08 +0100 Subject: [PATCH 23/81] Improved basename.js helper ; code done by @jonschlinkert --- structure/_extensions/helpers/basename.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/structure/_extensions/helpers/basename.js b/structure/_extensions/helpers/basename.js index 6671a4f..e0368b1 100644 --- a/structure/_extensions/helpers/basename.js +++ b/structure/_extensions/helpers/basename.js @@ -4,10 +4,12 @@ * Licensed under the MIT License (MIT). */ +var path = require('path'); + module.exports.register = function (Handlebars) { 'use strict'; Handlebars.registerHelper("basename", function(filepath) { - return require('fs-utils').name(filepath); + return path.basename(filepath); }); }; \ No newline at end of file From 053c4c2c88fa8dd904839d8024060e9677fd404a Mon Sep 17 00:00:00 2001 From: Pavel Binar Date: Mon, 17 Mar 2014 19:57:31 +0100 Subject: [PATCH 24/81] Add template.js file header --- structure/_extensions/plugins/lib/template.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/structure/_extensions/plugins/lib/template.js b/structure/_extensions/plugins/lib/template.js index 832e0c0..2b1fea8 100644 --- a/structure/_extensions/plugins/lib/template.js +++ b/structure/_extensions/plugins/lib/template.js @@ -1,3 +1,9 @@ +/** + * Template Plugin + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + module.exports = [ '', ' ', From 9dd8b96642267022d1fa676e47a8c7b383f65d2c Mon Sep 17 00:00:00 2001 From: Pavel Binar Date: Mon, 17 Mar 2014 20:07:27 +0100 Subject: [PATCH 25/81] Courtesy of less.js / @lukeapage for holder-404-avoid.js --- structure/_extensions/plugins/holder-404-avoid.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/structure/_extensions/plugins/holder-404-avoid.js b/structure/_extensions/plugins/holder-404-avoid.js index a50f379..6e438a7 100644 --- a/structure/_extensions/plugins/holder-404-avoid.js +++ b/structure/_extensions/plugins/holder-404-avoid.js @@ -1,8 +1,8 @@ /* - * assemble-docs + * Adapted from holder-404-avoid.js + * github.com/less/less-docs + * @lukeapage * - * Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors. - * Licensed under the MIT license. */ var options = { @@ -12,14 +12,13 @@ var options = { var cheerio = require('cheerio'); -// Adapted from holder-404-avoid.js from less/less-docs module.exports = function (params, callback) { 'use strict'; - // load current page content + // Load current page content var $ = cheerio.load(params.content); - // get all the anchor tags from inside the headers + // Get all the anchor tags from inside the headers var images = $('img[src]'); images.each(function (i, e) { From d1a7a02eb5c8d480f8f2a75010ac38b0a4db14eb Mon Sep 17 00:00:00 2001 From: Pavel Binar Date: Mon, 17 Mar 2014 20:09:44 +0100 Subject: [PATCH 26/81] Courtesy of less.js / @lukeapage for link-checker.js --- structure/_extensions/plugins/link-checker.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/structure/_extensions/plugins/link-checker.js b/structure/_extensions/plugins/link-checker.js index 2caee9a..f8f29b9 100644 --- a/structure/_extensions/plugins/link-checker.js +++ b/structure/_extensions/plugins/link-checker.js @@ -1,3 +1,9 @@ +/* + * Adapted from link-checker.js + * github.com/less/less-docs + * @lukeapage + * + */ var options = { stage: 'render:post:page' From 5d417575ee4f4bc9f44ced0faa9f76bee263eb13 Mon Sep 17 00:00:00 2001 From: Pavel Binar Date: Mon, 17 Mar 2014 20:42:58 +0100 Subject: [PATCH 27/81] add image and fonts reference to main assemble data file --- .assemblerc.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.assemblerc.yml b/.assemblerc.yml index c5c134e..bc91a83 100644 --- a/.assemblerc.yml +++ b/.assemblerc.yml @@ -17,6 +17,8 @@ utils: data/utils # Assets > fonts, icons, images etc. assets: assets +images: <%= site.assets %>/images +fonts: <%= site.assets %>/fonts # Styles styles: styles From 5fdba1e6c1844c3d2ec6bb391981153dcf1bde02 Mon Sep 17 00:00:00 2001 From: Pavel Binar Date: Mon, 17 Mar 2014 20:59:40 +0100 Subject: [PATCH 28/81] Update users data - add images for - Zurb Ink and Typeplate --- data/users.yml | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/data/users.yml b/data/users.yml index f7abc92..8f65801 100644 --- a/data/users.yml +++ b/data/users.yml @@ -15,20 +15,37 @@ # TODO: Add more references from: https://github.com/assemble/assemble/issues/300 - name: Zurb Ink - url: https://github.com/zurb/ink/blob/master/Gruntfile.js - image: + GruntfileUrl: https://github.com/zurb/ink/blob/master/Gruntfile.js + websiteUrl: http://zurb.com/ink/ + imageUrl: + imagePath: <%= site.images %>/users/ + - name: Zurb Foundation - url: https://github.com/zurb/foundation/blob/master/Gruntfile.js - image: + GruntfileUrl: https://github.com/zurb/foundation/blob/master/Gruntfile.js + websiteUrl: http://foundation.zurb.com/ + imageUrl: + imagePath: <%= site.images %>/users/ + - name: Typeplate - url: https://github.com/typeplate/typeplate.github.io/blob/master/Gruntfile.js - image: + GruntfileUrl: https://github.com/typeplate/typeplate.github.io/blob/master/Gruntfile.js + websiteUrl: 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 - url: https://github.com/h5bp/Effeckt.css/blob/master/Gruntfile.js - image: + GruntfileUrl: https://github.com/h5bp/Effeckt.css/blob/master/Gruntfile.js + websiteUrl: http://h5bp.github.io/Effeckt.css/ + imageUrl: + imagePath: <%= site.images %>/users/ + - name: Less.js - url: https://github.com/less/less-docs/blob/master/Gruntfile.js - image: + GruntfileUrl: https://github.com/less/less-docs/blob/master/Gruntfile.js + websiteUrl: 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 - url: https://github.com/topcoat/topcoat-grunt-telemetry/blob/master/Gruntfile.js - image: + GruntfileUrl: https://github.com/topcoat/topcoat-grunt-telemetry/blob/master/Gruntfile.js + websiteUrl: http://topcoat.io/ + imageUrl: + imagePath: <%= site.images %>/users/ From aa09bf1d82081cd98637dcac3f6c75f37b198705 Mon Sep 17 00:00:00 2001 From: Pavel Binar Date: Mon, 17 Mar 2014 21:00:38 +0100 Subject: [PATCH 29/81] Add users images locally --- assets/images/users/less.png | Bin 0 -> 13831 bytes assets/images/users/typeplate.png | Bin 0 -> 13420 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/images/users/less.png create mode 100644 assets/images/users/typeplate.png diff --git a/assets/images/users/less.png b/assets/images/users/less.png new file mode 100644 index 0000000000000000000000000000000000000000..1a739b3e9903d8c023ade58af038277b60719d5a GIT binary patch literal 13831 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 O0000 Date: Mon, 17 Mar 2014 22:34:24 -0400 Subject: [PATCH 30/81] adds "fun facts" concept --- Gruntfile.js | 1 - data/fun_facts.yml | 5 +++++ data/utils/mixins.js | 11 ++++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 data/fun_facts.yml diff --git a/Gruntfile.js b/Gruntfile.js index f14b605..02a9e0a 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -26,7 +26,6 @@ module.exports = function(grunt) { site : grunt.file.readYAML('.assemblerc.yml'), pkg : grunt.file.readJSON('package.json'), core : grunt.file.readJSON('data/core.json'), - helpers: grunt.file.readYAML('data/helpers.yml'), vendor : grunt.file.readJSON('.bowerrc').directory, bootstrap: { diff --git a/data/fun_facts.yml b/data/fun_facts.yml new file mode 100644 index 0000000..1209d24 --- /dev/null +++ b/data/fun_facts.yml @@ -0,0 +1,5 @@ +helpers: +- "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." \ No newline at end of file diff --git a/data/utils/mixins.js b/data/utils/mixins.js index 48122cc..254b7b2 100644 --- a/data/utils/mixins.js +++ b/data/utils/mixins.js @@ -1,5 +1,14 @@ - var url = require('url'); +var file = require('fs-utils'); + + +/** + * Count the number of files. + */ + +exports.fileCount = function(str) { + return file.expand(str).length; +}; /** * Get the hostname of a URL From a755ab234a0fc8f335cfa8866e9b183a8fdc4b40 Mon Sep 17 00:00:00 2001 From: Brian Woodward Date: Tue, 18 Mar 2014 11:08:03 -0400 Subject: [PATCH 31/81] ensuring that some objects aren't undefined --- structure/_extensions/helpers/inline.js | 4 ++-- structure/_extensions/helpers/isActive.js | 4 ++-- structure/_extensions/helpers/read.js | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/structure/_extensions/helpers/inline.js b/structure/_extensions/helpers/inline.js index 410b667..e956019 100644 --- a/structure/_extensions/helpers/inline.js +++ b/structure/_extensions/helpers/inline.js @@ -23,7 +23,7 @@ module.exports.register = function (Handlebars, options) { var page = matter.read(filepath); var data = Handlebars.createFrame({filepath: filepath}); - _.extend(inline, context.data.root.inline || {}); + _.extend(inline, context.data.inline || {}); // Prepend or append any content in the given partial to the output prepend = inline.prepend ? Handlebars.partials[inline.prepend] : ''; @@ -35,4 +35,4 @@ module.exports.register = function (Handlebars, options) { var result = template(page.context, {data: data}); return new Handlebars.SafeString(result); }); -}; \ No newline at end of file +}; diff --git a/structure/_extensions/helpers/isActive.js b/structure/_extensions/helpers/isActive.js index 7ce6c14..9f25823 100644 --- a/structure/_extensions/helpers/isActive.js +++ b/structure/_extensions/helpers/isActive.js @@ -19,14 +19,14 @@ module.exports.register = function (Handlebars, options) { * @usage: {{isActive}} */ Handlebars.registerHelper('isActive', function(current, options) { - var context = _.extend(opts.data, this); + var context = _.extend({}, opts.data, 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 + '"'; } return new Handlebars.SafeString(modifier); }); }; - diff --git a/structure/_extensions/helpers/read.js b/structure/_extensions/helpers/read.js index dee35b1..fef3693 100644 --- a/structure/_extensions/helpers/read.js +++ b/structure/_extensions/helpers/read.js @@ -12,9 +12,10 @@ var _ = require('lodash'); module.exports.register = function (Handlebars) { Handlebars.registerHelper("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)); }); -}; \ No newline at end of file +}; From 0448cbc0ed3bf09b76d5a0228ab3ec13d23281d8 Mon Sep 17 00:00:00 2001 From: Brian Woodward Date: Tue, 18 Mar 2014 14:46:36 -0400 Subject: [PATCH 32/81] adding some migration pages --- content/migrations/helpers.md | 52 ++++++++++++++++++++++++++++++++++ content/migrations/plugins.md | 10 +++++++ data/migrations.yml | 14 +++++++++ structure/pages/migrations.hbs | 9 ++++++ 4 files changed, 85 insertions(+) create mode 100644 content/migrations/helpers.md create mode 100644 content/migrations/plugins.md create mode 100644 data/migrations.yml create mode 100644 structure/pages/migrations.hbs diff --git a/content/migrations/helpers.md b/content/migrations/helpers.md new file mode 100644 index 0000000..8422ccf --- /dev/null +++ b/content/migrations/helpers.md @@ -0,0 +1,52 @@ +--- +title: Migrating Helpers from Assemble v0.4.0 to Assemble v0.5.0 +author: Brian Woodward +--- + +> This article contains the basic steps to migrate helpers to Assemble v0.5.0 + +[Assemble v0.5.0](https://github.com/assemble/assemble/tree/v0.5.0) is using [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 helpers to be used with v0.5.0. + +## Before v0.5.0 +Helpers were required to export a `register` function that manually register helper functions with Handlebars: + +```javascript +module.exports.register = function (Handlebars, options, params) { + Handlebars.registerHelper('foo', function () { + return 'bar'; + }); +}; +``` + +## Now +Using [boson](https://github.com/jonschlinkert/boson) we now just export a function that can optionally take a `config` object. The only requirement is that this function returns an object hash of helpers that will get registered with Handlebars. This lets us use the helpers in other applications that aren't specific to assemble: + +```javascript +module.exports = function (config) { + return { + 'foo': function () { + return 'bar'; + } + }; +}; +``` + +The `config` object is the current instance of `assemble` so helpers can take advantage of the assemble API and the current `context`. The following is an example of a helper that merges the current assemble context with the context that is passed into a helper: + +```javascript +var _ = require('lodash'); +module.exports = function (config) { + var withContext = function (ctx, options) { + var context = _.extend({}, config.context(), ctx); + context = config.Handlebars.createFrame(context); + return options.fn(this, { data: context }); + }; + + return { + 'withContext': withContext + }; +}; +``` +You'll notice that the current instance of `Handlebars` being used is also exposed on the `config` object. diff --git a/content/migrations/plugins.md b/content/migrations/plugins.md new file mode 100644 index 0000000..57cfb71 --- /dev/null +++ b/content/migrations/plugins.md @@ -0,0 +1,10 @@ +--- +title: Migrating Plugins from Assemble v0.4.0 to Assemble v0.5.0 +author: Brian Woodward +--- + +> This article contains the basic steps to migrate plugins to Assemble v0.5.0 + +[Assemble v0.5.0](https://github.com/assemble/assemble/tree/v0.5.0) is using [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. diff --git a/data/migrations.yml b/data/migrations.yml new file mode 100644 index 0000000..025963a --- /dev/null +++ b/data/migrations.yml @@ -0,0 +1,14 @@ +#=========================================== +# MIGRATIONS DOCS CONFIG +#=========================================== + +published: + helpers: + title: Helpers + files: "content/migrations/helpers.md" + + plugins: + title: Plugins + files: "content/migrations/plugins.md" + +unpublished: diff --git a/structure/pages/migrations.hbs b/structure/pages/migrations.hbs new file mode 100644 index 0000000..edb5295 --- /dev/null +++ b/structure/pages/migrations.hbs @@ -0,0 +1,9 @@ +--- +title: Migrations +slug: migrations +--- + +{{> navbar-content }} + + +{{> docs migrations.published }} From ab65eec789da857c6861f08c0b7545668a0a82b2 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Tue, 18 Mar 2014 16:45:30 -0400 Subject: [PATCH 33/81] Merge branch 'origin/v0.3.0' --- .assemblerc.yml | 2 + assets/images/users/less.png | Bin 0 -> 13831 bytes assets/images/users/typeplate.png | Bin 0 -> 13420 bytes content/cheatsheet.md | 2 +- content/docs/Announcements.md | 2 +- content/docs/Cheatsheet-Handlebars.md | 2 - content/docs/Cheatsheet-Lo-Dash.md | 2 +- content/docs/Cheatsheet-Markdown.md | 2 - content/docs/Collections.md | 2 +- content/docs/Comparison.md | 2 +- content/docs/Context.md | 2 +- content/docs/Contributors.md | 2 +- content/docs/Errors.md | 1 - content/docs/Helpers.md | 2 +- content/docs/Idiomatic-Data.md | 2 +- content/docs/JSON.md | 2 +- content/docs/Layouts.md | 2 +- content/docs/Markdown-Styling.md | 1 - content/docs/Markdown.md | 78 +++----------- content/docs/Metadata.md | 2 +- content/docs/Options.md | 99 +++++++++--------- content/docs/Outline.md | 2 +- content/docs/Overview.md | 6 -- content/docs/Quickstart.md | 2 +- content/docs/Snippets.md | 2 +- content/docs/Support.md | 2 +- content/docs/Templates-Overview.md | 1 - content/docs/Who-Uses-Assemble.md | 2 +- content/docs/Why-Assemble.md | 2 +- content/docs/YAML-front-matter.md | 1 - content/docs/config-data.md | 1 - content/docs/options-assets.md | 2 +- content/docs/options-ext.md | 2 +- content/docs/options-layoutdir.md | 78 +++++++------- content/docs/options-marked.md | 35 +++++-- content/docs/options-pages.md | 2 - content/docs/options-partials.md | 2 + content/getting-started/core-concepts-long.md | 2 +- content/getting-started/core-concepts.md | 2 +- content/getting-started/getting-started.md | 23 +++- content/getting-started/introduction.md | 59 +++++------ .../guides/organizing-front-end-projects.md | 2 +- content/migrations/helpers.md | 52 +++++++++ content/migrations/plugins.md | 10 ++ data/migrations.yml | 14 +++ data/users.yml | 43 ++++++-- package.json | 3 +- structure/_extensions/helpers/basename.js | 4 +- structure/_extensions/helpers/inline.js | 4 +- structure/_extensions/helpers/isActive.js | 4 +- structure/_extensions/helpers/read.js | 3 +- .../_extensions/plugins/holder-404-avoid.js | 11 +- structure/_extensions/plugins/lib/template.js | 6 ++ structure/_extensions/plugins/link-checker.js | 6 ++ structure/layouts/README.md | 2 +- structure/layouts/default.hbs | 2 +- structure/layouts/markdown.hbs | 2 +- structure/pages/migrations.hbs | 9 ++ 58 files changed, 346 insertions(+), 268 deletions(-) create mode 100644 assets/images/users/less.png create mode 100644 assets/images/users/typeplate.png create mode 100644 content/migrations/helpers.md create mode 100644 content/migrations/plugins.md create mode 100644 data/migrations.yml create mode 100644 structure/pages/migrations.hbs diff --git a/.assemblerc.yml b/.assemblerc.yml index c5c134e..bc91a83 100644 --- a/.assemblerc.yml +++ b/.assemblerc.yml @@ -17,6 +17,8 @@ utils: data/utils # Assets > fonts, icons, images etc. assets: assets +images: <%= site.assets %>/images +fonts: <%= site.assets %>/fonts # Styles styles: styles diff --git a/assets/images/users/less.png b/assets/images/users/less.png new file mode 100644 index 0000000000000000000000000000000000000000..1a739b3e9903d8c023ade58af038277b60719d5a GIT binary patch literal 13831 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 O0000 ``` - - diff --git a/content/docs/Cheatsheet-Lo-Dash.md b/content/docs/Cheatsheet-Lo-Dash.md index 5c4107b..40de0da 100644 --- a/content/docs/Cheatsheet-Lo-Dash.md +++ b/content/docs/Cheatsheet-Lo-Dash.md @@ -66,4 +66,4 @@ Precompiling your templates can be a big help when debugging errors you can't re ```js JST.project = ; -``` \ No newline at end of file +``` diff --git a/content/docs/Cheatsheet-Markdown.md b/content/docs/Cheatsheet-Markdown.md index 0e5325f..1ee20cc 100644 --- a/content/docs/Cheatsheet-Markdown.md +++ b/content/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/content/docs/Collections.md b/content/docs/Collections.md index 12b6975..444240a 100644 --- a/content/docs/Collections.md +++ b/content/docs/Collections.md @@ -99,4 +99,4 @@ assemble: { ## Related Information -* [FAQ][faq] \ No newline at end of file +* [FAQ][faq] diff --git a/content/docs/Comparison.md b/content/docs/Comparison.md index 6f7bae1..abb276c 100644 --- a/content/docs/Comparison.md +++ b/content/docs/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/content/docs/Context.md b/content/docs/Context.md index c6c4f9e..c3bbf7b 100644 --- a/content/docs/Context.md +++ b/content/docs/Context.md @@ -154,4 +154,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/content/docs/Contributors.md b/content/docs/Contributors.md index 41d10dc..d3c4314 100644 --- a/content/docs/Contributors.md +++ b/content/docs/Contributors.md @@ -3,4 +3,4 @@ title: Contributors area: docs --- -{{#todo}}{{/todo}} \ No newline at end of file +{{#todo}}{{/todo}} diff --git a/content/docs/Errors.md b/content/docs/Errors.md index 525050f..5429d1c 100644 --- a/content/docs/Errors.md +++ b/content/docs/Errors.md @@ -26,4 +26,3 @@ The [assemble/handlebars-helpers](https://github.com/assemble/handlebars-helpers In addition to the existing documentation, issues that have been created to track the discussion, and potential solutions listed above, we are currently documenting all the "reserved" variables and what they do in the documentation. This should be available any day now (as of 7/15/2013) Other feedback or contributions are encouraged. Visit either the [handlebars-helpers issues](https://github.com/assemble/handlebars-helpers/issues) or the [assemble issues](https://github.com/assemble/assemble/issues) to add your voice to the conversation. - diff --git a/content/docs/Helpers.md b/content/docs/Helpers.md index 382f2a9..335913c 100644 --- a/content/docs/Helpers.md +++ b/content/docs/Helpers.md @@ -94,4 +94,4 @@ We'd like to express our gratitude to Dan Harper, Elving Rodriquez! A number of 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" \ No newline at end of file +[handlebars-helpers]: http://github.com/assemble/handlebars-helpers "Extensive collection of Handlebars helpers" diff --git a/content/docs/Idiomatic-Data.md b/content/docs/Idiomatic-Data.md index d54807b..78b40f9 100644 --- a/content/docs/Idiomatic-Data.md +++ b/content/docs/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/content/docs/JSON.md b/content/docs/JSON.md index ac53856..fdaf743 100644 --- a/content/docs/JSON.md +++ b/content/docs/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/content/docs/Layouts.md b/content/docs/Layouts.md index 4bf6462..75f311f 100644 --- a/content/docs/Layouts.md +++ b/content/docs/Layouts.md @@ -636,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/content/docs/Markdown-Styling.md b/content/docs/Markdown-Styling.md index 99044d1..0091ee4 100644 --- a/content/docs/Markdown-Styling.md +++ b/content/docs/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/Markdown.md b/content/docs/Markdown.md index 666717b..0b2db39 100644 --- a/content/docs/Markdown.md +++ b/content/docs/Markdown.md @@ -18,24 +18,17 @@ tags: 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: +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"). -* Write entire documents in markdown, and choose where and when to compile them to HTML -* Write document fragments in markdown, so they can be "included" or used as partials within other larger documents -* Write sections of markdown directly inside HTML documents (referred to as "inline markdown") +### Markdown expression - -### "Include" extenal content Use the markdown expression, `\{{md}}`, to enable importing of external markdown content. -**Example #1: using full path** - ```handlebars -\{{md ../path/to/content.md}} +\{{md "../path/to/content.md"}} ``` -**Example #2: using variables** -Or use a variable instead of setting the path directly inside the template. For example you can add the content variable to the [YAML Front-Matter](https://github.com/assemble/assemble/wiki/YAML-Front-Matter): +Alternatively, you can add the content variable to the [YAML Front Matter][options#yaml-font-matter-options] (YFM) of a page. ```yaml --- @@ -45,75 +38,34 @@ content: ../path/to/content.md --- ``` -then use it like this: +This will allow you to just use just `content` in the markdown expression, the path will be pulled from YFM. ```handlebars \{{md content}} ``` -### Markdown "includes" - -Using the `\{{md}}` markdown helper, you can import markdown formatted content from another file, and render it to HTML. For example: - -Assuming we have a file named `index.hbs`, and we add the following: - -```handlebars -\{{md '../path/to/content.md'}} -``` - -And give that `content.md` contains the following: - -```markdown -# Getting Started -Lorem Ipsum... -``` - -When we run `grunt assemble`, a file named `index.html` will be rendered containing: - -```html -

Getting Started

-Lorem Ipsum... -``` - -The same can be accomplished by specifying the path to the file in the YAML Front Matter: - -```handlebars ---- -content: ../path/to/content.md ---- - -\{{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 -

My Site

+
\{{#markdown}} -## Inline Markdown is awesome +## But Inline Markdown is awesome -> this is markdown content +> This is markdown content -* useful for simple content -* great for blog posts -* easier on the eyes than angle brackets -* even links look prettier +* 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) -### Even Prettier links - -Embed handlebars templates to make them even prettier. - -\{{#page.links}} -[\{{text}}](\{{href}}) -\{{/page.links}} - \{{/markdown}} ``` @@ -125,7 +77,3 @@ In a layout, can also wrap the `\{{> body }}` tag with the `\{{#markdown}}...\{{ \{{> body }} \{{/markdown}} ``` - -## Related Information - -* [options.marked][options-markded] \ No newline at end of file diff --git a/content/docs/Metadata.md b/content/docs/Metadata.md index 83e0115..af1fb76 100644 --- a/content/docs/Metadata.md +++ b/content/docs/Metadata.md @@ -7,4 +7,4 @@ section: data published: false --- -{{! metadata }} \ No newline at end of file +{{! metadata }} diff --git a/content/docs/Options.md b/content/docs/Options.md index 9c43a30..5338bfb 100644 --- a/content/docs/Options.md +++ b/content/docs/Options.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/content/docs/Outline.md b/content/docs/Outline.md index 8d8ff73..c1b0a0c 100644 --- a/content/docs/Outline.md +++ b/content/docs/Outline.md @@ -196,4 +196,4 @@ The rendered output will be: -``` \ No newline at end of file +``` diff --git a/content/docs/Overview.md b/content/docs/Overview.md index 634275d..c751ff8 100644 --- a/content/docs/Overview.md +++ b/content/docs/Overview.md @@ -19,9 +19,3 @@ That's right, _slackers_. Assemble can make you even more lazy, because it's jus If you haven't tried out assemble, give it a shot. Assemble can be used just for building Handlebars templates if that's all you need for a project. Assemble was created to be a site builder, so it can do orders of magnitude more than Grunt tasks for building templates - - - - - - diff --git a/content/docs/Quickstart.md b/content/docs/Quickstart.md index 7514110..f274516 100644 --- a/content/docs/Quickstart.md +++ b/content/docs/Quickstart.md @@ -58,4 +58,4 @@ Ideally, you should start with a nice clean Gruntfile and a brand new `src` dire Have fun! -#### Also see [Resources][resources] → \ No newline at end of file +#### Also see [Resources][resources] → diff --git a/content/docs/Snippets.md b/content/docs/Snippets.md index cdb021c..33372a0 100644 --- a/content/docs/Snippets.md +++ b/content/docs/Snippets.md @@ -9,4 +9,4 @@ published: false --- -{{!}} \ No newline at end of file +{{!}} diff --git a/content/docs/Support.md b/content/docs/Support.md index 7e12fd9..d36fc03 100644 --- a/content/docs/Support.md +++ b/content/docs/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/content/docs/Templates-Overview.md b/content/docs/Templates-Overview.md index 5338ae5..378baed 100644 --- a/content/docs/Templates-Overview.md +++ b/content/docs/Templates-Overview.md @@ -474,4 +474,3 @@ reusable blocks of code which are not * [Partials][partials] * [Layouts][layouts] * [Helpers][helpers] - diff --git a/content/docs/Who-Uses-Assemble.md b/content/docs/Who-Uses-Assemble.md index 639a214..24db534 100644 --- a/content/docs/Who-Uses-Assemble.md +++ b/content/docs/Who-Uses-Assemble.md @@ -22,4 +22,4 @@ If you're new to Assemble, it might help to see how actual projects are using it * h5bp/Effeckt * LESS/Less.js: [lesscss.org](http://lesscss.org) * Gruntjs.com: ??? -* Upstage: \ No newline at end of file +* Upstage: diff --git a/content/docs/Why-Assemble.md b/content/docs/Why-Assemble.md index 980cf84..19b59f9 100644 --- a/content/docs/Why-Assemble.md +++ b/content/docs/Why-Assemble.md @@ -53,4 +53,4 @@ 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 diff --git a/content/docs/YAML-front-matter.md b/content/docs/YAML-front-matter.md index 9b1adba..919d42f 100644 --- a/content/docs/YAML-front-matter.md +++ b/content/docs/YAML-front-matter.md @@ -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/content/docs/config-data.md b/content/docs/config-data.md index 413d2ab..8e6d4f0 100644 --- a/content/docs/config-data.md +++ b/content/docs/config-data.md @@ -46,4 +46,3 @@ pages: <%= config.templates %>/pages includes: <%= config.templates %>/includes layouts: <%= config.templates %>/layouts ``` - diff --git a/content/docs/options-assets.md b/content/docs/options-assets.md index c9db3fc..f6aaa0a 100644 --- a/content/docs/options-assets.md +++ 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/content/docs/options-ext.md b/content/docs/options-ext.md index 6537b80..5d08173 100644 --- a/content/docs/options-ext.md +++ b/content/docs/options-ext.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/content/docs/options-layoutdir.md b/content/docs/options-layoutdir.md index 3a84a12..f4560bf 100644 --- a/content/docs/options-layoutdir.md +++ 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/content/docs/options-partials.md b/content/docs/options-partials.md index e681ae5..f0cb81f 100644 --- a/content/docs/options-partials.md +++ 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/content/getting-started/core-concepts-long.md b/content/getting-started/core-concepts-long.md index 808c643..fbda294 100644 --- a/content/getting-started/core-concepts-long.md +++ b/content/getting-started/core-concepts-long.md @@ -83,4 +83,4 @@ A basic layout might look something like this: \{{> body }} - \ No newline at end of file + diff --git a/content/getting-started/core-concepts.md b/content/getting-started/core-concepts.md index 2b54026..2188e14 100644 --- a/content/getting-started/core-concepts.md +++ b/content/getting-started/core-concepts.md @@ -205,4 +205,4 @@ _TODO_ [permalinks]: https://github.com/assemble/assemble-contrib-permalinks -[helpers]: https://github.com/assemble/assemble-docs/tree/master/src/content/helpers \ No newline at end of file +[helpers]: https://github.com/assemble/assemble-docs/tree/master/src/content/helpers diff --git a/content/getting-started/getting-started.md b/content/getting-started/getting-started.md index dc0e605..78d68b1 100644 --- a/content/getting-started/getting-started.md +++ b/content/getting-started/getting-started.md @@ -1,11 +1,13 @@ - 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. -We're always willing to help new users, so please stop out to [Assemble's GitHub Issues](https://github.com/assemble/assemble/issues) or ask a question on [StackOverflow](http://stackoverflow.com/questions/tagged/assemble) and someone from the core team or our super-supportive community will help you out! +## 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! -## Getting Started +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). Before continuing, be sure to have [Yeoman](http://yeoman.io/gettingstarted.html) installed globally, as well as [Bower](https://github.com/bower/bower) and [grunt-cli](https://github.com/gruntjs/grunt-cli), as Yeoman depends heavily on these both libs. +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: @@ -16,7 +18,20 @@ 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 diff --git a/content/getting-started/introduction.md b/content/getting-started/introduction.md index aacbe9a..444c462 100644 --- a/content/getting-started/introduction.md +++ b/content/getting-started/introduction.md @@ -1,16 +1,13 @@ # Introduction +> Become familiar with the basics of Assemble. -> Get familiarized with the basic building blocks of Assemble. - -Assemble makes it easy to combine templates, content and data to produce any kind of resulting documents, including web pages, web components, blog posts, and so on. - - - +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. ## Getting started +Visit the [Getting Started Guide][getting-started] for information on how to install, setup and configure your first Assemble project. If you are unfamiliar with [Grunt.js][Grunt] and [Gulp.js][Gulp], two task runners for which Assemble plugins are available, view their getting started guides. Although an in-dept understanding of these tools is not required, it is important to be familiar with the configuration of your entire stack, not just Assemble. - - +[Grunt]: http:// "Grunt.js Getting Started Guide" +[Gulp]: http:// "Gulp.js Getting Started Guide" ## Building blocks @@ -20,52 +17,44 @@ Assemble makes it easy to combine templates, content and data to produce any kin * Behavior * Styles - ## Terminology ### Data +Data is pieces of information. Assemble accepts two types of data: [JSON][JSON] (JavaScript Object Notation) and [YAML][YAML]. -#### Configuration - -#### Context - +[JSON]: http://json.org "JSON Homepage" +[YAML]: http://yaml.org "YAML Hompage" -### Structure +### 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. -#### Template +[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. -A [template](http://en.wikipedia.org/wiki/Template) is a standardized non-executable file type used by computer software as a pre-formatted example on which to base other files, especially documents. +You can learn more about configuration in the [Options][docs/options] documentation. -In other contexts, a template can be described as: +#### Plugin -* a stencil, pattern or overlay used in graphic arts (drawing, painting, etc.) and sewing to replicate letters, shapes or designs -* a pre-developed page layout in electronic or paper media used to make new pages with a similar design, pattern, or style -* Form letter, a predefined letter which retains its primary intent when individually customised with variable data or text. +#### 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. -## Project Organization +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. +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. -> "Boiler plate" originally referred to the maker's label used to identify the builder of steam boilers. - -* **Boilerplate code**, refers to sections of code that have to be included in many places with little or no alteration. -* **Boilerplate prototype**, a broadly working prototype that is constructed from cheaper or simpler materials. This was often applied to unarmoured tanks made of only soft steel, but it has also been applied to non-flyable engineering demonstrations of aircraft or spacecraft, built on simple steel frames rather than lightweight aerospace materials. -* **Boilerplate contract**, standard form contract between two parties that does not allow for negotiation -* **Boilerplate text**, any text that is or can be reused in new contexts or applications without being changed much from the original - - - +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. # Core Concepts ## Primary - - -## Secondary \ No newline at end of file +## Secondary diff --git a/content/guides/organizing-front-end-projects.md b/content/guides/organizing-front-end-projects.md index 866bd22..22f9d7a 100644 --- a/content/guides/organizing-front-end-projects.md +++ b/content/guides/organizing-front-end-projects.md @@ -39,4 +39,4 @@ More about Jon * Judge for [Node Knockout 2013](), a 48-hour Node.js hackathon with contestants worldwide. * Jon and fellow-Assemble-creator Brian Woodward -* Has given talks about JavaScript, Node.js and Assemble. Always open to new speaking opportunities! \ No newline at end of file +* Has given talks about JavaScript, Node.js and Assemble. Always open to new speaking opportunities! diff --git a/content/migrations/helpers.md b/content/migrations/helpers.md new file mode 100644 index 0000000..8422ccf --- /dev/null +++ b/content/migrations/helpers.md @@ -0,0 +1,52 @@ +--- +title: Migrating Helpers from Assemble v0.4.0 to Assemble v0.5.0 +author: Brian Woodward +--- + +> This article contains the basic steps to migrate helpers to Assemble v0.5.0 + +[Assemble v0.5.0](https://github.com/assemble/assemble/tree/v0.5.0) is using [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 helpers to be used with v0.5.0. + +## Before v0.5.0 +Helpers were required to export a `register` function that manually register helper functions with Handlebars: + +```javascript +module.exports.register = function (Handlebars, options, params) { + Handlebars.registerHelper('foo', function () { + return 'bar'; + }); +}; +``` + +## Now +Using [boson](https://github.com/jonschlinkert/boson) we now just export a function that can optionally take a `config` object. The only requirement is that this function returns an object hash of helpers that will get registered with Handlebars. This lets us use the helpers in other applications that aren't specific to assemble: + +```javascript +module.exports = function (config) { + return { + 'foo': function () { + return 'bar'; + } + }; +}; +``` + +The `config` object is the current instance of `assemble` so helpers can take advantage of the assemble API and the current `context`. The following is an example of a helper that merges the current assemble context with the context that is passed into a helper: + +```javascript +var _ = require('lodash'); +module.exports = function (config) { + var withContext = function (ctx, options) { + var context = _.extend({}, config.context(), ctx); + context = config.Handlebars.createFrame(context); + return options.fn(this, { data: context }); + }; + + return { + 'withContext': withContext + }; +}; +``` +You'll notice that the current instance of `Handlebars` being used is also exposed on the `config` object. diff --git a/content/migrations/plugins.md b/content/migrations/plugins.md new file mode 100644 index 0000000..57cfb71 --- /dev/null +++ b/content/migrations/plugins.md @@ -0,0 +1,10 @@ +--- +title: Migrating Plugins from Assemble v0.4.0 to Assemble v0.5.0 +author: Brian Woodward +--- + +> This article contains the basic steps to migrate plugins to Assemble v0.5.0 + +[Assemble v0.5.0](https://github.com/assemble/assemble/tree/v0.5.0) is using [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. diff --git a/data/migrations.yml b/data/migrations.yml new file mode 100644 index 0000000..025963a --- /dev/null +++ b/data/migrations.yml @@ -0,0 +1,14 @@ +#=========================================== +# MIGRATIONS DOCS CONFIG +#=========================================== + +published: + helpers: + title: Helpers + files: "content/migrations/helpers.md" + + plugins: + title: Plugins + files: "content/migrations/plugins.md" + +unpublished: diff --git a/data/users.yml b/data/users.yml index ed6c086..8f65801 100644 --- a/data/users.yml +++ b/data/users.yml @@ -12,19 +12,40 @@ # 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 - url: - image: + GruntfileUrl: https://github.com/zurb/ink/blob/master/Gruntfile.js + websiteUrl: http://zurb.com/ink/ + imageUrl: + imagePath: <%= site.images %>/users/ + - name: Zurb Foundation - url: - image: + GruntfileUrl: https://github.com/zurb/foundation/blob/master/Gruntfile.js + websiteUrl: http://foundation.zurb.com/ + imageUrl: + imagePath: <%= site.images %>/users/ + +- name: Typeplate + GruntfileUrl: https://github.com/typeplate/typeplate.github.io/blob/master/Gruntfile.js + websiteUrl: 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 + GruntfileUrl: https://github.com/h5bp/Effeckt.css/blob/master/Gruntfile.js + websiteUrl: http://h5bp.github.io/Effeckt.css/ + imageUrl: + imagePath: <%= site.images %>/users/ + - name: Less.js - url: - image: -- name: Zurb Ink - url: - image: + GruntfileUrl: https://github.com/less/less-docs/blob/master/Gruntfile.js + websiteUrl: 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 - url: - image: + GruntfileUrl: https://github.com/topcoat/topcoat-grunt-telemetry/blob/master/Gruntfile.js + websiteUrl: http://topcoat.io/ + imageUrl: + imagePath: <%= site.images %>/users/ diff --git a/package.json b/package.json index bb8854a..acac374 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,8 @@ "request": "~2.34.0", "template": "~0.1.5", "underscore.string": "~2.3.3", - "shelljs": "~0.2.6" + "shelljs": "~0.2.6", + "remote-origin-url": "^0.2.1" }, "keywords": [ "assemble", diff --git a/structure/_extensions/helpers/basename.js b/structure/_extensions/helpers/basename.js index 6671a4f..e0368b1 100644 --- a/structure/_extensions/helpers/basename.js +++ b/structure/_extensions/helpers/basename.js @@ -4,10 +4,12 @@ * Licensed under the MIT License (MIT). */ +var path = require('path'); + module.exports.register = function (Handlebars) { 'use strict'; Handlebars.registerHelper("basename", function(filepath) { - return require('fs-utils').name(filepath); + return path.basename(filepath); }); }; \ No newline at end of file diff --git a/structure/_extensions/helpers/inline.js b/structure/_extensions/helpers/inline.js index 410b667..e956019 100644 --- a/structure/_extensions/helpers/inline.js +++ b/structure/_extensions/helpers/inline.js @@ -23,7 +23,7 @@ module.exports.register = function (Handlebars, options) { var page = matter.read(filepath); var data = Handlebars.createFrame({filepath: filepath}); - _.extend(inline, context.data.root.inline || {}); + _.extend(inline, context.data.inline || {}); // Prepend or append any content in the given partial to the output prepend = inline.prepend ? Handlebars.partials[inline.prepend] : ''; @@ -35,4 +35,4 @@ module.exports.register = function (Handlebars, options) { var result = template(page.context, {data: data}); return new Handlebars.SafeString(result); }); -}; \ No newline at end of file +}; diff --git a/structure/_extensions/helpers/isActive.js b/structure/_extensions/helpers/isActive.js index 7ce6c14..9f25823 100644 --- a/structure/_extensions/helpers/isActive.js +++ b/structure/_extensions/helpers/isActive.js @@ -19,14 +19,14 @@ module.exports.register = function (Handlebars, options) { * @usage: {{isActive}} */ Handlebars.registerHelper('isActive', function(current, options) { - var context = _.extend(opts.data, this); + var context = _.extend({}, opts.data, 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 + '"'; } return new Handlebars.SafeString(modifier); }); }; - diff --git a/structure/_extensions/helpers/read.js b/structure/_extensions/helpers/read.js index dee35b1..fef3693 100644 --- a/structure/_extensions/helpers/read.js +++ b/structure/_extensions/helpers/read.js @@ -12,9 +12,10 @@ var _ = require('lodash'); module.exports.register = function (Handlebars) { Handlebars.registerHelper("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)); }); -}; \ No newline at end of file +}; diff --git a/structure/_extensions/plugins/holder-404-avoid.js b/structure/_extensions/plugins/holder-404-avoid.js index a50f379..6e438a7 100644 --- a/structure/_extensions/plugins/holder-404-avoid.js +++ b/structure/_extensions/plugins/holder-404-avoid.js @@ -1,8 +1,8 @@ /* - * assemble-docs + * Adapted from holder-404-avoid.js + * github.com/less/less-docs + * @lukeapage * - * Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors. - * Licensed under the MIT license. */ var options = { @@ -12,14 +12,13 @@ var options = { var cheerio = require('cheerio'); -// Adapted from holder-404-avoid.js from less/less-docs module.exports = function (params, callback) { 'use strict'; - // load current page content + // Load current page content var $ = cheerio.load(params.content); - // get all the anchor tags from inside the headers + // Get all the anchor tags from inside the headers var images = $('img[src]'); images.each(function (i, e) { diff --git a/structure/_extensions/plugins/lib/template.js b/structure/_extensions/plugins/lib/template.js index 832e0c0..2b1fea8 100644 --- a/structure/_extensions/plugins/lib/template.js +++ b/structure/_extensions/plugins/lib/template.js @@ -1,3 +1,9 @@ +/** + * Template Plugin + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + module.exports = [ '', ' ', diff --git a/structure/_extensions/plugins/link-checker.js b/structure/_extensions/plugins/link-checker.js index 2caee9a..f8f29b9 100644 --- a/structure/_extensions/plugins/link-checker.js +++ b/structure/_extensions/plugins/link-checker.js @@ -1,3 +1,9 @@ +/* + * Adapted from link-checker.js + * github.com/less/less-docs + * @lukeapage + * + */ var options = { stage: 'render:post:page' diff --git a/structure/layouts/README.md b/structure/layouts/README.md index c5cfac3..5526322 100644 --- a/structure/layouts/README.md +++ b/structure/layouts/README.md @@ -2,4 +2,4 @@ > 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. \ No newline at end of file +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/default.hbs b/structure/layouts/default.hbs index 8f33ec0..a024ebd 100644 --- a/structure/layouts/default.hbs +++ b/structure/layouts/default.hbs @@ -22,4 +22,4 @@ layout: base {{> paginate paginate.next }} {{/is}} - \ No newline at end of file + diff --git a/structure/layouts/markdown.hbs b/structure/layouts/markdown.hbs index 3a08d43..10b127b 100644 --- a/structure/layouts/markdown.hbs +++ b/structure/layouts/markdown.hbs @@ -3,4 +3,4 @@ layout: default --- {{#markdown}} {{> body }} -{{/markdown}} \ No newline at end of file +{{/markdown}} diff --git a/structure/pages/migrations.hbs b/structure/pages/migrations.hbs new file mode 100644 index 0000000..edb5295 --- /dev/null +++ b/structure/pages/migrations.hbs @@ -0,0 +1,9 @@ +--- +title: Migrations +slug: migrations +--- + +{{> navbar-content }} + + +{{> docs migrations.published }} From 15d3e12858f814ce48678ca9d04d873345de332b Mon Sep 17 00:00:00 2001 From: Hariadi Hinta Date: Wed, 19 Mar 2014 11:01:11 +0800 Subject: [PATCH 34/81] add uglify in design task --- Gruntfile.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Gruntfile.js b/Gruntfile.js index f14b605..55fbd95 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -276,6 +276,7 @@ module.exports = function(grunt) { grunt.registerTask('design', [ 'clean', 'copy', + 'uglify', 'less:site', 'assemble:site', 'connect', From 7d2fd69fe39e5e508c9b95933d3871752aa71418 Mon Sep 17 00:00:00 2001 From: Hariadi Hinta Date: Wed, 19 Mar 2014 11:02:06 +0800 Subject: [PATCH 35/81] isPermalink(undefined): check if fallback need extension --- structure/_extensions/helpers/isPermalink.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/structure/_extensions/helpers/isPermalink.js b/structure/_extensions/helpers/isPermalink.js index 3362cb1..bf0ac68 100644 --- a/structure/_extensions/helpers/isPermalink.js +++ b/structure/_extensions/helpers/isPermalink.js @@ -8,6 +8,6 @@ module.exports.register = function (Handlebars, options) { 'use strict'; Handlebars.registerHelper("isPermalink", function(value, fallback) { - return options.permalinks ? value : fallback + '.html'; + return options.permalinks ? value : fallback + (value.lastIndexOf('.') > 0 ? '' : options.ext); }); }; \ No newline at end of file From e835b4e46127d2b3f4706f90023821b8f1433e0f Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Wed, 19 Mar 2014 16:58:21 -0400 Subject: [PATCH 36/81] adds rel helper locally, to fix errors --- structure/_extensions/helpers/rel.js | 35 ++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 structure/_extensions/helpers/rel.js diff --git a/structure/_extensions/helpers/rel.js b/structure/_extensions/helpers/rel.js new file mode 100644 index 0000000..eac9837 --- /dev/null +++ b/structure/_extensions/helpers/rel.js @@ -0,0 +1,35 @@ +/** + * Handlebars Helpers: {{rel}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ +'use strict'; + +// Node.js +var path = require('path'); +// var file = require('fs-utils'); +var _ = require('lodash'); + +// Export helpers +module.exports.register = function (Handlebars, options) { + + /** + * Generate a relative link from the "current page" to the specified page + * @usage: ` -* 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).
diff --git a/content/docs/Context.md b/content/docs/Context.md index c3bbf7b..5c8b856 100644 --- a/content/docs/Context.md +++ b/content/docs/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. diff --git a/content/docs/Outline.md b/content/docs/Outline.md index c1b0a0c..100c390 100644 --- a/content/docs/Outline.md +++ b/content/docs/Outline.md @@ -104,7 +104,7 @@ assemble: { ext: '' } files: [ - 'README.md': ['src/README.md.hbs'] + 'README.md': ['src/README.md'] ] }, diff --git a/content/docs/options-ext.md b/content/docs/options-ext.md index 5d08173..2b36e24 100644 --- a/content/docs/options-ext.md +++ 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'] } } ``` diff --git a/content/getting-started/examples/generate-a-list-of-posts.md b/content/getting-started/examples/generate-a-list-of-posts.md index dd96778..5f7fd9c 100644 --- a/content/getting-started/examples/generate-a-list-of-posts.md +++ b/content/getting-started/examples/generate-a-list-of-posts.md @@ -3,7 +3,7 @@ ```html --- title: Blog -posts: ['src/posts/2013_05_10.md.hbs', 'src/posts/2013_05_12.md.hbs'] +posts: ['src/posts/2013_05_10.md', 'src/posts/2013_05_12.md'] --- \ No newline at end of file diff --git a/structure/layouts/markdown.hbs b/structure/layouts/markdown.hbs deleted file mode 100644 index 10b127b..0000000 --- a/structure/layouts/markdown.hbs +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: default ---- -{{#markdown}} -{{> body }} -{{/markdown}} diff --git a/structure/pages/about.hbs b/structure/pages/about.hbs index a1b0124..4c2d824 100644 --- a/structure/pages/about.hbs +++ b/structure/pages/about.hbs @@ -36,7 +36,7 @@ lead: "Learn about the history of assemble, meet the core team, and check out th

Get involved with Assemble 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.

+

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

From 138e013642febba1583037cf6744e8effa90b372 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Thu, 20 Mar 2014 07:28:53 -0400 Subject: [PATCH 41/81] linting, new plugins. --- .assemblerc.yml | 36 +- Gruntfile.js | 226 +++++++---- package.json | 9 +- structure/_extensions/helpers/context.js | 5 +- structure/_extensions/helpers/inline.js | 10 +- structure/_extensions/helpers/isActive.js | 2 + structure/_extensions/helpers/nav.js | 7 +- structure/_extensions/helpers/resolve.js | 2 +- structure/_extensions/plugins/link-checker.js | 88 ++--- structure/_extensions/plugins/navigation.js | 50 ++- structure/_extensions/plugins/styles.js | 31 ++ structure/_extensions/plugins/validate.js | 32 ++ structure/includes/head.hbs | 1 - structure/includes/list.hbs | 4 +- structure/includes/nav-main.hbs | 2 +- structure/includes/teaser.hbs | 12 +- structure/layouts/base.hbs | 3 +- structure/layouts/default.hbs | 2 +- styles/.csslintrc | 33 +- styles/utilities/mixins.less | 9 +- test/actual/index.html | 371 ++++++++++++++++++ 21 files changed, 726 insertions(+), 209 deletions(-) create mode 100644 structure/_extensions/plugins/styles.js create mode 100644 structure/_extensions/plugins/validate.js create mode 100644 test/actual/index.html diff --git a/.assemblerc.yml b/.assemblerc.yml index bc91a83..a2f3138 100644 --- a/.assemblerc.yml +++ b/.assemblerc.yml @@ -37,21 +37,39 @@ layouts: <%= site.templates %>/layouts layoutext: .hbs layout: default +# HTML 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.' + # ============================================= # EXTENSIONS # ============================================= -helpers: <%= site.templates %>/_extensions/helpers +# Handlebars helpers +helpers: + path: <%= site.templates %>/_extensions/helpers + load: + - <%= site.helpers.path %>/*.js + +# Assemble plugins plugins: - # NPM Plugins - # - assemble-contrib-download - # - assemble-contrib-decompress - - assemble-contrib-permalinks - - assemble-contrib-wordcount + path: <%= site.templates %>/_extensions/plugins + load: + # NPM Plugins + # - assemble-contrib-download + # - assemble-contrib-decompress + # - assemble-contrib-wordcount + - assemble-contrib-permalinks - # Local plugins - - <%= site.templates %>/_extensions/plugins/navigation.js + # Local plugins + - <%= site.plugins.path %>/styles.js + - <%= site.plugins.path %>/navigation.js + # - <%= site.plugins.path %>/validate.js # ============================================= @@ -77,7 +95,7 @@ url: issues: <%= pkg.bugs.url %>?state=open # Site - public: http://assemble.io/ + public: http://assemble.io about: <%= site.url.public %>/about/ blog: <%= site.url.public %>/blog/ diff --git a/Gruntfile.js b/Gruntfile.js index 00fd268..494dba3 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,22 +16,25 @@ module.exports = function(grunt) { // Initialize mixins grunt.util._.mixin(require('./data/utils/mixins')); + // Report the execution time of each task. + require('time-grunt')(grunt); + + /** - * Project configuration. + * Initialize Grunt configuration */ grunt.initConfig({ - // Project metadata + /** + * Metadata + */ + site : grunt.file.readYAML('.assemblerc.yml'), pkg : grunt.file.readJSON('package.json'), core : grunt.file.readJSON('data/core.json'), vendor : grunt.file.readJSON('.bowerrc').directory, - bootstrap: { - js: '<%= vendor %>/bootstrap/dist/js', - }, - metadata: { year: '<%= grunt.template.today("yyyy") %>', banner: [ @@ -44,30 +47,15 @@ module.exports = function(grunt) { ].join('\n') }, - // Lint JavaScripts - jshint: { - options: { - jshintrc: '<%= site.scripts %>/.jshintrc' - }, - all: [ - 'Gruntfile.js', - '<%= site.helpers %>/*.js', - '<%= site.plugins %>/*.js', - '<%= site.scripts %>/*.js', - '<%= site.utils %>/*.js', - ] + // Alias for Bootstrap's javascripts + bootstrap: { + js: '<%= vendor %>/bootstrap/dist/js', }, - // Pull down a list of repos from the Assemble org using - // GitHub's API. Resulting JSON is supplied to the templates. - repos: { - namespaced: { - options: {username: 'assemble'}, - files: { - '<%= site.data %>/repos.json': ['repos?page=1&per_page=100'] - } - } - }, + + /** + * HTML tasks + */ // Build HTML from templates and data assemble: { @@ -84,14 +72,14 @@ module.exports = function(grunt) { data: ['<%= site.data %>/*.{json,yml}'], // Templates - partials: ['<%= site.includes %>/**/*.hbs', 'structure/snippets/*.hbs'], + partials: ['<%= site.includes %>/**/*.hbs', 'structure/snippets/*.hbs'], layoutdir: '<%= site.layouts %>', layoutext: '<%= site.layoutext %>', layout: '<%= site.layout %>', // Extensions - plugins: '<%= site.plugins %>', - helpers: ['<%= site.helpers %>/*.js'], + plugins: '<%= site.plugins.load %>', + helpers: '<%= site.helpers.load %>', // 'anchors' plugin > Add anchors markup // to headings in rendered HTML @@ -114,6 +102,12 @@ module.exports = function(grunt) { dest: 'tmp/helpers/' }, + // HTML 'validation' plugin + validation: { + report: 'structure/validation-report.json', + status: 'structure/validation-status.json' + }, + // marked-extras options marked: { process: true, @@ -122,43 +116,47 @@ module.exports = function(grunt) { } }, + // `site` target site: { options: { - // `permalinks` plugin - permalinks: { - structure: ':basename/index.html' - } + permalinks: {structure: ':basename/index.html'} }, files: {'<%= site.dest %>/': ['<%= site.pages %>/*.hbs']} } }, - // Format HTML + // Lint HTML + validation: { + options: { + reset: true, + failHard: true, + charset: 'utf-8', + doctype: 'HTML5', + path: 'structure/validation-status.json', + reportpath: 'structure/validation-report.json', + relaxerror: '<%= site.html.errorcodes %>' + }, + files: { + src: '<%= site.dest %>/**/*.html' + } + }, + + // Prettify HTML prettify: { options: { indent_scripts: 'keep' }, site: { files: [ - {expand: true, cwd: '<%= site.dest %>', src: '*.html', dest: '<%= site.dest %>/', ext: '.html'} + {expand: true, cwd: '<%= site.dest %>', src: '**/*.html', dest: '<%= site.dest %>/', ext: '.html'} ] } }, - // Run a Connect server - connect: { - options: { - port: 3000, - livereload: 35729, - hostname: 'localhost' - }, - livereload: { - options: { - open: true, - base: ['<%= site.dest %>'] - } - } - }, + + /** + * CSS tasks + */ // Compile Less to CSS less: { @@ -172,6 +170,7 @@ module.exports = function(grunt) { } }, + // Lint CSS csslint: { strict: { options: { @@ -181,6 +180,7 @@ module.exports = function(grunt) { } }, + // Prettify CSS csscomb: { options: { config: 'styles/.csscomb.json' @@ -202,6 +202,25 @@ module.exports = function(grunt) { } }, + + /** + * JavaScript tasks + */ + + // Lint JavaScripts + jshint: { + options: { + jshintrc: '<%= site.scripts %>/.jshintrc' + }, + all: [ + 'Gruntfile.js', + '<%= site.helpers.path %>/*.js', + // '<%= site.plugins.path %>/*.js', + '<%= site.scripts %>/*.js', + '<%= site.utils %>/*.js', + ] + }, + // Minify JavaScripts uglify: { options: {banner: '<%= metadata.banner %>'}, @@ -211,13 +230,18 @@ module.exports = function(grunt) { } }, + + /** + * Setup tasks + */ + copy: { - // Copy Bootstrap's scripts to local directory + // Copy Bootstrap's js to local scripts vendor: { src: '<%= bootstrap.js %>/bootstrap.js', dest: '<%= site.scripts %>/vendor/bootstrap.js' }, - // Copy source images, fonts and icons to site `public` directory + // Copy local `assets` to `public` directory assets: { files: [ {expand: true, cwd: '<%= site.assets %>', src: '**', dest: '<%= site.public %>/'} @@ -225,23 +249,53 @@ module.exports = function(grunt) { } }, - // Before generating new files, clean files from previous build. + // Clean files from previous build clean: { example: ['<%= site.dest %>/**/*.{html,css,js}'] }, + // Pull down a list of repos from the Assemble's repos from + // GitHub's API, so we can use the resulting JSON in templates. + repos: { + namespaced: { + options: {username: 'assemble'}, + files: { + '<%= site.data %>/repos.json': ['repos?page=1&per_page=100'] + } + } + }, + + + /** + * "Live" tasks + */ + + // Run a Connect server + connect: { + options: { + port: 3000, + livereload: 35729, + hostname: 'localhost' + }, + livereload: { + options: { + open: true, + base: ['<%= site.dest %>'] + } + } + }, + // Watch certain files, rebuild when changes are saved. watch: { options: {livereload: true}, - site: { + design: { files: [ - '<%= site.helpers %>', - '<%= site.data %>/*.{yml,json}', + '<%= site.data %>/**/*.{yml,json}', '<%= site.content %>/**/*.md', '<%= site.styles %>/**/*.less', '<%= site.templates %>/**/*.hbs', ], - tasks: ['clean', 'copy', 'less:site', 'assemble'] + tasks: ['clean', 'less', 'assemble'] } } }); @@ -260,44 +314,60 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-html-validation'); grunt.loadNpmTasks('grunt-prettify'); grunt.loadNpmTasks('grunt-repos'); grunt.loadNpmTasks('grunt-sync-pkg'); grunt.loadNpmTasks('grunt-uncss'); + /** - * Register Tasks + * Task types */ - grunt.registerTask('update', ['repos', 'default']); + // First things first. + grunt.registerTask('setup', [ + 'clean', + 'copy', + ]); - // Runt tests and lint code. - grunt.registerTask('test', ['jshint', 'csslint']); + // Compile CSS, HTML, etc. + grunt.registerTask('compile', [ + 'less', + 'assemble' + ]); - // Design-oriented tasks. - grunt.registerTask('basic', [ - 'assemble:site', - 'prettify' + // Lint and runt tests. + grunt.registerTask('lint', [ + 'jshint', + 'validation', + 'csslint' + ]); + + // Prep for deployment. + grunt.registerTask('prod', [ + 'repos', + 'uglify' ]); + + /** + * Tasks to run + */ + // Design-oriented tasks. grunt.registerTask('design', [ - 'clean', - 'copy', - 'uglify', - 'less:site', - 'assemble:site', + 'default', 'connect', - 'watch' + 'watch:design' ]); - // Default tasks to be run. + // Default tasks to run with the `grunt` command. grunt.registerTask('default', [ - 'jshint', - 'copy', + 'setup', + 'compile', + 'prettify', 'uglify', - 'less:site', - 'assemble:site', - 'prettify' + 'lint', ]); }; diff --git a/package.json b/package.json index fb4ab65..4739ca7 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "assemble-contrib-download": "~0.1.2", "assemble-contrib-permalinks": "~0.3.4", "assemble-less": "~0.7.0", + "async": "~0.2.10", "chalk": "~0.4.0", "cheerio": "~0.13.1", "fs-utils": "~0.3.6", @@ -56,6 +57,7 @@ "grunt-contrib-uglify": "~0.4.0", "grunt-contrib-watch": "~0.5.3", "grunt-csscomb": "~2.0.1", + "grunt-html-validation": "~0.1.13", "grunt-prettify": "~0.3.4", "grunt-repos": "~0.1.2", "grunt-sync-pkg": "~0.1.2", @@ -74,13 +76,16 @@ "lodash": "~2.4.1", "marked": "0.3.0", "marked-extras": "~0.2.2", + "relative": "~0.1.2", "remote-origin-url": "^0.2.1", "request": "~2.34.0", "shelljs": "~0.2.6", "template": "~0.1.5", + "time-grunt": "~0.2.10", "underscore.string": "~2.3.3", - "async": "~0.2.10", - "relative": "~0.1.2" + "script-tags": "0.0.3", + "verbalise": "0.0.1", + "w3cjs": "~0.1.24" }, "keywords": [ "assemble", diff --git a/structure/_extensions/helpers/context.js b/structure/_extensions/helpers/context.js index 132f43e..db58a46 100644 --- a/structure/_extensions/helpers/context.js +++ b/structure/_extensions/helpers/context.js @@ -6,10 +6,7 @@ 'use strict'; -var _ = require('lodash'); - -module.exports.register = function (Handlebars, options, params) { - var assemble = params.assemble; +module.exports.register = function (Handlebars) { /** * This helper passes the given context into the block, diff --git a/structure/_extensions/helpers/inline.js b/structure/_extensions/helpers/inline.js index 3be7c95..e90b652 100644 --- a/structure/_extensions/helpers/inline.js +++ b/structure/_extensions/helpers/inline.js @@ -5,6 +5,7 @@ */ 'use strict'; +var file = require('fs-utils'); var matter = require('gray-matter'); var _ = require('lodash'); @@ -17,24 +18,23 @@ module.exports.register = function (Handlebars, options) { Handlebars.registerHelper('inline', function(filepath, context) { + context.data = context.data || {}; var append = '', prepend = ''; - context.data = context.data || {}; - var page = matter.read(filepath); var data = Handlebars.createFrame({filepath: filepath}); - _.extend(inline, context.data.inline || {}); + _.extend(inline, options.data.inline || {}); + _.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] : ''; - _.defaults(page.context, context.data.root); 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); }); -}; +}; \ No newline at end of file diff --git a/structure/_extensions/helpers/isActive.js b/structure/_extensions/helpers/isActive.js index c75c161..394ebc3 100644 --- a/structure/_extensions/helpers/isActive.js +++ b/structure/_extensions/helpers/isActive.js @@ -26,6 +26,8 @@ module.exports.register = function (Handlebars, options) { context.page = context.page || {}; if(context.page.basename === current) { modifier = ' class="' + modifier + '"'; + } else { + modifier = ''; } return new Handlebars.SafeString(modifier); }); diff --git a/structure/_extensions/helpers/nav.js b/structure/_extensions/helpers/nav.js index 9100270..68bb958 100644 --- a/structure/_extensions/helpers/nav.js +++ b/structure/_extensions/helpers/nav.js @@ -5,12 +5,7 @@ */ 'use strict'; -// Node.js -var path = require('path'); -var _ = require('lodash'); - -module.exports.register = function (Handlebars, options, params) { - var assemble = params.assemble; +module.exports.register = function (Handlebars) { Handlebars.registerHelper('nav', function (name, context, options) { var fn = Handlebars.compile(Handlebars.partials[name]); diff --git a/structure/_extensions/helpers/resolve.js b/structure/_extensions/helpers/resolve.js index a6b86d8..b4f4dec 100644 --- a/structure/_extensions/helpers/resolve.js +++ b/structure/_extensions/helpers/resolve.js @@ -10,7 +10,7 @@ var path = require('path'); var _ = require('lodash'); var relative = require('relative'); -module.exports.register = function (Handlebars, options) { +module.exports.register = function (Handlebars) { /** * Resolves the path to the actual destination file, diff --git a/structure/_extensions/plugins/link-checker.js b/structure/_extensions/plugins/link-checker.js index f8f29b9..cd86fc4 100644 --- a/structure/_extensions/plugins/link-checker.js +++ b/structure/_extensions/plugins/link-checker.js @@ -10,12 +10,55 @@ var options = { }; var cheerio = require('cheerio'); -var chalk = require('chalk'); var request = require('request'); var linkMap = {}; +var que = [], + 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; +} + // Adapted from link-checker.js from less/less-docs module.exports = function (params, callback) { 'use strict'; @@ -139,48 +182,5 @@ module.exports = function (params, callback) { finish(); }; -var que = [], - activeRequests = 0; - -function checkLink(link, callback) { - - if (link.indexOf("//") === 0) { - link = "http:" + link; - } - - if (activeRequests >= 9) { - que.push(doRequest); - } else { - doRequest(); - } - - 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--; - } - }); - } -} - -function findLink(linkToFind, anchors) { - for (var i = 0; i < anchors.length; i++) { - if (anchors[i] === linkToFind) { - return true; - } - } - return false; -} module.exports.options = options; \ No newline at end of file diff --git a/structure/_extensions/plugins/navigation.js b/structure/_extensions/plugins/navigation.js index 6228849..97ded6d 100644 --- a/structure/_extensions/plugins/navigation.js +++ b/structure/_extensions/plugins/navigation.js @@ -17,7 +17,6 @@ var path = require('path'); var template = require('template'); var chalk = require('chalk'); var cheerio = require('cheerio'); -var _ = require('lodash'); var warn = chalk.yellow; @@ -34,6 +33,16 @@ module.exports = function (params, callback) { var opts = params.assemble.options.anchors || {}; + // Lo-Dash template to use for anchors + var anchorTemplate = require('./lib/template.js'); + + // If an anchor template is specified in the options, use that instead. + if(opts && opts.template) { + opts.template = path.resolve(opts.template); + anchorTemplate = require(opts.template); + } + + // get all the anchor tags from inside the headers var headings = $('h1[id],h2[id]'); var navigation = []; @@ -69,8 +78,21 @@ module.exports = function (params, callback) { var depth = level <= 1 ? 1 : 2; var location = findLocation(navigation, depth); location.push(node); + + // Anchor template + var anchor = template(anchorTemplate, {id: link}); + $(this).append(anchor); + + // Adjust heading + $(this).removeAttr('id').addClass('docs-heading'); + + if($(this).prev().children().hasClass('source-link')) { + var sourceLink = $(this).prev().children('.source-link'); + $(this).append(sourceLink); + } }); + /** * Build the HTML for side navigation. * @param {[type]} navigation [description] @@ -102,32 +124,6 @@ module.exports = function (params, callback) { $('#navigation').append(buildHTML(navigation, true)); - // - var anchorTemplate = require('./lib/template.js'); - - // If an anchor template is specified in the options, use that instead. - if(opts && opts.template) { - opts.template = path.resolve(opts.template); - anchorTemplate = require(opts.template); - } - - headings.map(function (i, e) { - var $e = $(e); - var id = $e.attr('id'); - - // Anchor template - var anchor = template(anchorTemplate, {id: id}); - $(this).append(anchor); - - // Adjust heading - $(this).removeAttr('id').addClass('docs-heading'); - - if($(this).prev().children().hasClass('source-link')) { - var sourceLink = $(this).prev().children('.source-link'); - $(this).append(sourceLink); - } - }); - params.content = $.html(); callback(); }; diff --git a/structure/_extensions/plugins/styles.js b/structure/_extensions/plugins/styles.js new file mode 100644 index 0000000..d8f5337 --- /dev/null +++ b/structure/_extensions/plugins/styles.js @@ -0,0 +1,31 @@ +/** + * Move all styles in body > style tags to the head + * Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors. + */ + + +var cheerio = require('cheerio'); + +var options = { + stage: 'render:post:page' +}; + +module.exports = function (params, callback) { + 'use strict'; + + // Load current page content + var $ = cheerio.load(params.content); + + var arr = []; + $('body style').each(function (i, ele) { + arr.push($(ele).html()); + $(ele).remove(); + }); + + $('head').append('\n\n'); + + params.content = $.html(); + callback(); +}; + +module.exports.options = options; \ No newline at end of file diff --git a/structure/_extensions/plugins/validate.js b/structure/_extensions/plugins/validate.js new file mode 100644 index 0000000..45e96b0 --- /dev/null +++ b/structure/_extensions/plugins/validate.js @@ -0,0 +1,32 @@ +/* + * HTML validation plugin for Assemble + */ + +'use strict'; + +var file = require('fs-utils'); +var w3cjs = require('w3cjs'); + +module.exports = function (params, callback) { + 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 + } + }); + + callback(); +}; + +module.exports.options = { + stage: 'render:post:page' +}; \ No newline at end of file diff --git a/structure/includes/head.hbs b/structure/includes/head.hbs index 2d1e271..1c88bcc 100644 --- a/structure/includes/head.hbs +++ b/structure/includes/head.hbs @@ -11,7 +11,6 @@ - + + + + + + + + + + + + + + + + + + + +
+
+
+
+

BUILD SOMETHING

+

It has never been easier to leverage the full force of powerful frameworks like Bootstrap and Zurb Foundation. Nothing can stop you now.

+

Download Assemble

+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
  • + 2013-05-12: Big news today! · More news. +
  • + 2013-05-13: Big news today! +
  • + 2013-05-14: Big news today! +
  • + 2013-05-15: Big news today! +
  • + 2013-05-16: Big news today! +
+ +
    +
  • Cras justo odio
  • +
  • Dapibus ac facilisis in
  • +
  • Morbi leo risus
  • +
  • Porta ac consectetur ac
  • +
  • Vestibulum at eros
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 05b9c64e0704715adb2bc55bd89cca139b050db0 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Wed, 26 Mar 2014 06:57:49 -0400 Subject: [PATCH 42/81] correct template name, remove extraneous alert --- structure/_extensions/plugins/lib/template.js | 2 +- structure/layouts/default.hbs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/structure/_extensions/plugins/lib/template.js b/structure/_extensions/plugins/lib/template.js index 2b1fea8..f2315e2 100644 --- a/structure/_extensions/plugins/lib/template.js +++ b/structure/_extensions/plugins/lib/template.js @@ -1,5 +1,5 @@ /** - * Template Plugin + * Anchors template * Copyright (c) 2014 Jon Schlinkert * Licensed under the MIT License (MIT). */ diff --git a/structure/layouts/default.hbs b/structure/layouts/default.hbs index 8f33ec0..2655d2a 100644 --- a/structure/layouts/default.hbs +++ b/structure/layouts/default.hbs @@ -5,7 +5,6 @@ layout: base
From 9df188170b49239827d748d9e3e43e327bdc4c80 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Wed, 26 Mar 2014 06:58:45 -0400 Subject: [PATCH 43/81] revert changes to navigation plugin to fix nav. change icon in source links to pencil --- structure/_extensions/plugins/navigation.js | 55 +++++++++++---------- structure/includes/source-link.hbs | 2 +- styles/examples.less | 5 -- 3 files changed, 31 insertions(+), 31 deletions(-) delete mode 100644 styles/examples.less diff --git a/structure/_extensions/plugins/navigation.js b/structure/_extensions/plugins/navigation.js index 97ded6d..39dd08f 100644 --- a/structure/_extensions/plugins/navigation.js +++ b/structure/_extensions/plugins/navigation.js @@ -17,6 +17,7 @@ var path = require('path'); var template = require('template'); var chalk = require('chalk'); var cheerio = require('cheerio'); +var _ = require('lodash'); var warn = chalk.yellow; @@ -31,17 +32,8 @@ module.exports = function (params, callback) { // load current page content var $ = cheerio.load(params.content); - var opts = params.assemble.options.anchors || {}; - - // Lo-Dash template to use for anchors - var anchorTemplate = require('./lib/template.js'); - - // If an anchor template is specified in the options, use that instead. - if(opts && opts.template) { - opts.template = path.resolve(opts.template); - anchorTemplate = require(opts.template); - } - + var anchorOpts = params.assemble.options.anchors || {}; + var navOpts = params.assemble.options.navigation || {}; // get all the anchor tags from inside the headers var headings = $('h1[id],h2[id]'); @@ -78,21 +70,8 @@ module.exports = function (params, callback) { var depth = level <= 1 ? 1 : 2; var location = findLocation(navigation, depth); location.push(node); - - // Anchor template - var anchor = template(anchorTemplate, {id: link}); - $(this).append(anchor); - - // Adjust heading - $(this).removeAttr('id').addClass('docs-heading'); - - if($(this).prev().children().hasClass('source-link')) { - var sourceLink = $(this).prev().children('.source-link'); - $(this).append(sourceLink); - } }); - /** * Build the HTML for side navigation. * @param {[type]} navigation [description] @@ -122,7 +101,33 @@ module.exports = function (params, callback) { // throw new Error("Stopping, duplicates found."); // } - $('#navigation').append(buildHTML(navigation, true)); + $(navOpts.id || '#navigation').append(buildHTML(navigation, true)); + + // + var anchorTemplate = require('./lib/template.js'); + + // If an anchor template is specified in the options, use that instead. + if(anchorOpts && anchorOpts.template) { + anchorOpts.template = path.resolve(anchorOpts.template); + anchorTemplate = require(anchorOpts.template); + } + + headings.map(function (i, e) { + var $e = $(e); + var id = $e.attr('id'); + + // Anchor template + var anchor = template(anchorTemplate, {id: id}); + $(this).append(anchor); + + // Adjust heading + $(this).removeAttr('id').addClass('docs-heading'); + + if($(this).prev().children().hasClass('source-link')) { + var sourceLink = $(this).prev().children('.source-link'); + $(this).append(sourceLink); + } + }); params.content = $.html(); callback(); diff --git a/structure/includes/source-link.hbs b/structure/includes/source-link.hbs index 702e653..d9b2c4b 100644 --- a/structure/includes/source-link.hbs +++ b/structure/includes/source-link.hbs @@ -1,2 +1,2 @@ {{! 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. }} - \ No newline at end of file + \ No newline at end of file diff --git a/styles/examples.less b/styles/examples.less deleted file mode 100644 index 8bd68c2..0000000 --- a/styles/examples.less +++ /dev/null @@ -1,5 +0,0 @@ -// -// Examples Styles -// -------------------------------------------------- - - From 2c381b9cbed3c87b987ff29cdeac0e1206877afd Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Wed, 26 Mar 2014 06:59:09 -0400 Subject: [PATCH 44/81] update metadata, minor fixes --- Gruntfile.js | 24 +- data/button.json | 58 - data/button.yml | 30 + data/repos.json | 8370 +++++++++++++++++++++++ package.json | 14 +- structure/_extensions/helpers/inline.js | 1 - 6 files changed, 8419 insertions(+), 78 deletions(-) delete mode 100644 data/button.json create mode 100644 data/button.yml create mode 100644 data/repos.json diff --git a/Gruntfile.js b/Gruntfile.js index 494dba3..858839a 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -72,7 +72,7 @@ module.exports = function(grunt) { data: ['<%= site.data %>/*.{json,yml}'], // Templates - partials: ['<%= site.includes %>/**/*.hbs', 'structure/snippets/*.hbs'], + partials: ['<%= site.includes %>/{,*/}*.hbs', 'structure/snippets/*.hbs'], layoutdir: '<%= site.layouts %>', layoutext: '<%= site.layoutext %>', layout: '<%= site.layout %>', @@ -137,7 +137,7 @@ module.exports = function(grunt) { relaxerror: '<%= site.html.errorcodes %>' }, files: { - src: '<%= site.dest %>/**/*.html' + src: '<%= site.dest %>/{,*/}*.html' } }, @@ -148,7 +148,7 @@ module.exports = function(grunt) { }, site: { files: [ - {expand: true, cwd: '<%= site.dest %>', src: '**/*.html', dest: '<%= site.dest %>/', ext: '.html'} + {expand: true, cwd: '<%= site.dest %>', src: '{,*/}*.html', dest: '<%= site.dest %>/', ext: '.html'} ] } }, @@ -165,7 +165,7 @@ module.exports = function(grunt) { paths: ['styles', 'styles/bootstrap', 'styles/components'] }, site: { - src: ['styles/index.less'], + src: ['<%= site.styles %>/index.less'], dest: '<%= assemble.options.assets %>/css/index.css' } }, @@ -174,7 +174,7 @@ module.exports = function(grunt) { csslint: { strict: { options: { - csslintrc: 'styles/.csslintrc' + csslintrc: '<%= site.styles %>/.csslintrc' }, src: ['<%= less.site.dest %>'] } @@ -225,7 +225,7 @@ module.exports = function(grunt) { uglify: { options: {banner: '<%= metadata.banner %>'}, site: { - src: ['<%= site.scripts %>/**/*.js'], + src: ['<%= site.scripts %>/{,*/}*.js'], dest: '<%= site.public %>/js/docs.min.js' } }, @@ -251,7 +251,7 @@ module.exports = function(grunt) { // Clean files from previous build clean: { - example: ['<%= site.dest %>/**/*.{html,css,js}'] + example: ['<%= site.dest %>/{,*/}*.{html,css,js}'] }, // Pull down a list of repos from the Assemble's repos from @@ -290,10 +290,10 @@ module.exports = function(grunt) { options: {livereload: true}, design: { files: [ - '<%= site.data %>/**/*.{yml,json}', - '<%= site.content %>/**/*.md', - '<%= site.styles %>/**/*.less', - '<%= site.templates %>/**/*.hbs', + '<%= site.data %>/{,*/}*.{yml,json}', + '<%= site.content %>/{,*/}*.md', + '<%= site.styles %>/{,*/}*.less', + '<%= site.templates %>/{,*/}*.hbs', ], tasks: ['clean', 'less', 'assemble'] } @@ -340,7 +340,7 @@ module.exports = function(grunt) { // Lint and runt tests. grunt.registerTask('lint', [ 'jshint', - 'validation', + // 'validation', 'csslint' ]); diff --git a/data/button.json b/data/button.json deleted file mode 100644 index 5d8062f..0000000 --- a/data/button.json +++ /dev/null @@ -1,58 +0,0 @@ -[ - { - "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/button.yml b/data/button.yml new file mode 100644 index 0000000..96ef65d --- /dev/null +++ b/data/button.yml @@ -0,0 +1,30 @@ +# 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/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/package.json b/package.json index 4739ca7..eb375a8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "assemble-docs", - "version": "0.1.0", + "name": "assemble.io", + "version": "0.3.0", "description": "Documentation for Assemble.", "homepage": "http://assemble.io", "author": { @@ -20,7 +20,7 @@ "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", @@ -29,10 +29,10 @@ ], "repository": { "type": "git", - "url": "https://github.com/assemble/assemble-docs" + "url": "https://github.com/assemble/assemble.io" }, "bugs": { - "url": "https://github.com/assemble/assemble-docs/issues" + "url": "https://github.com/assemble/assemble.io/issues" }, "main": "index.js", "devDependencies": { @@ -55,7 +55,7 @@ "grunt-contrib-csslint": "~0.2.0", "grunt-contrib-jshint": "~0.8.0", "grunt-contrib-uglify": "~0.4.0", - "grunt-contrib-watch": "~0.5.3", + "grunt-contrib-watch": "~0.6.1", "grunt-csscomb": "~2.0.1", "grunt-html-validation": "~0.1.13", "grunt-prettify": "~0.3.4", @@ -84,7 +84,7 @@ "time-grunt": "~0.2.10", "underscore.string": "~2.3.3", "script-tags": "0.0.3", - "verbalise": "0.0.1", + "verbalize": "~0.0.1", "w3cjs": "~0.1.24" }, "keywords": [ diff --git a/structure/_extensions/helpers/inline.js b/structure/_extensions/helpers/inline.js index e90b652..32d673c 100644 --- a/structure/_extensions/helpers/inline.js +++ b/structure/_extensions/helpers/inline.js @@ -5,7 +5,6 @@ */ 'use strict'; -var file = require('fs-utils'); var matter = require('gray-matter'); var _ = require('lodash'); From 1cbc6e144191d19de796f7caf5c4e7800db9b08d Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Wed, 26 Mar 2014 07:13:30 -0400 Subject: [PATCH 45/81] externalize navigation plugin to its own repo, require it back in re-build. --- .assemblerc.yml | 1 + Gruntfile.js | 6 - package.json | 1 + structure/_extensions/plugins/lib/template.js | 12 -- structure/_extensions/plugins/navigation.js | 136 ------------------ structure/snippets/anchor.js | 4 - 6 files changed, 2 insertions(+), 158 deletions(-) delete mode 100644 structure/_extensions/plugins/lib/template.js delete mode 100644 structure/_extensions/plugins/navigation.js delete mode 100644 structure/snippets/anchor.js diff --git a/.assemblerc.yml b/.assemblerc.yml index a2f3138..ff79a64 100644 --- a/.assemblerc.yml +++ b/.assemblerc.yml @@ -64,6 +64,7 @@ plugins: # - assemble-contrib-download # - assemble-contrib-decompress # - assemble-contrib-wordcount + - assemble-contrib-navigation - assemble-contrib-permalinks # Local plugins diff --git a/Gruntfile.js b/Gruntfile.js index 858839a..a64934f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -81,12 +81,6 @@ module.exports = function(grunt) { plugins: '<%= site.plugins.load %>', helpers: '<%= site.helpers.load %>', - // 'anchors' plugin > Add anchors markup - // to headings in rendered HTML - anchors: { - template: '<%= site.templates %>/snippets/anchor.js' - }, - // 'download' plugin > Download docs for // helpers from GitHub download: { diff --git a/package.json b/package.json index eb375a8..79dcfa7 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "assemble-contrib-anchors": "~0.1.2", "assemble-contrib-decompress": "~0.1.0", "assemble-contrib-download": "~0.1.2", + "assemble-contrib-navigation": "~0.0.2", "assemble-contrib-permalinks": "~0.3.4", "assemble-less": "~0.7.0", "async": "~0.2.10", diff --git a/structure/_extensions/plugins/lib/template.js b/structure/_extensions/plugins/lib/template.js deleted file mode 100644 index f2315e2..0000000 --- a/structure/_extensions/plugins/lib/template.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Anchors template - * Copyright (c) 2014 Jon Schlinkert - * Licensed under the MIT License (MIT). - */ - -module.exports = [ - '', - ' ', - ' ', - '' -].join('\n'); \ No newline at end of file diff --git a/structure/_extensions/plugins/navigation.js b/structure/_extensions/plugins/navigation.js deleted file mode 100644 index 39dd08f..0000000 --- a/structure/_extensions/plugins/navigation.js +++ /dev/null @@ -1,136 +0,0 @@ -/** -* https://github.com/assemble/assemble-contrib-navigation -* -* Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors. -* -* @param {[type]} params [description] -* @param {Function} callback [description] -* @return {[type]} [description] - */ - - -var options = { - stage: 'render:post:page' -}; - -var path = require('path'); -var template = require('template'); -var chalk = require('chalk'); -var cheerio = require('cheerio'); -var _ = require('lodash'); - -var warn = chalk.yellow; - -/** - * Anchor Plugin - * @param {Object} params - * @param {Function} callback - */ -module.exports = function (params, callback) { - 'use strict'; - - // load current page content - var $ = cheerio.load(params.content); - - var anchorOpts = params.assemble.options.anchors || {}; - var navOpts = params.assemble.options.navigation || {}; - - // get all the anchor tags from inside the headers - var headings = $('h1[id],h2[id]'); - var navigation = []; - var duplicateChecker = {}; - var dupesFound = false; - - function findLocation(navigation, depth) { - if (depth === 1) { - return navigation; - } - var loc = navigation[navigation.length - 1]; - if (!loc) { - loc = { - children: [] - }; - navigation.push(loc); - } else if (!loc.children) { - loc.children = []; - } - return findLocation(loc.children, depth - 1); - } - - headings.map(function (i, e) { - var $e = $(e); - var text = $e.text().trim(); - var link = $e.attr('id'); - var node = { - text: text, - link: link, - $e: $e - }; - var level = parseInt(e.name.replace(/h/gi, ''), 10); - var depth = level <= 1 ? 1 : 2; - var location = findLocation(navigation, depth); - location.push(node); - }); - - /** - * Build the HTML for side navigation. - * @param {[type]} navigation [description] - * @param {[type]} first [description] - * @param {[type]} sParentLink [description] - * @return {[type]} [description] - */ - - function buildHTML(navigation, first, sParentLink) { - return ''; - } - - // if (dupesFound) { - // throw new Error("Stopping, duplicates found."); - // } - - $(navOpts.id || '#navigation').append(buildHTML(navigation, true)); - - // - var anchorTemplate = require('./lib/template.js'); - - // If an anchor template is specified in the options, use that instead. - if(anchorOpts && anchorOpts.template) { - anchorOpts.template = path.resolve(anchorOpts.template); - anchorTemplate = require(anchorOpts.template); - } - - headings.map(function (i, e) { - var $e = $(e); - var id = $e.attr('id'); - - // Anchor template - var anchor = template(anchorTemplate, {id: id}); - $(this).append(anchor); - - // Adjust heading - $(this).removeAttr('id').addClass('docs-heading'); - - if($(this).prev().children().hasClass('source-link')) { - var sourceLink = $(this).prev().children('.source-link'); - $(this).append(sourceLink); - } - }); - - params.content = $.html(); - callback(); -}; - -module.exports.options = options; \ No newline at end of file diff --git a/structure/snippets/anchor.js b/structure/snippets/anchor.js deleted file mode 100644 index ae30b9a..0000000 --- a/structure/snippets/anchor.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = [ - '', - '', -].join('\n'); \ No newline at end of file From 2be46dc13fbfe115441d1321fc5894bc54c11d4e Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Fri, 28 Mar 2014 22:02:12 -0400 Subject: [PATCH 46/81] major reorganization of content and data --- .assemblerc.yml | 4 +- Gruntfile.js | 20 +- content/{docs => about}/Comparison.md | 0 content/{docs => about}/Contributors.md | 0 content/{docs => about}/External-Libraries.md | 0 content/{docs => about}/Grapevine.md | 0 content/{docs => about}/Support.md | 0 .../{docs => announcements}/Announcements.md | 0 .../upgrading/v0.5/helpers.md | 0 .../upgrading/v0.5/intro.md | 0 .../upgrading/v0.5/plugins.md | 0 .../Cheatsheet-Handlebars.md | 0 .../Cheatsheet-Lo-Dash.md | 0 .../Cheatsheet-Markdown.md | 0 content/{ => cheatsheets}/cheatsheet.md | 0 content/docs/Errors.md | 28 --- content/docs/Overview.md | 21 -- content/{API => docs/api}/API.md | 0 content/{API => docs/api}/Files.md | 0 content/docs/{ => collections}/Collections.md | 0 content/docs/{ => content}/Content.md | 0 .../docs/{ => content}/Markdown-Styling.md | 0 content/docs/{ => content}/Markdown.md | 0 content/docs/{ => data}/Built-in-Variables.md | 0 content/docs/{ => data}/Context.md | 0 content/docs/{ => data}/Data.md | 0 content/docs/{ => data}/Idiomatic-Data.md | 0 content/docs/{ => data}/JSON.md | 0 content/docs/{ => data}/Metadata.md | 0 content/docs/{ => data}/YAML-front-matter.md | 0 content/docs/{ => data}/YAML.md | 0 content/docs/{ => data}/config-data.md | 0 .../docs/{ => extensions}/Custom-Helpers.md | 0 .../docs/{ => extensions}/Embedding-Code.md | 0 content/docs/{ => extensions}/Extensions.md | 0 content/docs/{ => extensions}/Helpers.md | 0 .../{ => extensions}/Underscore-Mixins.md | 0 .../extensions}/helpers/code/helper-embed.md | 0 .../extensions}/helpers/code/helper-gist.md | 0 .../helpers/code/helper-jsfiddle.md | 0 .../helpers/collections/helper-after.md | 0 .../helpers/collections/helper-any.md | 0 .../helpers/collections/helper-before.md | 0 .../helpers/collections/helper-eachIndex.md | 0 .../collections/helper-eachProperty.md | 0 .../helpers/collections/helper-empty.md | 0 .../helpers/collections/helper-first.md | 0 .../helpers/collections/helper-inArray.md | 0 .../helpers/collections/helper-join.md | 0 .../helpers/collections/helper-last.md | 0 .../helpers/collections/helper-length.md | 0 .../helpers/collections/helper-lengthEqual.md | 0 .../helpers/collections/helper-sort.md | 0 .../helpers/collections/helper-withAfter.md | 0 .../helpers/collections/helper-withBefore.md | 0 .../helpers/collections/helper-withFirst.md | 0 .../helpers/collections/helper-withLast.md | 0 .../helpers/collections/helper-withSort.md | 0 .../helpers/comparison/helper-and.md | 0 .../helpers/comparison/helper-compare.md | 0 .../helpers/comparison/helper-contains.md | 0 .../helpers/comparison/helper-gt.md | 0 .../helpers/comparison/helper-gte.md | 0 .../helpers/comparison/helper-if_gt.md | 0 .../helpers/comparison/helper-if_gteq.md | 0 .../helpers/comparison/helper-ifeq.md | 0 .../helpers/comparison/helper-is.md | 0 .../helpers/comparison/helper-isnt.md | 0 .../helpers/comparison/helper-lt.md | 0 .../helpers/comparison/helper-lte.md | 0 .../helpers/comparison/helper-or.md | 0 .../helpers/comparison/helper-unless_eq.md | 0 .../helpers/comparison/helper-unless_gt.md | 0 .../helpers/comparison/helper-unless_gteq.md | 0 .../helpers/comparison/helper-unless_lt.md | 0 .../helpers/comparison/helper-unless_lteq.md | 0 .../helpers/content/helper-copy.md | 0 .../helpers/content/helper-glob.md | 0 .../helpers/content/helper-include.md | 0 .../helpers/data/helper-parseJSON.md | 0 .../helpers/dates/helper-formatdate.md | 0 .../helpers/dates/helper-moment.md | 0 .../extensions}/helpers/dates/helper-now.md | 0 .../helpers/dates/helper-timeago.md | 0 .../extensions}/helpers/html/helper-br.md | 0 .../helpers/html/helper-doctype.md | 0 .../helpers/html/helper-exticon.md | 0 .../extensions}/helpers/html/helper-ol.md | 0 .../extensions}/helpers/html/helper-ul.md | 0 .../helpers/inflections/helper-inflect.md | 0 .../helpers/inflections/helper-ordinalize.md | 0 .../helpers/layout/helper-block.md | 0 .../helpers/layout/helper-content.md | 0 .../helpers/layout/helper-extend.md | 0 .../extensions}/helpers/lodash/lodash.md | 0 .../helpers/logging/helper-debug.md | 0 .../helpers/logging/helper-expandJSON.md | 0 .../helpers/logging/helper-expandYAML.md | 0 .../extensions}/helpers/logging/helper-log.md | 0 .../helpers/markdown/helper-markdown.md | 0 .../extensions}/helpers/markdown/helper-md.md | 0 .../extensions}/helpers/math/helper-add.md | 0 .../extensions}/helpers/math/helper-ceil.md | 0 .../extensions}/helpers/math/helper-divide.md | 0 .../extensions}/helpers/math/helper-floor.md | 0 .../helpers/math/helper-multiply.md | 0 .../extensions}/helpers/math/helper-round.md | 0 .../helpers/math/helper-subtract.md | 0 .../extensions}/helpers/math/helper-sum.md | 0 .../helpers/misc/helper-default.md | 0 .../extensions}/helpers/misc/helper-noop.md | 0 .../helpers/numbers/helper-addCommas.md | 0 .../helpers/numbers/helper-toAbbr.md | 0 .../helpers/numbers/helper-toExponential.md | 0 .../helpers/numbers/helper-toFixed.md | 0 .../helpers/numbers/helper-toFloat.md | 0 .../helpers/numbers/helper-toInt.md | 0 .../helpers/numbers/helper-toPrecision.md | 0 .../helpers/path/helper-dirname.md | 0 .../helpers/path/helper-extname.md | 0 .../helpers/path/helper-relative.md | 0 .../helpers/readme/helper-authors.md | 0 .../helpers/readme/helper-changelog.md | 0 .../helpers/readme/helper-travis.md | 0 .../helpers/special/helper-aggregate.md | 0 .../helpers/special/helper-compose.md | 0 .../helpers/strings/helper-capitalizeEach.md | 0 .../helpers/strings/helper-capitalizeFirst.md | 0 .../helpers/strings/helper-center.md | 0 .../helpers/strings/helper-dashify.md | 0 .../strings/helper-formatPhoneNumber.md | 0 .../helpers/strings/helper-hyphenate.md | 0 .../helpers/strings/helper-lowercase.md | 0 .../helpers/strings/helper-occurances.md | 0 .../helpers/strings/helper-reverse.md | 0 .../helpers/strings/helper-sentence.md | 0 .../helpers/strings/helper-titleize.md | 0 .../helpers/strings/helper-truncate.md | 0 .../helpers/strings/helper-uppercase.md | 0 .../helpers/url/helper-urlParse.md | 0 .../helpers/url/helper-urlResolve.md | 0 .../{ => docs/extensions}/plugins/index.md | 0 content/docs/grunt/.gitkeep | 0 content/docs/gulp/.gitkeep | 0 content/docs/{ => options}/Options.md | 0 content/docs/{ => options}/options-assets.md | 0 .../docs/{ => options}/options-collections.md | 0 content/docs/{ => options}/options-data.md | 0 content/docs/{ => options}/options-engine.md | 0 content/docs/{ => options}/options-ext.md | 0 content/docs/{ => options}/options-helpers.md | 0 content/docs/{ => options}/options-layout.md | 0 .../docs/{ => options}/options-layoutdir.md | 0 content/docs/{ => options}/options-marked.md | 0 content/docs/{ => options}/options-pages.md | 0 .../docs/{ => options}/options-pagination.md | 0 .../docs/{ => options}/options-partials.md | 0 .../docs/{ => options}/options-permalinks.md | 0 .../{ => templates}/Idiomatic-Templates.md | 0 content/docs/{ => templates}/Layouts.md | 0 content/docs/{ => templates}/Pages-Arrays.md | 0 .../docs/{ => templates}/Pages-Collections.md | 0 content/docs/{ => templates}/Pages.md | 0 content/docs/{ => templates}/Partials.md | 0 content/docs/{ => templates}/Snippets.md | 0 .../{ => templates}/Templates-Overview.md | 0 content/{docs => getting-started}/About.md | 0 content/{docs => getting-started}/Home.md | 0 .../{docs => getting-started}/Installation.md | 0 content/{docs => getting-started}/Outline.md | 0 .../{docs => getting-started}/Quickstart.md | 0 .../{docs => getting-started}/Resources.md | 0 .../Who-Uses-Assemble.md | 0 .../{docs => getting-started}/Why-Assemble.md | 0 content/getting-started/_introduction.md | 60 +++++ content/getting-started/_overview.md | 189 +++++++++++++++ content/getting-started/core-concepts.md | 208 ----------------- content/{docs => getting-started}/examples.md | 0 .../getting-started2.md} | 0 .../intro.md} | 0 content/getting-started/introduction.md | 220 +++++++++++++++--- content/getting-started/overview.md | 194 ++------------- .../guides/organizing-front-end-projects.md | 42 ---- content/guides/understanding-context.md | 202 ---------------- .../announcing-assemble-v0.5.0.md | 0 .../assemble-docs-2-0-under-the-hood.md | 0 content/posts/config-vs-content.md | 2 +- content/posts/why-two-kinds-of-templates.md | 58 +++++ data/{core.json => _assemble.json} | 0 data/{ => _options}/inline.yml | 0 data/{repos.json => _repos.json} | 0 data/{utils => _utils}/README.md | 0 data/{utils => _utils}/extend-pkg.js | 0 data/{utils => _utils}/mixins.js | 29 ++- data/{utils => _utils}/pkg.js | 0 data/button.yml | 41 ++-- data/{ => community}/team.yml | 0 data/{ => community}/users.yml | 0 data/{ => generated-pages}/helpers.yml | 0 data/{ => generated-pages}/upgrading.yml | 0 .../funfacts.yml} | 0 data/{ => informative}/quotes.yml | 0 data/{ => informative}/updates.yml | 0 data/migrations.yml | 14 -- dates.js | 27 +++ package.json | 2 +- structure/_extensions/README.md | 6 +- structure/_extensions/helpers/git.js | 2 +- structure/includes/banner.hbs | 4 +- structure/includes/footer.hbs | 2 +- structure/includes/masthead.hbs | 4 +- structure/includes/sharing.hbs | 32 +++ structure/includes/social.hbs | 28 +++ structure/pages/about.hbs | 12 +- structure/pages/index.hbs | 6 + structure/snippets/feed.xml | 4 +- 216 files changed, 683 insertions(+), 778 deletions(-) rename content/{docs => about}/Comparison.md (100%) rename content/{docs => about}/Contributors.md (100%) rename content/{docs => about}/External-Libraries.md (100%) rename content/{docs => about}/Grapevine.md (100%) rename content/{docs => about}/Support.md (100%) rename content/{docs => announcements}/Announcements.md (100%) rename content/{ => announcements}/upgrading/v0.5/helpers.md (100%) rename content/{ => announcements}/upgrading/v0.5/intro.md (100%) rename content/{ => announcements}/upgrading/v0.5/plugins.md (100%) rename content/{docs => cheatsheets}/Cheatsheet-Handlebars.md (100%) rename content/{docs => cheatsheets}/Cheatsheet-Lo-Dash.md (100%) rename content/{docs => cheatsheets}/Cheatsheet-Markdown.md (100%) rename content/{ => cheatsheets}/cheatsheet.md (100%) delete mode 100644 content/docs/Errors.md delete mode 100644 content/docs/Overview.md rename content/{API => docs/api}/API.md (100%) rename content/{API => docs/api}/Files.md (100%) rename content/docs/{ => collections}/Collections.md (100%) rename content/docs/{ => content}/Content.md (100%) rename content/docs/{ => content}/Markdown-Styling.md (100%) rename content/docs/{ => content}/Markdown.md (100%) rename content/docs/{ => data}/Built-in-Variables.md (100%) rename content/docs/{ => data}/Context.md (100%) rename content/docs/{ => data}/Data.md (100%) rename content/docs/{ => data}/Idiomatic-Data.md (100%) rename content/docs/{ => data}/JSON.md (100%) rename content/docs/{ => data}/Metadata.md (100%) rename content/docs/{ => data}/YAML-front-matter.md (100%) rename content/docs/{ => data}/YAML.md (100%) rename content/docs/{ => data}/config-data.md (100%) rename content/docs/{ => extensions}/Custom-Helpers.md (100%) rename content/docs/{ => extensions}/Embedding-Code.md (100%) rename content/docs/{ => extensions}/Extensions.md (100%) rename content/docs/{ => extensions}/Helpers.md (100%) rename content/docs/{ => extensions}/Underscore-Mixins.md (100%) rename content/{ => docs/extensions}/helpers/code/helper-embed.md (100%) rename content/{ => docs/extensions}/helpers/code/helper-gist.md (100%) rename content/{ => docs/extensions}/helpers/code/helper-jsfiddle.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-after.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-any.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-before.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-eachIndex.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-eachProperty.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-empty.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-first.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-inArray.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-join.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-last.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-length.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-lengthEqual.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-sort.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-withAfter.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-withBefore.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-withFirst.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-withLast.md (100%) rename content/{ => docs/extensions}/helpers/collections/helper-withSort.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-and.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-compare.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-contains.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-gt.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-gte.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-if_gt.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-if_gteq.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-ifeq.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-is.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-isnt.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-lt.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-lte.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-or.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-unless_eq.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-unless_gt.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-unless_gteq.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-unless_lt.md (100%) rename content/{ => docs/extensions}/helpers/comparison/helper-unless_lteq.md (100%) rename content/{ => docs/extensions}/helpers/content/helper-copy.md (100%) rename content/{ => docs/extensions}/helpers/content/helper-glob.md (100%) rename content/{ => docs/extensions}/helpers/content/helper-include.md (100%) rename content/{ => docs/extensions}/helpers/data/helper-parseJSON.md (100%) rename content/{ => docs/extensions}/helpers/dates/helper-formatdate.md (100%) rename content/{ => docs/extensions}/helpers/dates/helper-moment.md (100%) rename content/{ => docs/extensions}/helpers/dates/helper-now.md (100%) rename content/{ => docs/extensions}/helpers/dates/helper-timeago.md (100%) rename content/{ => docs/extensions}/helpers/html/helper-br.md (100%) rename content/{ => docs/extensions}/helpers/html/helper-doctype.md (100%) rename content/{ => docs/extensions}/helpers/html/helper-exticon.md (100%) rename content/{ => docs/extensions}/helpers/html/helper-ol.md (100%) rename content/{ => docs/extensions}/helpers/html/helper-ul.md (100%) rename content/{ => docs/extensions}/helpers/inflections/helper-inflect.md (100%) rename content/{ => docs/extensions}/helpers/inflections/helper-ordinalize.md (100%) rename content/{ => docs/extensions}/helpers/layout/helper-block.md (100%) rename content/{ => docs/extensions}/helpers/layout/helper-content.md (100%) rename content/{ => docs/extensions}/helpers/layout/helper-extend.md (100%) rename content/{ => docs/extensions}/helpers/lodash/lodash.md (100%) rename content/{ => docs/extensions}/helpers/logging/helper-debug.md (100%) rename content/{ => docs/extensions}/helpers/logging/helper-expandJSON.md (100%) rename content/{ => docs/extensions}/helpers/logging/helper-expandYAML.md (100%) rename content/{ => docs/extensions}/helpers/logging/helper-log.md (100%) rename content/{ => docs/extensions}/helpers/markdown/helper-markdown.md (100%) rename content/{ => docs/extensions}/helpers/markdown/helper-md.md (100%) rename content/{ => docs/extensions}/helpers/math/helper-add.md (100%) rename content/{ => docs/extensions}/helpers/math/helper-ceil.md (100%) rename content/{ => docs/extensions}/helpers/math/helper-divide.md (100%) rename content/{ => docs/extensions}/helpers/math/helper-floor.md (100%) rename content/{ => docs/extensions}/helpers/math/helper-multiply.md (100%) rename content/{ => docs/extensions}/helpers/math/helper-round.md (100%) rename content/{ => docs/extensions}/helpers/math/helper-subtract.md (100%) rename content/{ => docs/extensions}/helpers/math/helper-sum.md (100%) rename content/{ => docs/extensions}/helpers/misc/helper-default.md (100%) rename content/{ => docs/extensions}/helpers/misc/helper-noop.md (100%) rename content/{ => docs/extensions}/helpers/numbers/helper-addCommas.md (100%) rename content/{ => docs/extensions}/helpers/numbers/helper-toAbbr.md (100%) rename content/{ => docs/extensions}/helpers/numbers/helper-toExponential.md (100%) rename content/{ => docs/extensions}/helpers/numbers/helper-toFixed.md (100%) rename content/{ => docs/extensions}/helpers/numbers/helper-toFloat.md (100%) rename content/{ => docs/extensions}/helpers/numbers/helper-toInt.md (100%) rename content/{ => docs/extensions}/helpers/numbers/helper-toPrecision.md (100%) rename content/{ => docs/extensions}/helpers/path/helper-dirname.md (100%) rename content/{ => docs/extensions}/helpers/path/helper-extname.md (100%) rename content/{ => docs/extensions}/helpers/path/helper-relative.md (100%) rename content/{ => docs/extensions}/helpers/readme/helper-authors.md (100%) rename content/{ => docs/extensions}/helpers/readme/helper-changelog.md (100%) rename content/{ => docs/extensions}/helpers/readme/helper-travis.md (100%) rename content/{ => docs/extensions}/helpers/special/helper-aggregate.md (100%) rename content/{ => docs/extensions}/helpers/special/helper-compose.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-capitalizeEach.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-capitalizeFirst.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-center.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-dashify.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-formatPhoneNumber.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-hyphenate.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-lowercase.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-occurances.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-reverse.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-sentence.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-titleize.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-truncate.md (100%) rename content/{ => docs/extensions}/helpers/strings/helper-uppercase.md (100%) rename content/{ => docs/extensions}/helpers/url/helper-urlParse.md (100%) rename content/{ => docs/extensions}/helpers/url/helper-urlResolve.md (100%) rename content/{ => docs/extensions}/plugins/index.md (100%) create mode 100644 content/docs/grunt/.gitkeep create mode 100644 content/docs/gulp/.gitkeep rename content/docs/{ => options}/Options.md (100%) rename content/docs/{ => options}/options-assets.md (100%) rename content/docs/{ => options}/options-collections.md (100%) rename content/docs/{ => options}/options-data.md (100%) rename content/docs/{ => options}/options-engine.md (100%) rename content/docs/{ => options}/options-ext.md (100%) rename content/docs/{ => options}/options-helpers.md (100%) rename content/docs/{ => options}/options-layout.md (100%) rename content/docs/{ => options}/options-layoutdir.md (100%) rename content/docs/{ => options}/options-marked.md (100%) rename content/docs/{ => options}/options-pages.md (100%) rename content/docs/{ => options}/options-pagination.md (100%) rename content/docs/{ => options}/options-partials.md (100%) rename content/docs/{ => options}/options-permalinks.md (100%) rename content/docs/{ => templates}/Idiomatic-Templates.md (100%) rename content/docs/{ => templates}/Layouts.md (100%) rename content/docs/{ => templates}/Pages-Arrays.md (100%) rename content/docs/{ => templates}/Pages-Collections.md (100%) rename content/docs/{ => templates}/Pages.md (100%) rename content/docs/{ => templates}/Partials.md (100%) rename content/docs/{ => templates}/Snippets.md (100%) rename content/docs/{ => templates}/Templates-Overview.md (100%) rename content/{docs => getting-started}/About.md (100%) rename content/{docs => getting-started}/Home.md (100%) rename content/{docs => getting-started}/Installation.md (100%) rename content/{docs => getting-started}/Outline.md (100%) rename content/{docs => getting-started}/Quickstart.md (100%) rename content/{docs => getting-started}/Resources.md (100%) rename content/{docs => getting-started}/Who-Uses-Assemble.md (100%) rename content/{docs => getting-started}/Why-Assemble.md (100%) create mode 100644 content/getting-started/_introduction.md create mode 100644 content/getting-started/_overview.md delete mode 100644 content/getting-started/core-concepts.md rename content/{docs => getting-started}/examples.md (100%) rename content/{docs/getting-started.md => getting-started/getting-started2.md} (100%) rename content/{docs/Introduction.md => getting-started/intro.md} (100%) delete mode 100644 content/guides/organizing-front-end-projects.md delete mode 100644 content/guides/understanding-context.md rename content/posts/{2014-03 => }/announcing-assemble-v0.5.0.md (100%) rename content/posts/{2014-03 => }/assemble-docs-2-0-under-the-hood.md (100%) create mode 100644 content/posts/why-two-kinds-of-templates.md rename data/{core.json => _assemble.json} (100%) rename data/{ => _options}/inline.yml (100%) rename data/{repos.json => _repos.json} (100%) rename data/{utils => _utils}/README.md (100%) rename data/{utils => _utils}/extend-pkg.js (100%) rename data/{utils => _utils}/mixins.js (74%) rename data/{utils => _utils}/pkg.js (100%) rename data/{ => community}/team.yml (100%) rename data/{ => community}/users.yml (100%) rename data/{ => generated-pages}/helpers.yml (100%) rename data/{ => generated-pages}/upgrading.yml (100%) rename data/{fun_facts.yml => informative/funfacts.yml} (100%) rename data/{ => informative}/quotes.yml (100%) rename data/{ => informative}/updates.yml (100%) delete mode 100644 data/migrations.yml create mode 100644 dates.js create mode 100644 structure/includes/sharing.hbs create mode 100644 structure/includes/social.hbs diff --git a/.assemblerc.yml b/.assemblerc.yml index ff79a64..bb2425d 100644 --- a/.assemblerc.yml +++ b/.assemblerc.yml @@ -13,7 +13,7 @@ public: <%= site.dest %>/public # Data data: data -utils: data/utils +utils: data/_utils # Assets > fonts, icons, images etc. assets: assets @@ -92,7 +92,7 @@ url: # Repo homepage: <%= pkg.homepage %> - repo: <%= pkg.repository.url %> + repo: <%= _.stripGit(pkg.repository.url) %> issues: <%= pkg.bugs.url %>?state=open # Site diff --git a/Gruntfile.js b/Gruntfile.js index a64934f..7dfff30 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -14,12 +14,11 @@ module.exports = function(grunt) { grunt.util.linefeed = '\n'; // Initialize mixins - grunt.util._.mixin(require('./data/utils/mixins')); + grunt.util._.mixin(require('./data/_utils/mixins')); // Report the execution time of each task. require('time-grunt')(grunt); - /** * Initialize Grunt configuration */ @@ -30,16 +29,16 @@ module.exports = function(grunt) { * Metadata */ - site : grunt.file.readYAML('.assemblerc.yml'), - pkg : grunt.file.readJSON('package.json'), - core : grunt.file.readJSON('data/core.json'), - vendor : grunt.file.readJSON('.bowerrc').directory, + site : grunt.file.readYAML('.assemblerc.yml'), + pkg : grunt.file.readJSON('package.json'), + vendor : grunt.file.readJSON('.bowerrc').directory, + _assemble: grunt.file.readJSON('data/_assemble.json'), metadata: { year: '<%= grunt.template.today("yyyy") %>', banner: [ '/*!', - ' * <%= site.brand %> v<%= core.version %> <<%= core.homepage %>>', + ' * <%= site.brand %> v<%= _assemble.version %> <<%= _assemble.homepage %>>', ' * Copyright 2013-<%= metadata.year %>, <%= site.authors %>.', ' * Source code licensed under the <%= site.license.source.type %> license.', ' * Docs licensed under <%= site.license.docs.type %>.', @@ -52,7 +51,6 @@ module.exports = function(grunt) { js: '<%= vendor %>/bootstrap/dist/js', }, - /** * HTML tasks */ @@ -68,8 +66,10 @@ module.exports = function(grunt) { // Metadata pkg: '<%= pkg %>', site: '<%= site %>', - core: '<%= core %>', - data: ['<%= site.data %>/*.{json,yml}'], + data: ['<%= site.data %>/{,*/}*.{json,yml}'], + + // Metadata from github.com/assemble/assemble + _assemble: '<%= _assemble %>', // Templates partials: ['<%= site.includes %>/{,*/}*.hbs', 'structure/snippets/*.hbs'], diff --git a/content/docs/Comparison.md b/content/about/Comparison.md similarity index 100% rename from content/docs/Comparison.md rename to content/about/Comparison.md diff --git a/content/docs/Contributors.md b/content/about/Contributors.md similarity index 100% rename from content/docs/Contributors.md rename to content/about/Contributors.md diff --git a/content/docs/External-Libraries.md b/content/about/External-Libraries.md similarity index 100% rename from content/docs/External-Libraries.md rename to content/about/External-Libraries.md diff --git a/content/docs/Grapevine.md b/content/about/Grapevine.md similarity index 100% rename from content/docs/Grapevine.md rename to content/about/Grapevine.md diff --git a/content/docs/Support.md b/content/about/Support.md similarity index 100% rename from content/docs/Support.md rename to content/about/Support.md diff --git a/content/docs/Announcements.md b/content/announcements/Announcements.md similarity index 100% rename from content/docs/Announcements.md rename to content/announcements/Announcements.md diff --git a/content/upgrading/v0.5/helpers.md b/content/announcements/upgrading/v0.5/helpers.md similarity index 100% rename from content/upgrading/v0.5/helpers.md rename to content/announcements/upgrading/v0.5/helpers.md diff --git a/content/upgrading/v0.5/intro.md b/content/announcements/upgrading/v0.5/intro.md similarity index 100% rename from content/upgrading/v0.5/intro.md rename to content/announcements/upgrading/v0.5/intro.md diff --git a/content/upgrading/v0.5/plugins.md b/content/announcements/upgrading/v0.5/plugins.md similarity index 100% rename from content/upgrading/v0.5/plugins.md rename to content/announcements/upgrading/v0.5/plugins.md diff --git a/content/docs/Cheatsheet-Handlebars.md b/content/cheatsheets/Cheatsheet-Handlebars.md similarity index 100% rename from content/docs/Cheatsheet-Handlebars.md rename to content/cheatsheets/Cheatsheet-Handlebars.md diff --git a/content/docs/Cheatsheet-Lo-Dash.md b/content/cheatsheets/Cheatsheet-Lo-Dash.md similarity index 100% rename from content/docs/Cheatsheet-Lo-Dash.md rename to content/cheatsheets/Cheatsheet-Lo-Dash.md diff --git a/content/docs/Cheatsheet-Markdown.md b/content/cheatsheets/Cheatsheet-Markdown.md similarity index 100% rename from content/docs/Cheatsheet-Markdown.md rename to content/cheatsheets/Cheatsheet-Markdown.md diff --git a/content/cheatsheet.md b/content/cheatsheets/cheatsheet.md similarity index 100% rename from content/cheatsheet.md rename to content/cheatsheets/cheatsheet.md diff --git a/content/docs/Errors.md b/content/docs/Errors.md deleted file mode 100644 index 5429d1c..0000000 --- a/content/docs/Errors.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Errors - -area: docs -section: configuration ---- - -> Now that the name of this page caught your attention, this page is for posting progress and reporting on actions to be taken in areas regarding namespacing variables, error logging and so on. This is a WIP, so until the matter is resolved we will of course continue to update this page as information becomes available, or as we gain consensus on actions to be taken. - -## Error Reporting - -The current plan is to create a utility library specifically for logging and reporting error messages related to helpers. If you want to contribute either with code or discussion, please [visit this issue](https://github.com/assemble/handlebars-helpers/issues/32) and [this issue](https://github.com/assemble/handlebars-helpers/issues/23). - - -## Avoiding Variable Name Collisions - -This section is an off-shoot of the ongoing conversation on [this issue](https://github.com/assemble/handlebars-helpers/issues/38). - -We are currently discussing ways to automatically detect collisions to provide warnings about them, but in the meantime it is important for you to be aware that there is potential for name collision with built-in variables and helpers. - -The [assemble/handlebars-helpers](https://github.com/assemble/handlebars-helpers) library is rather large, and until a better solution is found there is potential for variable name collision with any helper in that library. It has been proposed that Assemble namespace helpers if no other viable solution is found. We want to avoid namespacing if at all possible, so our current plan is to see if better reporting can mitigate the issue. If not, we'll look at namespacing. Please add your comments [on this issue](https://github.com/assemble/handlebars-helpers/issues/32) or [this issue](https://github.com/assemble/handlebars-helpers/issues/23). - - -## Current Action - -In addition to the existing documentation, issues that have been created to track the discussion, and potential solutions listed above, we are currently documenting all the "reserved" variables and what they do in the documentation. This should be available any day now (as of 7/15/2013) - -Other feedback or contributions are encouraged. Visit either the [handlebars-helpers issues](https://github.com/assemble/handlebars-helpers/issues) or the [assemble issues](https://github.com/assemble/assemble/issues) to add your voice to the conversation. diff --git a/content/docs/Overview.md b/content/docs/Overview.md deleted file mode 100644 index c751ff8..0000000 --- a/content/docs/Overview.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Overview - -area: docs -section: getting started - -published: false ---- - -> Assemble is a dead-simple, "opinion aware", static site and component generator. - -I've been trying to come up with a better slogan for Assemble for a while now, but I just can't think of anything that really gets across how powerful and easy it is to use. - -Here is a short list of **the slogans that didn't make the cut**: - -### Assemble: A blogging framework for slackers - -That's right, _slackers_. Assemble can make you even more lazy, because it's just that easy to use. Although I love this fact (who doesn't like being lazy?), I'm not sure it tells the _entire_ story (btw, I tried "snackers" as well, but that makes absolutely no sense at all. So no). - -If you haven't tried out assemble, give it a shot. Assemble can be used just for building Handlebars templates if that's all you need for a project. -Assemble was created to be a site builder, so it can do orders of magnitude more than Grunt tasks for building templates diff --git a/content/API/API.md b/content/docs/api/API.md similarity index 100% rename from content/API/API.md rename to content/docs/api/API.md diff --git a/content/API/Files.md b/content/docs/api/Files.md similarity index 100% rename from content/API/Files.md rename to content/docs/api/Files.md diff --git a/content/docs/Collections.md b/content/docs/collections/Collections.md similarity index 100% rename from content/docs/Collections.md rename to content/docs/collections/Collections.md diff --git a/content/docs/Content.md b/content/docs/content/Content.md similarity index 100% rename from content/docs/Content.md rename to content/docs/content/Content.md diff --git a/content/docs/Markdown-Styling.md b/content/docs/content/Markdown-Styling.md similarity index 100% rename from content/docs/Markdown-Styling.md rename to content/docs/content/Markdown-Styling.md diff --git a/content/docs/Markdown.md b/content/docs/content/Markdown.md similarity index 100% rename from content/docs/Markdown.md rename to content/docs/content/Markdown.md diff --git a/content/docs/Built-in-Variables.md b/content/docs/data/Built-in-Variables.md similarity index 100% rename from content/docs/Built-in-Variables.md rename to content/docs/data/Built-in-Variables.md diff --git a/content/docs/Context.md b/content/docs/data/Context.md similarity index 100% rename from content/docs/Context.md rename to content/docs/data/Context.md diff --git a/content/docs/Data.md b/content/docs/data/Data.md similarity index 100% rename from content/docs/Data.md rename to content/docs/data/Data.md diff --git a/content/docs/Idiomatic-Data.md b/content/docs/data/Idiomatic-Data.md similarity index 100% rename from content/docs/Idiomatic-Data.md rename to content/docs/data/Idiomatic-Data.md diff --git a/content/docs/JSON.md b/content/docs/data/JSON.md similarity index 100% rename from content/docs/JSON.md rename to content/docs/data/JSON.md diff --git a/content/docs/Metadata.md b/content/docs/data/Metadata.md similarity index 100% rename from content/docs/Metadata.md rename to content/docs/data/Metadata.md diff --git a/content/docs/YAML-front-matter.md b/content/docs/data/YAML-front-matter.md similarity index 100% rename from content/docs/YAML-front-matter.md rename to content/docs/data/YAML-front-matter.md diff --git a/content/docs/YAML.md b/content/docs/data/YAML.md similarity index 100% rename from content/docs/YAML.md rename to content/docs/data/YAML.md diff --git a/content/docs/config-data.md b/content/docs/data/config-data.md similarity index 100% rename from content/docs/config-data.md rename to content/docs/data/config-data.md diff --git a/content/docs/Custom-Helpers.md b/content/docs/extensions/Custom-Helpers.md similarity index 100% rename from content/docs/Custom-Helpers.md rename to content/docs/extensions/Custom-Helpers.md diff --git a/content/docs/Embedding-Code.md b/content/docs/extensions/Embedding-Code.md similarity index 100% rename from content/docs/Embedding-Code.md rename to content/docs/extensions/Embedding-Code.md diff --git a/content/docs/Extensions.md b/content/docs/extensions/Extensions.md similarity index 100% rename from content/docs/Extensions.md rename to content/docs/extensions/Extensions.md diff --git a/content/docs/Helpers.md b/content/docs/extensions/Helpers.md similarity index 100% rename from content/docs/Helpers.md rename to content/docs/extensions/Helpers.md diff --git a/content/docs/Underscore-Mixins.md b/content/docs/extensions/Underscore-Mixins.md similarity index 100% rename from content/docs/Underscore-Mixins.md rename to content/docs/extensions/Underscore-Mixins.md diff --git a/content/helpers/code/helper-embed.md b/content/docs/extensions/helpers/code/helper-embed.md similarity index 100% rename from content/helpers/code/helper-embed.md rename to content/docs/extensions/helpers/code/helper-embed.md diff --git a/content/helpers/code/helper-gist.md b/content/docs/extensions/helpers/code/helper-gist.md similarity index 100% rename from content/helpers/code/helper-gist.md rename to content/docs/extensions/helpers/code/helper-gist.md diff --git a/content/helpers/code/helper-jsfiddle.md b/content/docs/extensions/helpers/code/helper-jsfiddle.md similarity index 100% rename from content/helpers/code/helper-jsfiddle.md rename to content/docs/extensions/helpers/code/helper-jsfiddle.md diff --git a/content/helpers/collections/helper-after.md b/content/docs/extensions/helpers/collections/helper-after.md similarity index 100% rename from content/helpers/collections/helper-after.md rename to content/docs/extensions/helpers/collections/helper-after.md diff --git a/content/helpers/collections/helper-any.md b/content/docs/extensions/helpers/collections/helper-any.md similarity index 100% rename from content/helpers/collections/helper-any.md rename to content/docs/extensions/helpers/collections/helper-any.md diff --git a/content/helpers/collections/helper-before.md b/content/docs/extensions/helpers/collections/helper-before.md similarity index 100% rename from content/helpers/collections/helper-before.md rename to content/docs/extensions/helpers/collections/helper-before.md diff --git a/content/helpers/collections/helper-eachIndex.md b/content/docs/extensions/helpers/collections/helper-eachIndex.md similarity index 100% rename from content/helpers/collections/helper-eachIndex.md rename to content/docs/extensions/helpers/collections/helper-eachIndex.md diff --git a/content/helpers/collections/helper-eachProperty.md b/content/docs/extensions/helpers/collections/helper-eachProperty.md similarity index 100% rename from content/helpers/collections/helper-eachProperty.md rename to content/docs/extensions/helpers/collections/helper-eachProperty.md diff --git a/content/helpers/collections/helper-empty.md b/content/docs/extensions/helpers/collections/helper-empty.md similarity index 100% rename from content/helpers/collections/helper-empty.md rename to content/docs/extensions/helpers/collections/helper-empty.md diff --git a/content/helpers/collections/helper-first.md b/content/docs/extensions/helpers/collections/helper-first.md similarity index 100% rename from content/helpers/collections/helper-first.md rename to content/docs/extensions/helpers/collections/helper-first.md diff --git a/content/helpers/collections/helper-inArray.md b/content/docs/extensions/helpers/collections/helper-inArray.md similarity index 100% rename from content/helpers/collections/helper-inArray.md rename to content/docs/extensions/helpers/collections/helper-inArray.md diff --git a/content/helpers/collections/helper-join.md b/content/docs/extensions/helpers/collections/helper-join.md similarity index 100% rename from content/helpers/collections/helper-join.md rename to content/docs/extensions/helpers/collections/helper-join.md diff --git a/content/helpers/collections/helper-last.md b/content/docs/extensions/helpers/collections/helper-last.md similarity index 100% rename from content/helpers/collections/helper-last.md rename to content/docs/extensions/helpers/collections/helper-last.md diff --git a/content/helpers/collections/helper-length.md b/content/docs/extensions/helpers/collections/helper-length.md similarity index 100% rename from content/helpers/collections/helper-length.md rename to content/docs/extensions/helpers/collections/helper-length.md diff --git a/content/helpers/collections/helper-lengthEqual.md b/content/docs/extensions/helpers/collections/helper-lengthEqual.md similarity index 100% rename from content/helpers/collections/helper-lengthEqual.md rename to content/docs/extensions/helpers/collections/helper-lengthEqual.md diff --git a/content/helpers/collections/helper-sort.md b/content/docs/extensions/helpers/collections/helper-sort.md similarity index 100% rename from content/helpers/collections/helper-sort.md rename to content/docs/extensions/helpers/collections/helper-sort.md diff --git a/content/helpers/collections/helper-withAfter.md b/content/docs/extensions/helpers/collections/helper-withAfter.md similarity index 100% rename from content/helpers/collections/helper-withAfter.md rename to content/docs/extensions/helpers/collections/helper-withAfter.md diff --git a/content/helpers/collections/helper-withBefore.md b/content/docs/extensions/helpers/collections/helper-withBefore.md similarity index 100% rename from content/helpers/collections/helper-withBefore.md rename to content/docs/extensions/helpers/collections/helper-withBefore.md diff --git a/content/helpers/collections/helper-withFirst.md b/content/docs/extensions/helpers/collections/helper-withFirst.md similarity index 100% rename from content/helpers/collections/helper-withFirst.md rename to content/docs/extensions/helpers/collections/helper-withFirst.md diff --git a/content/helpers/collections/helper-withLast.md b/content/docs/extensions/helpers/collections/helper-withLast.md similarity index 100% rename from content/helpers/collections/helper-withLast.md rename to content/docs/extensions/helpers/collections/helper-withLast.md diff --git a/content/helpers/collections/helper-withSort.md b/content/docs/extensions/helpers/collections/helper-withSort.md similarity index 100% rename from content/helpers/collections/helper-withSort.md rename to content/docs/extensions/helpers/collections/helper-withSort.md diff --git a/content/helpers/comparison/helper-and.md b/content/docs/extensions/helpers/comparison/helper-and.md similarity index 100% rename from content/helpers/comparison/helper-and.md rename to content/docs/extensions/helpers/comparison/helper-and.md diff --git a/content/helpers/comparison/helper-compare.md b/content/docs/extensions/helpers/comparison/helper-compare.md similarity index 100% rename from content/helpers/comparison/helper-compare.md rename to content/docs/extensions/helpers/comparison/helper-compare.md diff --git a/content/helpers/comparison/helper-contains.md b/content/docs/extensions/helpers/comparison/helper-contains.md similarity index 100% rename from content/helpers/comparison/helper-contains.md rename to content/docs/extensions/helpers/comparison/helper-contains.md diff --git a/content/helpers/comparison/helper-gt.md b/content/docs/extensions/helpers/comparison/helper-gt.md similarity index 100% rename from content/helpers/comparison/helper-gt.md rename to content/docs/extensions/helpers/comparison/helper-gt.md diff --git a/content/helpers/comparison/helper-gte.md b/content/docs/extensions/helpers/comparison/helper-gte.md similarity index 100% rename from content/helpers/comparison/helper-gte.md rename to content/docs/extensions/helpers/comparison/helper-gte.md diff --git a/content/helpers/comparison/helper-if_gt.md b/content/docs/extensions/helpers/comparison/helper-if_gt.md similarity index 100% rename from content/helpers/comparison/helper-if_gt.md rename to content/docs/extensions/helpers/comparison/helper-if_gt.md diff --git a/content/helpers/comparison/helper-if_gteq.md b/content/docs/extensions/helpers/comparison/helper-if_gteq.md similarity index 100% rename from content/helpers/comparison/helper-if_gteq.md rename to content/docs/extensions/helpers/comparison/helper-if_gteq.md diff --git a/content/helpers/comparison/helper-ifeq.md b/content/docs/extensions/helpers/comparison/helper-ifeq.md similarity index 100% rename from content/helpers/comparison/helper-ifeq.md rename to content/docs/extensions/helpers/comparison/helper-ifeq.md diff --git a/content/helpers/comparison/helper-is.md b/content/docs/extensions/helpers/comparison/helper-is.md similarity index 100% rename from content/helpers/comparison/helper-is.md rename to content/docs/extensions/helpers/comparison/helper-is.md diff --git a/content/helpers/comparison/helper-isnt.md b/content/docs/extensions/helpers/comparison/helper-isnt.md similarity index 100% rename from content/helpers/comparison/helper-isnt.md rename to content/docs/extensions/helpers/comparison/helper-isnt.md diff --git a/content/helpers/comparison/helper-lt.md b/content/docs/extensions/helpers/comparison/helper-lt.md similarity index 100% rename from content/helpers/comparison/helper-lt.md rename to content/docs/extensions/helpers/comparison/helper-lt.md diff --git a/content/helpers/comparison/helper-lte.md b/content/docs/extensions/helpers/comparison/helper-lte.md similarity index 100% rename from content/helpers/comparison/helper-lte.md rename to content/docs/extensions/helpers/comparison/helper-lte.md diff --git a/content/helpers/comparison/helper-or.md b/content/docs/extensions/helpers/comparison/helper-or.md similarity index 100% rename from content/helpers/comparison/helper-or.md rename to content/docs/extensions/helpers/comparison/helper-or.md diff --git a/content/helpers/comparison/helper-unless_eq.md b/content/docs/extensions/helpers/comparison/helper-unless_eq.md similarity index 100% rename from content/helpers/comparison/helper-unless_eq.md rename to content/docs/extensions/helpers/comparison/helper-unless_eq.md diff --git a/content/helpers/comparison/helper-unless_gt.md b/content/docs/extensions/helpers/comparison/helper-unless_gt.md similarity index 100% rename from content/helpers/comparison/helper-unless_gt.md rename to content/docs/extensions/helpers/comparison/helper-unless_gt.md diff --git a/content/helpers/comparison/helper-unless_gteq.md b/content/docs/extensions/helpers/comparison/helper-unless_gteq.md similarity index 100% rename from content/helpers/comparison/helper-unless_gteq.md rename to content/docs/extensions/helpers/comparison/helper-unless_gteq.md diff --git a/content/helpers/comparison/helper-unless_lt.md b/content/docs/extensions/helpers/comparison/helper-unless_lt.md similarity index 100% rename from content/helpers/comparison/helper-unless_lt.md rename to content/docs/extensions/helpers/comparison/helper-unless_lt.md diff --git a/content/helpers/comparison/helper-unless_lteq.md b/content/docs/extensions/helpers/comparison/helper-unless_lteq.md similarity index 100% rename from content/helpers/comparison/helper-unless_lteq.md rename to content/docs/extensions/helpers/comparison/helper-unless_lteq.md diff --git a/content/helpers/content/helper-copy.md b/content/docs/extensions/helpers/content/helper-copy.md similarity index 100% rename from content/helpers/content/helper-copy.md rename to content/docs/extensions/helpers/content/helper-copy.md diff --git a/content/helpers/content/helper-glob.md b/content/docs/extensions/helpers/content/helper-glob.md similarity index 100% rename from content/helpers/content/helper-glob.md rename to content/docs/extensions/helpers/content/helper-glob.md diff --git a/content/helpers/content/helper-include.md b/content/docs/extensions/helpers/content/helper-include.md similarity index 100% rename from content/helpers/content/helper-include.md rename to content/docs/extensions/helpers/content/helper-include.md diff --git a/content/helpers/data/helper-parseJSON.md b/content/docs/extensions/helpers/data/helper-parseJSON.md similarity index 100% rename from content/helpers/data/helper-parseJSON.md rename to content/docs/extensions/helpers/data/helper-parseJSON.md diff --git a/content/helpers/dates/helper-formatdate.md b/content/docs/extensions/helpers/dates/helper-formatdate.md similarity index 100% rename from content/helpers/dates/helper-formatdate.md rename to content/docs/extensions/helpers/dates/helper-formatdate.md diff --git a/content/helpers/dates/helper-moment.md b/content/docs/extensions/helpers/dates/helper-moment.md similarity index 100% rename from content/helpers/dates/helper-moment.md rename to content/docs/extensions/helpers/dates/helper-moment.md diff --git a/content/helpers/dates/helper-now.md b/content/docs/extensions/helpers/dates/helper-now.md similarity index 100% rename from content/helpers/dates/helper-now.md rename to content/docs/extensions/helpers/dates/helper-now.md diff --git a/content/helpers/dates/helper-timeago.md b/content/docs/extensions/helpers/dates/helper-timeago.md similarity index 100% rename from content/helpers/dates/helper-timeago.md rename to content/docs/extensions/helpers/dates/helper-timeago.md diff --git a/content/helpers/html/helper-br.md b/content/docs/extensions/helpers/html/helper-br.md similarity index 100% rename from content/helpers/html/helper-br.md rename to content/docs/extensions/helpers/html/helper-br.md diff --git a/content/helpers/html/helper-doctype.md b/content/docs/extensions/helpers/html/helper-doctype.md similarity index 100% rename from content/helpers/html/helper-doctype.md rename to content/docs/extensions/helpers/html/helper-doctype.md diff --git a/content/helpers/html/helper-exticon.md b/content/docs/extensions/helpers/html/helper-exticon.md similarity index 100% rename from content/helpers/html/helper-exticon.md rename to content/docs/extensions/helpers/html/helper-exticon.md diff --git a/content/helpers/html/helper-ol.md b/content/docs/extensions/helpers/html/helper-ol.md similarity index 100% rename from content/helpers/html/helper-ol.md rename to content/docs/extensions/helpers/html/helper-ol.md diff --git a/content/helpers/html/helper-ul.md b/content/docs/extensions/helpers/html/helper-ul.md similarity index 100% rename from content/helpers/html/helper-ul.md rename to content/docs/extensions/helpers/html/helper-ul.md diff --git a/content/helpers/inflections/helper-inflect.md b/content/docs/extensions/helpers/inflections/helper-inflect.md similarity index 100% rename from content/helpers/inflections/helper-inflect.md rename to content/docs/extensions/helpers/inflections/helper-inflect.md diff --git a/content/helpers/inflections/helper-ordinalize.md b/content/docs/extensions/helpers/inflections/helper-ordinalize.md similarity index 100% rename from content/helpers/inflections/helper-ordinalize.md rename to content/docs/extensions/helpers/inflections/helper-ordinalize.md diff --git a/content/helpers/layout/helper-block.md b/content/docs/extensions/helpers/layout/helper-block.md similarity index 100% rename from content/helpers/layout/helper-block.md rename to content/docs/extensions/helpers/layout/helper-block.md diff --git a/content/helpers/layout/helper-content.md b/content/docs/extensions/helpers/layout/helper-content.md similarity index 100% rename from content/helpers/layout/helper-content.md rename to content/docs/extensions/helpers/layout/helper-content.md diff --git a/content/helpers/layout/helper-extend.md b/content/docs/extensions/helpers/layout/helper-extend.md similarity index 100% rename from content/helpers/layout/helper-extend.md rename to content/docs/extensions/helpers/layout/helper-extend.md diff --git a/content/helpers/lodash/lodash.md b/content/docs/extensions/helpers/lodash/lodash.md similarity index 100% rename from content/helpers/lodash/lodash.md rename to content/docs/extensions/helpers/lodash/lodash.md diff --git a/content/helpers/logging/helper-debug.md b/content/docs/extensions/helpers/logging/helper-debug.md similarity index 100% rename from content/helpers/logging/helper-debug.md rename to content/docs/extensions/helpers/logging/helper-debug.md diff --git a/content/helpers/logging/helper-expandJSON.md b/content/docs/extensions/helpers/logging/helper-expandJSON.md similarity index 100% rename from content/helpers/logging/helper-expandJSON.md rename to content/docs/extensions/helpers/logging/helper-expandJSON.md diff --git a/content/helpers/logging/helper-expandYAML.md b/content/docs/extensions/helpers/logging/helper-expandYAML.md similarity index 100% rename from content/helpers/logging/helper-expandYAML.md rename to content/docs/extensions/helpers/logging/helper-expandYAML.md diff --git a/content/helpers/logging/helper-log.md b/content/docs/extensions/helpers/logging/helper-log.md similarity index 100% rename from content/helpers/logging/helper-log.md rename to content/docs/extensions/helpers/logging/helper-log.md diff --git a/content/helpers/markdown/helper-markdown.md b/content/docs/extensions/helpers/markdown/helper-markdown.md similarity index 100% rename from content/helpers/markdown/helper-markdown.md rename to content/docs/extensions/helpers/markdown/helper-markdown.md diff --git a/content/helpers/markdown/helper-md.md b/content/docs/extensions/helpers/markdown/helper-md.md similarity index 100% rename from content/helpers/markdown/helper-md.md rename to content/docs/extensions/helpers/markdown/helper-md.md diff --git a/content/helpers/math/helper-add.md b/content/docs/extensions/helpers/math/helper-add.md similarity index 100% rename from content/helpers/math/helper-add.md rename to content/docs/extensions/helpers/math/helper-add.md diff --git a/content/helpers/math/helper-ceil.md b/content/docs/extensions/helpers/math/helper-ceil.md similarity index 100% rename from content/helpers/math/helper-ceil.md rename to content/docs/extensions/helpers/math/helper-ceil.md diff --git a/content/helpers/math/helper-divide.md b/content/docs/extensions/helpers/math/helper-divide.md similarity index 100% rename from content/helpers/math/helper-divide.md rename to content/docs/extensions/helpers/math/helper-divide.md diff --git a/content/helpers/math/helper-floor.md b/content/docs/extensions/helpers/math/helper-floor.md similarity index 100% rename from content/helpers/math/helper-floor.md rename to content/docs/extensions/helpers/math/helper-floor.md diff --git a/content/helpers/math/helper-multiply.md b/content/docs/extensions/helpers/math/helper-multiply.md similarity index 100% rename from content/helpers/math/helper-multiply.md rename to content/docs/extensions/helpers/math/helper-multiply.md diff --git a/content/helpers/math/helper-round.md b/content/docs/extensions/helpers/math/helper-round.md similarity index 100% rename from content/helpers/math/helper-round.md rename to content/docs/extensions/helpers/math/helper-round.md diff --git a/content/helpers/math/helper-subtract.md b/content/docs/extensions/helpers/math/helper-subtract.md similarity index 100% rename from content/helpers/math/helper-subtract.md rename to content/docs/extensions/helpers/math/helper-subtract.md diff --git a/content/helpers/math/helper-sum.md b/content/docs/extensions/helpers/math/helper-sum.md similarity index 100% rename from content/helpers/math/helper-sum.md rename to content/docs/extensions/helpers/math/helper-sum.md diff --git a/content/helpers/misc/helper-default.md b/content/docs/extensions/helpers/misc/helper-default.md similarity index 100% rename from content/helpers/misc/helper-default.md rename to content/docs/extensions/helpers/misc/helper-default.md diff --git a/content/helpers/misc/helper-noop.md b/content/docs/extensions/helpers/misc/helper-noop.md similarity index 100% rename from content/helpers/misc/helper-noop.md rename to content/docs/extensions/helpers/misc/helper-noop.md diff --git a/content/helpers/numbers/helper-addCommas.md b/content/docs/extensions/helpers/numbers/helper-addCommas.md similarity index 100% rename from content/helpers/numbers/helper-addCommas.md rename to content/docs/extensions/helpers/numbers/helper-addCommas.md diff --git a/content/helpers/numbers/helper-toAbbr.md b/content/docs/extensions/helpers/numbers/helper-toAbbr.md similarity index 100% rename from content/helpers/numbers/helper-toAbbr.md rename to content/docs/extensions/helpers/numbers/helper-toAbbr.md diff --git a/content/helpers/numbers/helper-toExponential.md b/content/docs/extensions/helpers/numbers/helper-toExponential.md similarity index 100% rename from content/helpers/numbers/helper-toExponential.md rename to content/docs/extensions/helpers/numbers/helper-toExponential.md diff --git a/content/helpers/numbers/helper-toFixed.md b/content/docs/extensions/helpers/numbers/helper-toFixed.md similarity index 100% rename from content/helpers/numbers/helper-toFixed.md rename to content/docs/extensions/helpers/numbers/helper-toFixed.md diff --git a/content/helpers/numbers/helper-toFloat.md b/content/docs/extensions/helpers/numbers/helper-toFloat.md similarity index 100% rename from content/helpers/numbers/helper-toFloat.md rename to content/docs/extensions/helpers/numbers/helper-toFloat.md diff --git a/content/helpers/numbers/helper-toInt.md b/content/docs/extensions/helpers/numbers/helper-toInt.md similarity index 100% rename from content/helpers/numbers/helper-toInt.md rename to content/docs/extensions/helpers/numbers/helper-toInt.md diff --git a/content/helpers/numbers/helper-toPrecision.md b/content/docs/extensions/helpers/numbers/helper-toPrecision.md similarity index 100% rename from content/helpers/numbers/helper-toPrecision.md rename to content/docs/extensions/helpers/numbers/helper-toPrecision.md diff --git a/content/helpers/path/helper-dirname.md b/content/docs/extensions/helpers/path/helper-dirname.md similarity index 100% rename from content/helpers/path/helper-dirname.md rename to content/docs/extensions/helpers/path/helper-dirname.md diff --git a/content/helpers/path/helper-extname.md b/content/docs/extensions/helpers/path/helper-extname.md similarity index 100% rename from content/helpers/path/helper-extname.md rename to content/docs/extensions/helpers/path/helper-extname.md diff --git a/content/helpers/path/helper-relative.md b/content/docs/extensions/helpers/path/helper-relative.md similarity index 100% rename from content/helpers/path/helper-relative.md rename to content/docs/extensions/helpers/path/helper-relative.md diff --git a/content/helpers/readme/helper-authors.md b/content/docs/extensions/helpers/readme/helper-authors.md similarity index 100% rename from content/helpers/readme/helper-authors.md rename to content/docs/extensions/helpers/readme/helper-authors.md diff --git a/content/helpers/readme/helper-changelog.md b/content/docs/extensions/helpers/readme/helper-changelog.md similarity index 100% rename from content/helpers/readme/helper-changelog.md rename to content/docs/extensions/helpers/readme/helper-changelog.md diff --git a/content/helpers/readme/helper-travis.md b/content/docs/extensions/helpers/readme/helper-travis.md similarity index 100% rename from content/helpers/readme/helper-travis.md rename to content/docs/extensions/helpers/readme/helper-travis.md diff --git a/content/helpers/special/helper-aggregate.md b/content/docs/extensions/helpers/special/helper-aggregate.md similarity index 100% rename from content/helpers/special/helper-aggregate.md rename to content/docs/extensions/helpers/special/helper-aggregate.md diff --git a/content/helpers/special/helper-compose.md b/content/docs/extensions/helpers/special/helper-compose.md similarity index 100% rename from content/helpers/special/helper-compose.md rename to content/docs/extensions/helpers/special/helper-compose.md diff --git a/content/helpers/strings/helper-capitalizeEach.md b/content/docs/extensions/helpers/strings/helper-capitalizeEach.md similarity index 100% rename from content/helpers/strings/helper-capitalizeEach.md rename to content/docs/extensions/helpers/strings/helper-capitalizeEach.md diff --git a/content/helpers/strings/helper-capitalizeFirst.md b/content/docs/extensions/helpers/strings/helper-capitalizeFirst.md similarity index 100% rename from content/helpers/strings/helper-capitalizeFirst.md rename to content/docs/extensions/helpers/strings/helper-capitalizeFirst.md diff --git a/content/helpers/strings/helper-center.md b/content/docs/extensions/helpers/strings/helper-center.md similarity index 100% rename from content/helpers/strings/helper-center.md rename to content/docs/extensions/helpers/strings/helper-center.md diff --git a/content/helpers/strings/helper-dashify.md b/content/docs/extensions/helpers/strings/helper-dashify.md similarity index 100% rename from content/helpers/strings/helper-dashify.md rename to content/docs/extensions/helpers/strings/helper-dashify.md diff --git a/content/helpers/strings/helper-formatPhoneNumber.md b/content/docs/extensions/helpers/strings/helper-formatPhoneNumber.md similarity index 100% rename from content/helpers/strings/helper-formatPhoneNumber.md rename to content/docs/extensions/helpers/strings/helper-formatPhoneNumber.md diff --git a/content/helpers/strings/helper-hyphenate.md b/content/docs/extensions/helpers/strings/helper-hyphenate.md similarity index 100% rename from content/helpers/strings/helper-hyphenate.md rename to content/docs/extensions/helpers/strings/helper-hyphenate.md diff --git a/content/helpers/strings/helper-lowercase.md b/content/docs/extensions/helpers/strings/helper-lowercase.md similarity index 100% rename from content/helpers/strings/helper-lowercase.md rename to content/docs/extensions/helpers/strings/helper-lowercase.md diff --git a/content/helpers/strings/helper-occurances.md b/content/docs/extensions/helpers/strings/helper-occurances.md similarity index 100% rename from content/helpers/strings/helper-occurances.md rename to content/docs/extensions/helpers/strings/helper-occurances.md diff --git a/content/helpers/strings/helper-reverse.md b/content/docs/extensions/helpers/strings/helper-reverse.md similarity index 100% rename from content/helpers/strings/helper-reverse.md rename to content/docs/extensions/helpers/strings/helper-reverse.md diff --git a/content/helpers/strings/helper-sentence.md b/content/docs/extensions/helpers/strings/helper-sentence.md similarity index 100% rename from content/helpers/strings/helper-sentence.md rename to content/docs/extensions/helpers/strings/helper-sentence.md diff --git a/content/helpers/strings/helper-titleize.md b/content/docs/extensions/helpers/strings/helper-titleize.md similarity index 100% rename from content/helpers/strings/helper-titleize.md rename to content/docs/extensions/helpers/strings/helper-titleize.md diff --git a/content/helpers/strings/helper-truncate.md b/content/docs/extensions/helpers/strings/helper-truncate.md similarity index 100% rename from content/helpers/strings/helper-truncate.md rename to content/docs/extensions/helpers/strings/helper-truncate.md diff --git a/content/helpers/strings/helper-uppercase.md b/content/docs/extensions/helpers/strings/helper-uppercase.md similarity index 100% rename from content/helpers/strings/helper-uppercase.md rename to content/docs/extensions/helpers/strings/helper-uppercase.md diff --git a/content/helpers/url/helper-urlParse.md b/content/docs/extensions/helpers/url/helper-urlParse.md similarity index 100% rename from content/helpers/url/helper-urlParse.md rename to content/docs/extensions/helpers/url/helper-urlParse.md diff --git a/content/helpers/url/helper-urlResolve.md b/content/docs/extensions/helpers/url/helper-urlResolve.md similarity index 100% rename from content/helpers/url/helper-urlResolve.md rename to content/docs/extensions/helpers/url/helper-urlResolve.md diff --git a/content/plugins/index.md b/content/docs/extensions/plugins/index.md similarity index 100% rename from content/plugins/index.md rename to content/docs/extensions/plugins/index.md diff --git a/content/docs/grunt/.gitkeep b/content/docs/grunt/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/content/docs/gulp/.gitkeep b/content/docs/gulp/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/content/docs/Options.md b/content/docs/options/Options.md similarity index 100% rename from content/docs/Options.md rename to content/docs/options/Options.md diff --git a/content/docs/options-assets.md b/content/docs/options/options-assets.md similarity index 100% rename from content/docs/options-assets.md rename to content/docs/options/options-assets.md diff --git a/content/docs/options-collections.md b/content/docs/options/options-collections.md similarity index 100% rename from content/docs/options-collections.md rename to content/docs/options/options-collections.md diff --git a/content/docs/options-data.md b/content/docs/options/options-data.md similarity index 100% rename from content/docs/options-data.md rename to content/docs/options/options-data.md diff --git a/content/docs/options-engine.md b/content/docs/options/options-engine.md similarity index 100% rename from content/docs/options-engine.md rename to content/docs/options/options-engine.md diff --git a/content/docs/options-ext.md b/content/docs/options/options-ext.md similarity index 100% rename from content/docs/options-ext.md rename to content/docs/options/options-ext.md diff --git a/content/docs/options-helpers.md b/content/docs/options/options-helpers.md similarity index 100% rename from content/docs/options-helpers.md rename to content/docs/options/options-helpers.md diff --git a/content/docs/options-layout.md b/content/docs/options/options-layout.md similarity index 100% rename from content/docs/options-layout.md rename to content/docs/options/options-layout.md diff --git a/content/docs/options-layoutdir.md b/content/docs/options/options-layoutdir.md similarity index 100% rename from content/docs/options-layoutdir.md rename to content/docs/options/options-layoutdir.md diff --git a/content/docs/options-marked.md b/content/docs/options/options-marked.md similarity index 100% rename from content/docs/options-marked.md rename to content/docs/options/options-marked.md diff --git a/content/docs/options-pages.md b/content/docs/options/options-pages.md similarity index 100% rename from content/docs/options-pages.md rename to content/docs/options/options-pages.md diff --git a/content/docs/options-pagination.md b/content/docs/options/options-pagination.md similarity index 100% rename from content/docs/options-pagination.md rename to content/docs/options/options-pagination.md diff --git a/content/docs/options-partials.md b/content/docs/options/options-partials.md similarity index 100% rename from content/docs/options-partials.md rename to content/docs/options/options-partials.md diff --git a/content/docs/options-permalinks.md b/content/docs/options/options-permalinks.md similarity index 100% rename from content/docs/options-permalinks.md rename to content/docs/options/options-permalinks.md diff --git a/content/docs/Idiomatic-Templates.md b/content/docs/templates/Idiomatic-Templates.md similarity index 100% rename from content/docs/Idiomatic-Templates.md rename to content/docs/templates/Idiomatic-Templates.md diff --git a/content/docs/Layouts.md b/content/docs/templates/Layouts.md similarity index 100% rename from content/docs/Layouts.md rename to content/docs/templates/Layouts.md diff --git a/content/docs/Pages-Arrays.md b/content/docs/templates/Pages-Arrays.md similarity index 100% rename from content/docs/Pages-Arrays.md rename to content/docs/templates/Pages-Arrays.md diff --git a/content/docs/Pages-Collections.md b/content/docs/templates/Pages-Collections.md similarity index 100% rename from content/docs/Pages-Collections.md rename to content/docs/templates/Pages-Collections.md diff --git a/content/docs/Pages.md b/content/docs/templates/Pages.md similarity index 100% rename from content/docs/Pages.md rename to content/docs/templates/Pages.md diff --git a/content/docs/Partials.md b/content/docs/templates/Partials.md similarity index 100% rename from content/docs/Partials.md rename to content/docs/templates/Partials.md diff --git a/content/docs/Snippets.md b/content/docs/templates/Snippets.md similarity index 100% rename from content/docs/Snippets.md rename to content/docs/templates/Snippets.md diff --git a/content/docs/Templates-Overview.md b/content/docs/templates/Templates-Overview.md similarity index 100% rename from content/docs/Templates-Overview.md rename to content/docs/templates/Templates-Overview.md diff --git a/content/docs/About.md b/content/getting-started/About.md similarity index 100% rename from content/docs/About.md rename to content/getting-started/About.md diff --git a/content/docs/Home.md b/content/getting-started/Home.md similarity index 100% rename from content/docs/Home.md rename to content/getting-started/Home.md diff --git a/content/docs/Installation.md b/content/getting-started/Installation.md similarity index 100% rename from content/docs/Installation.md rename to content/getting-started/Installation.md diff --git a/content/docs/Outline.md b/content/getting-started/Outline.md similarity index 100% rename from content/docs/Outline.md rename to content/getting-started/Outline.md diff --git a/content/docs/Quickstart.md b/content/getting-started/Quickstart.md similarity index 100% rename from content/docs/Quickstart.md rename to content/getting-started/Quickstart.md diff --git a/content/docs/Resources.md b/content/getting-started/Resources.md similarity index 100% rename from content/docs/Resources.md rename to content/getting-started/Resources.md diff --git a/content/docs/Who-Uses-Assemble.md b/content/getting-started/Who-Uses-Assemble.md similarity index 100% rename from content/docs/Who-Uses-Assemble.md rename to content/getting-started/Who-Uses-Assemble.md diff --git a/content/docs/Why-Assemble.md b/content/getting-started/Why-Assemble.md similarity index 100% rename from content/docs/Why-Assemble.md rename to content/getting-started/Why-Assemble.md diff --git a/content/getting-started/_introduction.md b/content/getting-started/_introduction.md new file mode 100644 index 0000000..444c462 --- /dev/null +++ b/content/getting-started/_introduction.md @@ -0,0 +1,60 @@ +# Introduction +> Become familiar with the basics of Assemble. + +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. + +## Getting started +Visit the [Getting Started Guide][getting-started] for information on how to install, setup and configure your first Assemble project. If you are unfamiliar with [Grunt.js][Grunt] and [Gulp.js][Gulp], two task runners for which Assemble plugins are available, view their getting started guides. Although an in-dept understanding of these tools is not required, it is important to be familiar with the configuration of your entire stack, not just Assemble. + +[Grunt]: http:// "Grunt.js Getting Started Guide" +[Gulp]: http:// "Gulp.js Getting Started Guide" + +## 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. + +# Core Concepts + +## Primary + +## Secondary diff --git a/content/getting-started/_overview.md b/content/getting-started/_overview.md new file mode 100644 index 0000000..d7f5ad9 --- /dev/null +++ b/content/getting-started/_overview.md @@ -0,0 +1,189 @@ +## Getting Started + +> What is Assemble? + +* About +* History + +## Where does Assemble fit in the build chain? + +> Assemble has Grunt and Gulp plugins, Yeoman generators, lots of boilerplates and many example projects from the core team and the community! + +* Generator +* Build system + - Minifying => Assemble (via plugins and helpers) + - Linting + - Compiling, rendering => Assemble (core strength) +* Server + +## Why use Assemble? + +* Unique strengths +* Main focus +* Easy to use +* Configurable and extensible +* Many boilerplates, examples, great community / ecosystem +* Target users +* Use cases + +Related + +* Project showcase +* Who uses Assemble? +* Community + +## How do I get started? + +* Installation +* 5-minute getting started video +* Getting started guide +* Getting started tutorials (topical) +* Examples +* Boilerplates +* Generators: Initializing a new project +* Running Assemble the first time + +Related + +* Migration tools (Harp, Metalsmith, Jekyll, Wintersmith, ) +* Live projects / examples + +## Overview: Core concepts + +* Configuration + - Defaults + - Global config +* Templates + - template variables + - layouts + - pages + - includes + - template helpers +* Data +* Content + +### Related concepts + +> These things "dial in", but they aren't in the same room. + +* Logic +* Styling + +## Usage + +* Configure +* Extend +* Build + + +## Development + +### Extending Assemble + +* Helpers: manipulate templates, data and content +* Mixins: manipulate config values +* Plugins: extend Assemble's core functionality +* Middleware + +### API + +* Utilities +* Plugins +* Middleware +* Helpers + +## FAQ + +* + +## Features +Gulp +Grunt + +* **Configuration AND convention**. Assemble is highly extensible, so tinkerers and power users will find many ways to add new features or augment existing functionality. For those who prefer the ease-of-use of opinionated systems like Jekyll or Harp, [grab a boilerplate](#TODO) or run [one of our generators](#TODO) and let Yeoman do the work, so you can spend less time on figuring out how to organize the project. +* Not only can Assemble, ahem... well, assemble, but also minification, concatenation, cache-busting and post-processing. Beyond that, Assemble's core functionality is infinitely extensible via plugins and middleware. + +## Conventions + +* Project organization + +## Project Goals + +* Near-term (current release): User experience +* Optimization / speed + +## Contributing + +* Pull requests +* Bugs / Issues +* Feature requests + +## Community + +* GitHub +* Google+ +* StackOvervlow +* IRC + + +## Handlebars Templates + +Assemble's default template engine, Handlebars.js, uses a syntax characterized by double-curly-braces, `{{foo}}`, affectionately reffered to as mustaches. The most basic handlebars template is a simple identifier (Handlebars.js calls these "Handlebars expressions"): + +```handlebars +

{{title}}

+``` +To use this + + +Here are some of the highlights. + +* Basic Variables: `{{title}}` +* Function expressions: +* Block expressions: +* Subexpressions: +* Partials: +* Helpers: + + + + +# Assemble + +> + +## Why Assemble? + ++ What is Assemble ++ How can it help? + +*** + +## Getting Started + +### Installation + ++ Get Assemble (download, install, clone) + +### Usage + + + +*** + +## Blog + +*** + +## Documentation + ++ Usage ++ API + +*** + +## FAQ + +*** + +## Contributing \ No newline at end of file diff --git a/content/getting-started/core-concepts.md b/content/getting-started/core-concepts.md deleted file mode 100644 index 2188e14..0000000 --- a/content/getting-started/core-concepts.md +++ /dev/null @@ -1,208 +0,0 @@ -# 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/docs/examples.md b/content/getting-started/examples.md similarity index 100% rename from content/docs/examples.md rename to content/getting-started/examples.md diff --git a/content/docs/getting-started.md b/content/getting-started/getting-started2.md similarity index 100% rename from content/docs/getting-started.md rename to content/getting-started/getting-started2.md diff --git a/content/docs/Introduction.md b/content/getting-started/intro.md similarity index 100% rename from content/docs/Introduction.md rename to content/getting-started/intro.md diff --git a/content/getting-started/introduction.md b/content/getting-started/introduction.md index 444c462..2188e14 100644 --- a/content/getting-started/introduction.md +++ b/content/getting-started/introduction.md @@ -1,60 +1,208 @@ -# Introduction -> Become familiar with the basics of Assemble. +# Introduction to Assemble -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. +> 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. -## Getting started -Visit the [Getting Started Guide][getting-started] for information on how to install, setup and configure your first Assemble project. If you are unfamiliar with [Grunt.js][Grunt] and [Gulp.js][Gulp], two task runners for which Assemble plugins are available, view their getting started guides. Although an in-dept understanding of these tools is not required, it is important to be familiar with the configuration of your entire stack, not just Assemble. +_(WIP)_ -[Grunt]: http:// "Grunt.js Getting Started Guide" -[Gulp]: http:// "Gulp.js Getting Started Guide" +## Getting Started -## Building blocks +* Installation (TODO) +* Brief Example (TODO) + +```handlebars + + + + + + {{title}} + + + + {{> body }} + + +``` + +### Core Concepts + +* Templates + - Layouts + - Pages + - Partials (includes) * Data * Content -* Structure -* Behavior -* Styles -## Terminology +## 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 is pieces of information. Assemble accepts two types of data: [JSON][JSON] (JavaScript Object Notation) and [YAML][YAML]. +## Data -[JSON]: http://json.org "JSON Homepage" -[YAML]: http://yaml.org "YAML Hompage" +> Data from specified JSON or YAML files is made available for use in your templates. -### 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. +This is best explained through examples, so given we have a partials for generating buttons, `button.hbs`: -[1]: http:// "" +```handlebars + +``` -#### 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. +And given we have a corresponding file, `button.json`, with the following data: -You can learn more about configuration in the [Options][docs/options] documentation. +```json +[ + { + "text": "Success!", + "modifier": "btn-success" + }, + { + "text": "Error!", + "modifier": "btn-error" + }, + { + "text": "Warning!", + "modifier": "btn-warning" + } +] +``` -#### Plugin +When used like this: -#### 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 +```handlebars +{{#each button}} + {{> button }} +{{/each}} +``` +Which results in: -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. +```html + + + +``` -Assemble uses the Handlebars (*.hbs) language in templates and you can find more information on layouts, Handlebars, and other options in the [docs][docs]. +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. -#### 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. +## Extending Assemble -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. +_TODO_ -# Core Concepts +* Plugins +* Helpers +* API -## Primary -## Secondary +[permalinks]: https://github.com/assemble/assemble-contrib-permalinks +[helpers]: https://github.com/assemble/assemble-docs/tree/master/src/content/helpers diff --git a/content/getting-started/overview.md b/content/getting-started/overview.md index d7f5ad9..c751ff8 100644 --- a/content/getting-started/overview.md +++ b/content/getting-started/overview.md @@ -1,189 +1,21 @@ -## Getting Started +--- +title: Overview -> What is Assemble? +area: docs +section: getting started -* About -* History +published: false +--- -## Where does Assemble fit in the build chain? +> Assemble is a dead-simple, "opinion aware", static site and component generator. -> Assemble has Grunt and Gulp plugins, Yeoman generators, lots of boilerplates and many example projects from the core team and the community! +I've been trying to come up with a better slogan for Assemble for a while now, but I just can't think of anything that really gets across how powerful and easy it is to use. -* Generator -* Build system - - Minifying => Assemble (via plugins and helpers) - - Linting - - Compiling, rendering => Assemble (core strength) -* Server +Here is a short list of **the slogans that didn't make the cut**: -## Why use Assemble? +### Assemble: A blogging framework for slackers -* Unique strengths -* Main focus -* Easy to use -* Configurable and extensible -* Many boilerplates, examples, great community / ecosystem -* Target users -* Use cases +That's right, _slackers_. Assemble can make you even more lazy, because it's just that easy to use. Although I love this fact (who doesn't like being lazy?), I'm not sure it tells the _entire_ story (btw, I tried "snackers" as well, but that makes absolutely no sense at all. So no). -Related - -* Project showcase -* Who uses Assemble? -* Community - -## How do I get started? - -* Installation -* 5-minute getting started video -* Getting started guide -* Getting started tutorials (topical) -* Examples -* Boilerplates -* Generators: Initializing a new project -* Running Assemble the first time - -Related - -* Migration tools (Harp, Metalsmith, Jekyll, Wintersmith, ) -* Live projects / examples - -## Overview: Core concepts - -* Configuration - - Defaults - - Global config -* Templates - - template variables - - layouts - - pages - - includes - - template helpers -* Data -* Content - -### Related concepts - -> These things "dial in", but they aren't in the same room. - -* Logic -* Styling - -## Usage - -* Configure -* Extend -* Build - - -## Development - -### Extending Assemble - -* Helpers: manipulate templates, data and content -* Mixins: manipulate config values -* Plugins: extend Assemble's core functionality -* Middleware - -### API - -* Utilities -* Plugins -* Middleware -* Helpers - -## FAQ - -* - -## Features -Gulp -Grunt - -* **Configuration AND convention**. Assemble is highly extensible, so tinkerers and power users will find many ways to add new features or augment existing functionality. For those who prefer the ease-of-use of opinionated systems like Jekyll or Harp, [grab a boilerplate](#TODO) or run [one of our generators](#TODO) and let Yeoman do the work, so you can spend less time on figuring out how to organize the project. -* Not only can Assemble, ahem... well, assemble, but also minification, concatenation, cache-busting and post-processing. Beyond that, Assemble's core functionality is infinitely extensible via plugins and middleware. - -## Conventions - -* Project organization - -## Project Goals - -* Near-term (current release): User experience -* Optimization / speed - -## Contributing - -* Pull requests -* Bugs / Issues -* Feature requests - -## Community - -* GitHub -* Google+ -* StackOvervlow -* IRC - - -## Handlebars Templates - -Assemble's default template engine, Handlebars.js, uses a syntax characterized by double-curly-braces, `{{foo}}`, affectionately reffered to as mustaches. The most basic handlebars template is a simple identifier (Handlebars.js calls these "Handlebars expressions"): - -```handlebars -

{{title}}

-``` -To use this - - -Here are some of the highlights. - -* Basic Variables: `{{title}}` -* Function expressions: -* Block expressions: -* Subexpressions: -* Partials: -* Helpers: - - - - -# Assemble - -> - -## Why Assemble? - -+ What is Assemble -+ How can it help? - -*** - -## Getting Started - -### Installation - -+ Get Assemble (download, install, clone) - -### Usage - - - -*** - -## Blog - -*** - -## Documentation - -+ Usage -+ API - -*** - -## FAQ - -*** - -## Contributing \ No newline at end of file +If you haven't tried out assemble, give it a shot. Assemble can be used just for building Handlebars templates if that's all you need for a project. +Assemble was created to be a site builder, so it can do orders of magnitude more than Grunt tasks for building templates diff --git a/content/guides/organizing-front-end-projects.md b/content/guides/organizing-front-end-projects.md deleted file mode 100644 index 22f9d7a..0000000 --- a/content/guides/organizing-front-end-projects.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Organizing Front-End Projects on GitHub -author: Jon Schlinkert ---- - -> This guide will share helpful insights, conventions and recommendations for effectively starting, organizing, and maintaining front-end projects on GitHub. - -## Getting Started - -* Configuration -* `_gh_pages` -* assets: images, fonts, icons, vendor css and javascripts -* content -* data -* scripts -* styles -* templates - - _drafts - - layouts - - sub-layouts - - pages - - includes (partials) - - snippets -* test -* vendor -* .dotfiles - - .gitignore (remember to add `_drafts` and `vendor`!) - - -## About the Author - -{{! this should be from a data file }} - -A self-proclaimed open-source evangelist, [Jon Schlinkert]() has authored more than 300 code projects on GitHub and NPM since mid-2012. Most of Jon's projects are written in JavaScript, particularly server-side / Node.js, but he has also published projects written in jQuery, CoffeeScript and 10 other languages including, Python, HTML/CSS and Ruby. - -Beyond his own projects, Jon is a maintainer and creator of [Assemble](), Phaser, and Upstage, core contributor and team member for [Less.js](), and regularly makes contributions to other open-source projects. - -More about Jon - -* Judge for [Node Knockout 2013](), a 48-hour Node.js hackathon with contestants worldwide. -* Jon and fellow-Assemble-creator Brian Woodward -* Has given talks about JavaScript, Node.js and Assemble. Always open to new speaking opportunities! diff --git a/content/guides/understanding-context.md b/content/guides/understanding-context.md deleted file mode 100644 index 677f0d1..0000000 --- a/content/guides/understanding-context.md +++ /dev/null @@ -1,202 +0,0 @@ ---- -title: Understanding Context - -area: docs -section: templates ---- - -> The goal of this guide is to help clarify how context works with Handlebars. - -_(WIP)_ - -* Variables -* Block expressions -* Helpers -* Block helpers -* Subexpressions -* Nesting and inheritance - - -## Overview - -When working with Handlebars, context can be tricky. - -Given that we have: - -```html ---- -foo: Some info ---- -``` - - -* `{{data.foo}}`: YAML front matter -* `{{this.foo}}` -* `{{page.foo}}` -* `{{foo}}` -* `{{../foo}}` -* `{{foo (bar .)}}` - - - -### Conventions used in this guide - -For the rest of this guide, we're going to assume that our config looks something like this: - -```js -assemble: { - options: { - layout: 'templates/default.hbs' - }, - site: { - // files are listed explictly for the purposes of demonstration - files: { - '_gh_pages/': [ - 'templates/pages/index.hbs', - 'templates/pages/about.hbs', - 'templates/pages/contact.hbs', - 'templates/pages/blog.hbs' - ] - } - } -} -``` - -Let's also assume that each of our 4 pages has [YAML front matter][YAML-front-matter] that looks something like this: - -In `index.hbs`: - -```html ---- -title: Home ---- -``` - -In `about.hbs`: - -```html ---- -title: About Us ---- -``` - -In `contact.hbs`: - -```html ---- -title: Contact Us ---- -``` - -In `blog.hbs`: - -```html ---- -title: Blog ---- -``` - -## The Challenge - -Before we dive into the solutions, let's discuss the challenges in order clarify what we're trying to accomplish. - -By the end of this guide, we should have a basic understanding of: - -1. How context works with Handlebars. -2. How context works in Assemble, as well as how context works in: - * [Pages][Pages] - * [Layouts][Layouts] - * [YAML Front Matter][YAML-front-matter] - - -## Pages - -You really won't understand how context works in Handlebars until you spend some time playing around with collections. So let's jump right into it and add a `pages` collection to `index.hbs`: - -```html ---- -title: Home ---- -

{{title}}

- - -``` - -Will result in: - -```html -

Home

- - -``` - -**Why are the titles missing?** - -As you can see, the title rendered only in the `

`, but none of the page titles rendered in our nav block. The reason is that the context we used inside the `{{#each pages}}` block was incorrect. The solution is going to take a little explaining, so let's do one more experiment to help create a 360 degree view of what's happening. - -Let's change our templates and run the build again. This time we'll add `../` to the `{{title}}` inside the `{{#each pages}}` block: - -```html ---- -title: Home ---- -

{{title}}

- - -``` - - -* **A: The context is wrong**: - - -## Layouts - - -```html ---- -title: YAML Front Matter ---- -

{{title}}

- -{{#each pages}} - {{{title}}} -{{/each}} -``` - - -```html ---- -title: Pages Collection -tags: -- pages ---- - -``` - - diff --git a/content/posts/2014-03/announcing-assemble-v0.5.0.md b/content/posts/announcing-assemble-v0.5.0.md similarity index 100% rename from content/posts/2014-03/announcing-assemble-v0.5.0.md rename to content/posts/announcing-assemble-v0.5.0.md diff --git a/content/posts/2014-03/assemble-docs-2-0-under-the-hood.md b/content/posts/assemble-docs-2-0-under-the-hood.md similarity index 100% rename from content/posts/2014-03/assemble-docs-2-0-under-the-hood.md rename to content/posts/assemble-docs-2-0-under-the-hood.md diff --git a/content/posts/config-vs-content.md b/content/posts/config-vs-content.md index 03a53b5..e73cf2c 100644 --- a/content/posts/config-vs-content.md +++ b/content/posts/config-vs-content.md @@ -3,7 +3,7 @@ title: Config vs. Content lead: Why does Assemble use two templates engines by default? --- -I have 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. +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 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/core.json b/data/_assemble.json similarity index 100% rename from data/core.json rename to data/_assemble.json diff --git a/data/inline.yml b/data/_options/inline.yml similarity index 100% rename from data/inline.yml rename to data/_options/inline.yml diff --git a/data/repos.json b/data/_repos.json similarity index 100% rename from data/repos.json rename to data/_repos.json diff --git a/data/utils/README.md b/data/_utils/README.md similarity index 100% rename from data/utils/README.md rename to data/_utils/README.md diff --git a/data/utils/extend-pkg.js b/data/_utils/extend-pkg.js similarity index 100% rename from data/utils/extend-pkg.js rename to data/_utils/extend-pkg.js diff --git a/data/utils/mixins.js b/data/_utils/mixins.js similarity index 74% rename from data/utils/mixins.js rename to data/_utils/mixins.js index 254b7b2..41b63a3 100644 --- a/data/utils/mixins.js +++ b/data/_utils/mixins.js @@ -3,25 +3,50 @@ var file = require('fs-utils'); /** - * Count the number of files. + * Count the number of files returned from the + * given glob pattern. + * */ exports.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 + * <%= _.hostname('https://assemble.io') %> + * => assemble.io */ + exports.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 + */ + +exports.stripGit = function(url) { + var git = /\.git$/; + if (git.test(url)) { + return url.replace(git, ''); + } + return url; +}; + + /** * Date functions used in _.date() mixin * diff --git a/data/utils/pkg.js b/data/_utils/pkg.js similarity index 100% rename from data/utils/pkg.js rename to data/_utils/pkg.js diff --git a/data/button.yml b/data/button.yml index 96ef65d..9033cd8 100644 --- a/data/button.yml +++ b/data/button.yml @@ -1,30 +1,43 @@ # Button data -- text: Info +- text: Info modifier: btn-info -- text: Success + +- text: Success modifier: btn-success -- text: Warning + +- text: Warning modifier: btn-warning -- text: Default + +- text: Default modifier: btn-default -- text: Primary + +- text: Primary modifier: btn-primary -- text: Danger + +- text: Danger modifier: btn-danger -- text: Jade + +- text: Jade modifier: btn-jade -- text: Inverse + +- text: Inverse modifier: btn-inverse -- text: Dark + +- text: Dark modifier: button-dark -- text: Jade Alt + +- text: Jade Alt modifier: button-jade-alt -- text: Cool Gray + +- text: Cool Gray modifier: button-coolgray -- text: White + +- text: White modifier: button-white -- text: Outline + +- text: Outline modifier: btn-outline -- text: Outline Inverse + +- text: Outline Inverse modifier: btn-outline-inverse \ No newline at end of file diff --git a/data/team.yml b/data/community/team.yml similarity index 100% rename from data/team.yml rename to data/community/team.yml diff --git a/data/users.yml b/data/community/users.yml similarity index 100% rename from data/users.yml rename to data/community/users.yml diff --git a/data/helpers.yml b/data/generated-pages/helpers.yml similarity index 100% rename from data/helpers.yml rename to data/generated-pages/helpers.yml diff --git a/data/upgrading.yml b/data/generated-pages/upgrading.yml similarity index 100% rename from data/upgrading.yml rename to data/generated-pages/upgrading.yml diff --git a/data/fun_facts.yml b/data/informative/funfacts.yml similarity index 100% rename from data/fun_facts.yml rename to data/informative/funfacts.yml diff --git a/data/quotes.yml b/data/informative/quotes.yml similarity index 100% rename from data/quotes.yml rename to data/informative/quotes.yml diff --git a/data/updates.yml b/data/informative/updates.yml similarity index 100% rename from data/updates.yml rename to data/informative/updates.yml diff --git a/data/migrations.yml b/data/migrations.yml deleted file mode 100644 index 025963a..0000000 --- a/data/migrations.yml +++ /dev/null @@ -1,14 +0,0 @@ -#=========================================== -# MIGRATIONS DOCS CONFIG -#=========================================== - -published: - helpers: - title: Helpers - files: "content/migrations/helpers.md" - - plugins: - title: Plugins - files: "content/migrations/plugins.md" - -unpublished: diff --git a/dates.js b/dates.js new file mode 100644 index 0000000..55ce83f --- /dev/null +++ b/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/package.json b/package.json index 79dcfa7..f8c46ba 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ ], "repository": { "type": "git", - "url": "https://github.com/assemble/assemble.io" + "url": "https://github.com/assemble/assemble.io.git" }, "bugs": { "url": "https://github.com/assemble/assemble.io/issues" diff --git a/structure/_extensions/README.md b/structure/_extensions/README.md index 631ba8e..202e4ba 100644 --- a/structure/_extensions/README.md +++ b/structure/_extensions/README.md @@ -2,7 +2,9 @@ > Extensions for [Assemble](https://github.com/assemble/assemble) -Extensions are in the `structure` directory since, for the most part, helpers and plugins will operate on templates. +The reason that extensions are placed in the `structure` directory is that, for the most part, helpers and plugins will operate on templates. * [helpers](./helpers) -* [plugins](./plugins) \ No newline at end of file +* [plugins](./plugins) + +In other words, these particular extensions aren't useful _without_ the templates, and these particular templates will fail to build without these extensions. \ No newline at end of file diff --git a/structure/_extensions/helpers/git.js b/structure/_extensions/helpers/git.js index 8b73a83..0f7d41d 100644 --- a/structure/_extensions/helpers/git.js +++ b/structure/_extensions/helpers/git.js @@ -1,5 +1,5 @@ /** - * Handlebars Helpers: {{expand}} + * Handlebars Helpers * Copyright (c) 2014 Jon Schlinkert * Licensed under the MIT License (MIT). */ diff --git a/structure/includes/banner.hbs b/structure/includes/banner.hbs index 089aaec..1b50bc1 100644 --- a/structure/includes/banner.hbs +++ b/structure/includes/banner.hbs @@ -1,8 +1,8 @@ diff --git a/structure/includes/footer.hbs b/structure/includes/footer.hbs index e7ff5bf..1573e5a 100644 --- a/structure/includes/footer.hbs +++ b/structure/includes/footer.hbs @@ -12,7 +12,7 @@

Documentation source code released under the {{site.license.source.type}} License, documentation under CC BY 3.0.

diff --git a/structure/includes/sharing.hbs b/structure/includes/sharing.hbs new file mode 100644 index 0000000..1cc1d89 --- /dev/null +++ b/structure/includes/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/includes/social.hbs b/structure/includes/social.hbs new file mode 100644 index 0000000..a86bd37 --- /dev/null +++ b/structure/includes/social.hbs @@ -0,0 +1,28 @@ +{{#if site.social}} + +{{/if}} diff --git a/structure/pages/about.hbs b/structure/pages/about.hbs index 4c2d824..06c69e1 100644 --- a/structure/pages/about.hbs +++ b/structure/pages/about.hbs @@ -20,7 +20,7 @@ lead: "Learn about the history of assemble, meet the core team, and check out th -

assemble 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:

+

{{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 }} @@ -35,8 +35,8 @@ lead: "Learn about the history of assemble, meet the core team, and check out th {{/each}}
-

Get involved with Assemble 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.

+

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.

@@ -46,9 +46,9 @@ lead: "Learn about the history of assemble, meet the core team, and check out th -

Stay up to date on the development of Assemble and reach out to the community with these helpful resources.

+

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/index.hbs b/structure/pages/index.hbs index 14681ca..bb94402 100644 --- a/structure/pages/index.hbs +++ b/structure/pages/index.hbs @@ -14,10 +14,16 @@ lead: Welcome to Assemble.io! {{md 'getting-started'}} + +{{!-- News +================================================== --}} {{#news updates.recent}} {{date}}: {{#join commentary ' · '}}{{.}}{{/join}} {{/news}} + +{{!-- Getting started +================================================== --}}
  • Cras justo odio
  • Dapibus ac facilisis in
  • diff --git a/structure/snippets/feed.xml b/structure/snippets/feed.xml index d1e7bca..6edc22d 100644 --- a/structure/snippets/feed.xml +++ b/structure/snippets/feed.xml @@ -6,12 +6,12 @@ {{site.title}} {{datetime}} {{site.homepage}} - {{#core.authors}} + {{#_assemble.authors}} {{name}} {{email}} - {{/core.authors}} + {{/_assemble.authors}} Copyright (c) 2013-{{now '%Y'}}, Jon Schlinkert, Brian Woodward. All rights reserved. {{#feed src="templates/*.hbs"}} From 08168709fb09243cb3f5adfe4f6c98f00c21a02f Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Sat, 5 Apr 2014 05:00:51 -0400 Subject: [PATCH 47/81] move bootstrap to vendor --- styles/{ => vendor}/bootstrap/alerts.less | 0 styles/{ => vendor}/bootstrap/badges.less | 0 styles/{ => vendor}/bootstrap/bootstrap.less | 2 +- .../{ => vendor}/bootstrap/breadcrumbs.less | 0 .../{ => vendor}/bootstrap/button-groups.less | 0 styles/{ => vendor}/bootstrap/buttons.less | 0 styles/{ => vendor}/bootstrap/carousel.less | 0 styles/{ => vendor}/bootstrap/close.less | 0 styles/{ => vendor}/bootstrap/code.less | 0 .../bootstrap/component-animations.less | 0 styles/{ => vendor}/bootstrap/dropdowns.less | 0 styles/{ => vendor}/bootstrap/forms.less | 0 styles/{ => vendor}/bootstrap/glyphicons.less | 0 styles/{ => vendor}/bootstrap/grid.less | 0 .../{ => vendor}/bootstrap/input-groups.less | 0 styles/{ => vendor}/bootstrap/jumbotron.less | 0 styles/{ => vendor}/bootstrap/labels.less | 0 styles/{ => vendor}/bootstrap/list-group.less | 0 styles/{ => vendor}/bootstrap/media.less | 0 styles/{ => vendor}/bootstrap/mixins.less | 0 styles/{ => vendor}/bootstrap/modals.less | 0 styles/{ => vendor}/bootstrap/navbar.less | 0 styles/{ => vendor}/bootstrap/navs.less | 0 styles/{ => vendor}/bootstrap/normalize.less | 0 styles/{ => vendor}/bootstrap/pager.less | 0 styles/{ => vendor}/bootstrap/pagination.less | 0 styles/{ => vendor}/bootstrap/panels.less | 0 styles/{ => vendor}/bootstrap/popovers.less | 0 styles/{ => vendor}/bootstrap/print.less | 0 .../{ => vendor}/bootstrap/progress-bars.less | 0 .../bootstrap/responsive-utilities.less | 0 .../{ => vendor}/bootstrap/scaffolding.less | 0 styles/{ => vendor}/bootstrap/tables.less | 0 styles/{ => vendor}/bootstrap/theme.less | 0 styles/{ => vendor}/bootstrap/thumbnails.less | 0 styles/{ => vendor}/bootstrap/tooltip.less | 0 styles/{ => vendor}/bootstrap/type.less | 0 styles/{ => vendor}/bootstrap/wells.less | 0 styles/vendor/perfect-scrollbar.less | 92 +++++++++++++++++++ 39 files changed, 93 insertions(+), 1 deletion(-) rename styles/{ => vendor}/bootstrap/alerts.less (100%) rename styles/{ => vendor}/bootstrap/badges.less (100%) rename styles/{ => vendor}/bootstrap/bootstrap.less (100%) rename styles/{ => vendor}/bootstrap/breadcrumbs.less (100%) rename styles/{ => vendor}/bootstrap/button-groups.less (100%) rename styles/{ => vendor}/bootstrap/buttons.less (100%) rename styles/{ => vendor}/bootstrap/carousel.less (100%) rename styles/{ => vendor}/bootstrap/close.less (100%) rename styles/{ => vendor}/bootstrap/code.less (100%) rename styles/{ => vendor}/bootstrap/component-animations.less (100%) rename styles/{ => vendor}/bootstrap/dropdowns.less (100%) rename styles/{ => vendor}/bootstrap/forms.less (100%) rename styles/{ => vendor}/bootstrap/glyphicons.less (100%) rename styles/{ => vendor}/bootstrap/grid.less (100%) rename styles/{ => vendor}/bootstrap/input-groups.less (100%) rename styles/{ => vendor}/bootstrap/jumbotron.less (100%) rename styles/{ => vendor}/bootstrap/labels.less (100%) rename styles/{ => vendor}/bootstrap/list-group.less (100%) rename styles/{ => vendor}/bootstrap/media.less (100%) rename styles/{ => vendor}/bootstrap/mixins.less (100%) rename styles/{ => vendor}/bootstrap/modals.less (100%) rename styles/{ => vendor}/bootstrap/navbar.less (100%) rename styles/{ => vendor}/bootstrap/navs.less (100%) rename styles/{ => vendor}/bootstrap/normalize.less (100%) rename styles/{ => vendor}/bootstrap/pager.less (100%) rename styles/{ => vendor}/bootstrap/pagination.less (100%) rename styles/{ => vendor}/bootstrap/panels.less (100%) rename styles/{ => vendor}/bootstrap/popovers.less (100%) rename styles/{ => vendor}/bootstrap/print.less (100%) rename styles/{ => vendor}/bootstrap/progress-bars.less (100%) rename styles/{ => vendor}/bootstrap/responsive-utilities.less (100%) rename styles/{ => vendor}/bootstrap/scaffolding.less (100%) rename styles/{ => vendor}/bootstrap/tables.less (100%) rename styles/{ => vendor}/bootstrap/theme.less (100%) rename styles/{ => vendor}/bootstrap/thumbnails.less (100%) rename styles/{ => vendor}/bootstrap/tooltip.less (100%) rename styles/{ => vendor}/bootstrap/type.less (100%) rename styles/{ => vendor}/bootstrap/wells.less (100%) create mode 100644 styles/vendor/perfect-scrollbar.less diff --git a/styles/bootstrap/alerts.less b/styles/vendor/bootstrap/alerts.less similarity index 100% rename from styles/bootstrap/alerts.less rename to styles/vendor/bootstrap/alerts.less diff --git a/styles/bootstrap/badges.less b/styles/vendor/bootstrap/badges.less similarity index 100% rename from styles/bootstrap/badges.less rename to styles/vendor/bootstrap/badges.less diff --git a/styles/bootstrap/bootstrap.less b/styles/vendor/bootstrap/bootstrap.less similarity index 100% rename from styles/bootstrap/bootstrap.less rename to styles/vendor/bootstrap/bootstrap.less index bcc992a..5cd6e64 100644 --- a/styles/bootstrap/bootstrap.less +++ b/styles/vendor/bootstrap/bootstrap.less @@ -5,6 +5,7 @@ // Reset @import "normalize.less"; @import "print.less"; +@import "glyphicons.less"; // Core CSS @import "scaffolding.less"; @@ -17,7 +18,6 @@ // Components @import "component-animations.less"; -@import "glyphicons.less"; @import "dropdowns.less"; @import "button-groups.less"; @import "input-groups.less"; diff --git a/styles/bootstrap/breadcrumbs.less b/styles/vendor/bootstrap/breadcrumbs.less similarity index 100% rename from styles/bootstrap/breadcrumbs.less rename to styles/vendor/bootstrap/breadcrumbs.less diff --git a/styles/bootstrap/button-groups.less b/styles/vendor/bootstrap/button-groups.less similarity index 100% rename from styles/bootstrap/button-groups.less rename to styles/vendor/bootstrap/button-groups.less diff --git a/styles/bootstrap/buttons.less b/styles/vendor/bootstrap/buttons.less similarity index 100% rename from styles/bootstrap/buttons.less rename to styles/vendor/bootstrap/buttons.less diff --git a/styles/bootstrap/carousel.less b/styles/vendor/bootstrap/carousel.less similarity index 100% rename from styles/bootstrap/carousel.less rename to styles/vendor/bootstrap/carousel.less diff --git a/styles/bootstrap/close.less b/styles/vendor/bootstrap/close.less similarity index 100% rename from styles/bootstrap/close.less rename to styles/vendor/bootstrap/close.less diff --git a/styles/bootstrap/code.less b/styles/vendor/bootstrap/code.less similarity index 100% rename from styles/bootstrap/code.less rename to styles/vendor/bootstrap/code.less diff --git a/styles/bootstrap/component-animations.less b/styles/vendor/bootstrap/component-animations.less similarity index 100% rename from styles/bootstrap/component-animations.less rename to styles/vendor/bootstrap/component-animations.less diff --git a/styles/bootstrap/dropdowns.less b/styles/vendor/bootstrap/dropdowns.less similarity index 100% rename from styles/bootstrap/dropdowns.less rename to styles/vendor/bootstrap/dropdowns.less diff --git a/styles/bootstrap/forms.less b/styles/vendor/bootstrap/forms.less similarity index 100% rename from styles/bootstrap/forms.less rename to styles/vendor/bootstrap/forms.less diff --git a/styles/bootstrap/glyphicons.less b/styles/vendor/bootstrap/glyphicons.less similarity index 100% rename from styles/bootstrap/glyphicons.less rename to styles/vendor/bootstrap/glyphicons.less diff --git a/styles/bootstrap/grid.less b/styles/vendor/bootstrap/grid.less similarity index 100% rename from styles/bootstrap/grid.less rename to styles/vendor/bootstrap/grid.less diff --git a/styles/bootstrap/input-groups.less b/styles/vendor/bootstrap/input-groups.less similarity index 100% rename from styles/bootstrap/input-groups.less rename to styles/vendor/bootstrap/input-groups.less diff --git a/styles/bootstrap/jumbotron.less b/styles/vendor/bootstrap/jumbotron.less similarity index 100% rename from styles/bootstrap/jumbotron.less rename to styles/vendor/bootstrap/jumbotron.less diff --git a/styles/bootstrap/labels.less b/styles/vendor/bootstrap/labels.less similarity index 100% rename from styles/bootstrap/labels.less rename to styles/vendor/bootstrap/labels.less diff --git a/styles/bootstrap/list-group.less b/styles/vendor/bootstrap/list-group.less similarity index 100% rename from styles/bootstrap/list-group.less rename to styles/vendor/bootstrap/list-group.less diff --git a/styles/bootstrap/media.less b/styles/vendor/bootstrap/media.less similarity index 100% rename from styles/bootstrap/media.less rename to styles/vendor/bootstrap/media.less diff --git a/styles/bootstrap/mixins.less b/styles/vendor/bootstrap/mixins.less similarity index 100% rename from styles/bootstrap/mixins.less rename to styles/vendor/bootstrap/mixins.less diff --git a/styles/bootstrap/modals.less b/styles/vendor/bootstrap/modals.less similarity index 100% rename from styles/bootstrap/modals.less rename to styles/vendor/bootstrap/modals.less diff --git a/styles/bootstrap/navbar.less b/styles/vendor/bootstrap/navbar.less similarity index 100% rename from styles/bootstrap/navbar.less rename to styles/vendor/bootstrap/navbar.less diff --git a/styles/bootstrap/navs.less b/styles/vendor/bootstrap/navs.less similarity index 100% rename from styles/bootstrap/navs.less rename to styles/vendor/bootstrap/navs.less diff --git a/styles/bootstrap/normalize.less b/styles/vendor/bootstrap/normalize.less similarity index 100% rename from styles/bootstrap/normalize.less rename to styles/vendor/bootstrap/normalize.less diff --git a/styles/bootstrap/pager.less b/styles/vendor/bootstrap/pager.less similarity index 100% rename from styles/bootstrap/pager.less rename to styles/vendor/bootstrap/pager.less diff --git a/styles/bootstrap/pagination.less b/styles/vendor/bootstrap/pagination.less similarity index 100% rename from styles/bootstrap/pagination.less rename to styles/vendor/bootstrap/pagination.less diff --git a/styles/bootstrap/panels.less b/styles/vendor/bootstrap/panels.less similarity index 100% rename from styles/bootstrap/panels.less rename to styles/vendor/bootstrap/panels.less diff --git a/styles/bootstrap/popovers.less b/styles/vendor/bootstrap/popovers.less similarity index 100% rename from styles/bootstrap/popovers.less rename to styles/vendor/bootstrap/popovers.less diff --git a/styles/bootstrap/print.less b/styles/vendor/bootstrap/print.less similarity index 100% rename from styles/bootstrap/print.less rename to styles/vendor/bootstrap/print.less diff --git a/styles/bootstrap/progress-bars.less b/styles/vendor/bootstrap/progress-bars.less similarity index 100% rename from styles/bootstrap/progress-bars.less rename to styles/vendor/bootstrap/progress-bars.less diff --git a/styles/bootstrap/responsive-utilities.less b/styles/vendor/bootstrap/responsive-utilities.less similarity index 100% rename from styles/bootstrap/responsive-utilities.less rename to styles/vendor/bootstrap/responsive-utilities.less diff --git a/styles/bootstrap/scaffolding.less b/styles/vendor/bootstrap/scaffolding.less similarity index 100% rename from styles/bootstrap/scaffolding.less rename to styles/vendor/bootstrap/scaffolding.less diff --git a/styles/bootstrap/tables.less b/styles/vendor/bootstrap/tables.less similarity index 100% rename from styles/bootstrap/tables.less rename to styles/vendor/bootstrap/tables.less diff --git a/styles/bootstrap/theme.less b/styles/vendor/bootstrap/theme.less similarity index 100% rename from styles/bootstrap/theme.less rename to styles/vendor/bootstrap/theme.less diff --git a/styles/bootstrap/thumbnails.less b/styles/vendor/bootstrap/thumbnails.less similarity index 100% rename from styles/bootstrap/thumbnails.less rename to styles/vendor/bootstrap/thumbnails.less diff --git a/styles/bootstrap/tooltip.less b/styles/vendor/bootstrap/tooltip.less similarity index 100% rename from styles/bootstrap/tooltip.less rename to styles/vendor/bootstrap/tooltip.less diff --git a/styles/bootstrap/type.less b/styles/vendor/bootstrap/type.less similarity index 100% rename from styles/bootstrap/type.less rename to styles/vendor/bootstrap/type.less diff --git a/styles/bootstrap/wells.less b/styles/vendor/bootstrap/wells.less similarity index 100% rename from styles/bootstrap/wells.less rename to styles/vendor/bootstrap/wells.less diff --git a/styles/vendor/perfect-scrollbar.less b/styles/vendor/perfect-scrollbar.less new file mode 100644 index 0000000..b2f6424 --- /dev/null +++ b/styles/vendor/perfect-scrollbar.less @@ -0,0 +1,92 @@ +// +// Perfect Scrollbar styles +// -------------------------------------------------------- +// https://github.com/noraesae/perfect-scrollbar + + +.ps-container { + + .ps-scrollbar-x-rail { + bottom: 3px; /* there must be 'bottom' for ps-scrollbar-x-rail */ + height: 8px; + } + // y-rail + .ps-scrollbar-y-rail { + right: 3px; /* there must be 'right' for ps-scrollbar-y-rail */ + width: 8px; + } + + .ps-scrollbar-x-rail, + .ps-scrollbar-y-rail { + position: absolute; /* please don't change 'position' */ + border-radius: 4px; + .opacity(0); + .transition(background-color .2s linear, opacity .2s linear); + } + + &:hover, + &.hover { + .ps-scrollbar-x-rail, + .ps-scrollbar-y-rail { + .opacity(0.6); + } + } + + .ps-scrollbar-x-rail, + .ps-scrollbar-y-rail { + &:hover, + &.hover { + background-color: #eee; + .opacity(0.9); + .ps-scrollbar-x { + background-color: #999; + } + } + } + + .ps-scrollbar-x-rail, + .ps-scrollbar-y-rail { + &.in-scrolling { + .opacity(0.9); + } + } + + .ps-scrollbar-y { + bottom: 0; /* there must be 'bottom' for ps-scrollbar-x */ + height: 8px; + } + .ps-scrollbar-y { + right: 0; /* there must be 'right' for ps-scrollbar-y */ + width: 8px; + } + .ps-scrollbar-x, + .ps-scrollbar-y { + position: absolute; /* please don't change 'position' */ + background-color: #aaa; + border-radius: 4px; + .transition(background-color .2s linear); + } +} + +// ie +.ps-container { + &.ie6 { + .ps-scrollbar-y , + .ps-scrollbar-x { + font-size: 0; /* fixed scrollbar height in xp sp3 ie6 */ + } + } + + &.ie { + .ps-scrollbar-x, + .ps-scrollbar-y { + visibility: hidden; + } + &:hover .ps-scrollbar-x, + &:hover .ps-scrollbar-y, + &.hover .ps-scrollbar-x, + &.hover .ps-scrollbar-y { + visibility: visible; + } + } +} \ No newline at end of file From e140b45735f3a8f40b9edd03663728738f319bbc Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Sun, 13 Apr 2014 00:49:27 -0400 Subject: [PATCH 48/81] clean up data formatting with [align-yaml](https://github.com/jonschlinkert/align-yaml) and organize files --- data/_config/inline.yml | 18 ++++ data/{_utils => _lib}/README.md | 0 data/_lib/dates.js | 27 +++++ data/{_utils => _lib}/extend-pkg.js | 0 data/{_utils => _lib}/pkg.js | 31 +++--- data/{_utils/mixins.js => _lib/utils.js} | 58 ++++++++++- data/_options/inline.yml | 2 +- data/community/helpers.yml | 10 ++ data/community/plugins.yml | 18 ++++ data/community/team.yml | 14 +-- data/community/users.yml | 40 ++++---- data/generated-pages/helpers.yml | 77 +++++++------- data/generated-pages/releases.yml | 25 +++++ data/generated-pages/upgrading.yml | 18 ---- data/informative/quotes.yml | 122 +++++++++++------------ data/informative/updates.yml | 10 +- data/jumbotron.yml | 6 +- data/nav.yml | 66 ++++++------ data/teaser.yml | 20 ++-- 19 files changed, 349 insertions(+), 213 deletions(-) create mode 100644 data/_config/inline.yml rename data/{_utils => _lib}/README.md (100%) create mode 100644 data/_lib/dates.js rename data/{_utils => _lib}/extend-pkg.js (100%) rename data/{_utils => _lib}/pkg.js (52%) rename data/{_utils/mixins.js => _lib/utils.js} (71%) create mode 100644 data/community/helpers.yml create mode 100644 data/community/plugins.yml create mode 100644 data/generated-pages/releases.yml delete mode 100644 data/generated-pages/upgrading.yml diff --git a/data/_config/inline.yml b/data/_config/inline.yml new file mode 100644 index 0000000..1e4d6a9 --- /dev/null +++ b/data/_config/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: 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/_utils/README.md b/data/_lib/README.md similarity index 100% rename from data/_utils/README.md rename to data/_lib/README.md diff --git a/data/_lib/dates.js b/data/_lib/dates.js new file mode 100644 index 0000000..55ce83f --- /dev/null +++ b/data/_lib/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/_lib/extend-pkg.js similarity index 100% rename from data/_utils/extend-pkg.js rename to data/_lib/extend-pkg.js diff --git a/data/_utils/pkg.js b/data/_lib/pkg.js similarity index 52% rename from data/_utils/pkg.js rename to data/_lib/pkg.js index 343c71a..888a9c6 100644 --- a/data/_utils/pkg.js +++ b/data/_lib/pkg.js @@ -1,16 +1,17 @@ -/** - * package.json +/*! + * Pull down the package.json for a project + * Customize `user`, `repo`, `path` and `dest`. + * + * Run `node pkg` to pull down the file. */ -// Node.js var path = require('path'); - -// node_modules -var grunt = require('grunt'); +var file = require('fs-utils'); var _ = require('lodash'); -// Config -var cwd = path.join.bind(null, __dirname, '../'); +var cwd = path.join.bind(null, process.cwd()); +var destination = cwd('data/_assemble.json'); + var githubApi = require('github'); var github = new githubApi({ @@ -32,19 +33,19 @@ var getPackageFile = function (dest) { console.log('error: ' + err); callback(err, null); } else { - var b = new Buffer(resp.content, 'base64'); + var buffer = new Buffer(resp.content, 'base64'); var pkg = { name: resp.name, - text: b.toString() + contents: JSON.parse(buffer.toString()) }; - var contents = JSON.parse(pkg.text, 'utf-8'); - grunt.log.ok('Saved:'.yellow, dest); // Extend package.json with custom properties - contents = _.extend(contents, require('./extend-pkg')); - grunt.file.write(dest, JSON.stringify(contents, null, 2)); + _.extend(pkg.contents, require('./extend-pkg')); + + file.writeJSONSync(dest, pkg.contents); + console.log('Saved:', dest); } }); }; -getPackageFile(cwd('core.json')); +getPackageFile(destination); diff --git a/data/_utils/mixins.js b/data/_lib/utils.js similarity index 71% rename from data/_utils/mixins.js rename to data/_lib/utils.js index 41b63a3..935e918 100644 --- a/data/_utils/mixins.js +++ b/data/_lib/utils.js @@ -1,11 +1,59 @@ -var url = require('url'); -var file = require('fs-utils'); +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'); + + +/** + * Get the current branch for a local git repository + */ + +exports.uppercase = function(str) { + return str.toUpperCase(); +}; + + +/** + * Get the current branch for a local git repository + */ + +exports.origin = origin.url(); + + +/** + * Get the current branch for a local git repository + */ + +exports.branch = branch; + + +/** + * Get the remote origin url for a local git repository + */ + +exports.repo_url = repoUrl; + + +/** + * Get the username from the GitHub remote origin URL + */ + +exports.username = ghUsername; + + +/** + * Get the repo name from the GitHub remote origin URL + */ + +exports.repo_name = ghRepoName; /** * Count the number of files returned from the * given glob pattern. - * */ exports.fileCount = function(str) { @@ -47,6 +95,8 @@ exports.stripGit = function(url) { }; + + /** * Date functions used in _.date() mixin * @@ -88,4 +138,4 @@ exports.date = function(structure) { break; } return output; -}; +}; \ No newline at end of file diff --git a/data/_options/inline.yml b/data/_options/inline.yml index 710558e..1e4d6a9 100644 --- a/data/_options/inline.yml +++ b/data/_options/inline.yml @@ -3,7 +3,7 @@ # ============================================= # Information about the source file? -origin: true +origin: true # Partial to prepend to each markdown file after # it is converted to HTML by the {{inline}} helper diff --git a/data/community/helpers.yml b/data/community/helpers.yml new file mode 100644 index 0000000..e920abd --- /dev/null +++ b/data/community/helpers.yml @@ -0,0 +1,10 @@ +# ============================================= +# Helpers +# ============================================= + +community: +- name: assemble-plugin-name + author: @jonschlinkert + repo: https://github.com/foo/bar + description: > + Foo, bar baz \ No newline at end of file diff --git a/data/community/plugins.yml b/data/community/plugins.yml new file mode 100644 index 0000000..4581fb5 --- /dev/null +++ b/data/community/plugins.yml @@ -0,0 +1,18 @@ +# ============================================= +# Plugins +# ============================================= + +core: +- name: assemble-plugin-name + author: @jonschlinkert + repo: https://github.com/foo/bar + description: > + Foo, bar baz + +community: +- name: assemble-plugin-name + author: @jonschlinkert + repo: https://github.com/foo/bar + description: > + Foo, bar baz + diff --git a/data/community/team.yml b/data/community/team.yml index d08910e..979e5e3 100644 --- a/data/community/team.yml +++ b/data/community/team.yml @@ -1,18 +1,18 @@ # ============================================= -# Team: Alphabetical Order +# Team: Alphabetical Order # ============================================= -- name: Brian Woodward +- name: Brian Woodward username: doowb - follow: "http://ghbtns.com/github-btn.html?user=doowb&type=follow" + follow: "http://ghbtns.com/github-btn.html?user=doowb&type=follow" gravatar: "https://avatars.githubusercontent.com/u/995160" -- name: Jon Schlinkert +- name: Jon Schlinkert username: jonschlinkert - follow: "http://ghbtns.com/github-btn.html?user=jonschlinkert&type=follow" + follow: "http://ghbtns.com/github-btn.html?user=jonschlinkert&type=follow" gravatar: "https://avatars.githubusercontent.com/u/383994" -- name: Hariadi Hinta +- name: Hariadi Hinta username: hariadi - follow: "http://ghbtns.com/github-btn.html?user=hariadi&type=follow" + 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 index 8f65801..c256c7f 100644 --- a/data/community/users.yml +++ b/data/community/users.yml @@ -14,38 +14,38 @@ # TODO: Add more references from: https://github.com/assemble/assemble/issues/300 -- name: Zurb Ink - GruntfileUrl: https://github.com/zurb/ink/blob/master/Gruntfile.js - websiteUrl: http://zurb.com/ink/ +- 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 - GruntfileUrl: https://github.com/zurb/foundation/blob/master/Gruntfile.js - websiteUrl: http://foundation.zurb.com/ +- 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 - GruntfileUrl: https://github.com/typeplate/typeplate.github.io/blob/master/Gruntfile.js - websiteUrl: http://typeplate.com/ - imageUrl: https://raw.github.com/typeplate/typeplate.github.io/master/img/logo.png +- 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 - GruntfileUrl: https://github.com/h5bp/Effeckt.css/blob/master/Gruntfile.js - websiteUrl: http://h5bp.github.io/Effeckt.css/ +- 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 - GruntfileUrl: https://github.com/less/less-docs/blob/master/Gruntfile.js - websiteUrl: http://lesscss.org/ - imageUrl: https://github.com/less/less-docs/blob/master/assets/public/img/logo.png +- 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 - GruntfileUrl: https://github.com/topcoat/topcoat-grunt-telemetry/blob/master/Gruntfile.js - websiteUrl: http://topcoat.io/ +- 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/generated-pages/helpers.yml b/data/generated-pages/helpers.yml index 5326fd7..9c63ead 100644 --- a/data/generated-pages/helpers.yml +++ b/data/generated-pages/helpers.yml @@ -2,77 +2,82 @@ # HELPERS DOCS CONFIG #=========================================== +# The base path for helpers docs +base: content/docs/extensions/helpers + +# Published documenation published: collections: - title: Collections - files: "content/helpers/collections/*.md" + title: Collections + files: <%= helpers.base %>/collections/*.md code: - title: Code - files: "content/helpers/code/*.md" + title: Code + files: <%= helpers.base %>/code/*.md comparison: - title: Comparison - files: "content/helpers/comparison/*.md" + title: Comparison + files: <%= helpers.base %>/comparison/*.md content: - title: Content - files: "content/helpers/content/*.md" + title: Content + files: <%= helpers.base %>/content/*.md data: - title: Data - files: "content/helpers/data/*.md" + title: Data + files: <%= helpers.base %>/data/*.md dates: - title: Dates - files: "content/helpers/dates/*.md" + title: Dates + files: <%= helpers.base %>/dates/*.md html: - title: HTML - files: "content/helpers/html/*.md" + title: HTML + files: <%= helpers.base %>/html/*.md inflections: - title: Inflections - files: "content/helpers/inflections/*.md" + title: Inflections + files: <%= helpers.base %>/inflections/*.md logging: - title: Logging - files: "content/helpers/logging/*.md" + title: Logging + files: <%= helpers.base %>/logging/*.md markdown: - title: Markdown - files: "content/helpers/markdown/*.md" + title: Markdown + files: <%= helpers.base %>/markdown/*.md math: - title: Math - files: "content/helpers/math/*.md" + title: Math + files: <%= helpers.base %>/math/*.md misc: - title: Misc - files: "content/helpers/misc/*.md" + title: Misc + files: <%= helpers.base %>/misc/*.md numbers: - title: Numbers - files: "content/helpers/numbers/*.md" + title: Numbers + files: <%= helpers.base %>/numbers/*.md path: - title: Path - files: "content/helpers/path/*.md" + title: Path + files: <%= helpers.base %>/path/*.md strings: - title: Strings - files: "content/helpers/strings/*.md" + title: Strings + files: <%= helpers.base %>/strings/*.md url: - title: URL - files: "content/helpers/url/*.md" + title: URL + files: <%= helpers.base %>/url/*.md +# Unpublished documenation unpublished: readme: - title: Readme - files: "content/helpers/readme/*.md" + title: Readme + files: <%= helpers.base %>/readme/*.md special: - title: Special - files: "content/helpers/special/*.md" \ No newline at end of file + 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/generated-pages/upgrading.yml b/data/generated-pages/upgrading.yml deleted file mode 100644 index 1ff4426..0000000 --- a/data/generated-pages/upgrading.yml +++ /dev/null @@ -1,18 +0,0 @@ -#=========================================== -# MIGRATIONS DOCS CONFIG -#=========================================== - -published: - intro: - title: Upgrading to v0.5 - files: "content/upgrading/v0.5/intro.md" - - helpers: - title: Helpers - files: "content/upgrading/v0.5/helpers.md" - - plugins: - title: Plugins - files: "content/upgrading/v0.5/plugins.md" - -unpublished: diff --git a/data/informative/quotes.yml b/data/informative/quotes.yml index d707d9d..8ff6f3b 100644 --- a/data/informative/quotes.yml +++ b/data/informative/quotes.yml @@ -1,103 +1,103 @@ -- name: Cory Logan +- name: Cory Logan username: counterbeing - origin: assemble-issues + origin: assemble-issues link: - message: > + 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 +- name: Matt Bailey username: _mattbailey - origin: Twitter - link: https://twitter.com/_mattbailey/status/391264100782981120 - message: > + origin: Twitter + link: https://twitter.com/_mattbailey/status/391264100782981120 + message: > Assemble is awesome! -- name: Bobby Bobak +- name: Bobby Bobak username: bobek_balinek - origin: Twitter - link: https://twitter.com/bobek_balinek/statuses/346937578773172224 - message: > + origin: Twitter + link: https://twitter.com/bobek_balinek/statuses/346937578773172224 + message: > That Assemble module has just completely changed my life. Thanks! -- name: Josh Fry +- name: Josh Fry username: joshfry - origin: Twitter - link: https://twitter.com/joshfry/status/400410774360711168 - message: > + 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 +- name: Thomas Parisot username: oncletom orgs: - origin: Twitter - link: https://twitter.com/oncletom/status/382930631103356928 - message: > + 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 +- name: Sacha Schmid username: sachaschmid - origin: Twitter - link: https://twitter.com/sachaschmid/status/401105973336879104 - message: > + 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 +- name: Demetri Ganoff username: DGanoff - origin: Twitter - link: https://twitter.com/DGanoff/status/392812423960203265 - message: > + 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 +- 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: > + 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 +- 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: > + 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 +- 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: > + 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 +- 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: > + 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 +- name: kenfrederick username: frederickk - github: https://github.com/frederickk + github: https://github.com/frederickk orgs: - origin: StackOverflow - link: http://stackoverflow.com/questions/19867677/grunt-pre-compile-inline-markdown - message: > + 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 +- name: Sharat M.R username: cosmos_genius - github: https://github.com/cosmosgenius + github: https://github.com/cosmosgenius orgs: - origin: Twitter - link: https://twitter.com/cosmos_genius/status/410476670714265601 - message: > + 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 index 446ed7d..c7072af 100644 --- a/data/informative/updates.yml +++ b/data/informative/updates.yml @@ -1,17 +1,17 @@ recent: -- date: "2013-05-12" +- date: "2013-05-12" commentary: - Big news today! - More news. -- date: "2013-05-13" +- date: "2013-05-13" commentary: - Big news today! -- date: "2013-05-14" +- date: "2013-05-14" commentary: - Big news today! -- date: "2013-05-15" +- date: "2013-05-15" commentary: - Big news today! -- date: "2013-05-16" +- date: "2013-05-16" commentary: - Big news today! \ No newline at end of file diff --git a/data/jumbotron.yml b/data/jumbotron.yml index 3d03e48..3ca4490 100644 --- a/data/jumbotron.yml +++ b/data/jumbotron.yml @@ -1,5 +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." +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" + text: "Download Assemble" diff --git a/data/nav.yml b/data/nav.yml index 643db6e..22f7c1a 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -16,7 +16,7 @@ main: # left nav # ===================================== - - modifier: nav navbar-nav + - modifier: nav navbar-nav items: @@ -29,9 +29,9 @@ main: # nav, as well as any content referencing that feature. # `Getting Started` link - - enabled: <%= features.getting_started %> - url: getting-started.html - text: Getting Started + - enabled: <%= features.getting_started %> + url: getting-started.html + text: Getting Started # Dropdown Menu: `Docs` link - dropdown: true @@ -41,31 +41,31 @@ main: # Dropdown items items: - enabled: <%= features.helpers %> - url: helpers.html - text: Helpers + url: helpers.html + text: Helpers - enabled: <%= features.plugins %> - url: plugins.html - text: Plugins + url: plugins.html + text: Plugins - enabled: <%= features.api %> - url: api.html - text: API + url: api.html + text: API # right nav # ===================================== - - modifier: nav navbar-nav navbar-right + - modifier: nav navbar-nav navbar-right items: # `Blog` link - - enabled: <%= features.blog %> - url: blog.html - text: Blog + - enabled: <%= features.blog %> + url: blog.html + text: Blog # `About` link - - enabled: <%= features.about %> - url: about.html - text: About + - enabled: <%= features.about %> + url: about.html + text: About # Dropdown Menu: `More` link - dropdown: true @@ -75,40 +75,40 @@ main: # Dropdown items items: - enabled: <%= features.guides %> - url: guides.html - text: Guides + url: guides.html + text: Guides - enabled: <%= features.tutorials %> - url: tutorials.html - text: Tutorials + url: tutorials.html + text: Tutorials - enabled: <%= features.cheatsheets %> - url: cheatsheets.html - text: Cheatsheets + url: cheatsheets.html + text: Cheatsheets - enabled: <%= features.examples %> - url: examples.html - text: Examples + url: examples.html + text: Examples # divider - divider: true - enabled: true - url: <%= site.repo %> - text: Docs repo + url: <%= site.repo %> + text: Docs repo - enabled: true - url: <%= site.issues %> - text: Docs issues + url: <%= site.issues %> + text: Docs issues # divider - divider: true - enabled: true - url: <%= assemble.repo %> - text: Assemble repo + url: <%= assemble.repo %> + text: Assemble repo - enabled: true - url: <%= assemble.issues %> - text: Assemble issues + url: <%= assemble.issues %> + text: Assemble issues diff --git a/data/teaser.yml b/data/teaser.yml index 3e406a8..80c93f0 100644 --- a/data/teaser.yml +++ b/data/teaser.yml @@ -1,19 +1,19 @@ # teaser banner, directly below masthead masthead: - title: Assemble - subtitle: "The static site generator for Node.js." - linkable: true + title: Assemble + subtitle: "The static site generator for Node.js." + linkable: true modifier: - url: "https://github.com/h5bp/Effeckt.css" + url: "https://github.com/h5bp/Effeckt.css" # Bottom teaser footer: button: - href: "#" + href: "#" modifier: "button-jade button-large pull-right" - text: "Visit Assemble on GitHub" - link: "#" - modifier: "banner-inverse banner-large" - static: true + text: "Visit Assemble on GitHub" + link: "#" + modifier: "banner-inverse banner-large" + static: true subtitle: - title: "

    Get started with some examples.

    " + title: "

    Get started with some examples.

    " From 3567d3abe1d7bdbf6a9d85fec7319d0b52bcbaab Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Sun, 13 Apr 2014 01:17:27 -0400 Subject: [PATCH 49/81] start organizing, restructuring helpers --- structure/_extensions/helpers/console.js | 6 +++-- structure/_extensions/helpers/context.js | 2 ++ structure/_extensions/helpers/expand.js | 22 +++++++++++++++++- .../_extensions/helpers/{write.js => fs.js} | 12 +++++++++- structure/_extensions/helpers/git.js | 18 +++++---------- structure/_extensions/helpers/inline.js | 5 ++-- structure/_extensions/helpers/join.js | 2 +- structure/_extensions/helpers/markdown.js | 2 +- structure/_extensions/helpers/news.js | 2 +- .../helpers/{basename.js => path.js} | 0 structure/_extensions/helpers/read.js | 21 ----------------- structure/_extensions/helpers/replace.js | 16 ++++++++----- structure/_extensions/helpers/resolve.js | 5 ++-- structure/_extensions/helpers/webfonts.js | 11 +++++++++ structure/_extensions/plugins/styles.js | 23 ++++++++----------- 15 files changed, 83 insertions(+), 64 deletions(-) rename structure/_extensions/helpers/{write.js => fs.js} (71%) rename structure/_extensions/helpers/{basename.js => path.js} (100%) delete mode 100644 structure/_extensions/helpers/read.js create mode 100644 structure/_extensions/helpers/webfonts.js diff --git a/structure/_extensions/helpers/console.js b/structure/_extensions/helpers/console.js index dd66447..05d93e9 100644 --- a/structure/_extensions/helpers/console.js +++ b/structure/_extensions/helpers/console.js @@ -7,6 +7,10 @@ var chalk = require('chalk'); +/** + * Logging helpers + */ + module.exports.register = function (Handlebars) { Handlebars.registerHelper("success", function(msg, context) { @@ -20,6 +24,4 @@ module.exports.register = function (Handlebars) { Handlebars.registerHelper("fail", function(msg, context) { console.log(chalk.red(msg), context); }); - - }; \ No newline at end of file diff --git a/structure/_extensions/helpers/context.js b/structure/_extensions/helpers/context.js index db58a46..80b8bbd 100644 --- a/structure/_extensions/helpers/context.js +++ b/structure/_extensions/helpers/context.js @@ -9,6 +9,8 @@ module.exports.register = function (Handlebars) { /** + * {{context}} + * * This helper passes the given context into the block, * allowing outer contexts to be used in nested blocks. * This is accomplished using Handlebars.createFrame, which diff --git a/structure/_extensions/helpers/expand.js b/structure/_extensions/helpers/expand.js index 1b8ddd0..d9519ad 100644 --- a/structure/_extensions/helpers/expand.js +++ b/structure/_extensions/helpers/expand.js @@ -7,9 +7,29 @@ 'use strict'; var file = require('fs-utils'); +var log = require('verbalize'); + +var helperError = function(name, msg) { + name = '\n The {{' + name + '}} helper'; + throw new Error(log.bold(name, log.red(msg))); +}; module.exports.register = function (Handlebars) { Handlebars.registerHelper("expand", function(patterns) { - return file.expand(patterns); + + // Throw an error if invalid patterns are passed + if(!/string|array/.test(typeof patterns)) { + helperError('expand', 'expects an array or string of 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 did not find any files.', this); + } + + return new Handlebars.SafeString(files); }); }; \ No newline at end of file diff --git a/structure/_extensions/helpers/write.js b/structure/_extensions/helpers/fs.js similarity index 71% rename from structure/_extensions/helpers/write.js rename to structure/_extensions/helpers/fs.js index 9180271..d5d6660 100644 --- a/structure/_extensions/helpers/write.js +++ b/structure/_extensions/helpers/fs.js @@ -1,5 +1,5 @@ /** - * Handlebars Helpers: {{write}} + * Handlebars Helper: {{read}} * Copyright (c) 2014 Jon Schlinkert * Licensed under the MIT License (MIT). */ @@ -8,9 +8,19 @@ var path = require('path'); var file = require('fs-utils'); +var matter = require('gray-matter'); +var _ = require('lodash'); module.exports.register = function (Handlebars) { + Handlebars.registerHelper("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. * diff --git a/structure/_extensions/helpers/git.js b/structure/_extensions/helpers/git.js index 0f7d41d..e8ef958 100644 --- a/structure/_extensions/helpers/git.js +++ b/structure/_extensions/helpers/git.js @@ -1,35 +1,29 @@ /** - * Handlebars Helpers + * Handlebars Helpers: Git branch and remote origin URL * Copyright (c) 2014 Jon Schlinkert * Licensed under the MIT License (MIT). */ - -'use strict'; - -var shell = require('shelljs'); -var origin = require('remote-origin-url'); -var branch = shell.exec('git rev-parse --abbrev-ref HEAD', {silent:true}).output; -var url = origin.url().replace(/\.git$/, ''); - - +const utils = require('../../../data/_lib/utils'); module.exports.register = function (Handlebars) { + /** * Current branch of the project's git repository * @return {String} */ Handlebars.registerHelper("branch", function() { - return branch; + return new Handlebars.SafeString(utils.branch); }); + /** * Remote origin url of the project's git repository. * @return {String} */ Handlebars.registerHelper("origin", function() { - return url; + return new Handlebars.SafeString(utils.repo_url); }); }; diff --git a/structure/_extensions/helpers/inline.js b/structure/_extensions/helpers/inline.js index 32d673c..c333166 100644 --- a/structure/_extensions/helpers/inline.js +++ b/structure/_extensions/helpers/inline.js @@ -11,10 +11,10 @@ var _ = require('lodash'); module.exports.register = function (Handlebars, options) { options = options || {}; + options.data = options.data || {}; // Add `inline` to assemble's options. - var inline = options.inline || {}; - + var inline = _.extend(options.inline || {}, options.data.inline || {}); Handlebars.registerHelper('inline', function(filepath, context) { context.data = context.data || {}; @@ -24,7 +24,6 @@ module.exports.register = function (Handlebars, options) { var page = matter.read(filepath); var data = Handlebars.createFrame({filepath: filepath}); - _.extend(inline, options.data.inline || {}); _.defaults(page.context, context.data.root || {}); // Prepend or append any content in the given partial to the output diff --git a/structure/_extensions/helpers/join.js b/structure/_extensions/helpers/join.js index 7829a1d..32c433a 100644 --- a/structure/_extensions/helpers/join.js +++ b/structure/_extensions/helpers/join.js @@ -8,6 +8,6 @@ module.exports.register = function (Handlebars) { 'use strict'; Handlebars.registerHelper("join", function(arr, sep) { - return arr.join(sep); + return new Handlebars.SafeString(arr.join(sep)); }); }; \ No newline at end of file diff --git a/structure/_extensions/helpers/markdown.js b/structure/_extensions/helpers/markdown.js index 016d782..05e98ae 100644 --- a/structure/_extensions/helpers/markdown.js +++ b/structure/_extensions/helpers/markdown.js @@ -25,6 +25,6 @@ module.exports.register = function (Handlebars, opts) { marked.setOptions(markedOpts); Handlebars.registerHelper("markdown", function (options) { - return marked(options.fn(this)); + return new Handlebars.SafeString(marked(options.fn(this))); }); }; \ No newline at end of file diff --git a/structure/_extensions/helpers/news.js b/structure/_extensions/helpers/news.js index 64a2d29..ef08172 100644 --- a/structure/_extensions/helpers/news.js +++ b/structure/_extensions/helpers/news.js @@ -23,6 +23,6 @@ module.exports.register = function(Handlebars) { } result += '
'; - return result; + return new Handlebars.SafeString(result); }); }; diff --git a/structure/_extensions/helpers/basename.js b/structure/_extensions/helpers/path.js similarity index 100% rename from structure/_extensions/helpers/basename.js rename to structure/_extensions/helpers/path.js diff --git a/structure/_extensions/helpers/read.js b/structure/_extensions/helpers/read.js deleted file mode 100644 index fef3693..0000000 --- a/structure/_extensions/helpers/read.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Handlebars Helper: {{read}} - * Copyright (c) 2014 Jon Schlinkert - * Licensed under the MIT License (MIT). - */ - -'use strict'; - -var matter = require('gray-matter'); -var _ = require('lodash'); - -module.exports.register = function (Handlebars) { - - Handlebars.registerHelper("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)); - }); -}; diff --git a/structure/_extensions/helpers/replace.js b/structure/_extensions/helpers/replace.js index f2ca713..9020b2b 100644 --- a/structure/_extensions/helpers/replace.js +++ b/structure/_extensions/helpers/replace.js @@ -11,7 +11,7 @@ var path = require('path'); module.exports.register = function (Handlebars) { /** - * JavaScript's replace function, exposed in a helper. + * 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 @@ -25,6 +25,7 @@ module.exports.register = function (Handlebars) { 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 @@ -34,15 +35,18 @@ module.exports.register = function (Handlebars) { * @return {String} The {{renamed}} string */ - Handlebars.registerHelper("rename", function(basename) { - if(~basename.search('helper')) { - return '{{' + basename.split('-')[1] + '}}'; + Handlebars.registerHelper("rename", function(name) { + if(/helper/.test(name)) { + return '{{' + name.split('-')[1] + '}}'; } - return '"' + basename + '"'; + return new Handlebars.SafeString('"' + name + '"'); }); + /** - * Adds a message based on the file extension. + * Used in the source-link popovers to modify + * the message based on the file extension. + * * @param {String} filepath * @return {String} */ diff --git a/structure/_extensions/helpers/resolve.js b/structure/_extensions/helpers/resolve.js index b4f4dec..b011497 100644 --- a/structure/_extensions/helpers/resolve.js +++ b/structure/_extensions/helpers/resolve.js @@ -34,9 +34,10 @@ module.exports.register = function (Handlebars) { self.pages.forEach(function(page) { if (page.src.indexOf(name) !== -1) { - url += relative(self.page.dest, page.dest); + url = relative(self.page.dest, page.dest); } }); - return url; + + return new Handlebars.SafeString(url); }); }; \ No newline at end of file diff --git a/structure/_extensions/helpers/webfonts.js b/structure/_extensions/helpers/webfonts.js new file mode 100644 index 0000000..e782ce2 --- /dev/null +++ b/structure/_extensions/helpers/webfonts.js @@ -0,0 +1,11 @@ +/** + * Handlebars Helpers: {{webfonts}} + * Copyright (c) 2014 Jon Schlinkert + * Licensed under the MIT License (MIT). + */ + +module.exports.register = function (Handlebars) { + Handlebars.registerHelper("webfonts", function(context) { + return new Handlebars.SafeString('"' + context.join('", "') + '"'); + }); +}; \ No newline at end of file diff --git a/structure/_extensions/plugins/styles.js b/structure/_extensions/plugins/styles.js index d8f5337..d15ce97 100644 --- a/structure/_extensions/plugins/styles.js +++ b/structure/_extensions/plugins/styles.js @@ -1,31 +1,28 @@ +const cheerio = require('cheerio'); + /** - * Move all styles in body > style tags to the head - * Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors. + * Aggregate styles from the body to a single + * style tag in the head */ - -var cheerio = require('cheerio'); - -var options = { - stage: 'render:post:page' -}; - module.exports = function (params, callback) { - '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(); callback(); }; -module.exports.options = options; \ No newline at end of file +module.exports.options = { + stage: 'render:post:page' +}; \ No newline at end of file From 5f86d1c18cba380b94741a90a7c1a54d0b27d6bf Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Sun, 13 Apr 2014 01:17:48 -0400 Subject: [PATCH 50/81] adds basic docs for the actual github repo itself --- docs/README.tmpl.md | 20 ++++++++++++++++++++ docs/install.md | 5 +++++ docs/options.md | 18 ++++++++++++++++++ docs/usage.md | 1 + 4 files changed, 44 insertions(+) create mode 100644 docs/README.tmpl.md create mode 100644 docs/install.md create mode 100644 docs/options.md create mode 100644 docs/usage.md diff --git a/docs/README.tmpl.md b/docs/README.tmpl.md new file mode 100644 index 0000000..74d4135 --- /dev/null +++ b/docs/README.tmpl.md @@ -0,0 +1,20 @@ +# {%= name %} {%= badge('fury') %} + +> {%= description %} + +## Getting Started +{%= include("install", {save: '--save-dev'}) %} + +## Usage +{%= docs("usage") %} + +## Options +{%= docs("options") %} + +## License +{%= copyright() %} +{%= license() %} + +*** + +{%= include("footer") %} diff --git a/docs/install.md b/docs/install.md new file mode 100644 index 0000000..e85bf52 --- /dev/null +++ b/docs/install.md @@ -0,0 +1,5 @@ +Install with [npm](npmjs.org): + +```bash +npm i {%= typeof g !== 'undefined' ? '-g ' : '' %}{%= name %} {%= typeof save !== 'undefined' ? '--save' : '--save-dev' %} +``` \ No newline at end of file diff --git a/docs/options.md b/docs/options.md new file mode 100644 index 0000000..16c9a4d --- /dev/null +++ b/docs/options.md @@ -0,0 +1,18 @@ +## one + +Type: `String` + +Default: undefined + +## two + +Type: `String` + +Default: undefined + +## trhee + +Type: `String` + +Default: undefined + diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 0000000..4cb689e --- /dev/null +++ b/docs/usage.md @@ -0,0 +1 @@ +This is how you do it! Na na, na na naaa! \ No newline at end of file From 59dc15106bb68a569a86df112860a546279acd5a Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Sun, 13 Apr 2014 01:18:05 -0400 Subject: [PATCH 51/81] update themes/styles --- styles/components/anchors.less | 4 +- styles/components/banner.less | 2 +- .../code-wide.less} | 4 +- styles/components/navbar-content.less | 2 +- styles/{utilities => components}/stack.less | 0 styles/components/team.less | 8 +- styles/index.less | 19 +-- styles/themes/assemble/docs-content.less | 24 ++++ styles/themes/assemble/docs-section.less | 56 ++++++++ styles/themes/assemble/index.less | 19 +++ styles/themes/assemble/navbar-wrap.less | 33 +++++ styles/themes/assemble/scaffolding.less | 13 ++ styles/themes/assemble/variables.less | 32 +++++ styles/themes/base.less | 12 ++ styles/themes/book.less | 135 ------------------ styles/variables.less | 37 +++-- 16 files changed, 231 insertions(+), 169 deletions(-) rename styles/{themes/book-code.less => components/code-wide.less} (92%) rename styles/{utilities => components}/stack.less (100%) create mode 100644 styles/themes/assemble/docs-content.less create mode 100644 styles/themes/assemble/docs-section.less create mode 100644 styles/themes/assemble/index.less create mode 100644 styles/themes/assemble/navbar-wrap.less create mode 100644 styles/themes/assemble/scaffolding.less create mode 100644 styles/themes/assemble/variables.less create mode 100644 styles/themes/base.less delete mode 100644 styles/themes/book.less diff --git a/styles/components/anchors.less b/styles/components/anchors.less index d4c71c7..2112564 100644 --- a/styles/components/anchors.less +++ b/styles/components/anchors.less @@ -37,8 +37,8 @@ h2 .anchor { h1, h2, h3 { position: relative; - padding-left: @docs-gutter; - margin-left: -(@docs-gutter); + padding-left: @content-gutter; + margin-left: -(@content-gutter); .anchor:hover { color: @gray-darkest; diff --git a/styles/components/banner.less b/styles/components/banner.less index 2c06198..7412213 100644 --- a/styles/components/banner.less +++ b/styles/components/banner.less @@ -1,6 +1,6 @@ // // Banners -// -------------------------------------------------- +// ------------------------------------------------------- // Appears directly below page headers/subheads diff --git a/styles/themes/book-code.less b/styles/components/code-wide.less similarity index 92% rename from styles/themes/book-code.less rename to styles/components/code-wide.less index 385ad4f..fd13660 100644 --- a/styles/themes/book-code.less +++ b/styles/components/code-wide.less @@ -10,8 +10,8 @@ pre { background-color: darken(@gray-lightest, 1%); - margin: 8px -(@docs-gutter) 25px; - padding: 15px @docs-gutter; + margin: 8px -(@content-gutter) 25px; + padding: 15px @content-gutter; border: none; border-radius: 0; } diff --git a/styles/components/navbar-content.less b/styles/components/navbar-content.less index 3b70b3a..7191b59 100644 --- a/styles/components/navbar-content.less +++ b/styles/components/navbar-content.less @@ -5,7 +5,7 @@ .navbar-content { &:extend(.clearfix all, .navbar-default all); - margin: 0 -(@docs-gutter); + margin: 0 -(@content-gutter); min-height: 60px; background-color: #f7f8f8; diff --git a/styles/utilities/stack.less b/styles/components/stack.less similarity index 100% rename from styles/utilities/stack.less rename to styles/components/stack.less diff --git a/styles/components/team.less b/styles/components/team.less index 1916c1d..390c6f1 100644 --- a/styles/components/team.less +++ b/styles/components/team.less @@ -1,8 +1,8 @@ +// +// Team members +// ------------------------------------------------------- + -/** - * Team members - * Avatars, names, and usernames for core team. - */ .team .team-member { color: #555; line-height: 32px; diff --git a/styles/index.less b/styles/index.less index a89cb06..49444fb 100644 --- a/styles/index.less +++ b/styles/index.less @@ -1,5 +1,5 @@ // -// Assemble Styles +// Site styles // -------------------------------------------------- // Core variables and mixins @@ -10,7 +10,6 @@ // Utilities @import "utilities/mixins.less"; -@import "utilities/stack.less"; @import "utilities/highlight.less"; @import "utilities/button-states.less"; @@ -18,8 +17,7 @@ // Docs Components // ---------------------------------------- -@import "base.less"; - +@import "themes/base.less"; // Typography & Code @import "webfonts.less"; @@ -30,6 +28,7 @@ @import "masthead.less"; @import "teaser.less"; @import "footer.less"; +@import "stack.less"; // Navigation @import "main-nav.less"; @@ -44,19 +43,21 @@ @import "callout.less"; @import "team.less"; -// Links and buttons -@import "anchors.less"; +// Buttons @import "dismiss.less"; @import "btn.less"; @import "btn-outline.less"; + +// Links +@import "anchors.less"; @import "source-link.less"; // Theme // ---------------------------------------- -@import "themes/book-code.less"; -@import "themes/book.less"; +@import "themes/base.less"; +@import "themes/@{theme}/index.less"; // Vendor @@ -65,7 +66,7 @@ /*@import "vendor/perfect-scrollbar.less";*/ -// Utilities +// Utilities (must be last!) // ---------------------------------------- @import "utilities/utilities.less"; diff --git a/styles/themes/assemble/docs-content.less b/styles/themes/assemble/docs-content.less new file mode 100644 index 0000000..5218330 --- /dev/null +++ b/styles/themes/assemble/docs-content.less @@ -0,0 +1,24 @@ +// +// Content +// -------------------------------------------------- + + +.docs-content { + position: relative; + overflow: visible; + + background: #fff; + padding: 1px @content-gutter 80px @content-gutter; // add 1px top padding to prevent collapsing + margin: 0 -15px; + + // remove padding from fluid containers when + // inside content blocks. + .container-fluid { + padding: 0; + } +} + +// Add a box-shadow on "book styled" pages +.book .docs-content { + box-shadow: 0 3px 7px rgba(0,0,0,.2); +} \ No newline at end of file diff --git a/styles/themes/assemble/docs-section.less b/styles/themes/assemble/docs-section.less new file mode 100644 index 0000000..05893d9 --- /dev/null +++ b/styles/themes/assemble/docs-section.less @@ -0,0 +1,56 @@ +// +// Docs sections +// -------------------------------------------------- + + +// Space things out +.docs-section { + margin-bottom: 60px; +} +.docs-section:last-child { + margin-bottom: 0; +} + +h1[id] { + margin-top: 0; + padding-top: 20px; +} + +// Make headings stand out more, give some space +.docs-section { + p { + font-size: @font-size-large - 2; + font-family: @font-family-serif; + -webkit-font-smoothing: antialiased; + + line-height: 1.4; + margin: 20px 0; + } + + // Override normal paragraph styles inside blockquotes + // this needs to be extra specific + blockquote > p { + font-size: 14px; + font-family: @font-family-sans-serif; + line-height: 1.5; + padding: 10px; + } + + // Adjust headings inside .docs-sections + h1, h2, h3 { + letter-spacing: 1px; + } + h2 { + font-size: 24px; + color: @link-color; + } + h3 { + font-size: 20px; + } +} +.docs-section + .docs-section { + padding-top: 40px; +} + + + diff --git a/styles/themes/assemble/index.less b/styles/themes/assemble/index.less new file mode 100644 index 0000000..1b5cb71 --- /dev/null +++ b/styles/themes/assemble/index.less @@ -0,0 +1,19 @@ +// +// Assemble theme +// -------------------------------------------------- + +// Theme variables +@import "variables.less"; + + + +// Theme-specific +// --------------------------------------------- + +// Core CSS +@import "scaffolding.less"; + +// Components +@import "navbar-wrap.less"; +@import "docs-content.less"; +@import "docs-section.less"; \ No newline at end of file diff --git a/styles/themes/assemble/navbar-wrap.less b/styles/themes/assemble/navbar-wrap.less new file mode 100644 index 0000000..a2e64d1 --- /dev/null +++ b/styles/themes/assemble/navbar-wrap.less @@ -0,0 +1,33 @@ +// +// Navbar wrap +// -------------------------------------------------- + + +// Applies special styling when the scroll-to-fixed +// plugin is activated. + +.navbar-wrap { + display: block; + width: 100%; +} + +.scroll-to-fixed-fixed { + position: relative; + &:after { + z-index: -1; + content: ''; + position: absolute; + bottom: 0; + top: 0; + width: 100%; + border-radius: 20%; + .box-shadow(~'0 0 5px rgba(0,0,0,.3),0 2px 7px rgba(0,0,0,.3)'); + } + + // When scroll-to-fixed is activated, add a box shadow + // to the navbar over the content area + .navbar-content { + background: #fff; + .box-shadow(0 1px 2px rgba(0,0,0,.2)); + } +} diff --git a/styles/themes/assemble/scaffolding.less b/styles/themes/assemble/scaffolding.less new file mode 100644 index 0000000..5de60e3 --- /dev/null +++ b/styles/themes/assemble/scaffolding.less @@ -0,0 +1,13 @@ +// +// Scaffolding +// -------------------------------------------------- + + +// Special book styling overrides +body.book, +body.index { + .container { + background: transparent; + } +} + diff --git a/styles/themes/assemble/variables.less b/styles/themes/assemble/variables.less new file mode 100644 index 0000000..21bbb18 --- /dev/null +++ b/styles/themes/assemble/variables.less @@ -0,0 +1,32 @@ +// +// Theme variables +// -------------------------------------------------- + + +// Palette +// ------------------------------------------------ +// Theme colors + + +@book-theme-bg-light-blue: #eaf7fc; + + + +// Typography +// ------------------------------------------------ + +@font-family-assemble: 'Assemble SSm A', 'Assemble SSm B', @font-family-sans-serif; + + + +// Content +// ------------------------------------------------ + +@content-gutter: 60px; + + + +// Navigation +// ------------------------------------------------ + +@book-sidenav-top-padding: 70px; diff --git a/styles/themes/base.less b/styles/themes/base.less new file mode 100644 index 0000000..525ed3e --- /dev/null +++ b/styles/themes/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/themes/book.less b/styles/themes/book.less deleted file mode 100644 index dd2451d..0000000 --- a/styles/themes/book.less +++ /dev/null @@ -1,135 +0,0 @@ -// -// Book theme -// -------------------------------------------------- - - -// Variables -// --------------------------------------------- - -@font-family-assemble: 'Assemble SSm A', 'Assemble SSm B', @font-family-sans-serif; -@book-theme-bg-light-blue: #eaf7fc; -@docs-gutter: 60px; - - -// -// Content -// --------------------------------------------- - - -.docs-content { - position: relative; - overflow: visible; - - background: #fff; - padding: 1px @docs-gutter 80px @docs-gutter; // add 1px top padding to prevent collapsing - margin: 0 -15px; - - // remove padding from fluid containers when - // inside content blocks. - .container-fluid { - padding: 0; - } -} - -// Add a box-shadow on "book styled" pages -.book .docs-content { - box-shadow: 0 3px 7px rgba(0,0,0,.2); -} - -// -// Book Overrides -// --------------------------------------------- -// Special book styling adjustments - -@book-sidenav-top-padding: 70px; - -body.book, body.index { - .container { - background: transparent; - } -} - - -// -// Docs sections -// --------------------------------------------- - - -// Space things out -.docs-section { - margin-bottom: 60px; -} -.docs-section:last-child { - margin-bottom: 0; -} - -h1[id] { - margin-top: 0; - padding-top: 20px; -} - -// Make headings stand out more, give some space -.docs-section { - p { - font-size: @font-size-large - 2; - font-family: @font-family-serif; - -webkit-font-smoothing: antialiased; - - line-height: 1.4; - margin: 20px 0; - } - - // Override normal paragraph styles inside blockquotes - // this needs to be extra specific - blockquote > p { - font-size: 14px; - font-family: @font-family-sans-serif; - line-height: 1.5; - padding: 10px; - } - - // Adjust headings inside .docs-sections - h1, h2, h3 { - letter-spacing: 1px; - } - h2 { - font-size: 24px; - color: @link-color; - } - h3 { - font-size: 20px; - } -} -.docs-section + .docs-section { - padding-top: 40px; -} - - -// -// Navbar wrap -// --------------------------------------------- -// applies special styling when the scroll-to-fixed -// plugin is activated. - -.navbar-wrap { - display: block; - width: 100%; -} - -.scroll-to-fixed-fixed { - position: relative; - &:after { - z-index: -1; - content: ''; - position: absolute; - bottom: 0; - top: 0; - width: 100%; - border-radius: 20%; - .box-shadow(~'0 0 5px rgba(0,0,0,.3),0 2px 7px rgba(0,0,0,.3)'); - } - .navbar-content { - background: #fff; - .box-shadow(0 1px 2px rgba(0,0,0,.2)); - } -} diff --git a/styles/variables.less b/styles/variables.less index 1c55a3e..ec62755 100644 --- a/styles/variables.less +++ b/styles/variables.less @@ -31,12 +31,15 @@ // ------------------------------------------------ // Settings for some of the most global styles. +// Background color for ``. @body-bg: #fff; @body-padding: @navbar-height; +// Global text color on ``. @text-color: @gray-dark; // Global textual link color. @link-color: @brand-info; +// Link hover color set via `darken()` function. @link-hover-color: darken(@link-color, 15%); @@ -128,8 +131,9 @@ // Tables -// -// Customizes the `.table` component with basic values, each used across all table variations. +// ------------------------------------------------- +// Customizes the `.table` component with basic values, +// each used across all table variations. // Padding for ``s and ``s. @table-cell-padding: 8px; @@ -149,8 +153,9 @@ // Buttons -// -// For each of Bootstrap's buttons, define text, background and border color. +// ------------------------------------------------- +// For each of Bootstrap's buttons, define text, +// background and border color. @btn-font-weight: normal; @@ -218,7 +223,7 @@ // Dropdowns -// +// ------------------------------------------------- // Dropdown menu container and contents. // Background for the dropdown menu. @@ -253,10 +258,10 @@ // 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; @@ -269,8 +274,9 @@ // Media queries breakpoints -// -// Define the breakpoints at which your layout will change, adapting to different screen sizes. +// ------------------------------------------------- +// 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 @@ -303,7 +309,7 @@ // Grid system -// +// ------------------------------------------------- // Define your custom responsive grid. // Number of columns in the grid. @@ -318,7 +324,7 @@ // Container sizes -// +// ------------------------------------------------- // Define the maximum width of `.container` for different screen sizes. // Small screen / tablet @@ -401,7 +407,7 @@ // Navs // ------------------------------------------------- -//=== Shared nav styles +// Shared nav styles @nav-link-padding: 10px 15px; @nav-link-hover-bg: @gray-lighter; @@ -474,8 +480,9 @@ // Form states and alerts -// -// Define colors for form feedback states and, by default, alerts. +// ------------------------------------------------- +// Define colors for form feedback states and, by +// default, alerts. @state-success-text: #3c763d; @state-success-bg: #dff0d8; @@ -594,7 +601,7 @@ // Alerts -// +// ------------------------------------------------- // Define alert colors, border radius, and padding. @alert-padding: 15px; From 4e61f547462a57f5ed48e8065506b2730605f835 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Sat, 10 May 2014 18:46:03 -0400 Subject: [PATCH 52/81] rename to img --- assets/{images => img}/users/less.png | Bin assets/{images => img}/users/typeplate.png | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename assets/{images => img}/users/less.png (100%) rename assets/{images => img}/users/typeplate.png (100%) diff --git a/assets/images/users/less.png b/assets/img/users/less.png similarity index 100% rename from assets/images/users/less.png rename to assets/img/users/less.png diff --git a/assets/images/users/typeplate.png b/assets/img/users/typeplate.png similarity index 100% rename from assets/images/users/typeplate.png rename to assets/img/users/typeplate.png From 044627d6819f8ee854bd8b0d70620c22ae1a7271 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Sat, 10 May 2014 18:46:26 -0400 Subject: [PATCH 53/81] reorganize helpers/middleware --- structure/{_extensions => }/README.md | 0 structure/_extensions/helpers/console.js | 27 --- structure/_extensions/helpers/context.js | 28 --- structure/_extensions/helpers/git.js | 29 --- structure/_extensions/helpers/markdown.js | 30 --- structure/_extensions/helpers/path.js | 15 -- structure/_extensions/helpers/resolve.js | 43 ---- .../_extensions/plugins/holder-404-avoid.js | 37 ---- structure/_extensions/plugins/link-checker.js | 186 ----------------- structure/_extensions/plugins/postprocess.js | 37 ---- structure/_extensions/plugins/styles.js | 28 --- structure/_extensions/plugins/validate.js | 32 --- structure/_helpers/base.js | 12 ++ structure/_helpers/console.js | 24 +++ structure/_helpers/context.js | 15 ++ .../helpers => _helpers}/expand.js | 28 ++- .../{_extensions/helpers => _helpers}/fs.js | 31 +-- structure/_helpers/git.js | 35 ++++ .../helpers => _helpers}/inline.js | 21 +- .../helpers => _helpers}/isActive.js | 17 +- .../{_extensions/helpers => _helpers}/join.js | 13 +- structure/_helpers/markdown.js | 50 +++++ .../{_extensions/helpers => _helpers}/nav.js | 20 +- .../{_extensions/helpers => _helpers}/news.js | 12 +- structure/_helpers/path.js | 19 ++ .../helpers => _helpers}/replace.js | 26 +-- structure/_helpers/resolve.js | 51 +++++ .../helpers => _helpers}/webfonts.js | 14 +- .../plugins => _middleware}/README.md | 0 structure/_middleware/context.js | 167 +++++++++++++++ structure/_middleware/holder-404-avoid.js | 41 ++++ .../plugins => _middleware}/lib/utils.js | 0 structure/_middleware/link-checker.js | 194 ++++++++++++++++++ structure/_middleware/postprocess.js | 36 ++++ structure/_middleware/styles.js | 34 +++ structure/_middleware/validate.js | 39 ++++ 36 files changed, 824 insertions(+), 567 deletions(-) rename structure/{_extensions => }/README.md (100%) delete mode 100644 structure/_extensions/helpers/console.js delete mode 100644 structure/_extensions/helpers/context.js delete mode 100644 structure/_extensions/helpers/git.js delete mode 100644 structure/_extensions/helpers/markdown.js delete mode 100644 structure/_extensions/helpers/path.js delete mode 100644 structure/_extensions/helpers/resolve.js delete mode 100644 structure/_extensions/plugins/holder-404-avoid.js delete mode 100644 structure/_extensions/plugins/link-checker.js delete mode 100644 structure/_extensions/plugins/postprocess.js delete mode 100644 structure/_extensions/plugins/styles.js delete mode 100644 structure/_extensions/plugins/validate.js create mode 100644 structure/_helpers/base.js create mode 100644 structure/_helpers/console.js create mode 100644 structure/_helpers/context.js rename structure/{_extensions/helpers => _helpers}/expand.js (56%) rename structure/{_extensions/helpers => _helpers}/fs.js (71%) create mode 100644 structure/_helpers/git.js rename structure/{_extensions/helpers => _helpers}/inline.js (77%) rename structure/{_extensions/helpers => _helpers}/isActive.js (74%) rename structure/{_extensions/helpers => _helpers}/join.js (51%) create mode 100644 structure/_helpers/markdown.js rename structure/{_extensions/helpers => _helpers}/nav.js (53%) rename structure/{_extensions/helpers => _helpers}/news.js (76%) create mode 100644 structure/_helpers/path.js rename structure/{_extensions/helpers => _helpers}/replace.js (81%) create mode 100644 structure/_helpers/resolve.js rename structure/{_extensions/helpers => _helpers}/webfonts.js (53%) rename structure/{_extensions/plugins => _middleware}/README.md (100%) create mode 100644 structure/_middleware/context.js create mode 100644 structure/_middleware/holder-404-avoid.js rename structure/{_extensions/plugins => _middleware}/lib/utils.js (100%) create mode 100644 structure/_middleware/link-checker.js create mode 100644 structure/_middleware/postprocess.js create mode 100644 structure/_middleware/styles.js create mode 100644 structure/_middleware/validate.js diff --git a/structure/_extensions/README.md b/structure/README.md similarity index 100% rename from structure/_extensions/README.md rename to structure/README.md diff --git a/structure/_extensions/helpers/console.js b/structure/_extensions/helpers/console.js deleted file mode 100644 index 05d93e9..0000000 --- a/structure/_extensions/helpers/console.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Handlebars Helper: {{logging}} - * Copyright (c) 2014 Jon Schlinkert - * Licensed under the MIT License (MIT). - */ -'use strict'; - -var chalk = require('chalk'); - -/** - * Logging helpers - */ - -module.exports.register = function (Handlebars) { - - Handlebars.registerHelper("success", function(msg, context) { - console.log(chalk.green(msg), context); - }); - - Handlebars.registerHelper("warn", function(msg, context) { - console.log(chalk.yellow(msg), context); - }); - - Handlebars.registerHelper("fail", function(msg, context) { - console.log(chalk.red(msg), context); - }); -}; \ No newline at end of file diff --git a/structure/_extensions/helpers/context.js b/structure/_extensions/helpers/context.js deleted file mode 100644 index 80b8bbd..0000000 --- a/structure/_extensions/helpers/context.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Handlebars Helpers: {{context}} - * Copyright (c) 2014 Jon Schlinkert - * Licensed under the MIT License (MIT). - */ - -'use strict'; - -module.exports.register = function (Handlebars) { - - /** - * {{context}} - * - * This helper passes the given context into the block, - * allowing outer contexts to be used in nested blocks. - * This is accomplished using Handlebars.createFrame, which - * exposes private variables inside a block using the `@foo` - * syntax. - */ - - Handlebars.registerHelper("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}); - }); -}; \ No newline at end of file diff --git a/structure/_extensions/helpers/git.js b/structure/_extensions/helpers/git.js deleted file mode 100644 index e8ef958..0000000 --- a/structure/_extensions/helpers/git.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Handlebars Helpers: Git branch and remote origin URL - * Copyright (c) 2014 Jon Schlinkert - * Licensed under the MIT License (MIT). - */ -const utils = require('../../../data/_lib/utils'); - -module.exports.register = function (Handlebars) { - - - /** - * Current branch of the project's git repository - * @return {String} - */ - - Handlebars.registerHelper("branch", function() { - return new Handlebars.SafeString(utils.branch); - }); - - - /** - * Remote origin url of the project's git repository. - * @return {String} - */ - - Handlebars.registerHelper("origin", function() { - return new Handlebars.SafeString(utils.repo_url); - }); -}; diff --git a/structure/_extensions/helpers/markdown.js b/structure/_extensions/helpers/markdown.js deleted file mode 100644 index 05e98ae..0000000 --- a/structure/_extensions/helpers/markdown.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Markdown Helper {{markdown}} - * Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors - * Licensed under the MIT License (MIT). - */ - -'use strict'; - -var marked = require('marked'); -var extras = require('marked-extras'); -var _ = require('lodash'); - - -module.exports.register = function (Handlebars, opts) { - opts = opts || {}; - 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); - - Handlebars.registerHelper("markdown", function (options) { - return new Handlebars.SafeString(marked(options.fn(this))); - }); -}; \ No newline at end of file diff --git a/structure/_extensions/helpers/path.js b/structure/_extensions/helpers/path.js deleted file mode 100644 index e0368b1..0000000 --- a/structure/_extensions/helpers/path.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Handlebars Helper: {{basename}} - * Copyright (c) 2014 Jon Schlinkert - * Licensed under the MIT License (MIT). - */ - -var path = require('path'); - -module.exports.register = function (Handlebars) { - 'use strict'; - - Handlebars.registerHelper("basename", function(filepath) { - return path.basename(filepath); - }); -}; \ No newline at end of file diff --git a/structure/_extensions/helpers/resolve.js b/structure/_extensions/helpers/resolve.js deleted file mode 100644 index b011497..0000000 --- a/structure/_extensions/helpers/resolve.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Handlebars Helpers: {{resolve}} - * Copyright (c) 2014 Jon Schlinkert - * Licensed under the MIT License (MIT). - */ -'use strict'; - -// Node.js -var path = require('path'); -var _ = require('lodash'); -var relative = require('relative'); - -module.exports.register = function (Handlebars) { - - /** - * Resolves the path to the actual destination file, - * to ensure that it's always correct. This even works with - * permalinks. - * - * A context is not required when {{resolve}} is used at the - * root of the context, however, you will need to pass - * in the root context when the helper is nested. Thus, we're - * passing the context in using the {{context}} helper. - * - * @usage: = 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; -} - -// Adapted from link-checker.js from less/less-docs -module.exports = function (params, callback) { - '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"); - } - - callback(); - } - } - - 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(); -}; - - -module.exports.options = options; \ No newline at end of file diff --git a/structure/_extensions/plugins/postprocess.js b/structure/_extensions/plugins/postprocess.js deleted file mode 100644 index 1e021ff..0000000 --- a/structure/_extensions/plugins/postprocess.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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. - */ - -var options = { - stage: 'render:post:page' -}; - -/** - * postprocess - * @param {Object} params - * @param {Function} callback - */ -module.exports = function (params, callback) { - '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); - callback(); -}; - -module.exports.options = options; \ No newline at end of file diff --git a/structure/_extensions/plugins/styles.js b/structure/_extensions/plugins/styles.js deleted file mode 100644 index d15ce97..0000000 --- a/structure/_extensions/plugins/styles.js +++ /dev/null @@ -1,28 +0,0 @@ -const cheerio = require('cheerio'); - -/** - * Aggregate styles from the body to a single - * style tag in the head - */ - -module.exports = function (params, callback) { - - // 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(); - callback(); -}; - -module.exports.options = { - stage: 'render:post:page' -}; \ No newline at end of file diff --git a/structure/_extensions/plugins/validate.js b/structure/_extensions/plugins/validate.js deleted file mode 100644 index 45e96b0..0000000 --- a/structure/_extensions/plugins/validate.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * HTML validation plugin for Assemble - */ - -'use strict'; - -var file = require('fs-utils'); -var w3cjs = require('w3cjs'); - -module.exports = function (params, callback) { - 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 - } - }); - - callback(); -}; - -module.exports.options = { - stage: 'render:post:page' -}; \ No newline at end of file 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/_extensions/helpers/expand.js b/structure/_helpers/expand.js similarity index 56% rename from structure/_extensions/helpers/expand.js rename to structure/_helpers/expand.js index d9519ad..87266d6 100644 --- a/structure/_extensions/helpers/expand.js +++ b/structure/_helpers/expand.js @@ -4,22 +4,26 @@ * Licensed under the MIT License (MIT). */ -'use strict'; +const file = require('fs-utils'); +const log = require('verbalize'); -var file = require('fs-utils'); -var log = require('verbalize'); var helperError = function(name, msg) { - name = '\n The {{' + name + '}} helper'; + name = '\n {{' + name + '}} helper:'; + log.warn(name, log.red(msg)); throw new Error(log.bold(name, log.red(msg))); }; -module.exports.register = function (Handlebars) { - Handlebars.registerHelper("expand", function(patterns) { + + +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 or string of glob patterns.', this); + helperError('expand', 'expects an array, string or glob patterns.', this); } // Expand files. @@ -27,9 +31,11 @@ module.exports.register = function (Handlebars) { // Throw an error if no files are returned. if(!files.length) { - helperError('expand', 'tried to expand "' + patterns + '" but did not find any files.', this); + helperError('expand', 'tried to expand "' + patterns + '" but no files were returned.', this); } - return new Handlebars.SafeString(files); - }); -}; \ No newline at end of file + return files; + }; + + return helpers; +}; diff --git a/structure/_extensions/helpers/fs.js b/structure/_helpers/fs.js similarity index 71% rename from structure/_extensions/helpers/fs.js rename to structure/_helpers/fs.js index d5d6660..2015884 100644 --- a/structure/_extensions/helpers/fs.js +++ b/structure/_helpers/fs.js @@ -4,22 +4,24 @@ * Licensed under the MIT License (MIT). */ -'use strict'; +const path = require('path'); +const file = require('fs-utils'); +const matter = require('gray-matter'); +const _ = require('lodash'); -var path = require('path'); -var file = require('fs-utils'); -var matter = require('gray-matter'); -var _ = require('lodash'); -module.exports.register = function (Handlebars) { +module.exports = function (config) { + var Handlebars = config.Handlebars; + var helpers = {}; - Handlebars.registerHelper("read", function(filepath, context) { + + 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. @@ -29,9 +31,9 @@ module.exports.register = function (Handlebars) { * @return {String} */ - Handlebars.registerHelper("write", function(filepath, content) { + helpers.write = function (filepath, content) { return file.writeFileSync(filepath, content); - }); + }; /** * Write the give context to a JSON file. @@ -45,7 +47,10 @@ module.exports.register = function (Handlebars) { * */ - Handlebars.registerHelper("writeJSON", function(dest, name, context) { + helpers.writeJSON = function (dest, name, context) { return file.writeJSONSync(path.join(dest, name) + '.json', context); - }); -}; \ No newline at end of file + }; + + 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/_extensions/helpers/inline.js b/structure/_helpers/inline.js similarity index 77% rename from structure/_extensions/helpers/inline.js rename to structure/_helpers/inline.js index c333166..a9794e7 100644 --- a/structure/_extensions/helpers/inline.js +++ b/structure/_helpers/inline.js @@ -3,20 +3,23 @@ * Copyright (c) 2014 Jon Schlinkert * Licensed under the MIT License (MIT). */ -'use strict'; -var matter = require('gray-matter'); -var _ = require('lodash'); +const matter = require('gray-matter'); +const _ = require('lodash'); -module.exports.register = function (Handlebars, options) { - options = options || {}; +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 || {}); - Handlebars.registerHelper('inline', function(filepath, context) { + + helpers.inline = function (filepath, context) { context.data = context.data || {}; var append = '', prepend = ''; @@ -34,5 +37,7 @@ module.exports.register = function (Handlebars, options) { var template = Handlebars.compile(sections); var result = template(page.context, {data: data}); return new Handlebars.SafeString(result); - }); -}; \ No newline at end of file + }; + + return helpers; +}; diff --git a/structure/_extensions/helpers/isActive.js b/structure/_helpers/isActive.js similarity index 74% rename from structure/_extensions/helpers/isActive.js rename to structure/_helpers/isActive.js index 394ebc3..3e2286a 100644 --- a/structure/_extensions/helpers/isActive.js +++ b/structure/_helpers/isActive.js @@ -4,12 +4,14 @@ * Licensed under the MIT License (MIT). */ -var _ = require('lodash'); +const _ = require('lodash'); -module.exports.register = function (Handlebars, options) { - 'use strict'; - var opts = options || {}; +module.exports = function (config) { + var Handlebars = config.Handlebars; + var opts = config.options || {}; + + var helpers = {}; /** * Add `active` class for current page. @@ -18,7 +20,8 @@ module.exports.register = function (Handlebars, options) { * * @usage: {{isActive}} */ - Handlebars.registerHelper('isActive', function(current, options) { + + helpers.isActive = function (current, options) { var context = _.extend({}, opts, this); options = options || {}; @@ -30,5 +33,7 @@ module.exports.register = function (Handlebars, options) { modifier = ''; } return new Handlebars.SafeString(modifier); - }); + }; + + return helpers; }; diff --git a/structure/_extensions/helpers/join.js b/structure/_helpers/join.js similarity index 51% rename from structure/_extensions/helpers/join.js rename to structure/_helpers/join.js index 32c433a..569b28a 100644 --- a/structure/_extensions/helpers/join.js +++ b/structure/_helpers/join.js @@ -4,10 +4,13 @@ * Licensed under the MIT License (MIT). */ -module.exports.register = function (Handlebars) { - 'use strict'; +module.exports = function (config) { + var Handlebars = config.Handlebars; - Handlebars.registerHelper("join", function(arr, sep) { + var helpers = {}; + helpers.join = function (arr, sep) { return new Handlebars.SafeString(arr.join(sep)); - }); -}; \ No newline at end of file + }; + + return helpers; +}; diff --git a/structure/_helpers/markdown.js b/structure/_helpers/markdown.js new file mode 100644 index 0000000..376b744 --- /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; +}; diff --git a/structure/_extensions/helpers/nav.js b/structure/_helpers/nav.js similarity index 53% rename from structure/_extensions/helpers/nav.js rename to structure/_helpers/nav.js index 68bb958..52d53c1 100644 --- a/structure/_extensions/helpers/nav.js +++ b/structure/_helpers/nav.js @@ -1,13 +1,8 @@ -/** - * Handlebars Helpers: {{list}} - * Copyright (c) 2014 Jon Schlinkert - * Licensed under the MIT License (MIT). - */ -'use strict'; +module.exports = function (config) { + var Handlebars = config.Handlebars; -module.exports.register = function (Handlebars) { - - Handlebars.registerHelper('nav', function (name, context, options) { + var helpers = {}; + helpers.nav = function (name, context, options) { var fn = Handlebars.compile(Handlebars.partials[name]); var frame = Handlebars.createFrame(context.data); @@ -17,5 +12,8 @@ module.exports.register = function (Handlebars) { var template = fn(context, {data: frame}); return new Handlebars.SafeString(template); - }); -}; \ No newline at end of file + }; + + return helpers; +}; + diff --git a/structure/_extensions/helpers/news.js b/structure/_helpers/news.js similarity index 76% rename from structure/_extensions/helpers/news.js rename to structure/_helpers/news.js index ef08172..56712c9 100644 --- a/structure/_extensions/helpers/news.js +++ b/structure/_helpers/news.js @@ -4,10 +4,11 @@ * Licensed under the MIT License (MIT). */ -module.exports.register = function(Handlebars) { - 'use strict'; +module.exports = function (config) { + var Handlebars = config.Handlebars; - Handlebars.registerHelper("news", function (context, options) { + var helpers = {}; + helpers.news = function (context, options) { var result = '
    '; var data; @@ -24,5 +25,8 @@ module.exports.register = function(Handlebars) { 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/_extensions/helpers/replace.js b/structure/_helpers/replace.js similarity index 81% rename from structure/_extensions/helpers/replace.js rename to structure/_helpers/replace.js index 9020b2b..73dbe7b 100644 --- a/structure/_extensions/helpers/replace.js +++ b/structure/_helpers/replace.js @@ -4,11 +4,12 @@ * Licensed under the MIT License (MIT). */ -'use strict'; +const path = require('path'); -var path = require('path'); -module.exports.register = function (Handlebars) { +module.exports = function (config) { + var Handlebars = config.Handlebars; + var helpers = {}; /** * JavaScript's replace function exposed in a helper. @@ -19,12 +20,10 @@ module.exports.register = function (Handlebars) { * @param {String} flags Optional regex flags to use. * @return {String} */ - - Handlebars.registerHelper("replace", function(str, pattern, replacement, flags) { + 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 @@ -35,13 +34,12 @@ module.exports.register = function (Handlebars) { * @return {String} The {{renamed}} string */ - Handlebars.registerHelper("rename", function(name) { + helpers.rename = function (name) { if(/helper/.test(name)) { return '{{' + name.split('-')[1] + '}}'; } return new Handlebars.SafeString('"' + name + '"'); - }); - + }; /** * Used in the source-link popovers to modify @@ -51,7 +49,7 @@ module.exports.register = function (Handlebars) { * @return {String} */ - Handlebars.registerHelper("filetype", function (filepath) { + helpers.filetype = function (filepath) { switch (path.extname(filepath)) { case '.md': return 'markdown source'; @@ -62,5 +60,7 @@ module.exports.register = function (Handlebars) { default: return 'source file'; } - }); -}; \ No newline at end of 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/_extensions/helpers/webfonts.js b/structure/_helpers/webfonts.js similarity index 53% rename from structure/_extensions/helpers/webfonts.js rename to structure/_helpers/webfonts.js index e782ce2..1544a8e 100644 --- a/structure/_extensions/helpers/webfonts.js +++ b/structure/_helpers/webfonts.js @@ -4,8 +4,14 @@ * Licensed under the MIT License (MIT). */ -module.exports.register = function (Handlebars) { - Handlebars.registerHelper("webfonts", function(context) { +module.exports = function (assemble) { + + var Handlebars = assemble.Handlebars; + var helpers = {}; + + helpers.webfonts = function (context) { return new Handlebars.SafeString('"' + context.join('", "') + '"'); - }); -}; \ No newline at end of file + }; + + return helpers; +}; diff --git a/structure/_extensions/plugins/README.md b/structure/_middleware/README.md similarity index 100% rename from structure/_extensions/plugins/README.md rename to structure/_middleware/README.md diff --git a/structure/_middleware/context.js b/structure/_middleware/context.js new file mode 100644 index 0000000..3e22cd0 --- /dev/null +++ b/structure/_middleware/context.js @@ -0,0 +1,167 @@ +var url = require('url'); +var file = require('fs-utils'); +var origin = require('remote-origin-url'); +var branch = require('git-branch'); +var repoUrl = require('github-repo-url'); +var ghUsername = require('git-username'); +var ghRepoName = require('git-repo-name'); +var _ = require('lodash'); + +/** + * Extend the context + */ + +module.exports = function (assemble) { + + console.log(assemble); + + var middleware = function (params, next) { + 'use strict'; + + 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/_extensions/plugins/lib/utils.js b/structure/_middleware/lib/utils.js similarity index 100% rename from structure/_extensions/plugins/lib/utils.js rename to structure/_middleware/lib/utils.js 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/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 + }; +}; From 0b2a4809d8261db4073de945be75a5c0440cda0f Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Sat, 10 May 2014 18:46:57 -0400 Subject: [PATCH 54/81] reorganize includes to components --- structure/{includes => components/ads}/ad.hbs | 0 structure/components/alerts/alert.hbs | 44 +++ structure/components/banners/README.md | 5 + .../banners}/banner.hbs | 0 structure/components/banners/jumbotron.hbs | 20 ++ .../banners}/masthead.hbs | 0 .../banners}/subhead.hbs | 1 - .../banners}/teaser.hbs | 11 +- .../buttons/back-to-top.hbs | 0 structure/components/buttons/btn.hbs | 4 + .../components/buttons/button-dropdowns.hbs | 333 ++++++++++++++++++ .../buttons/button.hbs | 0 structure/components/callouts/callout.hbs | 19 + structure/components/cards/repo-cards.hbs | 33 ++ structure/components/composer.hbs | 6 + .../dropdowns}/dropdown-menu.hbs | 0 structure/components/footer/colophon.hbs | 16 + structure/components/footer/footer-blog.hbs | 6 + structure/components/footer/footer.hbs | 20 ++ structure/components/forms/form-signin.hbs | 9 + structure/components/indicator/indicator.hbs | 12 + .../components/labels/label-site-status.hbs | 8 + .../components/labels/label-wordcount.hbs | 2 + .../list.hbs => components/nav/nav-list.hbs} | 0 structure/components/nav/sidenav.hbs | 3 + .../navbar}/nav-main.hbs | 17 +- .../navbar}/navbar-content.hbs | 0 structure/components/navbar/navbar.hbs | 64 ++++ .../buttons => components/navbar}/toggle.hbs | 0 structure/components/newsfeed/README.md | 9 + .../components/newsfeed/newsfeed-body.hbs | 10 + .../components/newsfeed/newsfeed-footer.hbs | 7 + .../components/newsfeed/newsfeed-header.hbs | 8 + .../components/newsfeed/newsfeed-item.hbs | 46 +++ .../components/newsfeed/newsfeed-settings.hbs | 4 + .../components/newsfeed/newsfeed-sidebar.hbs | 3 + structure/components/newsfeed/newsfeed.hbs | 35 ++ .../pagination}/paginate.hbs | 6 +- .../popovers/popover-source-link.hbs} | 0 .../social-media/btn-github-fork.hbs} | 2 +- .../social-media/btn-github-watch.hbs | 1 + .../components/social-media/btn-social.hbs | 27 ++ .../social-media}/btn-tweet.hbs | 3 +- .../social-media/btn-twitter-follow.hbs | 1 + .../social-media/btn-twitter-tweet.hbs | 1 + .../social-media/rotating-tweets.hbs | 5 + .../social-media}/sharing.hbs | 2 +- .../social-media/social-buttons-alt.hbs | 16 + .../social-media}/social-buttons.hbs | 4 +- .../social-media}/social.hbs | 0 .../includes/buttons/btn-github-fork.hbs | 3 - .../buttons/btn-github-star-small.hbs | 1 - .../includes/buttons/btn-github-star.hbs | 3 - structure/includes/buttons/btn-social.hbs | 24 -- structure/includes/buttons/button-tweet.hbs | 31 -- structure/includes/colophon.hbs | 19 - structure/includes/docs.hbs | 2 +- structure/includes/footer.hbs | 26 -- structure/includes/head.hbs | 19 +- structure/includes/javascripts.hbs | 23 +- structure/includes/jumbotron.hbs | 18 - structure/includes/navigation.hbs | 3 - structure/includes/repo-list.hbs | 3 - structure/includes/repos.hbs | 26 -- 64 files changed, 825 insertions(+), 199 deletions(-) rename structure/{includes => components/ads}/ad.hbs (100%) create mode 100644 structure/components/alerts/alert.hbs create mode 100644 structure/components/banners/README.md rename structure/{includes => components/banners}/banner.hbs (100%) create mode 100644 structure/components/banners/jumbotron.hbs rename structure/{includes => components/banners}/masthead.hbs (100%) rename structure/{includes => components/banners}/subhead.hbs (89%) rename structure/{includes => components/banners}/teaser.hbs (70%) rename structure/{includes => components}/buttons/back-to-top.hbs (100%) create mode 100644 structure/components/buttons/btn.hbs create mode 100644 structure/components/buttons/button-dropdowns.hbs rename structure/{includes => components}/buttons/button.hbs (100%) create mode 100644 structure/components/callouts/callout.hbs create mode 100644 structure/components/cards/repo-cards.hbs create mode 100644 structure/components/composer.hbs rename structure/{includes => components/dropdowns}/dropdown-menu.hbs (100%) create mode 100644 structure/components/footer/colophon.hbs create mode 100644 structure/components/footer/footer-blog.hbs create mode 100644 structure/components/footer/footer.hbs create mode 100644 structure/components/forms/form-signin.hbs create mode 100644 structure/components/indicator/indicator.hbs create mode 100644 structure/components/labels/label-site-status.hbs create mode 100644 structure/components/labels/label-wordcount.hbs rename structure/{includes/list.hbs => components/nav/nav-list.hbs} (100%) create mode 100644 structure/components/nav/sidenav.hbs rename structure/{includes => components/navbar}/nav-main.hbs (62%) rename structure/{includes => components/navbar}/navbar-content.hbs (100%) create mode 100644 structure/components/navbar/navbar.hbs rename structure/{includes/buttons => components/navbar}/toggle.hbs (100%) create mode 100644 structure/components/newsfeed/README.md create mode 100644 structure/components/newsfeed/newsfeed-body.hbs create mode 100644 structure/components/newsfeed/newsfeed-footer.hbs create mode 100644 structure/components/newsfeed/newsfeed-header.hbs create mode 100644 structure/components/newsfeed/newsfeed-item.hbs create mode 100644 structure/components/newsfeed/newsfeed-settings.hbs create mode 100644 structure/components/newsfeed/newsfeed-sidebar.hbs create mode 100644 structure/components/newsfeed/newsfeed.hbs rename structure/{includes => components/pagination}/paginate.hbs (63%) rename structure/{includes/source-link.hbs => components/popovers/popover-source-link.hbs} (100%) rename structure/{includes/buttons/btn-github-fork-small.hbs => components/social-media/btn-github-fork.hbs} (90%) create mode 100644 structure/components/social-media/btn-github-watch.hbs create mode 100644 structure/components/social-media/btn-social.hbs rename structure/{includes/buttons => components/social-media}/btn-tweet.hbs (79%) create mode 100644 structure/components/social-media/btn-twitter-follow.hbs create mode 100644 structure/components/social-media/btn-twitter-tweet.hbs create mode 100644 structure/components/social-media/rotating-tweets.hbs rename structure/{includes => components/social-media}/sharing.hbs (93%) create mode 100644 structure/components/social-media/social-buttons-alt.hbs rename structure/{includes/buttons => components/social-media}/social-buttons.hbs (89%) rename structure/{includes => components/social-media}/social.hbs (100%) delete mode 100644 structure/includes/buttons/btn-github-fork.hbs delete mode 100644 structure/includes/buttons/btn-github-star-small.hbs delete mode 100644 structure/includes/buttons/btn-github-star.hbs delete mode 100644 structure/includes/buttons/btn-social.hbs delete mode 100644 structure/includes/buttons/button-tweet.hbs delete mode 100644 structure/includes/colophon.hbs delete mode 100644 structure/includes/footer.hbs delete mode 100644 structure/includes/jumbotron.hbs delete mode 100644 structure/includes/navigation.hbs delete mode 100644 structure/includes/repo-list.hbs delete mode 100644 structure/includes/repos.hbs diff --git a/structure/includes/ad.hbs b/structure/components/ads/ad.hbs similarity index 100% rename from structure/includes/ad.hbs rename to structure/components/ads/ad.hbs diff --git a/structure/components/alerts/alert.hbs b/structure/components/alerts/alert.hbs new file mode 100644 index 0000000..ef10cff --- /dev/null +++ b/structure/components/alerts/alert.hbs @@ -0,0 +1,44 @@ +--- +component: alert +modifiers: +- success +- info +- warning +- danger +--- + + + + + + + + + +
+ + + + + + + \ 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/includes/banner.hbs b/structure/components/banners/banner.hbs similarity index 100% rename from structure/includes/banner.hbs rename to structure/components/banners/banner.hbs 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/includes/masthead.hbs b/structure/components/banners/masthead.hbs similarity index 100% rename from structure/includes/masthead.hbs rename to structure/components/banners/masthead.hbs diff --git a/structure/includes/subhead.hbs b/structure/components/banners/subhead.hbs similarity index 89% rename from structure/includes/subhead.hbs rename to structure/components/banners/subhead.hbs index f2e372d..bdde091 100644 --- a/structure/includes/subhead.hbs +++ b/structure/components/banners/subhead.hbs @@ -2,6 +2,5 @@

{{ title }}

{{ lead }}

- {{!> ads }}
\ No newline at end of file diff --git a/structure/includes/teaser.hbs b/structure/components/banners/teaser.hbs similarity index 70% rename from structure/includes/teaser.hbs rename to structure/components/banners/teaser.hbs index a89162d..281b221 100644 --- a/structure/includes/teaser.hbs +++ b/structure/components/banners/teaser.hbs @@ -1,6 +1,8 @@ --- component: teaser --- +{{warn 'reading' 'partial > teaser'}} + + + +
    + {{#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/includes/dropdown-menu.hbs b/structure/components/dropdowns/dropdown-menu.hbs similarity index 100% rename from structure/includes/dropdown-menu.hbs rename to structure/components/dropdowns/dropdown-menu.hbs 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/includes/list.hbs b/structure/components/nav/nav-list.hbs similarity index 100% rename from structure/includes/list.hbs rename to structure/components/nav/nav-list.hbs 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/includes/nav-main.hbs b/structure/components/navbar/nav-main.hbs similarity index 62% rename from structure/includes/nav-main.hbs rename to structure/components/navbar/nav-main.hbs index f541fa9..b778436 100644 --- a/structure/includes/nav-main.hbs +++ b/structure/components/navbar/nav-main.hbs @@ -1,4 +1,4 @@ -