├── source ├── CNAME ├── assets │ ├── javascripts │ │ └── site.js │ ├── images │ │ └── favicon.png │ └── stylesheets │ │ └── site.css.scss ├── pages │ └── show.html.haml ├── layouts │ ├── _nav.html.haml │ └── layout.haml ├── blog │ ├── _tags.html.haml │ ├── _recent_posts.html.haml │ ├── _archive.html.haml │ ├── _post.html.haml │ ├── tag.html.haml │ ├── archive.html.haml │ ├── index.html.haml │ └── show.html.haml ├── index.html.erb ├── sitemap.xml.erb └── contact.html.haml ├── Gemfile ├── data └── site │ ├── page │ ├── features.yaml │ └── about.yaml │ └── blog_post │ ├── post_1.yaml │ └── post_2.yaml ├── .gitignore ├── README.md ├── config.rb └── Gemfile.lock /source/CNAME: -------------------------------------------------------------------------------- 1 | static.netengine.com.au 2 | -------------------------------------------------------------------------------- /source/assets/javascripts/site.js: -------------------------------------------------------------------------------- 1 | //= require_tree . 2 | -------------------------------------------------------------------------------- /source/pages/show.html.haml: -------------------------------------------------------------------------------- 1 | - content_for :page_title, "#{@title}" 2 | 3 | = Markdown.new(@body).to_html 4 | -------------------------------------------------------------------------------- /source/assets/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/net-engine/simple_static_site_example/HEAD/source/assets/images/favicon.png -------------------------------------------------------------------------------- /source/layouts/_nav.html.haml: -------------------------------------------------------------------------------- 1 | %nav.nav 2 | = menu_link 'Blog', 'blog' 3 | - data.site.page.each do |page| 4 | = menu_link page[1][:title], page[1][:slug].downcase 5 | = menu_link 'Contact', 'contact' 6 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'middleman' 4 | 5 | gem 'middleman-autoprefixer' 6 | gem 'middleman-deploy' 7 | gem 'middleman-livereload' 8 | gem "contentful_middleman" 9 | gem 'redcarpet' 10 | -------------------------------------------------------------------------------- /source/blog/_tags.html.haml: -------------------------------------------------------------------------------- 1 | - if @all_tags.any? 2 | .archive 3 | %label Tags 4 | 5 | - @all_tags.each do |tag| 6 | = link_to tag, "/blog/tags/#{tag}", class: "related-tag#{@tag && @tag == tag ? ' active' : nil}" 7 | -------------------------------------------------------------------------------- /source/blog/_recent_posts.html.haml: -------------------------------------------------------------------------------- 1 | - if @recent_posts.any? 2 | .archive 3 | %label Recent Posts 4 | 5 | %ul.no-dot 6 | - @recent_posts.each do |post| 7 | %li= link_to post[1][:title], "/blog/#{post[1][:slug]}", class: @post && @post[:slug] == post[1][:slug] ? 'active' : nil 8 | -------------------------------------------------------------------------------- /source/blog/_archive.html.haml: -------------------------------------------------------------------------------- 1 | - if @archive_months.any? 2 | .archive 3 | %label Archive 4 | 5 | %ul.no-dot 6 | - @archive_months.each do |date_string| 7 | - date = Date.parse(date_string) 8 | %li= link_to date_string, "/blog/archive/#{date.strftime("%Y")}/#{date.strftime("%m")}" 9 | -------------------------------------------------------------------------------- /source/blog/_post.html.haml: -------------------------------------------------------------------------------- 1 | - post_data = post[1] 2 | 3 | = link_to "/blog/#{post_data[:slug]}", class: 'column one-half' do 4 | - if post_data[:image] && post_data[:image][:url].present? 5 | = image_tag "#{post_data[:image][:url]}?w=500&h=500&fit=thumb", class: 'feature-image' 6 | %h5.post-title= post_data[:title] 7 | -------------------------------------------------------------------------------- /data/site/page/features.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | :id: features 3 | :title: Features 4 | :position: 1 5 | :body: |- 6 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 7 | 8 | - List item 9 | - List item 10 | - List item 11 | 12 | :slug: features 13 | -------------------------------------------------------------------------------- /source/blog/tag.html.haml: -------------------------------------------------------------------------------- 1 | - content_for :page_title, "Tag - #{@tag}" 2 | 3 | .row 4 | .column.two-thirds 5 | .row 6 | - @tag_posts.each do |post| 7 | = partial "blog/post", locals: { post: post } 8 | 9 | .column.one-third.sidebar 10 | = partial "blog/recent_posts" 11 | = partial "blog/archive" 12 | = partial "blog/tags" 13 | -------------------------------------------------------------------------------- /source/blog/archive.html.haml: -------------------------------------------------------------------------------- 1 | - content_for :page_title, "Archive - #{@date}" 2 | 3 | .row 4 | .column.two-thirds 5 | .row 6 | - @archive_posts.each do |post| 7 | = partial "blog/post", locals: { post: post } 8 | 9 | .column.one-third.sidebar 10 | = partial "blog/recent_posts" 11 | = partial "blog/archive" 12 | = partial "blog/tags" 13 | -------------------------------------------------------------------------------- /source/blog/index.html.haml: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Latest posts" 3 | description: "Latest blog posts" 4 | --- 5 | 6 | .row 7 | .column.two-thirds 8 | .row 9 | - data.site.blog_post.each do |post| 10 | = partial "blog/post", locals: { post: post } 11 | 12 | .column.one-third.sidebar 13 | = partial "blog/recent_posts" 14 | = partial "blog/archive" 15 | = partial "blog/tags" 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | # 3 | # If you find yourself ignoring temporary files generated by your text editor 4 | # or operating system, you probably want to add a global ignore instead: 5 | # git config --global core.excludesfile ~/.gitignore_global 6 | 7 | # Ignore bundler config 8 | /.bundle 9 | 10 | # Ignore the build directory 11 | /build 12 | 13 | # Ignore cache 14 | /.sass-cache 15 | /.cache 16 | 17 | # Ignore .DS_store file 18 | .DS_Store 19 | -------------------------------------------------------------------------------- /source/index.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: A simple static site example 3 | --- 4 | 5 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 6 | -------------------------------------------------------------------------------- /source/blog/show.html.haml: -------------------------------------------------------------------------------- 1 | - content_for :page_title, "#{@title}" 2 | 3 | - if @image && @image.url.present? 4 | .blog-header{ style: "background-image: url(#{@image.url}?w=1200&h=300&fit=thumb);" } 5 | 6 | .row 7 | .column.two-thirds 8 | .body= Markdown.new(@body).to_html 9 | .tags 10 | %h3 Related tags 11 | - @tags.each do |tag| 12 | = link_to tag, "/blog/tags/#{tag}", class: 'related-tag' 13 | 14 | .column.one-third.sidebar 15 | = partial "blog/recent_posts" 16 | = partial "blog/archive" 17 | = partial "blog/tags" 18 | -------------------------------------------------------------------------------- /source/sitemap.xml.erb: -------------------------------------------------------------------------------- 1 | <% base_url = "http://net-engine.github.io/simple_static_site_example/" %> 2 | <% resources = sitemap.resources.reject { |r| r.is_a? Middleman::Sitemap::Extensions::Redirects::RedirectResource } %> 3 | <% pages = resources.find_all { |p| p.source_file.present? && p.source_file.match(/\.html/) } %> 4 | 5 | 6 | <% pages.each do |p| %> 7 | 8 | <%= base_url + p.destination_path.gsub('index.html','') %> 9 | <% if priority = p.metadata[:page]['priority'] %> 10 | <%= priority %> 11 | <% end %> 12 | <%= File.new(p.source_file).mtime.to_date %> 13 | 14 | <% end %> 15 | 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Simple static site example 3 | 4 | More details at [netengine.com.au/blog/simple-static-sites](http://netengine.com.au/blog/simple-static-sites). 5 | 6 | [![Screenshot](http://netengine-assets.s3.amazonaws.com/images/static/screenshot.png)](http://static.netengine.com.au/) 7 | 8 | ## How to setup the project 9 | 10 | 11 | #### Setup 12 | 13 | git clone git@github.com:net-engine/simple-static-sites.git 14 | bundle install 15 | 16 | 17 | Add [Contentul](https://www.contentful.com/) configuration to `config.rb` 18 | 19 | 20 | bundle exec middleman contentful # Updates content 21 | bundle exec middleman server 22 | 23 | 24 | ## How to deploy 25 | 26 | bundle exec middleman contentful # Updates content 27 | bundle exec middleman build && bundle exec middleman deploy 28 | -------------------------------------------------------------------------------- /data/site/blog_post/post_1.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | :id: post_1 3 | :title: Another Blog Post 4 | :body: | 5 | **woo hoo** 6 | 7 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 8 | :image: 9 | :title: Skateboard 10 | :url: "//images.contentful.com/5ecn5la3cpjx/3GDsbabZg44sgsEOIYsQmM/ac2bc7c61af7595c88c94c06e41836e0/194H.jpg" 11 | :slug: another-blog-post 12 | :date: !ruby/object:DateTime 2015-03-01 00:00:00.000000000 Z 13 | :tags: 14 | - test 15 | - test3 16 | -------------------------------------------------------------------------------- /data/site/blog_post/post_2.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | :id: post_2 3 | :title: Test blog post 4 | :body: | 5 | **woo hoo** 6 | 7 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 8 | :image: 9 | :title: Sparkler 10 | :url: "//images.contentful.com/5ecn5la3cpjx/1lKoXJorAwGSoMusooCmOI/00d967fc9dea8c228f8e810406b1eb2e/fire-firework-light-5076.jpeg" 11 | :slug: test-blog-post 12 | :date: !ruby/object:DateTime 2015-04-13 00:00:00.000000000 Z 13 | :tags: 14 | - test 15 | - test2 16 | -------------------------------------------------------------------------------- /source/contact.html.haml: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Get in touch" 3 | --- 4 | 5 | 6 | %form{ action: "//formspree.io/your@email.com", method: "POST" } 7 | %input{ type: "hidden", name: "_subject", value: "New contact enquiry!" } 8 | %input{ type: "text", name: "_gotcha", style: "display: none;" } 9 | 10 | .row 11 | .six.columns 12 | %label{ for: "email_input"} Your name 13 | %input#name_input.u-full-width{ name: 'name', type: "text", placeholder: "Joe Bloggs" } 14 | 15 | .six.columns 16 | %label{ for: "email_input"} Your email 17 | %input#email_input.u-full-width{ name: 'email', type: "email", placeholder: "joe.bloggs@example.com" } 18 | 19 | %label{ for: "message_input" } Message 20 | %textarea#message_input.u-full-width{ name: 'message', placeholder: "Your message..." } 21 | 22 | %button.button-primary{ type: "submit" } Submit 23 | -------------------------------------------------------------------------------- /data/site/page/about.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | :id: about 3 | :title: About 4 | :position: 1 5 | :body: |- 6 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis *aute irure dolor* in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 7 | 8 | ![Sparkler](//images.contentful.com/5ecn5la3cpjx/1lKoXJorAwGSoMusooCmOI/00d967fc9dea8c228f8e810406b1eb2e/fire-firework-light-5076.jpeg) 9 | 10 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris. 11 | 12 | > Duis aute irure dolor in **reprehenderit** in voluptate velit 13 | 14 | Ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 15 | 16 | ___ 17 | 18 | 19 | - List item 20 | - List item 21 | - List item 22 | 23 | 1. List item 24 | 2. List item 25 | 3. List item 26 | :slug: about 27 | -------------------------------------------------------------------------------- /source/layouts/layout.haml: -------------------------------------------------------------------------------- 1 | !!! 2 | %html 3 | %head 4 | %meta{ charset: 'utf-8' } 5 | %meta{ content: "IE=edge,chrome=1", "http-equiv" => "X-UA-Compatible" } 6 | %meta{ name: "viewport", content: "width=device-width" } 7 | 8 | %title= content_for?(:page_title) ? yield_content(:page_title) : current_page.data.title 9 | 10 | %meta{ property:"og:type", content: "website" } 11 | 12 | = favicon_tag 'favicon.png' 13 | 14 | = stylesheet_link_tag "//cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.min.css", "//cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css" 15 | 16 | = stylesheet_link_tag "site" 17 | = javascript_include_tag "site" 18 | 19 | /[if lt IE 9] 20 | = javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js" 21 | 22 | %body{ class: page_classes } 23 | 24 | %header.header 25 | .container 26 | = link_to '/', class: 'logo' do 27 | = image_tag 'favicon.png', title: "A simple static site example" 28 | %span A simple static site example 29 | 30 | = partial "layouts/nav" 31 | 32 | #main.main 33 | .container 34 | %h1.page-title= content_for?(:page_title) ? yield_content(:page_title) : current_page.data.title 35 | 36 | = yield 37 | 38 | %footer.footer 39 | .container 40 | = partial "layouts/nav" 41 | 42 | %small= "© #{Time.now.year}".html_safe 43 | -------------------------------------------------------------------------------- /source/assets/stylesheets/site.css.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .header { 4 | .container { 5 | padding-top: 2em; 6 | padding-bottom: 4em; 7 | } 8 | 9 | .logo { 10 | text-decoration: none; 11 | color: black; 12 | 13 | img, span { 14 | display: inline-block; 15 | vertical-align: middle; 16 | height: 2em; 17 | line-height: 2em; 18 | } 19 | 20 | span { 21 | margin-left: .5em; 22 | text-transform: uppercase; 23 | } 24 | } 25 | 26 | .nav { 27 | margin-top: 2em; 28 | } 29 | 30 | @media (min-width: 750px) { 31 | .logo { 32 | float: left; 33 | } 34 | 35 | .nav { 36 | margin-top: 0; 37 | float: right; 38 | } 39 | } 40 | } 41 | 42 | nav.nav > a { 43 | display: inline-block; 44 | vertical-align: middle; 45 | padding: 0 .75em; 46 | text-decoration: none; 47 | 48 | &:hover, &.active { 49 | color: black; 50 | } 51 | 52 | &:first-child { 53 | padding-left: 0; 54 | } 55 | 56 | &:last-child { 57 | padding-right: 0; 58 | } 59 | } 60 | 61 | .main { 62 | .page-title { 63 | margin-bottom: 1em; 64 | } 65 | 66 | img { 67 | max-width: 100%; 68 | } 69 | } 70 | 71 | .blog-header { 72 | height: 8em; 73 | margin-bottom: 2em; 74 | background-position: center; 75 | background-size: cover; 76 | 77 | @media (min-width: 750px) { 78 | height: 16em; 79 | } 80 | } 81 | 82 | .footer { 83 | margin-top: 3em; 84 | 85 | .container { 86 | padding-top: 2em; 87 | padding-bottom: 2em; 88 | border-top: thin solid #ddd; 89 | } 90 | 91 | small { 92 | display: block; 93 | margin-top: 1.5em; 94 | } 95 | 96 | @media (min-width: 500px) { 97 | .nav { 98 | float: left; 99 | } 100 | 101 | small { 102 | margin-top: 0; 103 | float: right; 104 | } 105 | } 106 | } 107 | 108 | @media (max-width: 500px) { 109 | .header, .page-title, .footer { 110 | text-align: center; 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /config.rb: -------------------------------------------------------------------------------- 1 | require 'active_support/all' 2 | 3 | # CONFIG 4 | 5 | set :markdown_engine, :redcarpet 6 | 7 | set :css_dir, 'assets/stylesheets' 8 | set :js_dir, 'assets/javascripts' 9 | set :images_dir, 'assets/images' 10 | 11 | activate :autoprefixer 12 | activate :directory_indexes 13 | activate :livereload 14 | 15 | activate :contentful do |f| 16 | f.access_token = ENV['CONTENTFUL_ACCESS_TOKEN'] 17 | f.space = { site: ENV['CONTENTFUL_SPACE'] } 18 | f.content_types = { 19 | page: ENV['CONTENTFUL_PAGE_KEY'], 20 | blog_post: ENV['CONTENTFUL_BLOG_POST_KEY'] 21 | } 22 | end 23 | 24 | activate :deploy do |deploy| 25 | deploy.method = :git 26 | deploy.strategy = :force_push 27 | end 28 | 29 | configure :build do 30 | activate :asset_hash 31 | activate :minify_css 32 | activate :minify_javascript 33 | activate :relative_assets 34 | end 35 | 36 | # PAGES 37 | 38 | helpers do 39 | def menu_link(title, link) 40 | unless page_classes[/(\S+\s+){#{1}}/].blank? 41 | klass = (link == page_classes[/(\S+\s+){#{1}}/].strip ? 'active' : nil) 42 | end 43 | link_to title, "/#{link}", class: klass 44 | end 45 | end 46 | 47 | page '/sitemap.xml', layout: false 48 | 49 | data.site.page.each do |page| 50 | page "/#{page[1][:slug].downcase}.html", proxy: '/pages/show.html', ignore: true do 51 | @page = page[1] 52 | @title = page[1][:title] 53 | @slug = page[1][:slug] 54 | @body = page[1][:body] 55 | @position = page[1][:position] 56 | end 57 | end 58 | 59 | data.site.blog_post.each do |post| 60 | page "/blog/#{post[1][:slug]}.html", proxy: '/blog/show.html', ignore: true do 61 | @post = post[1] 62 | @title = post[1][:title] 63 | @slug = post[1][:slug] 64 | @body = post[1][:body] 65 | @image = post[1][:image] 66 | @date = post[1][:date] 67 | @tags = post[1][:tags] 68 | end 69 | end 70 | 71 | @recent_posts = data.site.blog_post.sort_by { |post| post[1][:date] }.reverse.first(5) 72 | 73 | 74 | @archive_months = data.site.blog_post.map { |post| post[1][:date].strftime('%B %Y') }.uniq 75 | 76 | @archive_months.each do |date_string| 77 | date = Date.parse(date_string) 78 | 79 | page "/blog/archive/#{date.strftime("%Y")}/#{date.strftime("%m")}.html", proxy: '/blog/archive.html', ignore: true do 80 | @date = date.strftime('%B %Y') 81 | @archive_posts = data.site.blog_post.to_a.select do |post| 82 | post[1][:date].strftime('%B %Y') == date.strftime('%B %Y') 83 | end 84 | end 85 | end 86 | 87 | 88 | @all_tags = data.site.blog_post.map { |post| post[1][:tags] }.flatten.uniq 89 | 90 | @all_tags.each do |tag| 91 | page "/blog/tags/#{tag}.html", proxy: '/blog/tag.html', ignore: true do 92 | @tag = tag 93 | @tag_posts = data.site.blog_post.to_a.select do |post| 94 | post[1][:tags].include? tag 95 | end 96 | end 97 | end 98 | 99 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | activesupport (4.1.10) 5 | i18n (~> 0.6, >= 0.6.9) 6 | json (~> 1.7, >= 1.7.7) 7 | minitest (~> 5.1) 8 | thread_safe (~> 0.1) 9 | tzinfo (~> 1.1) 10 | addressable (2.3.8) 11 | autoprefixer-rails (5.1.11) 12 | execjs 13 | json 14 | celluloid (0.16.0) 15 | timers (~> 4.0.0) 16 | chunky_png (1.3.4) 17 | coffee-script (2.4.1) 18 | coffee-script-source 19 | execjs 20 | coffee-script-source (1.9.1.1) 21 | compass (1.0.3) 22 | chunky_png (~> 1.2) 23 | compass-core (~> 1.0.2) 24 | compass-import-once (~> 1.0.5) 25 | rb-fsevent (>= 0.9.3) 26 | rb-inotify (>= 0.9) 27 | sass (>= 3.3.13, < 3.5) 28 | compass-core (1.0.3) 29 | multi_json (~> 1.0) 30 | sass (>= 3.3.0, < 3.5) 31 | compass-import-once (1.0.5) 32 | sass (>= 3.2, < 3.5) 33 | contentful (0.5.0) 34 | http (~> 0.6) 35 | multi_json (~> 1) 36 | contentful_middleman (1.1.0) 37 | contentful 38 | middleman-blog (~> 3.5) 39 | middleman-core (~> 3.3) 40 | domain_name (0.5.24) 41 | unf (>= 0.0.5, < 1.0.0) 42 | em-websocket (0.5.1) 43 | eventmachine (>= 0.12.9) 44 | http_parser.rb (~> 0.6.0) 45 | erubis (2.7.0) 46 | eventmachine (1.0.7) 47 | execjs (2.5.2) 48 | ffi (1.9.8) 49 | haml (4.0.6) 50 | tilt 51 | hike (1.2.3) 52 | hitimes (1.2.2) 53 | hooks (0.4.0) 54 | uber (~> 0.0.4) 55 | http (0.8.9) 56 | addressable (~> 2.3) 57 | http-cookie (~> 1.0) 58 | http-form_data (~> 1.0.1) 59 | http_parser.rb (~> 0.6.0) 60 | http-cookie (1.0.2) 61 | domain_name (~> 0.5) 62 | http-form_data (1.0.1) 63 | http_parser.rb (0.6.0) 64 | i18n (0.7.0) 65 | json (1.8.2) 66 | kramdown (1.7.0) 67 | listen (2.10.0) 68 | celluloid (~> 0.16.0) 69 | rb-fsevent (>= 0.9.3) 70 | rb-inotify (>= 0.9) 71 | middleman (3.3.12) 72 | coffee-script (~> 2.2) 73 | compass (>= 1.0.0, < 2.0.0) 74 | compass-import-once (= 1.0.5) 75 | execjs (~> 2.0) 76 | haml (>= 4.0.5) 77 | kramdown (~> 1.2) 78 | middleman-core (= 3.3.12) 79 | middleman-sprockets (>= 3.1.2) 80 | sass (>= 3.4.0, < 4.0) 81 | uglifier (~> 2.5) 82 | middleman-autoprefixer (2.4.3) 83 | autoprefixer-rails (~> 5.1.3) 84 | middleman-core (>= 3.3.3) 85 | middleman-blog (3.5.3) 86 | addressable (~> 2.3.5) 87 | middleman-core (~> 3.2) 88 | tzinfo (>= 0.3.0) 89 | middleman-core (3.3.12) 90 | activesupport (~> 4.1.0) 91 | bundler (~> 1.1) 92 | erubis 93 | hooks (~> 0.3) 94 | i18n (~> 0.7.0) 95 | listen (>= 2.7.9, < 3.0) 96 | padrino-helpers (~> 0.12.3) 97 | rack (>= 1.4.5, < 2.0) 98 | rack-test (~> 0.6.2) 99 | thor (>= 0.15.2, < 2.0) 100 | tilt (~> 1.4.1, < 2.0) 101 | middleman-deploy (1.0.0) 102 | middleman-core (>= 3.2) 103 | net-sftp 104 | ptools 105 | middleman-livereload (3.4.2) 106 | em-websocket (~> 0.5.1) 107 | middleman-core (>= 3.3) 108 | rack-livereload (~> 0.3.15) 109 | middleman-sprockets (3.4.2) 110 | middleman-core (>= 3.3) 111 | sprockets (~> 2.12.1) 112 | sprockets-helpers (~> 1.1.0) 113 | sprockets-sass (~> 1.3.0) 114 | minitest (5.6.1) 115 | multi_json (1.11.0) 116 | net-sftp (2.1.2) 117 | net-ssh (>= 2.6.5) 118 | net-ssh (2.9.2) 119 | padrino-helpers (0.12.5) 120 | i18n (~> 0.6, >= 0.6.7) 121 | padrino-support (= 0.12.5) 122 | tilt (~> 1.4.1) 123 | padrino-support (0.12.5) 124 | activesupport (>= 3.1) 125 | ptools (1.3.2) 126 | rack (1.6.1) 127 | rack-livereload (0.3.15) 128 | rack 129 | rack-test (0.6.3) 130 | rack (>= 1.0) 131 | rb-fsevent (0.9.4) 132 | rb-inotify (0.9.5) 133 | ffi (>= 0.5.0) 134 | redcarpet (3.2.3) 135 | sass (3.4.13) 136 | sprockets (2.12.3) 137 | hike (~> 1.2) 138 | multi_json (~> 1.0) 139 | rack (~> 1.0) 140 | tilt (~> 1.1, != 1.3.0) 141 | sprockets-helpers (1.1.0) 142 | sprockets (~> 2.0) 143 | sprockets-sass (1.3.1) 144 | sprockets (~> 2.0) 145 | tilt (~> 1.1) 146 | thor (0.19.1) 147 | thread_safe (0.3.5) 148 | tilt (1.4.1) 149 | timers (4.0.1) 150 | hitimes 151 | tzinfo (1.2.2) 152 | thread_safe (~> 0.1) 153 | uber (0.0.13) 154 | uglifier (2.7.1) 155 | execjs (>= 0.3.0) 156 | json (>= 1.8.0) 157 | unf (0.1.4) 158 | unf_ext 159 | unf_ext (0.0.7.1) 160 | 161 | PLATFORMS 162 | ruby 163 | 164 | DEPENDENCIES 165 | contentful_middleman 166 | middleman 167 | middleman-autoprefixer 168 | middleman-deploy 169 | middleman-livereload 170 | redcarpet 171 | --------------------------------------------------------------------------------