├── source ├── javascripts │ └── all.js ├── index.html.erb ├── images │ ├── prod │ │ └── middleman-logo.svg │ └── dev │ │ └── middleman-logo.svg ├── layouts │ └── layout.erb └── stylesheets │ ├── site.css.scss │ └── _normalize.scss ├── config.ru ├── Gemfile ├── package.json ├── .gitignore ├── Gulpfile.js ├── config.rb └── Gemfile.lock /source/javascripts/all.js: -------------------------------------------------------------------------------- 1 | //= require_tree . -------------------------------------------------------------------------------- /config.ru: -------------------------------------------------------------------------------- 1 | require 'middleman-core/load_paths' 2 | ::Middleman.setup_load_paths 3 | 4 | require 'middleman-core' 5 | require 'middleman-core/rack' 6 | 7 | require 'fileutils' 8 | FileUtils.mkdir('log') unless File.exist?('log') 9 | ::Middleman::Logger.singleton("log/#{ENV['RACK_ENV']}.log") 10 | 11 | app = ::Middleman::Application.new 12 | 13 | run ::Middleman::Rack.new(app).to_app 14 | -------------------------------------------------------------------------------- /source/index.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Welcome to Middleman 3 | --- 4 | 5 |
6 | 9 |

Middleman is Running

10 |

11 | <%= link_to "Read Documentation Online", "https://middlemanapp.com", target: "_blank" %> 12 |

13 |
14 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # If you do not have OpenSSL installed, change 2 | # the following line to use 'http://' 3 | source 'https://rubygems.org' 4 | 5 | # For faster file watcher updates on Windows: 6 | gem 'wdm', '~> 0.1.0', platforms: [:mswin, :mingw] 7 | 8 | # Windows does not come with time zone data 9 | gem 'tzinfo-data', platforms: [:mswin, :mingw, :jruby] 10 | 11 | # Middleman Gems 12 | gem 'middleman', '>= 4.0.0' 13 | gem 'middleman-livereload' 14 | 15 | gem 'sassc' 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mm4-ext-pipeline", 3 | "version": "0.1.0", 4 | "description": "An example of using Middleman v4's external pipeline", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1" 7 | }, 8 | "author": "Patrick Fulton", 9 | "license": "MIT", 10 | "devDependencies": { 11 | "gulp": "^3.9.0", 12 | "gulp-imagemin": "^2.4.0", 13 | "gulp-notify": "^2.2.0", 14 | "gulp-plumber": "^1.0.1" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /.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 | 20 | # Ignore node_modules 21 | /node_modules 22 | -------------------------------------------------------------------------------- /source/images/prod/middleman-logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/images/dev/middleman-logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'), 2 | imagemin = require('gulp-imagemin'), 3 | plumber = require('gulp-plumber'), 4 | notify = require('gulp-notify'); 5 | 6 | gulp.task('imgmin', function () { 7 | return gulp.src('source/images/dev/*') 8 | .pipe(imagemin({ 9 | progressive: true, 10 | svgoPlugins: [{removeViewBox: false}] 11 | })) 12 | .pipe(gulp.dest('source/images/prod')); 13 | }); 14 | 15 | gulp.task('watch', function() { 16 | gulp.watch('source/images/dev/*', ['imgmin']); 17 | }); 18 | 19 | gulp.task('default', ['imgmin', 'watch']); 20 | gulp.task('buildProd', ['imgmin']); 21 | -------------------------------------------------------------------------------- /source/layouts/layout.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | <%= current_page.data.title || "Middleman" %> 10 | 11 | 12 | 13 | <%= stylesheet_link_tag :site %> 14 | <%= javascript_include_tag :all %> 15 | 16 | 17 | 18 | <%= yield %> 19 | 20 | 21 | -------------------------------------------------------------------------------- /config.rb: -------------------------------------------------------------------------------- 1 | ### 2 | # Page options, layouts, aliases and proxies 3 | ### 4 | 5 | # Per-page layout changes: 6 | # 7 | # With no layout 8 | page '/*.xml', layout: false 9 | page '/*.json', layout: false 10 | page '/*.txt', layout: false 11 | 12 | # With alternative layout 13 | # page "/path/to/file.html", layout: :otherlayout 14 | 15 | # Proxy pages (http://middlemanapp.com/basics/dynamic-pages/) 16 | # proxy "/this-page-has-no-template.html", "/template-file.html", locals: { 17 | # which_fake_page: "Rendering a fake page with a local variable" } 18 | 19 | # General configuration 20 | 21 | config[:images_dir] = 'images/prod' 22 | 23 | activate :external_pipeline, 24 | name: :gulp, 25 | command: build? ? './node_modules/gulp/bin/gulp.js buildProd' : './node_modules/gulp/bin/gulp.js default', 26 | source: ".tmp/dist" 27 | 28 | # Reload the browser automatically whenever files change 29 | configure :development do 30 | activate :livereload 31 | end 32 | 33 | ### 34 | # Helpers 35 | ### 36 | 37 | # Methods defined in the helpers block are available in templates 38 | # helpers do 39 | # def some_helper 40 | # "Helping" 41 | # end 42 | # end 43 | 44 | # Build-specific configuration 45 | configure :build do 46 | # Minify CSS on build 47 | # activate :minify_css 48 | 49 | # Minify Javascript on build 50 | # activate :minify_javascript 51 | 52 | # Ignore the source images (pre-optimized) 53 | ignore 'images/dev/*' 54 | end 55 | -------------------------------------------------------------------------------- /source/stylesheets/site.css.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | @import "normalize"; 3 | 4 | body { 5 | background: #ECC561; 6 | text-align: center; 7 | font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif; 8 | font-size: 1em; 9 | } 10 | 11 | .logo img { 12 | height: 18.75em; 13 | margin-top: 6em; 14 | } 15 | 16 | h1 { 17 | color: rgba(0,0,0,0.5); 18 | font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif; 19 | font-size: 1.8em; 20 | font-weight: 400; 21 | margin: 0; 22 | } 23 | 24 | .doc { 25 | margin: 3em 0; 26 | font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif; 27 | font-size: 1.1em; 28 | font-weight: 300; 29 | 30 | a { 31 | border: 1px solid white; 32 | border-radius: 3px; 33 | padding: 0.75em 0.7em; 34 | color: white; 35 | text-decoration: none; 36 | transition: color 0.1s linear; 37 | &:hover { 38 | background: rgba(0,0,0,0.2); 39 | color: white; 40 | transition: all 0.15s linear; 41 | } 42 | } 43 | } 44 | 45 | .welcome { 46 | -webkit-animation-name: welcome; 47 | -webkit-animation-duration: .9s; 48 | } 49 | 50 | @-webkit-keyframes welcome { 51 | from { 52 | -webkit-transform: scale(0); 53 | opacity: 0; 54 | } 55 | 50% { 56 | -webkit-transform: scale(0); 57 | opacity: 0; 58 | } 59 | 82.5% { 60 | -webkit-transform: scale(1.03); 61 | -webkit-animation-timing-function: ease-out; 62 | opacity: 1; 63 | } 64 | to { 65 | -webkit-transform: scale(1); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | activesupport (4.2.5) 5 | i18n (~> 0.7) 6 | json (~> 1.7, >= 1.7.7) 7 | minitest (~> 5.1) 8 | thread_safe (~> 0.3, >= 0.3.4) 9 | tzinfo (~> 1.1) 10 | addressable (2.4.0) 11 | backports (3.6.7) 12 | capybara (2.5.0) 13 | mime-types (>= 1.16) 14 | nokogiri (>= 1.3.3) 15 | rack (>= 1.0.0) 16 | rack-test (>= 0.5.4) 17 | xpath (~> 2.0) 18 | coffee-script (2.4.1) 19 | coffee-script-source 20 | execjs 21 | coffee-script-source (1.10.0) 22 | compass-import-once (1.0.5) 23 | sass (>= 3.2, < 3.5) 24 | concurrent-ruby (0.9.2) 25 | contracts (0.12.0) 26 | em-websocket (0.5.1) 27 | eventmachine (>= 0.12.9) 28 | http_parser.rb (~> 0.6.0) 29 | erubis (2.7.0) 30 | eventmachine (1.0.8) 31 | execjs (2.6.0) 32 | fastimage (1.8.1) 33 | addressable (~> 2.3, >= 2.3.5) 34 | ffi (1.9.10) 35 | haml (4.0.7) 36 | tilt 37 | hamster (2.0.0) 38 | concurrent-ruby (~> 0.8) 39 | hashie (3.4.3) 40 | http_parser.rb (0.6.0) 41 | i18n (0.7.0) 42 | json (1.8.3) 43 | kramdown (1.9.0) 44 | listen (3.0.5) 45 | rb-fsevent (>= 0.9.3) 46 | rb-inotify (>= 0.9) 47 | middleman (4.0.0) 48 | coffee-script (~> 2.2) 49 | compass-import-once (= 1.0.5) 50 | haml (>= 4.0.5) 51 | kramdown (~> 1.2) 52 | middleman-cli (= 4.0.0) 53 | middleman-core (= 4.0.0) 54 | sass (>= 3.4.0, < 4.0) 55 | middleman-cli (4.0.0) 56 | thor (>= 0.17.0, < 2.0) 57 | middleman-core (4.0.0) 58 | activesupport (~> 4.2) 59 | addressable (~> 2.4.0) 60 | backports (~> 3.6) 61 | bundler (~> 1.1) 62 | capybara (~> 2.5.0) 63 | contracts (~> 0.12.0) 64 | erubis 65 | execjs (~> 2.0) 66 | fastimage (~> 1.8) 67 | hamster (~> 2.0) 68 | hashie (~> 3.4) 69 | i18n (~> 0.7.0) 70 | listen (~> 3.0) 71 | padrino-helpers (~> 0.13.0) 72 | rack (>= 1.4.5, < 2.0) 73 | sass (>= 3.4) 74 | tilt (~> 1.4.1) 75 | uglifier (~> 2.6) 76 | middleman-livereload (3.4.5) 77 | em-websocket (~> 0.5.1) 78 | middleman-core (>= 3.3) 79 | rack-livereload (~> 0.3.15) 80 | mime-types (3.0) 81 | mime-types-data (~> 3.2015) 82 | mime-types-data (3.2015.1120) 83 | mini_portile2 (2.0.0) 84 | minitest (5.8.3) 85 | nokogiri (1.6.7.1) 86 | mini_portile2 (~> 2.0.0.rc2) 87 | padrino-helpers (0.13.0) 88 | i18n (~> 0.6, >= 0.6.7) 89 | padrino-support (= 0.13.0) 90 | tilt (~> 1.4.1) 91 | padrino-support (0.13.0) 92 | activesupport (>= 3.1) 93 | rack (1.6.4) 94 | rack-livereload (0.3.16) 95 | rack 96 | rack-test (0.6.3) 97 | rack (>= 1.0) 98 | rb-fsevent (0.9.7) 99 | rb-inotify (0.9.5) 100 | ffi (>= 0.5.0) 101 | sass (3.4.20) 102 | sassc (1.8.2) 103 | bundler 104 | ffi (~> 1.9.6) 105 | sass (>= 3.3.0) 106 | thor (0.19.1) 107 | thread_safe (0.3.5) 108 | tilt (1.4.1) 109 | tzinfo (1.2.2) 110 | thread_safe (~> 0.1) 111 | uglifier (2.7.2) 112 | execjs (>= 0.3.0) 113 | json (>= 1.8.0) 114 | xpath (2.0.0) 115 | nokogiri (~> 1.3) 116 | 117 | PLATFORMS 118 | ruby 119 | 120 | DEPENDENCIES 121 | middleman (>= 4.0.0) 122 | middleman-livereload 123 | sassc 124 | tzinfo-data 125 | wdm (~> 0.1.0) 126 | -------------------------------------------------------------------------------- /source/stylesheets/_normalize.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v2.0.1 | MIT License | git.io/normalize */ 2 | 3 | /* ========================================================================== 4 | HTML5 display definitions 5 | ========================================================================== */ 6 | 7 | /* 8 | * Corrects `block` display not defined in IE 8/9. 9 | */ 10 | 11 | article, 12 | aside, 13 | details, 14 | figcaption, 15 | figure, 16 | footer, 17 | header, 18 | hgroup, 19 | nav, 20 | section, 21 | summary { 22 | display: block; 23 | } 24 | 25 | /* 26 | * Corrects `inline-block` display not defined in IE 8/9. 27 | */ 28 | 29 | audio, 30 | canvas, 31 | video { 32 | display: inline-block; 33 | } 34 | 35 | /* 36 | * Prevents modern browsers from displaying `audio` without controls. 37 | * Remove excess height in iOS 5 devices. 38 | */ 39 | 40 | audio:not([controls]) { 41 | display: none; 42 | height: 0; 43 | } 44 | 45 | /* 46 | * Addresses styling for `hidden` attribute not present in IE 8/9. 47 | */ 48 | 49 | [hidden] { 50 | display: none; 51 | } 52 | 53 | /* ========================================================================== 54 | Base 55 | ========================================================================== */ 56 | 57 | /* 58 | * 1. Sets default font family to sans-serif. 59 | * 2. Prevents iOS text size adjust after orientation change, without disabling 60 | * user zoom. 61 | */ 62 | 63 | html { 64 | font-family: sans-serif; /* 1 */ 65 | -webkit-text-size-adjust: 100%; /* 2 */ 66 | -ms-text-size-adjust: 100%; /* 2 */ 67 | } 68 | 69 | /* 70 | * Removes default margin. 71 | */ 72 | 73 | body { 74 | margin: 0; 75 | } 76 | 77 | /* ========================================================================== 78 | Links 79 | ========================================================================== */ 80 | 81 | /* 82 | * Addresses `outline` inconsistency between Chrome and other browsers. 83 | */ 84 | 85 | a:focus { 86 | outline: thin dotted; 87 | } 88 | 89 | /* 90 | * Improves readability when focused and also mouse hovered in all browsers. 91 | */ 92 | 93 | a:active, 94 | a:hover { 95 | outline: 0; 96 | } 97 | 98 | /* ========================================================================== 99 | Typography 100 | ========================================================================== */ 101 | 102 | /* 103 | * Addresses `h1` font sizes within `section` and `article` in Firefox 4+, 104 | * Safari 5, and Chrome. 105 | */ 106 | 107 | h1 { 108 | font-size: 2em; 109 | } 110 | 111 | /* 112 | * Addresses styling not present in IE 8/9, Safari 5, and Chrome. 113 | */ 114 | 115 | abbr[title] { 116 | border-bottom: 1px dotted; 117 | } 118 | 119 | /* 120 | * Addresses style set to `bolder` in Firefox 4+, Safari 5, and Chrome. 121 | */ 122 | 123 | b, 124 | strong { 125 | font-weight: bold; 126 | } 127 | 128 | /* 129 | * Addresses styling not present in Safari 5 and Chrome. 130 | */ 131 | 132 | dfn { 133 | font-style: italic; 134 | } 135 | 136 | /* 137 | * Addresses styling not present in IE 8/9. 138 | */ 139 | 140 | mark { 141 | background: #ff0; 142 | color: #000; 143 | } 144 | 145 | 146 | /* 147 | * Corrects font family set oddly in Safari 5 and Chrome. 148 | */ 149 | 150 | code, 151 | kbd, 152 | pre, 153 | samp { 154 | font-family: monospace, serif; 155 | font-size: 1em; 156 | } 157 | 158 | /* 159 | * Improves readability of pre-formatted text in all browsers. 160 | */ 161 | 162 | pre { 163 | white-space: pre; 164 | white-space: pre-wrap; 165 | word-wrap: break-word; 166 | } 167 | 168 | /* 169 | * Sets consistent quote types. 170 | */ 171 | 172 | q { 173 | quotes: "\201C" "\201D" "\2018" "\2019"; 174 | } 175 | 176 | /* 177 | * Addresses inconsistent and variable font size in all browsers. 178 | */ 179 | 180 | small { 181 | font-size: 80%; 182 | } 183 | 184 | /* 185 | * Prevents `sub` and `sup` affecting `line-height` in all browsers. 186 | */ 187 | 188 | sub, 189 | sup { 190 | font-size: 75%; 191 | line-height: 0; 192 | position: relative; 193 | vertical-align: baseline; 194 | } 195 | 196 | sup { 197 | top: -0.5em; 198 | } 199 | 200 | sub { 201 | bottom: -0.25em; 202 | } 203 | 204 | /* ========================================================================== 205 | Embedded content 206 | ========================================================================== */ 207 | 208 | /* 209 | * Removes border when inside `a` element in IE 8/9. 210 | */ 211 | 212 | img { 213 | border: 0; 214 | } 215 | 216 | /* 217 | * Corrects overflow displayed oddly in IE 9. 218 | */ 219 | 220 | svg:not(:root) { 221 | overflow: hidden; 222 | } 223 | 224 | /* ========================================================================== 225 | Figures 226 | ========================================================================== */ 227 | 228 | /* 229 | * Addresses margin not present in IE 8/9 and Safari 5. 230 | */ 231 | 232 | figure { 233 | margin: 0; 234 | } 235 | 236 | /* ========================================================================== 237 | Forms 238 | ========================================================================== */ 239 | 240 | /* 241 | * Define consistent border, margin, and padding. 242 | */ 243 | 244 | fieldset { 245 | border: 1px solid #c0c0c0; 246 | margin: 0 2px; 247 | padding: 0.35em 0.625em 0.75em; 248 | } 249 | 250 | /* 251 | * 1. Corrects color not being inherited in IE 8/9. 252 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 253 | */ 254 | 255 | legend { 256 | border: 0; /* 1 */ 257 | padding: 0; /* 2 */ 258 | } 259 | 260 | /* 261 | * 1. Corrects font family not being inherited in all browsers. 262 | * 2. Corrects font size not being inherited in all browsers. 263 | * 3. Addresses margins set differently in Firefox 4+, Safari 5, and Chrome 264 | */ 265 | 266 | button, 267 | input, 268 | select, 269 | textarea { 270 | font-family: inherit; /* 1 */ 271 | font-size: 100%; /* 2 */ 272 | margin: 0; /* 3 */ 273 | } 274 | 275 | /* 276 | * Addresses Firefox 4+ setting `line-height` on `input` using `!important` in 277 | * the UA stylesheet. 278 | */ 279 | 280 | button, 281 | input { 282 | line-height: normal; 283 | } 284 | 285 | /* 286 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 287 | * and `video` controls. 288 | * 2. Corrects inability to style clickable `input` types in iOS. 289 | * 3. Improves usability and consistency of cursor style between image-type 290 | * `input` and others. 291 | */ 292 | 293 | button, 294 | html input[type="button"], /* 1 */ 295 | input[type="reset"], 296 | input[type="submit"] { 297 | -webkit-appearance: button; /* 2 */ 298 | cursor: pointer; /* 3 */ 299 | } 300 | 301 | /* 302 | * Re-set default cursor for disabled elements. 303 | */ 304 | 305 | button[disabled], 306 | input[disabled] { 307 | cursor: default; 308 | } 309 | 310 | /* 311 | * 1. Addresses box sizing set to `content-box` in IE 8/9. 312 | * 2. Removes excess padding in IE 8/9. 313 | */ 314 | 315 | input[type="checkbox"], 316 | input[type="radio"] { 317 | box-sizing: border-box; /* 1 */ 318 | padding: 0; /* 2 */ 319 | } 320 | 321 | /* 322 | * 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome. 323 | * 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome 324 | * (include `-moz` to future-proof). 325 | */ 326 | 327 | input[type="search"] { 328 | -webkit-appearance: textfield; /* 1 */ 329 | -moz-box-sizing: content-box; 330 | -webkit-box-sizing: content-box; /* 2 */ 331 | box-sizing: content-box; 332 | } 333 | 334 | /* 335 | * Removes inner padding and search cancel button in Safari 5 and Chrome 336 | * on OS X. 337 | */ 338 | 339 | input[type="search"]::-webkit-search-cancel-button, 340 | input[type="search"]::-webkit-search-decoration { 341 | -webkit-appearance: none; 342 | } 343 | 344 | /* 345 | * Removes inner padding and border in Firefox 4+. 346 | */ 347 | 348 | button::-moz-focus-inner, 349 | input::-moz-focus-inner { 350 | border: 0; 351 | padding: 0; 352 | } 353 | 354 | /* 355 | * 1. Removes default vertical scrollbar in IE 8/9. 356 | * 2. Improves readability and alignment in all browsers. 357 | */ 358 | 359 | textarea { 360 | overflow: auto; /* 1 */ 361 | vertical-align: top; /* 2 */ 362 | } 363 | 364 | /* ========================================================================== 365 | Tables 366 | ========================================================================== */ 367 | 368 | /* 369 | * Remove most spacing between table cells. 370 | */ 371 | 372 | table { 373 | border-collapse: collapse; 374 | border-spacing: 0; 375 | } --------------------------------------------------------------------------------