├── .gitignore ├── Gruntfile.js ├── README.md ├── assets ├── adayofrest-boston.mp4 ├── fonts │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ └── fontawesome-webfont.woff2 ├── images │ ├── ador-512.png │ ├── ador-boston-logo 2.png │ ├── ador-boston-logo-color-2x.png │ ├── ador-boston-logo-color.png │ ├── ador-boston-logo.png │ ├── ador-icon.png │ ├── ador-og.png │ ├── ador-poststatus-12.jpg │ ├── ador-poststatus-41.jpg │ ├── bg-circles.png │ ├── dayofrest.mp4 │ ├── hm-logo-2x.png │ ├── hm-logo.png │ ├── icon-backbone-2x.png │ ├── icon-js-2x.png │ ├── icon-react-2x.png │ ├── icon-restapi-2x.png │ ├── icon-webpack-2x.png │ ├── icon-woo-2x.png │ ├── poster.jpg │ ├── poster.png │ ├── ps-logo-2x.png │ ├── ps-logo.png │ └── workshops-bg.jpg └── sass │ ├── _layout.scss │ ├── _settings.scss │ ├── _typography.scss │ ├── components │ ├── APIConsole.scss │ ├── Block--CallToAction.scss │ ├── BuyYourTicket.scss │ ├── Header.scss │ ├── HomePage.scss │ ├── Intro.scss │ ├── Loading.scss │ ├── Menu.scss │ ├── MenuOtherEvents.scss │ ├── MenuSocial.scss │ ├── OrganisedBy.scss │ ├── Page.scss │ ├── Post.scss │ ├── Posts.scss │ ├── Speaker.scss │ ├── Speakers.scss │ ├── Sponsors.scss │ ├── Table.scss │ ├── Testimonials.scss │ ├── Text.scss │ └── Workshop.scss │ ├── editor.scss │ ├── login.scss │ ├── style.scss │ └── vendor │ ├── bourbon │ ├── _bourbon-deprecated-upcoming.scss │ ├── _bourbon.scss │ ├── addons │ │ ├── _border-color.scss │ │ ├── _border-radius.scss │ │ ├── _border-style.scss │ │ ├── _border-width.scss │ │ ├── _buttons.scss │ │ ├── _clearfix.scss │ │ ├── _ellipsis.scss │ │ ├── _font-stacks.scss │ │ ├── _hide-text.scss │ │ ├── _margin.scss │ │ ├── _padding.scss │ │ ├── _position.scss │ │ ├── _prefixer.scss │ │ ├── _retina-image.scss │ │ ├── _size.scss │ │ ├── _text-inputs.scss │ │ ├── _timing-functions.scss │ │ ├── _triangle.scss │ │ └── _word-wrap.scss │ ├── css3 │ │ ├── _animation.scss │ │ ├── _appearance.scss │ │ ├── _backface-visibility.scss │ │ ├── _background-image.scss │ │ ├── _background.scss │ │ ├── _border-image.scss │ │ ├── _calc.scss │ │ ├── _columns.scss │ │ ├── _filter.scss │ │ ├── _flex-box.scss │ │ ├── _font-face.scss │ │ ├── _font-feature-settings.scss │ │ ├── _hidpi-media-query.scss │ │ ├── _hyphens.scss │ │ ├── _image-rendering.scss │ │ ├── _keyframes.scss │ │ ├── _linear-gradient.scss │ │ ├── _perspective.scss │ │ ├── _placeholder.scss │ │ ├── _radial-gradient.scss │ │ ├── _selection.scss │ │ ├── _text-decoration.scss │ │ ├── _transform.scss │ │ ├── _transition.scss │ │ └── _user-select.scss │ ├── functions │ │ ├── _assign-inputs.scss │ │ ├── _contains-falsy.scss │ │ ├── _contains.scss │ │ ├── _is-length.scss │ │ ├── _is-light.scss │ │ ├── _is-number.scss │ │ ├── _is-size.scss │ │ ├── _modular-scale.scss │ │ ├── _px-to-em.scss │ │ ├── _px-to-rem.scss │ │ ├── _shade.scss │ │ ├── _strip-units.scss │ │ ├── _tint.scss │ │ ├── _transition-property-name.scss │ │ └── _unpack.scss │ ├── helpers │ │ ├── _convert-units.scss │ │ ├── _directional-values.scss │ │ ├── _font-source-declaration.scss │ │ ├── _gradient-positions-parser.scss │ │ ├── _linear-angle-parser.scss │ │ ├── _linear-gradient-parser.scss │ │ ├── _linear-positions-parser.scss │ │ ├── _linear-side-corner-parser.scss │ │ ├── _radial-arg-parser.scss │ │ ├── _radial-gradient-parser.scss │ │ ├── _radial-positions-parser.scss │ │ ├── _render-gradients.scss │ │ ├── _shape-size-stripper.scss │ │ └── _str-to-num.scss │ └── settings │ │ ├── _asset-pipeline.scss │ │ ├── _prefixer.scss │ │ └── _px-to-em.scss │ ├── font-awesome │ ├── HELP-US-OUT.txt │ ├── css │ │ ├── font-awesome.css │ │ └── font-awesome.min.css │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ ├── less │ │ ├── animated.less │ │ ├── bordered-pulled.less │ │ ├── core.less │ │ ├── fixed-width.less │ │ ├── font-awesome.less │ │ ├── icons.less │ │ ├── larger.less │ │ ├── list.less │ │ ├── mixins.less │ │ ├── path.less │ │ ├── rotated-flipped.less │ │ ├── stacked.less │ │ └── variables.less │ └── scss │ │ ├── _animated.scss │ │ ├── _bordered-pulled.scss │ │ ├── _core.scss │ │ ├── _fixed-width.scss │ │ ├── _icons.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _mixins.scss │ │ ├── _path.scss │ │ ├── _rotated-flipped.scss │ │ ├── _stacked.scss │ │ ├── _variables.scss │ │ └── font-awesome.scss │ └── neat │ ├── _neat-helpers.scss │ ├── _neat.scss │ ├── functions │ ├── _new-breakpoint.scss │ └── _private.scss │ ├── grid │ ├── _box-sizing.scss │ ├── _direction-context.scss │ ├── _display-context.scss │ ├── _fill-parent.scss │ ├── _media.scss │ ├── _omega.scss │ ├── _outer-container.scss │ ├── _pad.scss │ ├── _private.scss │ ├── _row.scss │ ├── _shift.scss │ ├── _span-columns.scss │ ├── _to-deprecate.scss │ └── _visual-grid.scss │ └── settings │ ├── _disable-warnings.scss │ ├── _grid.scss │ └── _visual-grid.scss ├── functions.php ├── inc ├── autoloader.php ├── class-opengraph.php ├── menu-api.php └── page_builder_modules │ ├── class-cta-block.php │ ├── class-intro.php │ ├── class-map.php │ ├── class-organised-by.php │ ├── class-speakers-overview.php │ ├── class-sponsors-block.php │ ├── class-sponsors-detail.php │ ├── class-testimonial-slider.php │ ├── class-tickets.php │ ├── class-twitter-timeline.php │ └── class-workshops.php ├── index.php ├── js ├── actions.js ├── api.js ├── components │ ├── APIConsole.jsx │ ├── App.jsx │ ├── Button.jsx │ ├── BuyTicketsButton.jsx │ ├── Menu.jsx │ ├── MenuItem.jsx │ ├── Post.jsx │ ├── Preview.jsx │ ├── RouteCSSTransitionGroup.jsx │ ├── modules │ │ ├── Blockquote.jsx │ │ ├── CallToActionBlock.jsx │ │ ├── Header.jsx │ │ ├── Image.jsx │ │ ├── Intro.jsx │ │ ├── Loading.jsx │ │ ├── Map.jsx │ │ ├── OrganisedBy.jsx │ │ ├── SpeakersOverview.jsx │ │ ├── SponsorsBlock.jsx │ │ ├── SponsorsDetail.jsx │ │ ├── TestimonialSlider.jsx │ │ ├── Text.jsx │ │ ├── Tickets.jsx │ │ ├── TwitterTimeline.jsx │ │ └── Workshops.jsx │ └── pages │ │ ├── BuyTickets.jsx │ │ ├── NotFound.jsx │ │ ├── Page.jsx │ │ ├── Post.jsx │ │ ├── Posts.jsx │ │ ├── Speaker.jsx │ │ ├── Speakers.jsx │ │ ├── Workshop.jsx │ │ └── Workshops.jsx ├── index.js └── reducers.js ├── package.json ├── screenshot.png ├── style.css └── webpack.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/* 3 | .DS_Store 4 | .idea 5 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | var webpack = require( 'webpack' ); 2 | var webpackConfig = require( './webpack.config' ); 3 | 4 | module.exports = function ( grunt ) { 5 | 6 | grunt.initConfig( { 7 | 8 | sass: { 9 | dist: { 10 | options: { 11 | outputStyle: 'expanded' 12 | }, 13 | files: { 14 | 'dist/main.css': 'assets/sass/style.scss', 15 | 'dist/editor.css': 'assets/sass/editor.scss', 16 | 'dist/login.css': 'assets/sass/login.scss' 17 | } 18 | } 19 | }, 20 | 21 | webpack: { 22 | options: webpackConfig, 23 | build: { 24 | plugins: webpackConfig.plugins.concat( 25 | new webpack.optimize.DedupePlugin(), 26 | new webpack.optimize.UglifyJsPlugin() 27 | ), 28 | output: { 29 | path: "dist/" 30 | } 31 | }, 32 | "build-dev": { 33 | devtool: "sourcemap", 34 | debug: true 35 | }, 36 | "watch-dev": { 37 | devtool: "sourcemap", 38 | debug: true, 39 | watch: true, 40 | keepalive: true 41 | } 42 | }, 43 | 44 | watch: { 45 | sass: { 46 | files: ['assets/sass/**/*.scss'], 47 | tasks: ['sass'] 48 | } 49 | } 50 | } ); 51 | 52 | grunt.loadNpmTasks( 'grunt-sass' ); 53 | grunt.loadNpmTasks( 'grunt-webpack' ); 54 | grunt.loadNpmTasks( 'grunt-contrib-watch' ); 55 | 56 | grunt.registerTask( 'default', ['sass', 'watch', 'webpack:watch-dev'] ); 57 | grunt.registerTask( 'build', ['sass', 'webpack:build'] ); 58 | } 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Feeling RESTful Theme 2 | 3 | **Version 2** 4 | 5 | A WordPress React JS theme updated with a design for [A Day of Rest Boston 2017](https://adayofrest.hm/boston-2017) 6 | 7 | --- 8 | Purpose-built theme for the A Day of Rest Boston conference. 9 | 10 | This is an update of the [FeelingRestful v1 theme](https://github.com/humanmade/feelingrestful-theme/releases/tag/1.1.10). 11 | 12 | ## Differences between v1 and v2 13 | 14 | There are some differences between the two. 15 | 16 | Please note that [version 1 has been release tagged]((https://github.com/humanmade/feelingrestful-theme/releases/tag/1.1.10)). 17 | 18 | ### Changes 19 | - Added dynamic menu capabilities. Works with WordPress Menu settings. Has a built in menu walker in React. 20 | - Updated design modifications: ADOR Boston website which was a design change. 21 | 22 | This theme has been visually redesigned for ADOR Boston. Therefore, there are CSS and HTML changes to enable that. 23 | 24 | - Removal of Preview_Postmeta 25 | - Bug fixes 26 | 27 | 28 | ## Requirements 29 | 30 | ### Required homepage setup: 31 | 32 | A page with the slug "home-page" is used for the homepage. Please create this page if using a fresh installation. 33 | 34 | ### Required Plugins 35 | - [WordPress version 4.7+](https://wordpress.org/download/) or [WordPress REST API](https://wordpress.org/plugins/rest-api/) 36 | - [Modular Page Builder](https://github.com/humanmade/modular-page-builder) 37 | - [WP-API Menus](https://en-gb.wordpress.org/plugins/wp-api-menus/) 38 | 39 | ### Added support for 40 | - [Testimonials by WooThemes](https://wordpress.org/plugins/testimonials-by-woothemes/) 41 | 42 | #### Building 43 | 44 | ``` 45 | npm install 46 | grunt build 47 | ``` 48 | 49 | #### Developing 50 | 51 | ``` 52 | npm install 53 | grunt webpack:watch-dev # build javascript 54 | grunt watch sass # compile sass (watch does not trigger LiveReload on sass changes) 55 | ``` 56 | -------------------------------------------------------------------------------- /assets/adayofrest-boston.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/adayofrest-boston.mp4 -------------------------------------------------------------------------------- /assets/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /assets/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /assets/images/ador-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/ador-512.png -------------------------------------------------------------------------------- /assets/images/ador-boston-logo 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/ador-boston-logo 2.png -------------------------------------------------------------------------------- /assets/images/ador-boston-logo-color-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/ador-boston-logo-color-2x.png -------------------------------------------------------------------------------- /assets/images/ador-boston-logo-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/ador-boston-logo-color.png -------------------------------------------------------------------------------- /assets/images/ador-boston-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/ador-boston-logo.png -------------------------------------------------------------------------------- /assets/images/ador-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/ador-icon.png -------------------------------------------------------------------------------- /assets/images/ador-og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/ador-og.png -------------------------------------------------------------------------------- /assets/images/ador-poststatus-12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/ador-poststatus-12.jpg -------------------------------------------------------------------------------- /assets/images/ador-poststatus-41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/ador-poststatus-41.jpg -------------------------------------------------------------------------------- /assets/images/bg-circles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/bg-circles.png -------------------------------------------------------------------------------- /assets/images/dayofrest.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/dayofrest.mp4 -------------------------------------------------------------------------------- /assets/images/hm-logo-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/hm-logo-2x.png -------------------------------------------------------------------------------- /assets/images/hm-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/hm-logo.png -------------------------------------------------------------------------------- /assets/images/icon-backbone-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/icon-backbone-2x.png -------------------------------------------------------------------------------- /assets/images/icon-js-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/icon-js-2x.png -------------------------------------------------------------------------------- /assets/images/icon-react-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/icon-react-2x.png -------------------------------------------------------------------------------- /assets/images/icon-restapi-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/icon-restapi-2x.png -------------------------------------------------------------------------------- /assets/images/icon-webpack-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/icon-webpack-2x.png -------------------------------------------------------------------------------- /assets/images/icon-woo-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/icon-woo-2x.png -------------------------------------------------------------------------------- /assets/images/poster.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/poster.jpg -------------------------------------------------------------------------------- /assets/images/poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/poster.png -------------------------------------------------------------------------------- /assets/images/ps-logo-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/ps-logo-2x.png -------------------------------------------------------------------------------- /assets/images/ps-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/ps-logo.png -------------------------------------------------------------------------------- /assets/images/workshops-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/images/workshops-bg.jpg -------------------------------------------------------------------------------- /assets/sass/_layout.scss: -------------------------------------------------------------------------------- 1 | @mixin content-column { 2 | @include span-columns(8); 3 | @include shift(2); 4 | 5 | @media #{$phablet_mq} { 6 | @include span-columns(10); 7 | @include shift(1); 8 | } 9 | 10 | @media #{$mobile_mq} { 11 | width: auto; 12 | float: none; 13 | margin-left: 15px; 14 | margin-right: 15px !important; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /assets/sass/_typography.scss: -------------------------------------------------------------------------------- 1 | /** Headers **/ 2 | h1, h2, h3, h4, h5, h6 { 3 | font-weight: normal; 4 | color: $primary; 5 | font-family: $f_sans; 6 | strong { 7 | color: inherit; 8 | } 9 | a { 10 | &:focus, 11 | &:hover { 12 | text-decoration: none; 13 | color: rgba(38, 53, 70, 0.7); 14 | } 15 | } 16 | 17 | } 18 | 19 | h1, h2, h3, .headline { 20 | line-height: 1.2; 21 | text-transform: uppercase; 22 | } 23 | 24 | h4, h5, h6 { 25 | line-height: 1.1; 26 | color: $ador-d-blue; 27 | } 28 | 29 | h1 { 30 | font-size: $h1-font-size; 31 | } 32 | 33 | h2 { 34 | font-size: $h2-font-size; 35 | } 36 | 37 | h3 { 38 | font-size: $h3-font-size; 39 | } 40 | 41 | h4 { 42 | font-size: $h4-font-size; 43 | } 44 | 45 | h5 { 46 | font-size: $h5-font-size; 47 | } 48 | 49 | h6 { 50 | font-size: $h6-font-size; 51 | } 52 | 53 | /** Text **/ 54 | b, strong { 55 | font-weight: bold; 56 | } 57 | 58 | a { 59 | text-decoration: none; 60 | color: $primary; 61 | &:focus, 62 | &:hover { 63 | text-decoration: underline; 64 | } 65 | } 66 | 67 | i, strong, b, p { 68 | color: $ador-black; 69 | } 70 | 71 | /** Text Elements **/ 72 | .Button { 73 | display: inline-block; 74 | font-family: $f_sans; 75 | font-size: 16px; 76 | padding: 16px 48px; 77 | text-transform: uppercase; 78 | background-color: $primary; 79 | color: white; 80 | border: 1px solid transparent; 81 | @include transition(all, 0.4s, ease-in-out); 82 | 83 | @media #{$mobile_mq} { 84 | padding: 16px; 85 | } 86 | 87 | &:hover { 88 | background-color: $sec; 89 | } 90 | 91 | &.ghost-button { 92 | background-color: transparent; 93 | border: 1px solid white; 94 | color: white; 95 | 96 | .fa { 97 | font-size: 20px; 98 | margin-right: 4px; 99 | position: relative; 100 | bottom: -2px; 101 | } 102 | 103 | &:hover { 104 | background-color: $primary; 105 | } 106 | } 107 | 108 | &.ghost-button--dark { 109 | border-color: $ador-black; 110 | color: $ador-black; 111 | 112 | &:hover { 113 | background-color: $ador-grey; 114 | } 115 | } 116 | } 117 | 118 | .ghost-button + .ghost-button { 119 | margin-left: 12px; 120 | } 121 | 122 | .share-buttons { 123 | padding-top: 24px; 124 | 125 | .Button.ghost-button { 126 | padding: 8px 15px; 127 | font-size: 14px; 128 | } 129 | } 130 | 131 | ul, ol { 132 | margin: 0; 133 | list-style: none; 134 | } 135 | 136 | .Secondary-Link { 137 | font-size: 16px; 138 | font-family: $f-body; 139 | color: $ador-black; 140 | display: block; 141 | font-style: italic; 142 | padding-top: 24px; 143 | 144 | &:after { 145 | content: "\f061"; 146 | font-family: "FontAwesome"; 147 | color: $primary; 148 | display: inline; 149 | padding-left: 12px; 150 | font-weight: normal; 151 | } 152 | } 153 | 154 | @mixin ador-default-flex() { 155 | @include display(flex); 156 | @include align-items(center); 157 | @include justify-content(center); 158 | @include flex-flow(row wrap); 159 | } 160 | 161 | pre { 162 | white-space: pre-wrap; /* css-3 */ 163 | white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ 164 | white-space: -pre-wrap; /* Opera 4-6 */ 165 | white-space: -o-pre-wrap; /* Opera 7 */ 166 | word-wrap: break-word; 167 | } 168 | -------------------------------------------------------------------------------- /assets/sass/components/APIConsole.scss: -------------------------------------------------------------------------------- 1 | .APIConsole { 2 | @include display(flex); 3 | position: fixed; 4 | bottom: 0; 5 | left: 0; 6 | right: 0; 7 | background: fade-out(lighten($sec, 2%), 0.05); 8 | color: rgba(255, 255, 255, 0.7); 9 | line-height: 50px; 10 | height: 50px; 11 | font-size: 14px; 12 | padding: 0; 13 | font-family: $f_mono; 14 | letter-spacing: -0.1rem; 15 | z-index: 110; 16 | @include transition(all 100ms linear); 17 | .api-cta { 18 | @include flex(0 0 200px); 19 | text-align: center; 20 | background: white; 21 | color: $sec; 22 | cursor: pointer; 23 | &:hover { 24 | color: lighten($sec, 10%); 25 | } 26 | } 27 | .api-output { 28 | @include flex(1); 29 | padding: 0 10px; 30 | text-overflow: clip; 31 | white-space: nowrap; 32 | overflow: hidden; 33 | } 34 | a { 35 | color: white; 36 | font-weight: 600; 37 | } 38 | } 39 | 40 | .api-display-wrap { 41 | position: fixed; 42 | top: 50px; 43 | left: 0; 44 | right: 0; 45 | bottom: 50px; 46 | background: #22303f; 47 | color: white; 48 | z-index: 10000; 49 | overflow-y: scroll; 50 | overflow-wrap: break-word; 51 | overflow-x: hidden; 52 | } 53 | 54 | .api-display { 55 | list-style: none; 56 | padding: 20px 20px; 57 | 58 | p, 59 | h2, 60 | strong { 61 | color: white; 62 | } 63 | 64 | pre { 65 | background: #22303f; 66 | text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); 67 | color: white; 68 | font-family: $f_mono; 69 | font-size: 14px; 70 | line-height: 1.4; 71 | letter-spacing: -0.1rem; 72 | padding: 10px; 73 | overflow: hidden; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /assets/sass/components/Block--CallToAction.scss: -------------------------------------------------------------------------------- 1 | .Block--CallToAction { 2 | @include ador-background-image('../assets/images/ador-poststatus-41.jpg'); 3 | 4 | color: white; 5 | 6 | .text-wrap { 7 | padding: 0 48px 48px; 8 | } 9 | .text-wrap--no-subheading { 10 | padding-top: 0; 11 | } 12 | 13 | h2, p { 14 | color: inherit; 15 | } 16 | 17 | h2 { 18 | text-transform: uppercase; 19 | margin: 0; 20 | } 21 | 22 | p { 23 | margin: 24px 0 0 0; 24 | } 25 | 26 | img + .text-wrap--no-subheading { 27 | padding-top: 24px; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /assets/sass/components/BuyYourTicket.scss: -------------------------------------------------------------------------------- 1 | .BuyYourTicket { 2 | background: $primary url('../assets/images/bg-circles.png'); 3 | background-size: cover; 4 | background-position: 60% 50%; 5 | color: white; 6 | h2, 7 | p { 8 | color: inherit; 9 | } 10 | 11 | h2 { 12 | text-transform: uppercase; 13 | } 14 | 15 | p { 16 | padding-bottom: 24px; 17 | max-width: 80%; 18 | text-align: center; 19 | margin: 0 auto; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /assets/sass/components/Header.scss: -------------------------------------------------------------------------------- 1 | .Header { 2 | @include outer-container(); 3 | .headline { 4 | line-height: 24px; 5 | } 6 | .inner { 7 | @include content-column; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /assets/sass/components/HomePage.scss: -------------------------------------------------------------------------------- 1 | .Page.home-page { 2 | padding-top: 0; 3 | background-color: white; 4 | .inner { 5 | text-align: center; 6 | } 7 | .Page--header { 8 | display: none; 9 | } 10 | .Page--content { 11 | padding: 0; 12 | } 13 | .Menu .inner { 14 | padding: 0; 15 | } 16 | .Intro { 17 | img { 18 | max-height: 170px; 19 | } 20 | } 21 | .Speakers .inner { 22 | padding-bottom: 24px; 23 | 24 | p { 25 | margin-top: 0; 26 | margin-bottom: 0; 27 | } 28 | } 29 | .Sponsors { 30 | h2 { 31 | padding-bottom: 0; 32 | } 33 | .Button { 34 | margin-top: 24px; 35 | } 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /assets/sass/components/Intro.scss: -------------------------------------------------------------------------------- 1 | .Intro { 2 | text-align: center; 3 | padding: 142px 24px; 4 | position: relative; 5 | overflow: hidden; 6 | 7 | @media #{$mobile_mq}{ 8 | padding: 71px 24px; 9 | } 10 | 11 | #video { 12 | position: absolute; 13 | top: 50%; 14 | left: 50%; 15 | min-width: 100%; 16 | min-height: 100%; 17 | width: auto; 18 | height: auto; 19 | z-index: 1; 20 | -webkit-transform: translateX(-50%) translateY(-50%); 21 | transform: translateX(-50%) translateY(-50%); 22 | background-size: cover; 23 | } 24 | 25 | &:after { 26 | content: ' '; 27 | display: block; 28 | position: absolute; 29 | top: 0; 30 | bottom: 0; 31 | left: 0; 32 | right: 0; 33 | background-color: fade-out(darken(saturate($sec, 6%), 10%), 0.15); 34 | z-index: 2; 35 | } 36 | 37 | .inner > * { 38 | z-index: 3; 39 | position: relative; 40 | } 41 | 42 | h2 { 43 | text-transform: none; 44 | padding: 24px 0; 45 | color: white; 46 | line-height: 1.5em; 47 | margin-bottom: 0; 48 | } 49 | 50 | .subtag { 51 | font-family: Merriweather, serif; 52 | font-size: rem(24); 53 | } 54 | 55 | .date { 56 | font-family: Merriweather, serif; 57 | font-size: rem(20); 58 | line-height: 1.2em; 59 | margin-top: rem(24); 60 | } 61 | 62 | strong { 63 | color: white; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /assets/sass/components/Loading.scss: -------------------------------------------------------------------------------- 1 | .Loading { 2 | @include ador-default-flex(); 3 | text-align: center; 4 | min-height: 420px; 5 | background-color: $primary; 6 | 7 | .spinner { 8 | display: block; 9 | } 10 | } 11 | 12 | .spinner { 13 | width: 40px; 14 | height: 40px; 15 | background-color: white; 16 | border-radius: 100%; 17 | animation: sk-scaleout 1.0s infinite ease-in-out; 18 | } 19 | 20 | @keyframes sk-scaleout { 21 | 0% { 22 | transform: scale(0); 23 | } 24 | 100% { 25 | transform: scale(2.0); 26 | opacity: 0; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /assets/sass/components/MenuOtherEvents.scss: -------------------------------------------------------------------------------- 1 | .menu--other-events { 2 | text-align: left; 3 | height: 50px; 4 | line-height: 1em; 5 | float: left; 6 | color: white; 7 | font-family: $f_sans; 8 | text-transform: uppercase; 9 | letter-spacing: 0.05rem; 10 | 11 | @media #{$tablet_mq} { 12 | position: relative; 13 | left: 50px; 14 | width: 270px !important; 15 | } 16 | 17 | @media #{$mobile_mq} { 18 | width: 100%; 19 | right: 0; 20 | width: 270px; 21 | } 22 | .location { 23 | line-height: 1em; 24 | font-weight: bold; 25 | } 26 | .date, 27 | .past-events { 28 | display: block; 29 | line-height: 1em; 30 | font-size: 12px; 31 | } 32 | .past-events li { 33 | border-bottom: none; 34 | } 35 | .past-events--label { 36 | padding: 12px 12px 0 12px; 37 | } 38 | &.expanded { 39 | li { 40 | display: block; 41 | } 42 | li.current a:after { 43 | content: "\f106"; 44 | } 45 | } 46 | a { 47 | text-decoration: none; 48 | color: white; 49 | text-align: center; 50 | display: block; 51 | white-space: nowrap; 52 | padding: 0 12px; 53 | &:hover { 54 | background: $primary; 55 | } 56 | } 57 | 58 | &:hover li { 59 | display: block; 60 | } 61 | ul { 62 | margin: 0; 63 | padding: 0; 64 | li { 65 | display: none; 66 | list-style: none; 67 | line-height: 1em; 68 | background: lighten($ador-d-blue, 5%); 69 | a { 70 | height: 50px; 71 | text-align: inherit; 72 | padding: 12px; 73 | 74 | &:hover, 75 | &:active, 76 | &:focus { 77 | background: $ador-orange; 78 | } 79 | } 80 | } 81 | li:first-child { 82 | display: block; 83 | background: lighten($ador-d-blue, 5%); 84 | a { 85 | padding-right: 36px; 86 | position: relative; 87 | &:after { 88 | display: block; 89 | width: 16px; 90 | height: 50px; 91 | font-size: 16px; 92 | line-height: 50px; 93 | content: "\f107"; 94 | position: absolute; 95 | font-family: "FontAwesome"; 96 | top: 0; 97 | right: 8px; 98 | @media #{$mobile_mq} { 99 | display: none; 100 | } 101 | } 102 | } 103 | } 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /assets/sass/components/MenuSocial.scss: -------------------------------------------------------------------------------- 1 | .Menu .menu-social { 2 | @include display(flex); 3 | @include justify-content(center); 4 | @include align-items(center); 5 | padding: 0; 6 | 7 | @media #{$tablet_mq} { 8 | display: none; 9 | } 10 | 11 | li { 12 | list-style: none; 13 | display: inline; 14 | a { 15 | padding: 0 6px; 16 | margin-top: 12px; 17 | position: relative; 18 | } 19 | } 20 | 21 | .twitter, 22 | .facebook, 23 | .social-link { 24 | &:after { 25 | display: block; 26 | background-color: white; 27 | height: 26px; 28 | width: 26px; 29 | color: $ador-d-blue; 30 | border-radius: 50%; 31 | line-height: 1.6; 32 | font-size: 18px; 33 | content: "\f099"; 34 | font-family: "FontAwesome"; 35 | font-weight: normal; 36 | } 37 | &:hover { 38 | background-color: transparent; 39 | &:after { 40 | color: white; 41 | } 42 | } 43 | } 44 | .twitter { 45 | &:hover { 46 | &:after { 47 | background-color: #1DA1F2; 48 | } 49 | } 50 | } 51 | .facebook { 52 | &:hover { 53 | &:after { 54 | background-color: #3B5998; 55 | } 56 | } 57 | } 58 | .social-link { 59 | 60 | &:hover { 61 | &:after { 62 | background-color: #ED5A24; 63 | } 64 | } 65 | } 66 | 67 | .facebook { 68 | &:after { 69 | content: "\f09a"; 70 | } 71 | } 72 | 73 | .envelope { 74 | &:after { 75 | content: "\f0e0"; 76 | font-size: 15px; 77 | line-height: 1.7; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /assets/sass/components/OrganisedBy.scss: -------------------------------------------------------------------------------- 1 | .OrganisedBy { 2 | background: white; 3 | .inner { 4 | padding-bottom: 48px; 5 | } 6 | 7 | h2 { 8 | text-transform: uppercase; 9 | } 10 | ul { 11 | @include ador-default-flex(); 12 | padding-left: 0; 13 | li { 14 | padding: 24px; 15 | } 16 | } 17 | 18 | a { 19 | display: inline; 20 | 21 | @media #{$smallscreen_mq} { 22 | display: block; 23 | margin-left: 1rem; 24 | margin-right: 1rem; 25 | } 26 | 27 | @media #{$larger_than_mobile_mq} { 28 | img { 29 | max-width: 370px; 30 | max-height: 75px; 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /assets/sass/components/Page.scss: -------------------------------------------------------------------------------- 1 | .Page { 2 | background-color: $ador-l-grey; 3 | color: $ador-black; 4 | > * { 5 | position: relative; 6 | z-index: 4; 7 | } 8 | .Page--header { 9 | text-align: center; 10 | .site-logo { 11 | background-color: white; 12 | display: block; 13 | padding: rem(49) 0; 14 | 15 | &:before { 16 | background: url('../assets/images/ador-boston-logo-color-2x.png') center center no-repeat; 17 | display: block; 18 | content: ''; 19 | height: 130px; 20 | background-repeat: no-repeat; 21 | background-size: contain; 22 | background-position: center; 23 | } 24 | } 25 | h1 { 26 | padding: rem(98) 0 0; 27 | margin: 0; 28 | } 29 | } 30 | } 31 | 32 | .Page--content { 33 | padding: 0; 34 | margin-bottom: 50px; 35 | min-height: 100%; 36 | figure { 37 | text-align: center; 38 | } 39 | } 40 | 41 | /** Components **/ 42 | .Page { 43 | .BuyYourTicket, 44 | .Block--CallToAction, 45 | .Intro, 46 | .Testimonials, 47 | .OrganisedBy, 48 | .Speakers, 49 | .Sponsors, 50 | .Workshop { 51 | .inner { 52 | text-align: center; 53 | padding: 0; 54 | } 55 | } 56 | } 57 | 58 | .page-content { 59 | margin-top: 50px; 60 | } 61 | -------------------------------------------------------------------------------- /assets/sass/components/Post.scss: -------------------------------------------------------------------------------- 1 | .Post { 2 | margin: 0 auto; 3 | @include outer-container(); 4 | * { 5 | text-align: left; 6 | } 7 | .inner { 8 | padding: 0; 9 | @include content-column; 10 | } 11 | .headline { 12 | margin-bottom: 2rem; 13 | text-align: left; 14 | h1 { 15 | line-height: 1.3; 16 | margin: 0 0 1rem 0; 17 | } 18 | } 19 | .date { 20 | color: $ador-black; 21 | text-transform: none; 22 | } 23 | img { 24 | margin: 15px auto; 25 | } 26 | .wp-caption img { 27 | margin-bottom: 0; 28 | } 29 | .alignnone { 30 | margin-left: 0; 31 | margin-right: 0; 32 | } 33 | [class^="wp-image"] { 34 | display: block; 35 | } 36 | ul { 37 | list-style: circle; 38 | } 39 | } 40 | 41 | -------------------------------------------------------------------------------- /assets/sass/components/Posts.scss: -------------------------------------------------------------------------------- 1 | .Posts { 2 | margin: 0 auto; 3 | padding: 0; 4 | list-style: none; 5 | > li { 6 | padding: rem(48) 0; 7 | &:nth-child(odd) { 8 | background-color: $ador-l-grey; 9 | } 10 | &:nth-child(even) { 11 | background-color: white; 12 | } 13 | } 14 | .Title { 15 | text-align: center; 16 | margin: rem(96) 0 rem(48); 17 | } 18 | .Page--content { 19 | background-color: $ador-l-grey; 20 | } 21 | } 22 | 23 | .Posts li:first-child .inner { 24 | padding-top: 0; 25 | h1 { 26 | margin-top: 0; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /assets/sass/components/Speaker.scss: -------------------------------------------------------------------------------- 1 | .SpeakerPage .Page--header h1, 2 | .Speaker { 3 | @include outer-container; 4 | .inner { 5 | @include content-column; 6 | } 7 | 8 | h2 { 9 | font-size: rem(16); 10 | font-weight: bold; 11 | } 12 | 13 | img { 14 | @media #{$smallscreen_mq} { 15 | &.alignleft, 16 | &.alignright { 17 | float: none; 18 | display: block; 19 | margin: 1rem 0 1rem; 20 | } 21 | } 22 | } 23 | } 24 | 25 | .Speaker { 26 | @media #{$mobile_mq} { 27 | padding: 0; 28 | } 29 | } 30 | 31 | .SpeakerPage { 32 | h1 { 33 | text-align: left; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /assets/sass/components/Speakers.scss: -------------------------------------------------------------------------------- 1 | .Speakers { 2 | background: white; 3 | .inner { 4 | padding-bottom: 48px; 5 | text-align: center; 6 | } 7 | 8 | p { 9 | @include content-column; 10 | @include omega(); 11 | line-height: 24px; 12 | } 13 | } 14 | 15 | .Page--content { 16 | > section.Speakers { 17 | padding: 0; 18 | } 19 | } 20 | 21 | .SpeakerList { 22 | @include align-items(center); 23 | @include display(flex); 24 | @include flex-flow(row wrap); 25 | @include justify-content(center); 26 | padding: 0; 27 | text-align: center; 28 | 29 | .speaker { 30 | background: $ador-d-blue; 31 | font-family: $f_sans; 32 | font-size: 24px; 33 | font-weight: bold; 34 | min-height: 210px; 35 | text-transform: uppercase; 36 | width: 20%; 37 | 38 | @media #{$tablet_mq} { 39 | width: 50%; 40 | } 41 | 42 | @media #{$mobile_mq} { 43 | width: 100%; 44 | } 45 | 46 | @include ador-background-image('assets/images/ador-poststatus-41.jpg'); 47 | 48 | & + .speaker { 49 | @include ador-background-image('assets/images/ador-poststatus-12.jpg'); 50 | } 51 | 52 | &:hover { 53 | text-decoration: none; 54 | } 55 | 56 | .speaker_hover { 57 | @include display(flex); 58 | @include align-items(flex-end); 59 | @include justify-content(center); 60 | height: 100%; 61 | min-height: 210px; // same as min-height of .speaker 62 | margin: 0; 63 | 64 | &:hover{ 65 | background-color: rgba(34, 48, 63, 0.6); 66 | } 67 | } 68 | 69 | .textcontainer { 70 | text-align: center; 71 | margin: 0; 72 | padding-bottom: 1rem; 73 | width: 100%; 74 | } 75 | 76 | span { 77 | display: block; 78 | width: 100%; 79 | color: $ador-orange; 80 | } 81 | 82 | .company { 83 | display: block; 84 | color: white; 85 | font-size: 16px; 86 | font-weight: bold; 87 | text-shadow: 0 0 2px #262626; 88 | } 89 | } 90 | } 91 | 92 | .loading-wrap.speakers { 93 | @include ador-default-flex(); 94 | text-align: center; 95 | min-height: 420px; 96 | } 97 | -------------------------------------------------------------------------------- /assets/sass/components/Sponsors.scss: -------------------------------------------------------------------------------- 1 | .Sponsors { 2 | background: white; 3 | padding-top: 6rem; 4 | padding-bottom: 6rem; 5 | 6 | .inner { 7 | padding: 48px 0; 8 | text-align: center; 9 | } 10 | 11 | h2 { 12 | text-transform: uppercase; 13 | padding-bottom: 48px; 14 | margin-top: 0; 15 | } 16 | 17 | .headline { 18 | padding: 0; 19 | } 20 | 21 | .sponsor-level h3 { 22 | font-size: 18px; 23 | color: $ador-black; 24 | position: relative; 25 | z-index: 1; 26 | background: white; 27 | 28 | &:before { 29 | border-top: 2px solid $ador-l-grey; 30 | content: ""; 31 | margin: 0 auto; /* this centers the line to the full width specified */ 32 | position: absolute; /* positioning must be absolute here, and relative positioning must be applied to the parent */ 33 | top: 50%; 34 | left: 0; 35 | right: 0; 36 | bottom: 0; 37 | width: 80%; 38 | z-index: -1; 39 | } 40 | 41 | span { 42 | background: white; 43 | padding: 0 15px; 44 | } 45 | } 46 | .sponsor-level ul { 47 | @include display(flex); 48 | @include align-items(center); 49 | @include justify-content(center); 50 | @include flex-flow(row wrap); 51 | padding: 24px 0; 52 | 53 | li { 54 | padding: 12px; 55 | } 56 | 57 | img { 58 | max-height: 100px; 59 | } 60 | } 61 | 62 | .sponsor-level.platinum { 63 | padding: 24px 24px 0 24px; 64 | 65 | li { 66 | @include span-columns(6); 67 | } 68 | } 69 | 70 | .sponsor-level.gold { 71 | margin: 0 auto; 72 | li { 73 | max-width: 25%; 74 | padding: 12px; 75 | } 76 | } 77 | } 78 | 79 | .Sponsors--full { 80 | text-align: center; 81 | ul { 82 | margin: 0; 83 | padding: 0; 84 | list-style: none; 85 | } 86 | .sponsor-tiers { 87 | h3 { 88 | background-color: $ador-d-blue; 89 | color: white; 90 | padding: 6px; 91 | } 92 | } 93 | .sponsor-desc { 94 | @include span-columns(10); 95 | @include shift(1); 96 | } 97 | .sponsors li { 98 | @include outer-container(); 99 | text-align: center; 100 | img { 101 | max-height: 70px; 102 | } 103 | } 104 | 105 | .platinum .patron-logo img { 106 | max-height: 100px; 107 | } 108 | 109 | .sponsors { 110 | padding: 48px 0; 111 | } 112 | 113 | .sponsors li + li { 114 | padding-top: 48px; 115 | } 116 | } 117 | 118 | .Page.sponsors-test, .Page.sponsors { 119 | .Sponsors--full { 120 | margin-top: rem(98); 121 | } 122 | } 123 | 124 | .loading.sponsors { 125 | @include ador-default-flex(); 126 | text-align: center; 127 | min-height: 420px; 128 | } 129 | -------------------------------------------------------------------------------- /assets/sass/components/Table.scss: -------------------------------------------------------------------------------- 1 | table { 2 | border-spacing: 0; 3 | text-align: left; 4 | vertical-align: top; 5 | width: 100%; 6 | thead { 7 | background-color: #22303f; 8 | color: #fff; 9 | } 10 | tbody { 11 | color: #22303f; 12 | tr { 13 | &:nth-child(odd) { 14 | background-color: $ador-l-grey; 15 | } 16 | &:nth-child(even) { 17 | background-color: #fff; 18 | } 19 | } 20 | } 21 | th, td { 22 | padding: 0.5rem 1rem; 23 | } 24 | } 25 | 26 | @media #{$mobile_mq} { 27 | .table-wrapper { 28 | width: auto; 29 | margin-left: -15px; 30 | margin-right: -15px; 31 | table { 32 | margin-left: 0; 33 | margin-right: 0; 34 | } 35 | } 36 | } 37 | 38 | // Responsive tables 39 | .table-wrapper { 40 | overflow: auto; 41 | } 42 | -------------------------------------------------------------------------------- /assets/sass/components/Text.scss: -------------------------------------------------------------------------------- 1 | .Text { 2 | @include outer-container(); 3 | .inner { 4 | color: $ador-black; 5 | @include content-column; 6 | } 7 | 8 | ul, li { 9 | list-style: initial; 10 | margin-left: 16px; 11 | padding: 0; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /assets/sass/editor.scss: -------------------------------------------------------------------------------- 1 | /* Editor Styles */ 2 | @import "vendor/bourbon/bourbon"; 3 | @import "settings"; 4 | @import "typography"; 5 | @import "vendor/font-awesome/scss/font-awesome"; 6 | 7 | html .mceContentBody { 8 | margin: 10px 20px; 9 | font-size: 100%; 10 | max-width: 800px; 11 | color: $ador-black; 12 | ul, ol { 13 | list-style: inherit; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /assets/sass/login.scss: -------------------------------------------------------------------------------- 1 | /* Editor Styles */ 2 | @import "vendor/bourbon/bourbon"; 3 | @import "settings"; 4 | @import "typography"; 5 | @import "vendor/font-awesome/scss/font-awesome"; 6 | 7 | body, html { 8 | background-color: $sec; 9 | } 10 | 11 | .login #backtoblog a, .login #nav a { 12 | color: $ador-l-grey; 13 | } 14 | 15 | .login #backtoblog a:hover, .login #nav a:hover, .login h1 a:hover { 16 | color: $primary; 17 | } 18 | 19 | #login h1 a, .login h1 a { 20 | background-image: url("../assets/images/ador-boston-logo 2.png"); 21 | background-size: 100%; 22 | margin-bottom: 0; 23 | width: 100%; 24 | height: 170px; 25 | } 26 | 27 | .wp-core-ui .button-primary { 28 | background-color: lighten($primary, 5%); 29 | text-shadow: none; 30 | } -------------------------------------------------------------------------------- /assets/sass/style.scss: -------------------------------------------------------------------------------- 1 | @import "vendor/bourbon/bourbon"; 2 | @import "settings"; 3 | @import "vendor/neat/neat"; 4 | @import "typography"; 5 | @import "layout"; 6 | @import "vendor/font-awesome/scss/font-awesome"; 7 | @import "components/APIConsole"; 8 | @import "components/Menu"; 9 | @import "components/MenuSocial"; 10 | @import "components/MenuOtherEvents"; 11 | @import "components/Post"; 12 | @import "components/Posts"; 13 | @import "components/Table"; 14 | @import "components/Intro"; 15 | @import "components/Sponsors"; 16 | @import "components/Testimonials"; 17 | @import "components/Workshop"; 18 | @import "components/Block--CallToAction"; 19 | @import "components/BuyYourTicket"; 20 | @import "components/Speakers"; 21 | @import "components/OrganisedBy"; 22 | @import "components/Page"; 23 | @import "components/HomePage"; 24 | @import "components/Text"; 25 | @import "components/Speaker"; 26 | @import "components/Header"; 27 | @import "components/Loading"; 28 | 29 | .inner { 30 | @include outer-container; 31 | } 32 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/_bourbon.scss: -------------------------------------------------------------------------------- 1 | // Bourbon 4.2.6 2 | // http://bourbon.io 3 | // Copyright 2011-2015 thoughtbot, inc. 4 | // MIT License 5 | 6 | @import "settings/prefixer"; 7 | @import "settings/px-to-em"; 8 | @import "settings/asset-pipeline"; 9 | 10 | @import "functions/assign-inputs"; 11 | @import "functions/contains"; 12 | @import "functions/contains-falsy"; 13 | @import "functions/is-length"; 14 | @import "functions/is-light"; 15 | @import "functions/is-number"; 16 | @import "functions/is-size"; 17 | @import "functions/px-to-em"; 18 | @import "functions/px-to-rem"; 19 | @import "functions/shade"; 20 | @import "functions/strip-units"; 21 | @import "functions/tint"; 22 | @import "functions/transition-property-name"; 23 | @import "functions/unpack"; 24 | @import "functions/modular-scale"; 25 | 26 | @import "helpers/convert-units"; 27 | @import "helpers/directional-values"; 28 | @import "helpers/font-source-declaration"; 29 | @import "helpers/gradient-positions-parser"; 30 | @import "helpers/linear-angle-parser"; 31 | @import "helpers/linear-gradient-parser"; 32 | @import "helpers/linear-positions-parser"; 33 | @import "helpers/linear-side-corner-parser"; 34 | @import "helpers/radial-arg-parser"; 35 | @import "helpers/radial-positions-parser"; 36 | @import "helpers/radial-gradient-parser"; 37 | @import "helpers/render-gradients"; 38 | @import "helpers/shape-size-stripper"; 39 | @import "helpers/str-to-num"; 40 | 41 | @import "css3/animation"; 42 | @import "css3/appearance"; 43 | @import "css3/backface-visibility"; 44 | @import "css3/background"; 45 | @import "css3/background-image"; 46 | @import "css3/border-image"; 47 | @import "css3/calc"; 48 | @import "css3/columns"; 49 | @import "css3/filter"; 50 | @import "css3/flex-box"; 51 | @import "css3/font-face"; 52 | @import "css3/font-feature-settings"; 53 | @import "css3/hidpi-media-query"; 54 | @import "css3/hyphens"; 55 | @import "css3/image-rendering"; 56 | @import "css3/keyframes"; 57 | @import "css3/linear-gradient"; 58 | @import "css3/perspective"; 59 | @import "css3/placeholder"; 60 | @import "css3/radial-gradient"; 61 | @import "css3/selection"; 62 | @import "css3/text-decoration"; 63 | @import "css3/transform"; 64 | @import "css3/transition"; 65 | @import "css3/user-select"; 66 | 67 | @import "addons/border-color"; 68 | @import "addons/border-radius"; 69 | @import "addons/border-style"; 70 | @import "addons/border-width"; 71 | @import "addons/buttons"; 72 | @import "addons/clearfix"; 73 | @import "addons/ellipsis"; 74 | @import "addons/font-stacks"; 75 | @import "addons/hide-text"; 76 | @import "addons/margin"; 77 | @import "addons/padding"; 78 | @import "addons/position"; 79 | @import "addons/prefixer"; 80 | @import "addons/retina-image"; 81 | @import "addons/size"; 82 | @import "addons/text-inputs"; 83 | @import "addons/timing-functions"; 84 | @import "addons/triangle"; 85 | @import "addons/word-wrap"; 86 | 87 | @import "bourbon-deprecated-upcoming"; 88 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_border-color.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `border-color` on specific sides of a box. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Arglist} $vals 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include border-color(#a60b55 #76cd9c null #e8ae1a); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// border-left-color: #e8ae1a; 16 | /// border-right-color: #76cd9c; 17 | /// border-top-color: #a60b55; 18 | /// } 19 | /// 20 | /// @require {mixin} directional-property 21 | /// 22 | /// @output `border-color` 23 | 24 | @mixin border-color($vals...) { 25 | @include directional-property(border, color, $vals...); 26 | } 27 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_border-radius.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `border-radius` on both corners on the side of a box. 4 | /// 5 | /// @param {Number} $radii 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element-one { 10 | /// @include border-top-radius(5px); 11 | /// } 12 | /// 13 | /// .element-two { 14 | /// @include border-left-radius(3px); 15 | /// } 16 | /// 17 | /// @example css - CSS Output 18 | /// .element-one { 19 | /// border-top-left-radius: 5px; 20 | /// border-top-right-radius: 5px; 21 | /// } 22 | /// 23 | /// .element-two { 24 | /// border-bottom-left-radius: 3px; 25 | /// border-top-left-radius: 3px; 26 | /// } 27 | /// 28 | /// @output `border-radius` 29 | 30 | @mixin border-top-radius($radii) { 31 | border-top-left-radius: $radii; 32 | border-top-right-radius: $radii; 33 | } 34 | 35 | @mixin border-right-radius($radii) { 36 | border-bottom-right-radius: $radii; 37 | border-top-right-radius: $radii; 38 | } 39 | 40 | @mixin border-bottom-radius($radii) { 41 | border-bottom-left-radius: $radii; 42 | border-bottom-right-radius: $radii; 43 | } 44 | 45 | @mixin border-left-radius($radii) { 46 | border-bottom-left-radius: $radii; 47 | border-top-left-radius: $radii; 48 | } 49 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_border-style.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `border-style` on specific sides of a box. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Arglist} $vals 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include border-style(dashed null solid); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// border-bottom-style: solid; 16 | /// border-top-style: dashed; 17 | /// } 18 | /// 19 | /// @require {mixin} directional-property 20 | /// 21 | /// @output `border-style` 22 | 23 | @mixin border-style($vals...) { 24 | @include directional-property(border, style, $vals...); 25 | } 26 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_border-width.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `border-width` on specific sides of a box. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Arglist} $vals 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include border-width(1em null 20px); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// border-bottom-width: 20px; 16 | /// border-top-width: 1em; 17 | /// } 18 | /// 19 | /// @require {mixin} directional-property 20 | /// 21 | /// @output `border-width` 22 | 23 | @mixin border-width($vals...) { 24 | @include directional-property(border, width, $vals...); 25 | } 26 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_buttons.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Generates variables for all buttons. Please note that you must use interpolation on the variable: `#{$all-buttons}`. 4 | /// 5 | /// @example scss - Usage 6 | /// #{$all-buttons} { 7 | /// background-color: #f00; 8 | /// } 9 | /// 10 | /// #{$all-buttons-focus}, 11 | /// #{$all-buttons-hover} { 12 | /// background-color: #0f0; 13 | /// } 14 | /// 15 | /// #{$all-buttons-active} { 16 | /// background-color: #00f; 17 | /// } 18 | /// 19 | /// @example css - CSS Output 20 | /// button, 21 | /// input[type="button"], 22 | /// input[type="reset"], 23 | /// input[type="submit"] { 24 | /// background-color: #f00; 25 | /// } 26 | /// 27 | /// button:focus, 28 | /// input[type="button"]:focus, 29 | /// input[type="reset"]:focus, 30 | /// input[type="submit"]:focus, 31 | /// button:hover, 32 | /// input[type="button"]:hover, 33 | /// input[type="reset"]:hover, 34 | /// input[type="submit"]:hover { 35 | /// background-color: #0f0; 36 | /// } 37 | /// 38 | /// button:active, 39 | /// input[type="button"]:active, 40 | /// input[type="reset"]:active, 41 | /// input[type="submit"]:active { 42 | /// background-color: #00f; 43 | /// } 44 | /// 45 | /// @require assign-inputs 46 | /// 47 | /// @type List 48 | /// 49 | /// @todo Remove double assigned variables (Lines 59–62) in v5.0.0 50 | 51 | $buttons-list: 'button', 52 | 'input[type="button"]', 53 | 'input[type="reset"]', 54 | 'input[type="submit"]'; 55 | 56 | $all-buttons: assign-inputs($buttons-list); 57 | $all-buttons-active: assign-inputs($buttons-list, active); 58 | $all-buttons-focus: assign-inputs($buttons-list, focus); 59 | $all-buttons-hover: assign-inputs($buttons-list, hover); 60 | 61 | $all-button-inputs: $all-buttons; 62 | $all-button-inputs-active: $all-buttons-active; 63 | $all-button-inputs-focus: $all-buttons-focus; 64 | $all-button-inputs-hover: $all-buttons-hover; 65 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_clearfix.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides an easy way to include a clearfix for containing floats. 4 | /// 5 | /// @link http://cssmojo.com/latest_new_clearfix_so_far/ 6 | /// 7 | /// @example scss - Usage 8 | /// .element { 9 | /// @include clearfix; 10 | /// } 11 | /// 12 | /// @example css - CSS Output 13 | /// .element::after { 14 | /// clear: both; 15 | /// content: ""; 16 | /// display: table; 17 | /// } 18 | 19 | @mixin clearfix { 20 | &::after { 21 | clear: both; 22 | content: ""; 23 | display: table; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_ellipsis.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Truncates text and adds an ellipsis to represent overflow. 4 | /// 5 | /// @param {Number} $width [100%] 6 | /// Max-width for the string to respect before being truncated 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include ellipsis; 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// display: inline-block; 16 | /// max-width: 100%; 17 | /// overflow: hidden; 18 | /// text-overflow: ellipsis; 19 | /// white-space: nowrap; 20 | /// word-wrap: normal; 21 | /// } 22 | 23 | @mixin ellipsis($width: 100%) { 24 | display: inline-block; 25 | max-width: $width; 26 | overflow: hidden; 27 | text-overflow: ellipsis; 28 | white-space: nowrap; 29 | word-wrap: normal; 30 | } 31 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_font-stacks.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Georgia font stack. 4 | /// 5 | /// @type List 6 | 7 | $georgia: "Georgia", "Cambria", "Times New Roman", "Times", serif; 8 | 9 | /// Helvetica font stack. 10 | /// 11 | /// @type List 12 | 13 | $helvetica: "Helvetica Neue", "Helvetica", "Roboto", "Arial", sans-serif; 14 | 15 | /// Lucida Grande font stack. 16 | /// 17 | /// @type List 18 | 19 | $lucida-grande: "Lucida Grande", "Tahoma", "Verdana", "Arial", sans-serif; 20 | 21 | /// Monospace font stack. 22 | /// 23 | /// @type List 24 | 25 | $monospace: "Bitstream Vera Sans Mono", "Consolas", "Courier", monospace; 26 | 27 | /// Verdana font stack. 28 | /// 29 | /// @type List 30 | 31 | $verdana: "Verdana", "Geneva", sans-serif; 32 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_hide-text.scss: -------------------------------------------------------------------------------- 1 | /// Hides the text in an element, commonly used to show an image. Some elements will need block-level styles applied. 2 | /// 3 | /// @link http://zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement 4 | /// 5 | /// @example scss - Usage 6 | /// .element { 7 | /// @include hide-text; 8 | /// } 9 | /// 10 | /// @example css - CSS Output 11 | /// .element { 12 | /// overflow: hidden; 13 | /// text-indent: 101%; 14 | /// white-space: nowrap; 15 | /// } 16 | /// 17 | /// @todo Remove height argument in v5.0.0 18 | 19 | @mixin hide-text($height: null) { 20 | overflow: hidden; 21 | text-indent: 101%; 22 | white-space: nowrap; 23 | 24 | @if $height { 25 | @warn "The `hide-text` mixin has changed and no longer requires a height. The height argument will no longer be accepted in v5.0.0"; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_margin.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `margin` on specific sides of a box. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Arglist} $vals 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include margin(null 10px 3em 20vh); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// margin-bottom: 3em; 16 | /// margin-left: 20vh; 17 | /// margin-right: 10px; 18 | /// } 19 | /// 20 | /// @require {mixin} directional-property 21 | /// 22 | /// @output `margin` 23 | 24 | @mixin margin($vals...) { 25 | @include directional-property(margin, false, $vals...); 26 | } 27 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_padding.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `padding` on specific sides of a box. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Arglist} $vals 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include padding(12vh null 10px 5%); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// padding-bottom: 10px; 16 | /// padding-left: 5%; 17 | /// padding-top: 12vh; 18 | /// } 19 | /// 20 | /// @require {mixin} directional-property 21 | /// 22 | /// @output `padding` 23 | 24 | @mixin padding($vals...) { 25 | @include directional-property(padding, false, $vals...); 26 | } 27 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_position.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for setting an element’s position. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Position} $position [relative] 6 | /// A CSS position value 7 | /// 8 | /// @param {Arglist} $coordinates [null null null null] 9 | /// List of values that correspond to the 4-value syntax for the edges of a box 10 | /// 11 | /// @example scss - Usage 12 | /// .element { 13 | /// @include position(absolute, 0 null null 10em); 14 | /// } 15 | /// 16 | /// @example css - CSS Output 17 | /// .element { 18 | /// left: 10em; 19 | /// position: absolute; 20 | /// top: 0; 21 | /// } 22 | /// 23 | /// @require {function} is-length 24 | /// @require {function} unpack 25 | 26 | @mixin position($position: relative, $coordinates: null null null null) { 27 | @if type-of($position) == list { 28 | $coordinates: $position; 29 | $position: relative; 30 | } 31 | 32 | $coordinates: unpack($coordinates); 33 | 34 | $offsets: ( 35 | top: nth($coordinates, 1), 36 | right: nth($coordinates, 2), 37 | bottom: nth($coordinates, 3), 38 | left: nth($coordinates, 4) 39 | ); 40 | 41 | position: $position; 42 | 43 | @each $offset, $value in $offsets { 44 | @if is-length($value) { 45 | #{$offset}: $value; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_prefixer.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// A mixin for generating vendor prefixes on non-standardized properties. 4 | /// 5 | /// @param {String} $property 6 | /// Property to prefix 7 | /// 8 | /// @param {*} $value 9 | /// Value to use 10 | /// 11 | /// @param {List} $prefixes 12 | /// Prefixes to define 13 | /// 14 | /// @example scss - Usage 15 | /// .element { 16 | /// @include prefixer(border-radius, 10px, webkit ms spec); 17 | /// } 18 | /// 19 | /// @example css - CSS Output 20 | /// .element { 21 | /// -webkit-border-radius: 10px; 22 | /// -moz-border-radius: 10px; 23 | /// border-radius: 10px; 24 | /// } 25 | /// 26 | /// @require {variable} $prefix-for-webkit 27 | /// @require {variable} $prefix-for-mozilla 28 | /// @require {variable} $prefix-for-microsoft 29 | /// @require {variable} $prefix-for-opera 30 | /// @require {variable} $prefix-for-spec 31 | 32 | @mixin prefixer($property, $value, $prefixes) { 33 | @each $prefix in $prefixes { 34 | @if $prefix == webkit { 35 | @if $prefix-for-webkit { 36 | -webkit-#{$property}: $value; 37 | } 38 | } @else if $prefix == moz { 39 | @if $prefix-for-mozilla { 40 | -moz-#{$property}: $value; 41 | } 42 | } @else if $prefix == ms { 43 | @if $prefix-for-microsoft { 44 | -ms-#{$property}: $value; 45 | } 46 | } @else if $prefix == o { 47 | @if $prefix-for-opera { 48 | -o-#{$property}: $value; 49 | } 50 | } @else if $prefix == spec { 51 | @if $prefix-for-spec { 52 | #{$property}: $value; 53 | } 54 | } @else { 55 | @warn "Unrecognized prefix: #{$prefix}"; 56 | } 57 | } 58 | } 59 | 60 | @mixin disable-prefix-for-all() { 61 | $prefix-for-webkit: false !global; 62 | $prefix-for-mozilla: false !global; 63 | $prefix-for-microsoft: false !global; 64 | $prefix-for-opera: false !global; 65 | $prefix-for-spec: false !global; 66 | } 67 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_retina-image.scss: -------------------------------------------------------------------------------- 1 | @mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: $asset-pipeline) { 2 | @if $asset-pipeline { 3 | background-image: image-url("#{$filename}.#{$extension}"); 4 | } @else { 5 | background-image: url("#{$filename}.#{$extension}"); 6 | } 7 | 8 | @include hidpi { 9 | @if $asset-pipeline { 10 | @if $retina-filename { 11 | background-image: image-url("#{$retina-filename}.#{$extension}"); 12 | } @else { 13 | background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}"); 14 | } 15 | } @else { 16 | @if $retina-filename { 17 | background-image: url("#{$retina-filename}.#{$extension}"); 18 | } @else { 19 | background-image: url("#{$filename}#{$retina-suffix}.#{$extension}"); 20 | } 21 | } 22 | 23 | background-size: $background-size; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_size.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Sets the `width` and `height` of the element. 4 | /// 5 | /// @param {List} $size 6 | /// A list of at most 2 size values. 7 | /// 8 | /// If there is only a single value in `$size` it is used for both width and height. All units are supported. 9 | /// 10 | /// @example scss - Usage 11 | /// .first-element { 12 | /// @include size(2em); 13 | /// } 14 | /// 15 | /// .second-element { 16 | /// @include size(auto 10em); 17 | /// } 18 | /// 19 | /// @example css - CSS Output 20 | /// .first-element { 21 | /// width: 2em; 22 | /// height: 2em; 23 | /// } 24 | /// 25 | /// .second-element { 26 | /// width: auto; 27 | /// height: 10em; 28 | /// } 29 | /// 30 | /// @todo Refactor in 5.0.0 to use a comma-separated argument 31 | 32 | @mixin size($value) { 33 | $width: nth($value, 1); 34 | $height: $width; 35 | 36 | @if length($value) > 1 { 37 | $height: nth($value, 2); 38 | } 39 | 40 | @if is-size($height) { 41 | height: $height; 42 | } @else { 43 | @warn "`#{$height}` is not a valid length for the `$height` parameter in the `size` mixin."; 44 | } 45 | 46 | @if is-size($width) { 47 | width: $width; 48 | } @else { 49 | @warn "`#{$width}` is not a valid length for the `$width` parameter in the `size` mixin."; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_timing-functions.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie) 4 | /// 5 | /// Timing functions are the same as demoed here: http://jqueryui.com/resources/demos/effect/easing.html 6 | /// 7 | /// @type cubic-bezier 8 | 9 | $ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530); 10 | $ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190); 11 | $ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220); 12 | $ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060); 13 | $ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715); 14 | $ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035); 15 | $ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335); 16 | $ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045); 17 | 18 | $ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940); 19 | $ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000); 20 | $ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000); 21 | $ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000); 22 | $ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000); 23 | $ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000); 24 | $ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000); 25 | $ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275); 26 | 27 | $ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955); 28 | $ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000); 29 | $ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000); 30 | $ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000); 31 | $ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950); 32 | $ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000); 33 | $ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860); 34 | $ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550); 35 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_triangle.scss: -------------------------------------------------------------------------------- 1 | @mixin triangle($size, $color, $direction) { 2 | $width: nth($size, 1); 3 | $height: nth($size, length($size)); 4 | $foreground-color: nth($color, 1); 5 | $background-color: if(length($color) == 2, nth($color, 2), transparent); 6 | height: 0; 7 | width: 0; 8 | 9 | @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) { 10 | $width: $width / 2; 11 | $height: if(length($size) > 1, $height, $height/2); 12 | 13 | @if $direction == up { 14 | border-bottom: $height solid $foreground-color; 15 | border-left: $width solid $background-color; 16 | border-right: $width solid $background-color; 17 | } @else if $direction == right { 18 | border-bottom: $width solid $background-color; 19 | border-left: $height solid $foreground-color; 20 | border-top: $width solid $background-color; 21 | } @else if $direction == down { 22 | border-left: $width solid $background-color; 23 | border-right: $width solid $background-color; 24 | border-top: $height solid $foreground-color; 25 | } @else if $direction == left { 26 | border-bottom: $width solid $background-color; 27 | border-right: $height solid $foreground-color; 28 | border-top: $width solid $background-color; 29 | } 30 | } @else if ($direction == up-right) or ($direction == up-left) { 31 | border-top: $height solid $foreground-color; 32 | 33 | @if $direction == up-right { 34 | border-left: $width solid $background-color; 35 | } @else if $direction == up-left { 36 | border-right: $width solid $background-color; 37 | } 38 | } @else if ($direction == down-right) or ($direction == down-left) { 39 | border-bottom: $height solid $foreground-color; 40 | 41 | @if $direction == down-right { 42 | border-left: $width solid $background-color; 43 | } @else if $direction == down-left { 44 | border-right: $width solid $background-color; 45 | } 46 | } @else if ($direction == inset-up) { 47 | border-color: $background-color $background-color $foreground-color; 48 | border-style: solid; 49 | border-width: $height $width; 50 | } @else if ($direction == inset-down) { 51 | border-color: $foreground-color $background-color $background-color; 52 | border-style: solid; 53 | border-width: $height $width; 54 | } @else if ($direction == inset-right) { 55 | border-color: $background-color $background-color $background-color $foreground-color; 56 | border-style: solid; 57 | border-width: $width $height; 58 | } @else if ($direction == inset-left) { 59 | border-color: $background-color $foreground-color $background-color $background-color; 60 | border-style: solid; 61 | border-width: $width $height; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/addons/_word-wrap.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides an easy way to change the `word-wrap` property. 4 | /// 5 | /// @param {String} $wrap [break-word] 6 | /// Value for the `word-break` property. 7 | /// 8 | /// @example scss - Usage 9 | /// .wrapper { 10 | /// @include word-wrap(break-word); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .wrapper { 15 | /// overflow-wrap: break-word; 16 | /// word-break: break-all; 17 | /// word-wrap: break-word; 18 | /// } 19 | 20 | @mixin word-wrap($wrap: break-word) { 21 | overflow-wrap: $wrap; 22 | word-wrap: $wrap; 23 | 24 | @if $wrap == break-word { 25 | word-break: break-all; 26 | } @else { 27 | word-break: $wrap; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_animation.scss: -------------------------------------------------------------------------------- 1 | // http://www.w3.org/TR/css3-animations/#the-animation-name-property- 2 | // Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties. 3 | 4 | @mixin animation($animations...) { 5 | @include prefixer(animation, $animations, webkit moz spec); 6 | } 7 | 8 | @mixin animation-name($names...) { 9 | @include prefixer(animation-name, $names, webkit moz spec); 10 | } 11 | 12 | @mixin animation-duration($times...) { 13 | @include prefixer(animation-duration, $times, webkit moz spec); 14 | } 15 | 16 | @mixin animation-timing-function($motions...) { 17 | // ease | linear | ease-in | ease-out | ease-in-out 18 | @include prefixer(animation-timing-function, $motions, webkit moz spec); 19 | } 20 | 21 | @mixin animation-iteration-count($values...) { 22 | // infinite | 23 | @include prefixer(animation-iteration-count, $values, webkit moz spec); 24 | } 25 | 26 | @mixin animation-direction($directions...) { 27 | // normal | alternate 28 | @include prefixer(animation-direction, $directions, webkit moz spec); 29 | } 30 | 31 | @mixin animation-play-state($states...) { 32 | // running | paused 33 | @include prefixer(animation-play-state, $states, webkit moz spec); 34 | } 35 | 36 | @mixin animation-delay($times...) { 37 | @include prefixer(animation-delay, $times, webkit moz spec); 38 | } 39 | 40 | @mixin animation-fill-mode($modes...) { 41 | // none | forwards | backwards | both 42 | @include prefixer(animation-fill-mode, $modes, webkit moz spec); 43 | } 44 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_appearance.scss: -------------------------------------------------------------------------------- 1 | @mixin appearance($value) { 2 | @include prefixer(appearance, $value, webkit moz ms o spec); 3 | } 4 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_backface-visibility.scss: -------------------------------------------------------------------------------- 1 | @mixin backface-visibility($visibility) { 2 | @include prefixer(backface-visibility, $visibility, webkit spec); 3 | } 4 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_background-image.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Background-image property for adding multiple background images with 3 | // gradients, or for stringing multiple gradients together. 4 | //************************************************************************// 5 | 6 | @mixin background-image($images...) { 7 | $webkit-images: (); 8 | $spec-images: (); 9 | 10 | @each $image in $images { 11 | $webkit-image: (); 12 | $spec-image: (); 13 | 14 | @if (type-of($image) == string) { 15 | $url-str: str-slice($image, 1, 3); 16 | $gradient-type: str-slice($image, 1, 6); 17 | 18 | @if $url-str == "url" { 19 | $webkit-image: $image; 20 | $spec-image: $image; 21 | } 22 | 23 | @else if $gradient-type == "linear" { 24 | $gradients: _linear-gradient-parser($image); 25 | $webkit-image: map-get($gradients, webkit-image); 26 | $spec-image: map-get($gradients, spec-image); 27 | } 28 | 29 | @else if $gradient-type == "radial" { 30 | $gradients: _radial-gradient-parser($image); 31 | $webkit-image: map-get($gradients, webkit-image); 32 | $spec-image: map-get($gradients, spec-image); 33 | } 34 | } 35 | 36 | $webkit-images: append($webkit-images, $webkit-image, comma); 37 | $spec-images: append($spec-images, $spec-image, comma); 38 | } 39 | 40 | background-image: $webkit-images; 41 | background-image: $spec-images; 42 | } 43 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_background.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Background property for adding multiple backgrounds using shorthand 3 | // notation. 4 | //************************************************************************// 5 | 6 | @mixin background($backgrounds...) { 7 | $webkit-backgrounds: (); 8 | $spec-backgrounds: (); 9 | 10 | @each $background in $backgrounds { 11 | $webkit-background: (); 12 | $spec-background: (); 13 | $background-type: type-of($background); 14 | 15 | @if $background-type == string or $background-type == list { 16 | $background-str: if($background-type == list, nth($background, 1), $background); 17 | 18 | $url-str: str-slice($background-str, 1, 3); 19 | $gradient-type: str-slice($background-str, 1, 6); 20 | 21 | @if $url-str == "url" { 22 | $webkit-background: $background; 23 | $spec-background: $background; 24 | } 25 | 26 | @else if $gradient-type == "linear" { 27 | $gradients: _linear-gradient-parser("#{$background}"); 28 | $webkit-background: map-get($gradients, webkit-image); 29 | $spec-background: map-get($gradients, spec-image); 30 | } 31 | 32 | @else if $gradient-type == "radial" { 33 | $gradients: _radial-gradient-parser("#{$background}"); 34 | $webkit-background: map-get($gradients, webkit-image); 35 | $spec-background: map-get($gradients, spec-image); 36 | } 37 | 38 | @else { 39 | $webkit-background: $background; 40 | $spec-background: $background; 41 | } 42 | } 43 | 44 | @else { 45 | $webkit-background: $background; 46 | $spec-background: $background; 47 | } 48 | 49 | $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma); 50 | $spec-backgrounds: append($spec-backgrounds, $spec-background, comma); 51 | } 52 | 53 | background: $webkit-backgrounds; 54 | background: $spec-backgrounds; 55 | } 56 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_border-image.scss: -------------------------------------------------------------------------------- 1 | @mixin border-image($borders...) { 2 | $webkit-borders: (); 3 | $spec-borders: (); 4 | 5 | @each $border in $borders { 6 | $webkit-border: (); 7 | $spec-border: (); 8 | $border-type: type-of($border); 9 | 10 | @if $border-type == string or list { 11 | $border-str: if($border-type == list, nth($border, 1), $border); 12 | 13 | $url-str: str-slice($border-str, 1, 3); 14 | $gradient-type: str-slice($border-str, 1, 6); 15 | 16 | @if $url-str == "url" { 17 | $webkit-border: $border; 18 | $spec-border: $border; 19 | } 20 | 21 | @else if $gradient-type == "linear" { 22 | $gradients: _linear-gradient-parser("#{$border}"); 23 | $webkit-border: map-get($gradients, webkit-image); 24 | $spec-border: map-get($gradients, spec-image); 25 | } 26 | 27 | @else if $gradient-type == "radial" { 28 | $gradients: _radial-gradient-parser("#{$border}"); 29 | $webkit-border: map-get($gradients, webkit-image); 30 | $spec-border: map-get($gradients, spec-image); 31 | } 32 | 33 | @else { 34 | $webkit-border: $border; 35 | $spec-border: $border; 36 | } 37 | } 38 | 39 | @else { 40 | $webkit-border: $border; 41 | $spec-border: $border; 42 | } 43 | 44 | $webkit-borders: append($webkit-borders, $webkit-border, comma); 45 | $spec-borders: append($spec-borders, $spec-border, comma); 46 | } 47 | 48 | -webkit-border-image: $webkit-borders; 49 | border-image: $spec-borders; 50 | border-style: solid; 51 | } 52 | 53 | //Examples: 54 | // @include border-image(url("image.png")); 55 | // @include border-image(url("image.png") 20 stretch); 56 | // @include border-image(linear-gradient(45deg, orange, yellow)); 57 | // @include border-image(linear-gradient(45deg, orange, yellow) stretch); 58 | // @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round); 59 | // @include border-image(radial-gradient(top, cover, orange, yellow, orange)); 60 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_calc.scss: -------------------------------------------------------------------------------- 1 | @mixin calc($property, $value) { 2 | #{$property}: -webkit-calc(#{$value}); 3 | #{$property}: calc(#{$value}); 4 | } 5 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_columns.scss: -------------------------------------------------------------------------------- 1 | @mixin columns($arg: auto) { 2 | // || 3 | @include prefixer(columns, $arg, webkit moz spec); 4 | } 5 | 6 | @mixin column-count($int: auto) { 7 | // auto || integer 8 | @include prefixer(column-count, $int, webkit moz spec); 9 | } 10 | 11 | @mixin column-gap($length: normal) { 12 | // normal || length 13 | @include prefixer(column-gap, $length, webkit moz spec); 14 | } 15 | 16 | @mixin column-fill($arg: auto) { 17 | // auto || length 18 | @include prefixer(column-fill, $arg, webkit moz spec); 19 | } 20 | 21 | @mixin column-rule($arg) { 22 | // || || 23 | @include prefixer(column-rule, $arg, webkit moz spec); 24 | } 25 | 26 | @mixin column-rule-color($color) { 27 | @include prefixer(column-rule-color, $color, webkit moz spec); 28 | } 29 | 30 | @mixin column-rule-style($style: none) { 31 | // none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid 32 | @include prefixer(column-rule-style, $style, webkit moz spec); 33 | } 34 | 35 | @mixin column-rule-width ($width: none) { 36 | @include prefixer(column-rule-width, $width, webkit moz spec); 37 | } 38 | 39 | @mixin column-span($arg: none) { 40 | // none || all 41 | @include prefixer(column-span, $arg, webkit moz spec); 42 | } 43 | 44 | @mixin column-width($length: auto) { 45 | // auto || length 46 | @include prefixer(column-width, $length, webkit moz spec); 47 | } 48 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_filter.scss: -------------------------------------------------------------------------------- 1 | @mixin filter($function: none) { 2 | // [ 3 | @include prefixer(perspective, $depth, webkit moz spec); 4 | } 5 | 6 | @mixin perspective-origin($value: 50% 50%) { 7 | @include prefixer(perspective-origin, $value, webkit moz spec); 8 | } 9 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_placeholder.scss: -------------------------------------------------------------------------------- 1 | @mixin placeholder { 2 | $placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input"; 3 | @each $placeholder in $placeholders { 4 | &:#{$placeholder}-placeholder { 5 | @content; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_radial-gradient.scss: -------------------------------------------------------------------------------- 1 | // Requires Sass 3.1+ 2 | @mixin radial-gradient($g1, $g2, 3 | $g3: null, $g4: null, 4 | $g5: null, $g6: null, 5 | $g7: null, $g8: null, 6 | $g9: null, $g10: null, 7 | $pos: null, 8 | $shape-size: null, 9 | $fallback: null) { 10 | 11 | $data: _radial-arg-parser($g1, $g2, $pos, $shape-size); 12 | $g1: nth($data, 1); 13 | $g2: nth($data, 2); 14 | $pos: nth($data, 3); 15 | $shape-size: nth($data, 4); 16 | 17 | $full: $g1, $g2, $g3, $g4, $g5, $g6, $g7, $g8, $g9, $g10; 18 | 19 | // Strip deprecated cover/contain for spec 20 | $shape-size-spec: _shape-size-stripper($shape-size); 21 | 22 | // Set $g1 as the default fallback color 23 | $first-color: nth($full, 1); 24 | $fallback-color: nth($first-color, 1); 25 | 26 | @if (type-of($fallback) == color) or ($fallback == "transparent") { 27 | $fallback-color: $fallback; 28 | } 29 | 30 | // Add Commas and spaces 31 | $shape-size: if($shape-size, "#{$shape-size}, ", null); 32 | $pos: if($pos, "#{$pos}, ", null); 33 | $pos-spec: if($pos, "at #{$pos}", null); 34 | $shape-size-spec: if(($shape-size-spec != " ") and ($pos == null), "#{$shape-size-spec}, ", "#{$shape-size-spec} "); 35 | 36 | background-color: $fallback-color; 37 | background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full})); 38 | background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})"); 39 | } 40 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_selection.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Outputs the spec and prefixed versions of the `::selection` pseudo-element. 4 | /// 5 | /// @param {Bool} $current-selector [false] 6 | /// If set to `true`, it takes the current element into consideration. 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include selection(true) { 11 | /// background-color: #ffbb52; 12 | /// } 13 | /// } 14 | /// 15 | /// @example css - CSS Output 16 | /// .element::-moz-selection { 17 | /// background-color: #ffbb52; 18 | /// } 19 | /// 20 | /// .element::selection { 21 | /// background-color: #ffbb52; 22 | /// } 23 | 24 | @mixin selection($current-selector: false) { 25 | @if $current-selector { 26 | &::-moz-selection { 27 | @content; 28 | } 29 | 30 | &::selection { 31 | @content; 32 | } 33 | } @else { 34 | ::-moz-selection { 35 | @content; 36 | } 37 | 38 | ::selection { 39 | @content; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_text-decoration.scss: -------------------------------------------------------------------------------- 1 | @mixin text-decoration($value) { 2 | // || || 3 | @include prefixer(text-decoration, $value, moz); 4 | } 5 | 6 | @mixin text-decoration-line($line: none) { 7 | // none || underline || overline || line-through 8 | @include prefixer(text-decoration-line, $line, moz); 9 | } 10 | 11 | @mixin text-decoration-style($style: solid) { 12 | // solid || double || dotted || dashed || wavy 13 | @include prefixer(text-decoration-style, $style, moz webkit); 14 | } 15 | 16 | @mixin text-decoration-color($color: currentColor) { 17 | // currentColor || 18 | @include prefixer(text-decoration-color, $color, moz); 19 | } 20 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_transform.scss: -------------------------------------------------------------------------------- 1 | @mixin transform($property: none) { 2 | // none | 3 | @include prefixer(transform, $property, webkit moz ms o spec); 4 | } 5 | 6 | @mixin transform-origin($axes: 50%) { 7 | // x-axis - left | center | right | length | % 8 | // y-axis - top | center | bottom | length | % 9 | // z-axis - length 10 | @include prefixer(transform-origin, $axes, webkit moz ms o spec); 11 | } 12 | 13 | @mixin transform-style($style: flat) { 14 | @include prefixer(transform-style, $style, webkit moz ms o spec); 15 | } 16 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_transition.scss: -------------------------------------------------------------------------------- 1 | // Shorthand mixin. Supports multiple parentheses-deliminated values for each variable. 2 | // Example: @include transition (all 2s ease-in-out); 3 | // @include transition (opacity 1s ease-in 2s, width 2s ease-out); 4 | // @include transition-property (transform, opacity); 5 | 6 | @mixin transition($properties...) { 7 | // Fix for vendor-prefix transform property 8 | $needs-prefixes: false; 9 | $webkit: (); 10 | $moz: (); 11 | $spec: (); 12 | 13 | // Create lists for vendor-prefixed transform 14 | @each $list in $properties { 15 | @if nth($list, 1) == "transform" { 16 | $needs-prefixes: true; 17 | $list1: -webkit-transform; 18 | $list2: -moz-transform; 19 | $list3: (); 20 | 21 | @each $var in $list { 22 | $list3: join($list3, $var); 23 | 24 | @if $var != "transform" { 25 | $list1: join($list1, $var); 26 | $list2: join($list2, $var); 27 | } 28 | } 29 | 30 | $webkit: append($webkit, $list1); 31 | $moz: append($moz, $list2); 32 | $spec: append($spec, $list3); 33 | } @else { 34 | $webkit: append($webkit, $list, comma); 35 | $moz: append($moz, $list, comma); 36 | $spec: append($spec, $list, comma); 37 | } 38 | } 39 | 40 | @if $needs-prefixes { 41 | -webkit-transition: $webkit; 42 | -moz-transition: $moz; 43 | transition: $spec; 44 | } @else { 45 | @if length($properties) >= 1 { 46 | @include prefixer(transition, $properties, webkit moz spec); 47 | } @else { 48 | $properties: all 0.15s ease-out 0s; 49 | @include prefixer(transition, $properties, webkit moz spec); 50 | } 51 | } 52 | } 53 | 54 | @mixin transition-property($properties...) { 55 | -webkit-transition-property: transition-property-names($properties, "webkit"); 56 | -moz-transition-property: transition-property-names($properties, "moz"); 57 | transition-property: transition-property-names($properties, false); 58 | } 59 | 60 | @mixin transition-duration($times...) { 61 | @include prefixer(transition-duration, $times, webkit moz spec); 62 | } 63 | 64 | @mixin transition-timing-function($motions...) { 65 | // ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier() 66 | @include prefixer(transition-timing-function, $motions, webkit moz spec); 67 | } 68 | 69 | @mixin transition-delay($times...) { 70 | @include prefixer(transition-delay, $times, webkit moz spec); 71 | } 72 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/css3/_user-select.scss: -------------------------------------------------------------------------------- 1 | @mixin user-select($value: none) { 2 | @include prefixer(user-select, $value, webkit moz ms spec); 3 | } 4 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_assign-inputs.scss: -------------------------------------------------------------------------------- 1 | @function assign-inputs($inputs, $pseudo: null) { 2 | $list: (); 3 | 4 | @each $input in $inputs { 5 | $input: unquote($input); 6 | $input: if($pseudo, $input + ":" + $pseudo, $input); 7 | $list: append($list, $input, comma); 8 | } 9 | 10 | @return $list; 11 | } 12 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_contains-falsy.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Checks if a list does not contains a value. 4 | /// 5 | /// @access private 6 | /// 7 | /// @param {List} $list 8 | /// The list to check against. 9 | /// 10 | /// @return {Bool} 11 | 12 | @function contains-falsy($list) { 13 | @each $item in $list { 14 | @if not $item { 15 | @return true; 16 | } 17 | } 18 | 19 | @return false; 20 | } 21 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_contains.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Checks if a list contains a value(s). 4 | /// 5 | /// @access private 6 | /// 7 | /// @param {List} $list 8 | /// The list to check against. 9 | /// 10 | /// @param {List} $values 11 | /// A single value or list of values to check for. 12 | /// 13 | /// @example scss - Usage 14 | /// contains($list, $value) 15 | /// 16 | /// @return {Bool} 17 | 18 | @function contains($list, $values...) { 19 | @each $value in $values { 20 | @if type-of(index($list, $value)) != "number" { 21 | @return false; 22 | } 23 | } 24 | 25 | @return true; 26 | } 27 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_is-length.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Checks for a valid CSS length. 4 | /// 5 | /// @param {String} $value 6 | 7 | @function is-length($value) { 8 | @return type-of($value) != "null" and (str-slice($value + "", 1, 4) == "calc" 9 | or index(auto inherit initial 0, $value) 10 | or (type-of($value) == "number" and not(unitless($value)))); 11 | } 12 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_is-light.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Programatically determines whether a color is light or dark. 4 | /// 5 | /// @link http://robots.thoughtbot.com/closer-look-color-lightness 6 | /// 7 | /// @param {Color (Hex)} $color 8 | /// 9 | /// @example scss - Usage 10 | /// is-light($color) 11 | /// 12 | /// @return {Bool} 13 | 14 | @function is-light($hex-color) { 15 | $-local-red: red(rgba($hex-color, 1)); 16 | $-local-green: green(rgba($hex-color, 1)); 17 | $-local-blue: blue(rgba($hex-color, 1)); 18 | $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255; 19 | 20 | @return $-local-lightness > 0.6; 21 | } 22 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_is-number.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Checks for a valid number. 4 | /// 5 | /// @param {Number} $value 6 | /// 7 | /// @require {function} contains 8 | 9 | @function is-number($value) { 10 | @return contains("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" 0 1 2 3 4 5 6 7 8 9, $value); 11 | } 12 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_is-size.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Checks for a valid CSS size. 4 | /// 5 | /// @param {String} $value 6 | /// 7 | /// @require {function} contains 8 | /// @require {function} is-length 9 | 10 | @function is-size($value) { 11 | @return is-length($value) 12 | or contains("fill" "fit-content" "min-content" "max-content", $value); 13 | } 14 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_modular-scale.scss: -------------------------------------------------------------------------------- 1 | // Scaling Variables 2 | $golden: 1.618; 3 | $minor-second: 1.067; 4 | $major-second: 1.125; 5 | $minor-third: 1.2; 6 | $major-third: 1.25; 7 | $perfect-fourth: 1.333; 8 | $augmented-fourth: 1.414; 9 | $perfect-fifth: 1.5; 10 | $minor-sixth: 1.6; 11 | $major-sixth: 1.667; 12 | $minor-seventh: 1.778; 13 | $major-seventh: 1.875; 14 | $octave: 2; 15 | $major-tenth: 2.5; 16 | $major-eleventh: 2.667; 17 | $major-twelfth: 3; 18 | $double-octave: 4; 19 | 20 | $modular-scale-ratio: $perfect-fourth !default; 21 | $modular-scale-base: em($em-base) !default; 22 | 23 | @function modular-scale($increment, $value: $modular-scale-base, $ratio: $modular-scale-ratio) { 24 | $v1: nth($value, 1); 25 | $v2: nth($value, length($value)); 26 | $value: $v1; 27 | 28 | // scale $v2 to just above $v1 29 | @while $v2 > $v1 { 30 | $v2: ($v2 / $ratio); // will be off-by-1 31 | } 32 | @while $v2 < $v1 { 33 | $v2: ($v2 * $ratio); // will fix off-by-1 34 | } 35 | 36 | // check AFTER scaling $v2 to prevent double-counting corner-case 37 | $double-stranded: $v2 > $v1; 38 | 39 | @if $increment > 0 { 40 | @for $i from 1 through $increment { 41 | @if $double-stranded and ($v1 * $ratio) > $v2 { 42 | $value: $v2; 43 | $v2: ($v2 * $ratio); 44 | } @else { 45 | $v1: ($v1 * $ratio); 46 | $value: $v1; 47 | } 48 | } 49 | } 50 | 51 | @if $increment < 0 { 52 | // adjust $v2 to just below $v1 53 | @if $double-stranded { 54 | $v2: ($v2 / $ratio); 55 | } 56 | 57 | @for $i from $increment through -1 { 58 | @if $double-stranded and ($v1 / $ratio) < $v2 { 59 | $value: $v2; 60 | $v2: ($v2 / $ratio); 61 | } @else { 62 | $v1: ($v1 / $ratio); 63 | $value: $v1; 64 | } 65 | } 66 | } 67 | 68 | @return $value; 69 | } 70 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_px-to-em.scss: -------------------------------------------------------------------------------- 1 | // Convert pixels to ems 2 | // eg. for a relational value of 12px write em(12) when the parent is 16px 3 | // if the parent is another value say 24px write em(12, 24) 4 | 5 | @function em($pxval, $base: $em-base) { 6 | @if not unitless($pxval) { 7 | $pxval: strip-units($pxval); 8 | } 9 | @if not unitless($base) { 10 | $base: strip-units($base); 11 | } 12 | @return ($pxval / $base) * 1em; 13 | } 14 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_px-to-rem.scss: -------------------------------------------------------------------------------- 1 | // Convert pixels to rems 2 | // eg. for a relational value of 12px write rem(12) 3 | // Assumes $em-base is the font-size of 4 | 5 | @function rem($pxval) { 6 | @if not unitless($pxval) { 7 | $pxval: strip-units($pxval); 8 | } 9 | 10 | $base: $em-base; 11 | @if not unitless($base) { 12 | $base: strip-units($base); 13 | } 14 | @return ($pxval / $base) * 1rem; 15 | } 16 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_shade.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Mixes a color with black. 4 | /// 5 | /// @param {Color} $color 6 | /// 7 | /// @param {Number (Percentage)} $percent 8 | /// The amount of black to be mixed in. 9 | /// 10 | /// @example scss - Usage 11 | /// .element { 12 | /// background-color: shade(#ffbb52, 60%); 13 | /// } 14 | /// 15 | /// @example css - CSS Output 16 | /// .element { 17 | /// background-color: #664a20; 18 | /// } 19 | /// 20 | /// @return {Color} 21 | 22 | @function shade($color, $percent) { 23 | @return mix(#000, $color, $percent); 24 | } 25 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_strip-units.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Strips the unit from a number. 4 | /// 5 | /// @param {Number (With Unit)} $value 6 | /// 7 | /// @example scss - Usage 8 | /// $dimension: strip-units(10em); 9 | /// 10 | /// @example css - CSS Output 11 | /// $dimension: 10; 12 | /// 13 | /// @return {Number (Unitless)} 14 | 15 | @function strip-units($value) { 16 | @return ($value / ($value * 0 + 1)); 17 | } 18 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_tint.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Mixes a color with white. 4 | /// 5 | /// @param {Color} $color 6 | /// 7 | /// @param {Number (Percentage)} $percent 8 | /// The amount of white to be mixed in. 9 | /// 10 | /// @example scss - Usage 11 | /// .element { 12 | /// background-color: tint(#6ecaa6, 40%); 13 | /// } 14 | /// 15 | /// @example css - CSS Output 16 | /// .element { 17 | /// background-color: #a8dfc9; 18 | /// } 19 | /// 20 | /// @return {Color} 21 | 22 | @function tint($color, $percent) { 23 | @return mix(#fff, $color, $percent); 24 | } 25 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_transition-property-name.scss: -------------------------------------------------------------------------------- 1 | // Return vendor-prefixed property names if appropriate 2 | // Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background 3 | //************************************************************************// 4 | @function transition-property-names($props, $vendor: false) { 5 | $new-props: (); 6 | 7 | @each $prop in $props { 8 | $new-props: append($new-props, transition-property-name($prop, $vendor), comma); 9 | } 10 | 11 | @return $new-props; 12 | } 13 | 14 | @function transition-property-name($prop, $vendor: false) { 15 | // put other properties that need to be prefixed here aswell 16 | @if $vendor and $prop == transform { 17 | @return unquote('-'+$vendor+'-'+$prop); 18 | } 19 | @else { 20 | @return $prop; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/functions/_unpack.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Converts shorthand to the 4-value syntax. 4 | /// 5 | /// @param {List} $shorthand 6 | /// 7 | /// @example scss - Usage 8 | /// .element { 9 | /// margin: unpack(1em 2em); 10 | /// } 11 | /// 12 | /// @example css - CSS Output 13 | /// .element { 14 | /// margin: 1em 2em 1em 2em; 15 | /// } 16 | 17 | @function unpack($shorthand) { 18 | @if length($shorthand) == 1 { 19 | @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1); 20 | } @else if length($shorthand) == 2 { 21 | @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2); 22 | } @else if length($shorthand) == 3 { 23 | @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2); 24 | } @else { 25 | @return $shorthand; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_convert-units.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Helper function for str-to-num fn. 3 | // Source: http://sassmeister.com/gist/9647408 4 | //************************************************************************// 5 | @function _convert-units($number, $unit) { 6 | $strings: "px", "cm", "mm", "%", "ch", "pica", "in", "em", "rem", "pt", "pc", "ex", "vw", "vh", "vmin", "vmax", "deg", "rad", "grad", "turn"; 7 | $units: 1px, 1cm, 1mm, 1%, 1ch, 1pica, 1in, 1em, 1rem, 1pt, 1pc, 1ex, 1vw, 1vh, 1vmin, 1vmax, 1deg, 1rad, 1grad, 1turn; 8 | $index: index($strings, $unit); 9 | 10 | @if not $index { 11 | @warn "Unknown unit `#{$unit}`."; 12 | @return false; 13 | } 14 | 15 | @if type-of($number) != "number" { 16 | @warn "`#{$number} is not a number`"; 17 | @return false; 18 | } 19 | 20 | @return $number * nth($units, $index); 21 | } 22 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_directional-values.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Directional-property mixins are shorthands for writing properties like the following 4 | /// 5 | /// @ignore You can also use `false` instead of `null`. 6 | /// 7 | /// @param {List} $vals 8 | /// List of directional values 9 | /// 10 | /// @example scss - Usage 11 | /// .element { 12 | /// @include border-style(dotted null); 13 | /// @include margin(null 0 10px); 14 | /// } 15 | /// 16 | /// @example css - CSS Output 17 | /// .element { 18 | /// border-bottom-style: dotted; 19 | /// border-top-style: dotted; 20 | /// margin-bottom: 10px; 21 | /// margin-left: 0; 22 | /// margin-right: 0; 23 | /// } 24 | /// 25 | /// @require {function} contains-falsy 26 | /// 27 | /// @return {List} 28 | 29 | @function collapse-directionals($vals) { 30 | $output: null; 31 | 32 | $a: nth($vals, 1); 33 | $b: if(length($vals) < 2, $a, nth($vals, 2)); 34 | $c: if(length($vals) < 3, $a, nth($vals, 3)); 35 | $d: if(length($vals) < 2, $a, nth($vals, if(length($vals) < 4, 2, 4))); 36 | 37 | @if $a == 0 { $a: 0; } 38 | @if $b == 0 { $b: 0; } 39 | @if $c == 0 { $c: 0; } 40 | @if $d == 0 { $d: 0; } 41 | 42 | @if $a == $b and $a == $c and $a == $d { $output: $a; } 43 | @else if $a == $c and $b == $d { $output: $a $b; } 44 | @else if $b == $d { $output: $a $b $c; } 45 | @else { $output: $a $b $c $d; } 46 | 47 | @return $output; 48 | } 49 | 50 | /// Output directional properties, for instance `margin`. 51 | /// 52 | /// @access private 53 | /// 54 | /// @param {String} $pre 55 | /// Prefix to use 56 | /// @param {String} $suf 57 | /// Suffix to use 58 | /// @param {List} $vals 59 | /// List of values 60 | /// 61 | /// @require {function} collapse-directionals 62 | /// @require {function} contains-falsy 63 | 64 | @mixin directional-property($pre, $suf, $vals) { 65 | // Property Names 66 | $top: $pre + "-top" + if($suf, "-#{$suf}", ""); 67 | $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", ""); 68 | $left: $pre + "-left" + if($suf, "-#{$suf}", ""); 69 | $right: $pre + "-right" + if($suf, "-#{$suf}", ""); 70 | $all: $pre + if($suf, "-#{$suf}", ""); 71 | 72 | $vals: collapse-directionals($vals); 73 | 74 | @if contains-falsy($vals) { 75 | @if nth($vals, 1) { #{$top}: nth($vals, 1); } 76 | 77 | @if length($vals) == 1 { 78 | @if nth($vals, 1) { #{$right}: nth($vals, 1); } 79 | } @else { 80 | @if nth($vals, 2) { #{$right}: nth($vals, 2); } 81 | } 82 | 83 | @if length($vals) == 2 { 84 | @if nth($vals, 1) { #{$bottom}: nth($vals, 1); } 85 | @if nth($vals, 2) { #{$left}: nth($vals, 2); } 86 | } @else if length($vals) == 3 { 87 | @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } 88 | @if nth($vals, 2) { #{$left}: nth($vals, 2); } 89 | } @else if length($vals) == 4 { 90 | @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } 91 | @if nth($vals, 4) { #{$left}: nth($vals, 4); } 92 | } 93 | } @else { 94 | #{$all}: $vals; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_font-source-declaration.scss: -------------------------------------------------------------------------------- 1 | // Used for creating the source string for fonts using @font-face 2 | // Reference: http://goo.gl/Ru1bKP 3 | 4 | @function font-url-prefixer($asset-pipeline) { 5 | @if $asset-pipeline == true { 6 | @return font-url; 7 | } @else { 8 | @return url; 9 | } 10 | } 11 | 12 | @function font-source-declaration( 13 | $font-family, 14 | $file-path, 15 | $asset-pipeline, 16 | $file-formats, 17 | $font-url) { 18 | 19 | $src: (); 20 | 21 | $formats-map: ( 22 | eot: "#{$file-path}.eot?#iefix" format("embedded-opentype"), 23 | woff2: "#{$file-path}.woff2" format("woff2"), 24 | woff: "#{$file-path}.woff" format("woff"), 25 | ttf: "#{$file-path}.ttf" format("truetype"), 26 | svg: "#{$file-path}.svg##{$font-family}" format("svg") 27 | ); 28 | 29 | @each $key, $values in $formats-map { 30 | @if contains($file-formats, $key) { 31 | $file-path: nth($values, 1); 32 | $font-format: nth($values, 2); 33 | 34 | @if $asset-pipeline == true { 35 | $src: append($src, font-url($file-path) $font-format, comma); 36 | } @else { 37 | $src: append($src, url($file-path) $font-format, comma); 38 | } 39 | } 40 | } 41 | 42 | @return $src; 43 | } 44 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_gradient-positions-parser.scss: -------------------------------------------------------------------------------- 1 | @function _gradient-positions-parser($gradient-type, $gradient-positions) { 2 | @if $gradient-positions 3 | and ($gradient-type == linear) 4 | and (type-of($gradient-positions) != color) { 5 | $gradient-positions: _linear-positions-parser($gradient-positions); 6 | } 7 | @else if $gradient-positions 8 | and ($gradient-type == radial) 9 | and (type-of($gradient-positions) != color) { 10 | $gradient-positions: _radial-positions-parser($gradient-positions); 11 | } 12 | @return $gradient-positions; 13 | } 14 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_linear-angle-parser.scss: -------------------------------------------------------------------------------- 1 | // Private function for linear-gradient-parser 2 | @function _linear-angle-parser($image, $first-val, $prefix, $suffix) { 3 | $offset: null; 4 | $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val)); 5 | $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val)); 6 | 7 | @if ($unit-long == "grad") or 8 | ($unit-long == "turn") { 9 | $offset: if($unit-long == "grad", -100grad * 3, -0.75turn); 10 | } 11 | 12 | @else if ($unit-short == "deg") or 13 | ($unit-short == "rad") { 14 | $offset: if($unit-short == "deg", -90 * 3, 1.6rad); 15 | } 16 | 17 | @if $offset { 18 | $num: _str-to-num($first-val); 19 | 20 | @return ( 21 | webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix, 22 | spec-image: $image 23 | ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_linear-gradient-parser.scss: -------------------------------------------------------------------------------- 1 | @function _linear-gradient-parser($image) { 2 | $image: unquote($image); 3 | $gradients: (); 4 | $start: str-index($image, "("); 5 | $end: str-index($image, ","); 6 | $first-val: str-slice($image, $start + 1, $end - 1); 7 | 8 | $prefix: str-slice($image, 1, $start); 9 | $suffix: str-slice($image, $end, str-length($image)); 10 | 11 | $has-multiple-vals: str-index($first-val, " "); 12 | $has-single-position: unquote(_position-flipper($first-val) + ""); 13 | $has-angle: is-number(str-slice($first-val, 1, 1)); 14 | 15 | @if $has-multiple-vals { 16 | $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals); 17 | } 18 | 19 | @else if $has-single-position != "" { 20 | $pos: unquote($has-single-position + ""); 21 | 22 | $gradients: ( 23 | webkit-image: -webkit- + $image, 24 | spec-image: $prefix + "to " + $pos + $suffix 25 | ); 26 | } 27 | 28 | @else if $has-angle { 29 | // Rotate degree for webkit 30 | $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix); 31 | } 32 | 33 | @else { 34 | $gradients: ( 35 | webkit-image: -webkit- + $image, 36 | spec-image: $image 37 | ); 38 | } 39 | 40 | @return $gradients; 41 | } 42 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_linear-positions-parser.scss: -------------------------------------------------------------------------------- 1 | @function _linear-positions-parser($pos) { 2 | $type: type-of(nth($pos, 1)); 3 | $spec: null; 4 | $degree: null; 5 | $side: null; 6 | $corner: null; 7 | $length: length($pos); 8 | // Parse Side and corner positions 9 | @if ($length > 1) { 10 | @if nth($pos, 1) == "to" { // Newer syntax 11 | $side: nth($pos, 2); 12 | 13 | @if $length == 2 { // eg. to top 14 | // Swap for backwards compatibility 15 | $degree: _position-flipper(nth($pos, 2)); 16 | } 17 | @else if $length == 3 { // eg. to top left 18 | $corner: nth($pos, 3); 19 | } 20 | } 21 | @else if $length == 2 { // Older syntax ("top left") 22 | $side: _position-flipper(nth($pos, 1)); 23 | $corner: _position-flipper(nth($pos, 2)); 24 | } 25 | 26 | @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") { 27 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 28 | } 29 | @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") { 30 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 31 | } 32 | @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") { 33 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 34 | } 35 | @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") { 36 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 37 | } 38 | $spec: to $side $corner; 39 | } 40 | @else if $length == 1 { 41 | // Swap for backwards compatibility 42 | @if $type == string { 43 | $degree: $pos; 44 | $spec: to _position-flipper($pos); 45 | } 46 | @else { 47 | $degree: -270 - $pos; //rotate the gradient opposite from spec 48 | $spec: $pos; 49 | } 50 | } 51 | $degree: unquote($degree + ","); 52 | $spec: unquote($spec + ","); 53 | @return $degree $spec; 54 | } 55 | 56 | @function _position-flipper($pos) { 57 | @return if($pos == left, right, null) 58 | if($pos == right, left, null) 59 | if($pos == top, bottom, null) 60 | if($pos == bottom, top, null); 61 | } 62 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_linear-side-corner-parser.scss: -------------------------------------------------------------------------------- 1 | // Private function for linear-gradient-parser 2 | @function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) { 3 | $val-1: str-slice($first-val, 1, $has-multiple-vals - 1); 4 | $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val)); 5 | $val-3: null; 6 | $has-val-3: str-index($val-2, " "); 7 | 8 | @if $has-val-3 { 9 | $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2)); 10 | $val-2: str-slice($val-2, 1, $has-val-3 - 1); 11 | } 12 | 13 | $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3); 14 | $pos: unquote($pos + ""); 15 | 16 | // Use old spec for webkit 17 | @if $val-1 == "to" { 18 | @return ( 19 | webkit-image: -webkit- + $prefix + $pos + $suffix, 20 | spec-image: $image 21 | ); 22 | } 23 | 24 | // Bring the code up to spec 25 | @else { 26 | @return ( 27 | webkit-image: -webkit- + $image, 28 | spec-image: $prefix + "to " + $pos + $suffix 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_radial-arg-parser.scss: -------------------------------------------------------------------------------- 1 | @function _radial-arg-parser($g1, $g2, $pos, $shape-size) { 2 | @each $value in $g1, $g2 { 3 | $first-val: nth($value, 1); 4 | $pos-type: type-of($first-val); 5 | $spec-at-index: null; 6 | 7 | // Determine if spec was passed to mixin 8 | @if type-of($value) == list { 9 | $spec-at-index: if(index($value, at), index($value, at), false); 10 | } 11 | @if $spec-at-index { 12 | @if $spec-at-index > 1 { 13 | @for $i from 1 through ($spec-at-index - 1) { 14 | $shape-size: $shape-size nth($value, $i); 15 | } 16 | @for $i from ($spec-at-index + 1) through length($value) { 17 | $pos: $pos nth($value, $i); 18 | } 19 | } 20 | @else if $spec-at-index == 1 { 21 | @for $i from ($spec-at-index + 1) through length($value) { 22 | $pos: $pos nth($value, $i); 23 | } 24 | } 25 | $g1: null; 26 | } 27 | 28 | // If not spec calculate correct values 29 | @else { 30 | @if ($pos-type != color) or ($first-val != "transparent") { 31 | @if ($pos-type == number) 32 | or ($first-val == "center") 33 | or ($first-val == "top") 34 | or ($first-val == "right") 35 | or ($first-val == "bottom") 36 | or ($first-val == "left") { 37 | 38 | $pos: $value; 39 | 40 | @if $pos == $g1 { 41 | $g1: null; 42 | } 43 | } 44 | 45 | @else if 46 | ($first-val == "ellipse") 47 | or ($first-val == "circle") 48 | or ($first-val == "closest-side") 49 | or ($first-val == "closest-corner") 50 | or ($first-val == "farthest-side") 51 | or ($first-val == "farthest-corner") 52 | or ($first-val == "contain") 53 | or ($first-val == "cover") { 54 | 55 | $shape-size: $value; 56 | 57 | @if $value == $g1 { 58 | $g1: null; 59 | } 60 | 61 | @else if $value == $g2 { 62 | $g2: null; 63 | } 64 | } 65 | } 66 | } 67 | } 68 | @return $g1, $g2, $pos, $shape-size; 69 | } 70 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_radial-gradient-parser.scss: -------------------------------------------------------------------------------- 1 | @function _radial-gradient-parser($image) { 2 | $image: unquote($image); 3 | $gradients: (); 4 | $start: str-index($image, "("); 5 | $end: str-index($image, ","); 6 | $first-val: str-slice($image, $start + 1, $end - 1); 7 | 8 | $prefix: str-slice($image, 1, $start); 9 | $suffix: str-slice($image, $end, str-length($image)); 10 | 11 | $is-spec-syntax: str-index($first-val, "at"); 12 | 13 | @if $is-spec-syntax and $is-spec-syntax > 1 { 14 | $keyword: str-slice($first-val, 1, $is-spec-syntax - 2); 15 | $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); 16 | $pos: append($pos, $keyword, comma); 17 | 18 | $gradients: ( 19 | webkit-image: -webkit- + $prefix + $pos + $suffix, 20 | spec-image: $image 21 | ); 22 | } 23 | 24 | @else if $is-spec-syntax == 1 { 25 | $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); 26 | 27 | $gradients: ( 28 | webkit-image: -webkit- + $prefix + $pos + $suffix, 29 | spec-image: $image 30 | ); 31 | } 32 | 33 | @else if str-index($image, "cover") or str-index($image, "contain") { 34 | @warn "Radial-gradient needs to be updated to conform to latest spec."; 35 | 36 | $gradients: ( 37 | webkit-image: null, 38 | spec-image: $image 39 | ); 40 | } 41 | 42 | @else { 43 | $gradients: ( 44 | webkit-image: -webkit- + $image, 45 | spec-image: $image 46 | ); 47 | } 48 | 49 | @return $gradients; 50 | } 51 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_radial-positions-parser.scss: -------------------------------------------------------------------------------- 1 | @function _radial-positions-parser($gradient-pos) { 2 | $shape-size: nth($gradient-pos, 1); 3 | $pos: nth($gradient-pos, 2); 4 | $shape-size-spec: _shape-size-stripper($shape-size); 5 | 6 | $pre-spec: unquote(if($pos, "#{$pos}, ", null)) 7 | unquote(if($shape-size, "#{$shape-size},", null)); 8 | $pos-spec: if($pos, "at #{$pos}", null); 9 | 10 | $spec: "#{$shape-size-spec} #{$pos-spec}"; 11 | 12 | // Add comma 13 | @if ($spec != " ") { 14 | $spec: "#{$spec},"; 15 | } 16 | 17 | @return $pre-spec $spec; 18 | } 19 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_render-gradients.scss: -------------------------------------------------------------------------------- 1 | // User for linear and radial gradients within background-image or border-image properties 2 | 3 | @function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) { 4 | $pre-spec: null; 5 | $spec: null; 6 | $vendor-gradients: null; 7 | @if $gradient-type == linear { 8 | @if $gradient-positions { 9 | $pre-spec: nth($gradient-positions, 1); 10 | $spec: nth($gradient-positions, 2); 11 | } 12 | } 13 | @else if $gradient-type == radial { 14 | $pre-spec: nth($gradient-positions, 1); 15 | $spec: nth($gradient-positions, 2); 16 | } 17 | 18 | @if $vendor { 19 | $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients); 20 | } 21 | @else if $vendor == false { 22 | $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})"; 23 | $vendor-gradients: unquote($vendor-gradients); 24 | } 25 | @return $vendor-gradients; 26 | } 27 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_shape-size-stripper.scss: -------------------------------------------------------------------------------- 1 | @function _shape-size-stripper($shape-size) { 2 | $shape-size-spec: null; 3 | @each $value in $shape-size { 4 | @if ($value == "cover") or ($value == "contain") { 5 | $value: null; 6 | } 7 | $shape-size-spec: "#{$shape-size-spec} #{$value}"; 8 | } 9 | @return $shape-size-spec; 10 | } 11 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/helpers/_str-to-num.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Helper function for linear/radial-gradient-parsers. 3 | // Source: http://sassmeister.com/gist/9647408 4 | //************************************************************************// 5 | @function _str-to-num($string) { 6 | // Matrices 7 | $strings: "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"; 8 | $numbers: 0 1 2 3 4 5 6 7 8 9; 9 | 10 | // Result 11 | $result: 0; 12 | $divider: 0; 13 | $minus: false; 14 | 15 | // Looping through all characters 16 | @for $i from 1 through str-length($string) { 17 | $character: str-slice($string, $i, $i); 18 | $index: index($strings, $character); 19 | 20 | @if $character == "-" { 21 | $minus: true; 22 | } 23 | 24 | @else if $character == "." { 25 | $divider: 1; 26 | } 27 | 28 | @else { 29 | @if not $index { 30 | $result: if($minus, $result * -1, $result); 31 | @return _convert-units($result, str-slice($string, $i)); 32 | } 33 | 34 | $number: nth($numbers, $index); 35 | 36 | @if $divider == 0 { 37 | $result: $result * 10; 38 | } 39 | 40 | @else { 41 | // Move the decimal dot to the left 42 | $divider: $divider * 10; 43 | $number: $number / $divider; 44 | } 45 | 46 | $result: $result + $number; 47 | } 48 | } 49 | @return if($minus, $result * -1, $result); 50 | } 51 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/settings/_asset-pipeline.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// A global setting to enable or disable the `$asset-pipeline` variable for all functions that accept it. 4 | /// 5 | /// @type Bool 6 | 7 | $asset-pipeline: false !default; 8 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/settings/_prefixer.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Global variables to enable or disable vendor prefixes 4 | 5 | $prefix-for-webkit: true !default; 6 | $prefix-for-mozilla: true !default; 7 | $prefix-for-microsoft: true !default; 8 | $prefix-for-opera: true !default; 9 | $prefix-for-spec: true !default; 10 | -------------------------------------------------------------------------------- /assets/sass/vendor/bourbon/settings/_px-to-em.scss: -------------------------------------------------------------------------------- 1 | $em-base: 16px !default; 2 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fonticons (https://fonticons.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/sass/vendor/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/sass/vendor/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/sass/vendor/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/sass/vendor/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/assets/sass/vendor/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /assets/sass/vendor/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/_neat-helpers.scss: -------------------------------------------------------------------------------- 1 | // Functions 2 | @import "functions/private"; 3 | @import "functions/new-breakpoint"; 4 | 5 | // Settings 6 | @import "settings/grid"; 7 | @import "settings/visual-grid"; 8 | @import "settings/disable-warnings"; 9 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/_neat.scss: -------------------------------------------------------------------------------- 1 | // Neat 1.7.4 2 | // http://neat.bourbon.io 3 | // Copyright 2012-2015 thoughtbot, inc. 4 | // MIT License 5 | 6 | // Helpers 7 | @import "neat-helpers"; 8 | 9 | // Grid 10 | @import "grid/private"; 11 | @import "grid/box-sizing"; 12 | @import "grid/omega"; 13 | @import "grid/outer-container"; 14 | @import "grid/span-columns"; 15 | @import "grid/row"; 16 | @import "grid/shift"; 17 | @import "grid/pad"; 18 | @import "grid/fill-parent"; 19 | @import "grid/media"; 20 | @import "grid/to-deprecate"; 21 | @import "grid/visual-grid"; 22 | @import "grid/display-context"; 23 | @import "grid/direction-context"; 24 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/functions/_new-breakpoint.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Returns a media context (media query / grid context) that can be stored in a variable and passed to `media()` as a single-keyword argument. Media contexts defined using `new-breakpoint` are used by the visual grid, as long as they are defined before importing Neat. 4 | /// 5 | /// @param {List} $query 6 | /// A list of media query features and values. Each `$feature` should have a corresponding `$value`. 7 | /// 8 | /// If there is only a single `$value` in `$query`, `$default-feature` is going to be used. 9 | /// 10 | /// The number of total columns in the grid can be set by passing `$columns` at the end of the list (overrides `$total-columns`). For a list of valid values for `$feature`, click [here](http://www.w3.org/TR/css3-mediaqueries/#media1). 11 | /// 12 | /// @param {Number (unitless)} $total-columns [$grid-columns] 13 | /// - Number of columns to use in the new grid context. Can be set as a shorthand in the first parameter. 14 | /// 15 | /// @example scss - Usage 16 | /// $mobile: new-breakpoint(max-width 480px 4); 17 | /// 18 | /// .element { 19 | /// @include media($mobile) { 20 | /// @include span-columns(4); 21 | /// } 22 | /// } 23 | /// 24 | /// @example css - CSS Output 25 | /// @media screen and (max-width: 480px) { 26 | /// .element { 27 | /// display: block; 28 | /// float: left; 29 | /// margin-right: 7.42297%; 30 | /// width: 100%; 31 | /// } 32 | /// .element:last-child { 33 | /// margin-right: 0; 34 | /// } 35 | /// } 36 | 37 | @function new-breakpoint($query: $feature $value $columns, $total-columns: $grid-columns) { 38 | @if length($query) == 1 { 39 | $query: $default-feature nth($query, 1) $total-columns; 40 | } @else if is-even(length($query)) { 41 | $query: append($query, $total-columns); 42 | } 43 | 44 | @if is-not(belongs-to($query, $visual-grid-breakpoints)) { 45 | $visual-grid-breakpoints: append($visual-grid-breakpoints, $query, comma) !global; 46 | } 47 | 48 | @return $query; 49 | } 50 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_box-sizing.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | @if $border-box-sizing == true { 4 | html { // http://bit.ly/1qk2tVR 5 | box-sizing: border-box; 6 | } 7 | 8 | * { 9 | &, 10 | &::after, 11 | &::before { 12 | box-sizing: inherit; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_direction-context.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Changes the direction property used by other mixins called in the code block argument. 4 | /// 5 | /// @param {String} $direction [left-to-right] 6 | /// Layout direction to be used within the block. Can be `left-to-right` or `right-to-left`. 7 | /// 8 | /// @example scss - Usage 9 | /// @include direction-context(right-to-left) { 10 | /// .right-to-left-block { 11 | /// @include span-columns(6); 12 | /// } 13 | /// } 14 | /// 15 | /// @example css - CSS Output 16 | /// .right-to-left-block { 17 | /// float: right; 18 | /// ... 19 | /// } 20 | 21 | @mixin direction-context($direction: left-to-right) { 22 | $scope-direction: $layout-direction; 23 | 24 | @if to-lower-case($direction) == "left-to-right" { 25 | $layout-direction: LTR !global; 26 | } @else if to-lower-case($direction) == "right-to-left" { 27 | $layout-direction: RTL !global; 28 | } 29 | 30 | @content; 31 | 32 | $layout-direction: $scope-direction !global; 33 | } 34 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_display-context.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Changes the display property used by other mixins called in the code block argument. 4 | /// 5 | /// @param {String} $display [block] 6 | /// Display value to be used within the block. Can be `table` or `block`. 7 | /// 8 | /// @example scss 9 | /// @include display-context(table) { 10 | /// .display-table { 11 | /// @include span-columns(6); 12 | /// } 13 | /// } 14 | /// 15 | /// @example css 16 | /// .display-table { 17 | /// display: table-cell; 18 | /// ... 19 | /// } 20 | 21 | @mixin display-context($display: block) { 22 | $scope-display: $container-display-table; 23 | $container-display-table: $display == table !global; 24 | 25 | @content; 26 | 27 | $container-display-table: $scope-display !global; 28 | } 29 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_fill-parent.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Forces the element to fill its parent container. 4 | /// 5 | /// @example scss - Usage 6 | /// .element { 7 | /// @include fill-parent; 8 | /// } 9 | /// 10 | /// @example css - CSS Output 11 | /// .element { 12 | /// width: 100%; 13 | /// box-sizing: border-box; 14 | /// } 15 | 16 | @mixin fill-parent() { 17 | width: 100%; 18 | 19 | @if $border-box-sizing == false { 20 | box-sizing: border-box; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_media.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Outputs a media-query block with an optional grid context (the total number of columns used in the grid). 4 | /// 5 | /// @param {List} $query 6 | /// A list of media query features and values, where each `$feature` should have a corresponding `$value`. 7 | /// For a list of valid values for `$feature`, click [here](http://www.w3.org/TR/css3-mediaqueries/#media1). 8 | /// 9 | /// If there is only a single `$value` in `$query`, `$default-feature` is going to be used. 10 | /// 11 | /// The number of total columns in the grid can be set by passing `$columns` at the end of the list (overrides `$total-columns`). 12 | /// 13 | /// 14 | /// @param {Number (unitless)} $total-columns [$grid-columns] 15 | /// - Number of columns to use in the new grid context. Can be set as a shorthand in the first parameter. 16 | /// 17 | /// @example scss - Usage 18 | /// .responsive-element { 19 | /// @include media(769px) { 20 | /// @include span-columns(6); 21 | /// } 22 | /// } 23 | /// 24 | /// .new-context-element { 25 | /// @include media(min-width 320px max-width 480px, 6) { 26 | /// @include span-columns(6); 27 | /// } 28 | /// } 29 | /// 30 | /// @example css - CSS Output 31 | /// @media screen and (min-width: 769px) { 32 | /// .responsive-element { 33 | /// display: block; 34 | /// float: left; 35 | /// margin-right: 2.35765%; 36 | /// width: 48.82117%; 37 | /// } 38 | /// 39 | /// .responsive-element:last-child { 40 | /// margin-right: 0; 41 | /// } 42 | /// } 43 | /// 44 | /// @media screen and (min-width: 320px) and (max-width: 480px) { 45 | /// .new-context-element { 46 | /// display: block; 47 | /// float: left; 48 | /// margin-right: 4.82916%; 49 | /// width: 100%; 50 | /// } 51 | /// 52 | /// .new-context-element:last-child { 53 | /// margin-right: 0; 54 | /// } 55 | /// } 56 | 57 | @mixin media($query: $feature $value $columns, $total-columns: $grid-columns) { 58 | @if length($query) == 1 { 59 | @media screen and ($default-feature: nth($query, 1)) { 60 | $default-grid-columns: $grid-columns; 61 | $grid-columns: $total-columns !global; 62 | @content; 63 | $grid-columns: $default-grid-columns !global; 64 | } 65 | } @else { 66 | $loop-to: length($query); 67 | $media-query: "screen and "; 68 | $default-grid-columns: $grid-columns; 69 | $grid-columns: $total-columns !global; 70 | 71 | @if is-not(is-even(length($query))) { 72 | $grid-columns: nth($query, $loop-to) !global; 73 | $loop-to: $loop-to - 1; 74 | } 75 | 76 | $i: 1; 77 | @while $i <= $loop-to { 78 | $media-query: $media-query + "(" + nth($query, $i) + ": " + nth($query, $i + 1) + ") "; 79 | 80 | @if ($i + 1) != $loop-to { 81 | $media-query: $media-query + "and "; 82 | } 83 | 84 | $i: $i + 2; 85 | } 86 | 87 | @media #{$media-query} { 88 | @content; 89 | $grid-columns: $default-grid-columns !global; 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_omega.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Removes the element's gutter margin, regardless of its position in the grid hierarchy or display property. It can target a specific element, or every `nth-child` occurrence. Works only with `block` layouts. 4 | /// 5 | /// @param {List} $query [block] 6 | /// List of arguments. Supported arguments are `nth-child` selectors (targets a specific pseudo element) and `auto` (targets `last-child`). 7 | /// 8 | /// When passed an `nth-child` argument of type `*n` with `block` display, the omega mixin automatically adds a clear to the `*n+1` th element. Note that composite arguments such as `2n+1` do not support this feature. 9 | /// 10 | /// **Deprecation warning**: The omega mixin will no longer take a `$direction` argument. To change the layout direction, use `row($direction)` or set `$default-layout-direction` instead. 11 | /// 12 | /// @example scss - Usage 13 | /// .element { 14 | /// @include omega; 15 | /// } 16 | /// 17 | /// .nth-element { 18 | /// @include omega(4n); 19 | /// } 20 | /// 21 | /// @example css - CSS Output 22 | /// .element { 23 | /// margin-right: 0; 24 | /// } 25 | /// 26 | /// .nth-element:nth-child(4n) { 27 | /// margin-right: 0; 28 | /// } 29 | /// 30 | /// .nth-element:nth-child(4n+1) { 31 | /// clear: left; 32 | /// } 33 | 34 | @mixin omega($query: block, $direction: default) { 35 | $table: belongs-to(table, $query); 36 | $auto: belongs-to(auto, $query); 37 | 38 | @if $direction != default { 39 | @include -neat-warn("The omega mixin will no longer take a $direction argument. To change the layout direction, use the direction(){...} mixin."); 40 | } @else { 41 | $direction: get-direction($layout-direction, $default-layout-direction); 42 | } 43 | 44 | @if $table { 45 | @include -neat-warn("The omega mixin no longer removes padding in table layouts."); 46 | } 47 | 48 | @if length($query) == 1 { 49 | @if $auto { 50 | &:last-child { 51 | margin-#{$direction}: 0; 52 | } 53 | } 54 | 55 | @else if contains-display-value($query) and $table == false { 56 | margin-#{$direction}: 0; 57 | } 58 | 59 | @else { 60 | @include nth-child($query, $direction); 61 | } 62 | } @else if length($query) == 2 { 63 | @if $auto { 64 | &:last-child { 65 | margin-#{$direction}: 0; 66 | } 67 | } @else { 68 | @include nth-child(nth($query, 1), $direction); 69 | } 70 | } @else { 71 | @include -neat-warn("Too many arguments passed to the omega() mixin."); 72 | } 73 | } 74 | 75 | @mixin nth-child($query, $direction) { 76 | $opposite-direction: get-opposite-direction($direction); 77 | 78 | &:nth-child(#{$query}) { 79 | margin-#{$direction}: 0; 80 | } 81 | 82 | @if type-of($query) == number and unit($query) == "n" { 83 | &:nth-child(#{$query}+1) { 84 | clear: $opposite-direction; 85 | } 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_outer-container.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Makes an element a outer container by centering it in the viewport, clearing its floats, and setting its `max-width`. 4 | /// Although optional, using `outer-container` is recommended. The mixin can be called on more than one element per page, as long as they are not nested. 5 | /// 6 | /// @param {Number [unit]} $local-max-width [$max-width] 7 | /// Max width to be applied to the element. Can be a percentage or a measure. 8 | /// 9 | /// @example scss - Usage 10 | /// .element { 11 | /// @include outer-container(100%); 12 | /// } 13 | /// 14 | /// @example css - CSS Output 15 | /// .element { 16 | /// max-width: 100%; 17 | /// margin-left: auto; 18 | /// margin-right: auto; 19 | /// } 20 | /// 21 | /// .element::after { 22 | /// clear: both; 23 | /// content: ""; 24 | /// display: table; 25 | /// } 26 | 27 | @mixin outer-container($local-max-width: $max-width) { 28 | @include clearfix; 29 | max-width: $local-max-width; 30 | margin: { 31 | left: auto; 32 | right: auto; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_pad.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Adds padding to the element. 4 | /// 5 | /// @param {List} $padding [flex-gutter()] 6 | /// A list of padding value(s) to use. Passing `default` in the list will result in using the gutter width as a padding value. 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include pad(30px -20px 10px default); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// padding: 30px -20px 10px 2.35765%; 16 | /// } 17 | 18 | @mixin pad($padding: flex-gutter()) { 19 | $padding-list: null; 20 | @each $value in $padding { 21 | $value: if($value == 'default', flex-gutter(), $value); 22 | $padding-list: join($padding-list, $value); 23 | } 24 | padding: $padding-list; 25 | } 26 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_private.scss: -------------------------------------------------------------------------------- 1 | $parent-columns: $grid-columns !default; 2 | $fg-column: $column; 3 | $fg-gutter: $gutter; 4 | $fg-max-columns: $grid-columns; 5 | $container-display-table: false !default; 6 | $layout-direction: LTR !default; 7 | 8 | @function flex-grid($columns, $container-columns: $fg-max-columns) { 9 | $width: $columns * $fg-column + ($columns - 1) * $fg-gutter; 10 | $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; 11 | @return percentage($width / $container-width); 12 | } 13 | 14 | @function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) { 15 | $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; 16 | @return percentage($gutter / $container-width); 17 | } 18 | 19 | @function grid-width($n) { 20 | @return $n * $gw-column + ($n - 1) * $gw-gutter; 21 | } 22 | 23 | @function get-parent-columns($columns) { 24 | @if $columns != $grid-columns { 25 | $parent-columns: $columns !global; 26 | } @else { 27 | $parent-columns: $grid-columns !global; 28 | } 29 | 30 | @return $parent-columns; 31 | } 32 | 33 | @function is-display-table($container-is-display-table, $display) { 34 | @return $container-is-display-table == true or $display == table; 35 | } 36 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_row.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Designates the element as a row of columns in the grid layout. It clears the floats on the element and sets its display property. Rows can't be nested, but there can be more than one row element—with different display properties—per layout. 4 | /// 5 | /// @param {String} $display [default] 6 | /// Sets the display property of the element and the display context that will be used by its children. Can be `block` or `table`. 7 | /// 8 | /// @param {String} $direction [$default-layout-direction] 9 | /// Sets the layout direction. Can be `LTR` (left-to-right) or `RTL` (right-to-left). 10 | /// 11 | /// @example scss - Usage 12 | /// .element { 13 | /// @include row(); 14 | /// } 15 | /// 16 | /// @example css - CSS Output 17 | /// .element { 18 | /// *zoom: 1; 19 | /// display: block; 20 | /// } 21 | /// 22 | /// .element:before, .element:after { 23 | /// content: " "; 24 | /// display: table; 25 | /// } 26 | /// 27 | /// .element:after { 28 | /// clear: both; 29 | /// } 30 | 31 | @mixin row($display: default, $direction: $default-layout-direction) { 32 | @if $direction != $default-layout-direction { 33 | @include -neat-warn("The $direction argument will be deprecated in future versions in favor of the direction(){...} mixin."); 34 | } 35 | 36 | $layout-direction: $direction !global; 37 | 38 | @if $display != default { 39 | @include -neat-warn("The $display argument will be deprecated in future versions in favor of the display(){...} mixin."); 40 | } 41 | 42 | @if $display == table { 43 | display: table; 44 | @include fill-parent; 45 | table-layout: fixed; 46 | $container-display-table: true !global; 47 | } @else { 48 | @include clearfix; 49 | display: block; 50 | $container-display-table: false !global; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_shift.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Translates an element horizontally by a number of columns. Positive arguments shift the element to the active layout direction, while negative ones shift it to the opposite direction. 4 | /// 5 | /// @param {Number (unitless)} $n-columns [1] 6 | /// Number of columns by which the element shifts. 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include shift(-3); 11 | /// } 12 | /// 13 | /// @example css - CSS output 14 | /// .element { 15 | /// margin-left: -25.58941%; 16 | /// } 17 | 18 | @mixin shift($n-columns: 1) { 19 | @include shift-in-context($n-columns); 20 | } 21 | 22 | /// Translates an element horizontally by a number of columns, in a specific nesting context. 23 | /// 24 | /// @param {List} $shift 25 | /// A list containing the number of columns to shift (`$columns`) and the number of columns of the parent element (`$container-columns`). 26 | /// 27 | /// The two values can be separated with any string such as `of`, `/`, etc. 28 | /// 29 | /// @example scss - Usage 30 | /// .element { 31 | /// @include shift(-3 of 6); 32 | /// } 33 | /// 34 | /// @example css - CSS output 35 | /// .element { 36 | /// margin-left: -52.41458%; 37 | /// } 38 | 39 | @mixin shift-in-context($shift: $columns of $container-columns) { 40 | $n-columns: nth($shift, 1); 41 | $parent-columns: container-shift($shift) !global; 42 | 43 | $direction: get-direction($layout-direction, $default-layout-direction); 44 | $opposite-direction: get-opposite-direction($direction); 45 | 46 | margin-#{$opposite-direction}: $n-columns * flex-grid(1, $parent-columns) + $n-columns * flex-gutter($parent-columns); 47 | 48 | // Reset nesting context 49 | $parent-columns: $grid-columns !global; 50 | } 51 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/grid/_visual-grid.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | @mixin grid-column-gradient($values...) { 4 | background-image: -webkit-linear-gradient(left, $values); 5 | background-image: -moz-linear-gradient(left, $values); 6 | background-image: -ms-linear-gradient(left, $values); 7 | background-image: -o-linear-gradient(left, $values); 8 | background-image: unquote("linear-gradient(to left, #{$values})"); 9 | } 10 | 11 | @if $visual-grid == true or $visual-grid == yes { 12 | body:before { 13 | @include grid-column-gradient(gradient-stops($grid-columns)); 14 | content: ""; 15 | display: inline-block; 16 | height: 100%; 17 | left: 0; 18 | margin: 0 auto; 19 | max-width: $max-width; 20 | opacity: $visual-grid-opacity; 21 | pointer-events: none; 22 | position: fixed; 23 | right: 0; 24 | width: 100%; 25 | 26 | @if $visual-grid-index == back { 27 | z-index: -1; 28 | } 29 | 30 | @else if $visual-grid-index == front { 31 | z-index: 9999; 32 | } 33 | 34 | @each $breakpoint in $visual-grid-breakpoints { 35 | @if $breakpoint { 36 | @include media($breakpoint) { 37 | @include grid-column-gradient(gradient-stops($grid-columns)); 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/settings/_disable-warnings.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Disable all deprecation warnings. Defaults to `false`. Set with a `!global` flag. 4 | /// 5 | /// @type Bool 6 | 7 | $disable-warnings: false !default; 8 | 9 | @mixin -neat-warn($message) { 10 | @if $disable-warnings == false { 11 | @warn "#{$message}"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/settings/_grid.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Sets the relative width of a single grid column. The unit used should be the same one used to define `$gutter`. To learn more about `modular-scale()` see [Bourbon docs](http://bourbon.io/docs/#modular-scale). Set with a `!global` flag. 4 | /// 5 | /// @type Number (Unit) 6 | 7 | $column: modular-scale(3, 1em, $golden) !default; 8 | 9 | /// Sets the relative width of a single grid gutter. The unit used should be the same one used to define `$column`. To learn more about `modular-scale()` see [Bourbon docs](http://bourbon.io/docs/#modular-scale). Set with the `!global` flag. 10 | /// 11 | /// @type Number (Unit) 12 | 13 | $gutter: modular-scale(1, 1em, $golden) !default; 14 | 15 | /// Sets the total number of columns in the grid. Its value can be overridden inside a media query using the `media()` mixin. Set with the `!global` flag. 16 | /// 17 | /// @type Number (Unitless) 18 | 19 | $grid-columns: 12 !default; 20 | 21 | /// Sets the max-width property of the element that includes `outer-container()`. Set with the `!global` flag. 22 | /// 23 | /// @type Number (Unit) 24 | /// 25 | $max-width: 1200px !default; 26 | 27 | /// When set to true, it sets the box-sizing property of all elements to `border-box`. Set with a `!global` flag. 28 | /// 29 | /// @type Bool 30 | /// 31 | /// @example css - CSS Output 32 | /// html { 33 | /// box-sizing: border-box; } 34 | /// 35 | /// *, *::after, *::before { 36 | /// box-sizing: inherit; 37 | /// } 38 | 39 | $border-box-sizing: true !default; 40 | 41 | /// Sets the default [media feature](http://www.w3.org/TR/css3-mediaqueries/#media) that `media()` and `new-breakpoint()` revert to when only a breakpoint value is passed. Set with a `!global` flag. 42 | /// 43 | /// @type String 44 | 45 | $default-feature: min-width; // Default @media feature for the breakpoint() mixin 46 | 47 | ///Sets the default layout direction of the grid. Can be `LTR` or `RTL`. Set with a `!global` flag. 48 | /// 49 | ///@type String 50 | 51 | $default-layout-direction: LTR !default; 52 | -------------------------------------------------------------------------------- /assets/sass/vendor/neat/settings/_visual-grid.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Displays the visual grid when set to true. The overlaid grid may be few pixels off depending on the browser's rendering engine and pixel rounding algorithm. Set with the `!global` flag. 4 | /// 5 | /// @type Bool 6 | 7 | $visual-grid: false !default; 8 | 9 | /// Sets the visual grid color. Set with `!global` flag. 10 | /// 11 | /// @type Color 12 | 13 | $visual-grid-color: #eee !default; 14 | 15 | /// Sets the `z-index` property of the visual grid. Can be `back` (behind content) or `front` (in front of content). Set with `!global` flag. 16 | /// 17 | /// @type String 18 | 19 | $visual-grid-index: back !default; 20 | 21 | /// Sets the opacity property of the visual grid. Set with `!global` flag. 22 | /// 23 | /// @type Number (unitless) 24 | 25 | $visual-grid-opacity: 0.4 !default; 26 | 27 | $visual-grid-breakpoints: () !default; 28 | -------------------------------------------------------------------------------- /inc/autoloader.php: -------------------------------------------------------------------------------- 1 | prefix = $prefix; 14 | $this->prefix_length = strlen( $prefix ); 15 | $this->path = trailingslashit( $path ); 16 | } 17 | 18 | public function load( $class ) { 19 | if ( strpos( $class, $this->prefix . self::NS_SEPARATOR ) !== 0 ) { 20 | return; 21 | } 22 | 23 | // Strip prefix from the start (ala PSR-4) 24 | $class = substr( $class, $this->prefix_length + 1 ); 25 | $class = strtolower( $class ); 26 | $file = ''; 27 | 28 | if ( false !== ( $last_ns_pos = strripos( $class, self::NS_SEPARATOR ) ) ) { 29 | $namespace = substr( $class, 0, $last_ns_pos ); 30 | $class = substr( $class, $last_ns_pos + 1 ); 31 | $file = str_replace( self::NS_SEPARATOR, DIRECTORY_SEPARATOR, $namespace ) . DIRECTORY_SEPARATOR; 32 | } 33 | $file .= 'class-' . str_replace( '_', '-', $class ) . '.php'; 34 | 35 | $path = $this->path . $file; 36 | 37 | if ( file_exists( $path ) ) { 38 | require_once $path; 39 | } 40 | } 41 | } 42 | 43 | function register_class_path( $prefix, $path ) { 44 | $loader = new Autoloader( $prefix, $path ); 45 | spl_autoload_register( [ $loader, 'load' ] ); 46 | } -------------------------------------------------------------------------------- /inc/menu-api.php: -------------------------------------------------------------------------------- 1 | 'image', 'label' => 'Image', 'type' => 'attachment' ), 19 | array( 'name' => 'bg_image', 'label' => 'Background Image (optional)', 'type' => 'attachment' ), 20 | array( 'name' => 'heading', 'label' => 'Heading', 'type' => 'text', 'value' => '' ), 21 | array( 'name' => 'subheading', 'label' => 'Subheading (optional)', 'type' => 'text', 'value' => '' ), 22 | array( 'name' => 'button', 'label' => 'Button Text (optional)', 'type' => 'link', 'value' => '' ), 23 | ); 24 | 25 | public function get_json() { 26 | $data = parent::get_json(); 27 | $data['image'] = array_map( function ( $val ) { 28 | return wp_get_attachment_image_src( $val, 'large' ); 29 | }, $data['image'] ); 30 | 31 | $data['bg_image'] = wp_get_attachment_image_src( $data['bg_image'][0], 'large' )[0]; 32 | 33 | return $data; 34 | } 35 | 36 | public function render() { 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /inc/page_builder_modules/class-intro.php: -------------------------------------------------------------------------------- 1 | 'image', 'label' => 'Content', 'type' => 'attachment' ), 19 | array( 'name' => 'intro_text', 'label' => 'Introduction', 'type' => 'text', 'value' => '' ), 20 | array( 'name' => 'button_text', 'label' => 'Button Text (optional)', 'type' => 'text', 'value' => '' ), 21 | array( 'name' => 'button_url', 'label' => 'Button Link (optional)', 'type' => 'text', 'value' => '' ), 22 | ); 23 | 24 | public function get_json() { 25 | $data = parent::get_json(); 26 | $data['image'] = array_map( function ( $val ) { 27 | return wp_get_attachment_image_src( $val, 'large' ); 28 | }, $data['image'] ); 29 | 30 | return $data; 31 | } 32 | 33 | public function render() { 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /inc/page_builder_modules/class-map.php: -------------------------------------------------------------------------------- 1 | 'latitude', 'label' => 'Latitude', 'type' => 'text', 'value' => '' ), 13 | array( 'name' => 'longitude', 'label' => 'Longitude', 'type' => 'text', 'value' => '' ), 14 | array( 'name' => 'zoom', 'label' => 'Zoom Level', 'type' => 'number', 'value' => '' ), 15 | array( 'name' => 'place_id', 'label' => 'Google Place ID', 'type' => 'text', 'value' => '' ), 16 | ); 17 | 18 | public function render() { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /inc/page_builder_modules/class-organised-by.php: -------------------------------------------------------------------------------- 1 | 'heading', 'label' => 'Heading', 'type' => 'text', 'value' => '' ), 19 | ); 20 | 21 | public function render() { 22 | } 23 | } 24 | 25 | -------------------------------------------------------------------------------- /inc/page_builder_modules/class-speakers-overview.php: -------------------------------------------------------------------------------- 1 | 'heading', 'label' => 'Heading', 'type' => 'text', 'value' => '' ), 19 | array( 'name' => 'subheading', 'label' => 'Subheading', 'type' => 'text', 'value' => '' ), 20 | ); 21 | 22 | public function render() { 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /inc/page_builder_modules/class-sponsors-block.php: -------------------------------------------------------------------------------- 1 | 'heading', 'label' => 'Heading (optional)', 'type' => 'text', 'value' => '' ), 20 | array( 'name' => 'become_a_sponsor_button', 21 | 'label' => 'Become a sponsor button(optional)', 22 | 'type' => 'link', 23 | 'value' => '' 24 | ), 25 | ); 26 | 27 | public function render() { 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /inc/page_builder_modules/class-sponsors-detail.php: -------------------------------------------------------------------------------- 1 | 'heading', 'label' => 'Heading', 'type' => 'text', 'value' => '' ), 19 | array( 'name' => 'subheading', 'label' => 'Subheading', 'type' => 'text', 'value' => '' ), 20 | ); 21 | 22 | public function render() { 23 | } 24 | } 25 | 26 | -------------------------------------------------------------------------------- /inc/page_builder_modules/class-twitter-timeline.php: -------------------------------------------------------------------------------- 1 | 'username', 'label' => 'Twitter Username', 'type' => 'text', 'value' => '' ), 13 | array( 'name' => 'widget_id', 'label' => 'Twitter Widget ID', 'type' => 'text', 'value' => '' ), 14 | ); 15 | 16 | public function render() { 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /inc/page_builder_modules/class-workshops.php: -------------------------------------------------------------------------------- 1 | 'heading', 'label' => 'Heading', 'type' => 'text', 'value' => '' ), 19 | array( 'name' => 'subheading', 'label' => 'Subheading', 'type' => 'text', 'value' => '' ), 20 | ); 21 | 22 | public function render() { 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <?php wp_title( '·', true, 'right' ); ?> A Day of REST 5 | 6 | 7 | 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | > 22 | 40 | 41 | 42 |
43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /js/api.js: -------------------------------------------------------------------------------- 1 | import jQuery from 'jquery'; 2 | 3 | module.exports = { 4 | 5 | api_url: app_data.api_url, 6 | 7 | lastRequest: null, 8 | 9 | get: function ( url, data, callback ) { 10 | 11 | return this.request( 'GET', url, data, callback ); 12 | }, 13 | 14 | post: function ( url, data, callback ) { 15 | 16 | return this.request( 'POST', url, data, callback ); 17 | }, 18 | 19 | request: function ( method, url, data, callback ) { 20 | 21 | var lastRequest = { 22 | method: method, 23 | url: url, 24 | args: data, 25 | isLoading: true, 26 | data: null 27 | } 28 | 29 | var xhr = jQuery.ajax( this.api_url + url, { 30 | data: data, 31 | success: ( data ) => { 32 | this.lastRequest = lastRequest 33 | this.lastRequest.isLoading = false 34 | this.lastRequest.data = data 35 | if ( ! callback ) { 36 | return; 37 | } 38 | callback( data, null, xhr.getAllResponseHeaders() ); 39 | }, 40 | method: method, 41 | beforeSend: ( jqxhr ) => { 42 | jqxhr.setRequestHeader( 'X-WP-Nonce', app_data.nonce ) 43 | } 44 | } ); 45 | 46 | xhr.fail( err => { 47 | this.lastRequest = lastRequest 48 | this.lastRequest.isLoading = false 49 | 50 | if ( xhr.status === 0 ) { 51 | if ( xhr.statusText === 'abort' ) { 52 | // Has been aborted 53 | return; 54 | } else { 55 | // Offline mode 56 | } 57 | } 58 | 59 | if ( err.responseJSON && err.responseJSON[0] ) { 60 | this.lastRequest.data = err.responseJSON[0] 61 | if ( ! callback ) { 62 | return; 63 | } 64 | callback( null, err.responseJSON[0] ); 65 | } else { 66 | alert( err.statusText ); 67 | } 68 | } ); 69 | 70 | return xhr; 71 | }, 72 | } 73 | -------------------------------------------------------------------------------- /js/components/APIConsole.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Api from '../api' 3 | 4 | module.exports = React.createClass( { 5 | propTypes: { 6 | isExpanded: React.PropTypes.bool.isRequired, 7 | onExpand: React.PropTypes.func 8 | }, 9 | render: function () { 10 | 11 | if ( ! Api.lastRequest ) { 12 | return
13 | } 14 | 15 | return ( 16 |
17 | {this.props.isExpanded 18 | ?
19 |
20 |

This page was rendered using the WP REST API, below we show the request and response data 21 | that was made.

22 | 23 |

Request URL

24 |
{Api.lastRequest.method} {Api.lastRequest.url} {JSON.stringify( Api.lastRequest.args )}
26 | 27 |

Response Data

28 | 29 |
{JSON.stringify( Api.lastRequest.data, null, 2 )}
30 |
31 |
32 | : '' 33 | } 34 |
35 |
36 | View API Request 39 |
40 |
41 | {Api.lastRequest.method} {Api.lastRequest.url} 43 | {Api.lastRequest.isLoading 44 | ? 'Loading...' 45 | : {JSON.stringify( Api.lastRequest.data )} 47 | } 48 |
49 |
50 |
51 | ) 52 | } 53 | } ) 54 | -------------------------------------------------------------------------------- /js/components/App.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Menu from './Menu' 3 | import APIConsole from './APIConsole' 4 | import RouteCSSTransition from './RouteCSSTransitionGroup' 5 | 6 | module.exports = React.createClass( { 7 | 8 | handleToggleMenu: function () { 9 | this.props.dispatch( {type: 'TOGGLE_MENU'} ) 10 | }, 11 | handleToggleExpandConsole: function () { 12 | this.props.dispatch( {type: 'TOGGLED_CONSOLE'} ) 13 | }, 14 | handleToggleOtherEventsMenu: function () { 15 | this.props.dispatch( {type: 'TOGGLE_OTHER_EVENTS_MENU'} ) 16 | }, 17 | render: function () { 18 | return ( 19 |
20 | 24 |
25 | 30 |
{this.props.children }
31 |
32 |
33 | 34 |
35 | ) 36 | } 37 | } ) 38 | -------------------------------------------------------------------------------- /js/components/Button.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | module.exports = React.createClass( { 4 | 5 | propTypes: { 6 | classes: React.PropTypes.string, 7 | url: React.PropTypes.string.isRequired, 8 | text: React.PropTypes.string.isRequired, 9 | icon: React.PropTypes.string, 10 | onClick: React.PropTypes.func 11 | }, 12 | 13 | render: function () { 14 | return ( 15 | 17 | {this.props.icon && 18 | 19 | } 20 | {this.props.text} 21 | 22 | ) 23 | } 24 | } ) 25 | -------------------------------------------------------------------------------- /js/components/BuyTicketsButton.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Link} from 'react-router' 3 | 4 | module.exports = React.createClass( { 5 | render: function () { 6 | return {this.props.children} 7 | } 8 | } ) 9 | -------------------------------------------------------------------------------- /js/components/Menu.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Link} from 'react-router' 3 | import MenuItem from './MenuItem.jsx' 4 | import {fetchMenuByLocation} from '../actions' 5 | 6 | module.exports = React.createClass( { 7 | 8 | propTypes: { 9 | menu: React.PropTypes.object.isRequired, 10 | onClick: React.PropTypes.func, 11 | currentPath: React.PropTypes.string, 12 | onToggle: React.PropTypes.func, 13 | isExpanded: React.PropTypes.bool, 14 | showingOtherEventsMenu: React.PropTypes.bool 15 | }, 16 | 17 | componentDidMount: function () { 18 | this.props.dispatch( fetchMenuByLocation( 'primary_navigation' ) ) 19 | }, 20 | 21 | render: function () { 22 | return ( 23 | 56 | ) 57 | } 58 | } ) 59 | -------------------------------------------------------------------------------- /js/components/MenuItem.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Link} from 'react-router' 3 | import {extend} from 'lodash/object' 4 | 5 | module.exports = React.createClass( { 6 | 7 | render: function () { 8 | 9 | var ListItem = React.createClass( { 10 | render: function () { 11 | var item = extend( { 12 | url: false, 13 | text: false, 14 | date: false, 15 | children: false, 16 | key: false 17 | }, this.props.item ); 18 | 19 | var classNames = []; 20 | if ( item.currentPath === item.url ) { 21 | classNames.push( 'current' ); 22 | } 23 | if ( item.children && item.children.length ) { 24 | classNames.push( 'has-submenu' ); 25 | } 26 | 27 | return item.url && ( 28 |
  • 29 | { item.url.match( /^http/ ) ? 30 | {item.text} 31 | { item.date && {item.date} } 32 | : 33 | {item.text} 34 | { item.date && {item.date} } 35 | } 36 | { item.children && 37 |
      38 | { item.children.map( item => { 39 | return 40 | } ) } 41 |
    } 42 |
  • 43 | ) 44 | } 45 | } ) 46 | 47 | return ( 48 | 49 | ); 50 | } 51 | } ) 52 | -------------------------------------------------------------------------------- /js/components/Post.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Link} from 'react-router' 3 | import moment from 'moment' 4 | import Button from './Button' 5 | 6 | module.exports = React.createClass( { 7 | 8 | propTypes: { 9 | title: React.PropTypes.object.isRequired, 10 | content: React.PropTypes.object.isRequired, 11 | date: React.PropTypes.string.isRequired, 12 | slug: React.PropTypes.string.isRequired 13 | }, 14 | 15 | onShare: function ( e ) { 16 | if ( typeof FB !== 'undefined' ) { 17 | e.preventDefault() 18 | FB.ui( { 19 | method: 'share', 20 | href: this.props.link, 21 | }, function ( response ) { 22 | } ) 23 | } 24 | }, 25 | 26 | render: function () { 27 | return ( 28 |
    29 |
    30 |
    31 |

    33 | Posted on {moment( this.props.date ).format( "D MMMM, YYYY" )} 34 |
    35 |
    36 | 37 |
    38 |
    45 |
    46 |
    47 | ) 48 | } 49 | } ) 50 | -------------------------------------------------------------------------------- /js/components/Preview.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Post from './pages/Post' 3 | import Page from './pages/Page' 4 | import Speaker from './pages/Speaker' 5 | import {fetchPreviewById} from '../actions' 6 | 7 | module.exports = React.createClass( { 8 | 9 | willPreview: false, 10 | 11 | componentWillMount: function () { 12 | var query = this.props.router.location.query; 13 | 14 | // Dispatch preview 15 | if ( query.preview ) { 16 | this.willPreview = true 17 | this.props.dispatch( fetchPreviewById( 18 | query.p || app_data.post_id, app_data.type 19 | ) ) 20 | } 21 | }, 22 | 23 | render: function () { 24 | 25 | if ( this.props.posts.preview ) { 26 | switch ( this.props.posts.preview.parent_type ) { 27 | case 'post' : 28 | return 29 | case 'page' : 30 | return 31 | case 'speaker': 32 | return 33 | } 34 | } 35 | 36 | return this.willPreview ?
    : this.props.children 37 | } 38 | 39 | } ) 40 | -------------------------------------------------------------------------------- /js/components/RouteCSSTransitionGroup.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactCSSTransitionGroup from 'react-addons-css-transition-group' 3 | import StaticContainer from 'react-static-container' 4 | 5 | module.exports = React.createClass( { 6 | contextTypes: { 7 | location: React.PropTypes.object 8 | }, 9 | 10 | getInitialState: function () { 11 | return { 12 | previousPathname: null 13 | } 14 | }, 15 | 16 | componentWillReceiveProps: function ( nextProps, nextContext ) { 17 | if ( nextContext.location.pathname !== this.context.location.pathname ) { 18 | this.setState( {previousPathname: this.context.location.pathname} ) 19 | } 20 | }, 21 | 22 | render: function () { 23 | const {children, ...props} = this.props 24 | const {previousPathname} = this.state 25 | 26 | return ( 27 | 28 | 32 | {children} 33 | 34 | 35 | ) 36 | }, 37 | 38 | componentDidUpdate: function () { 39 | if ( this.state.previousPathname ) { 40 | this.setState( {previousPathname: null} ) 41 | } 42 | } 43 | } ) 44 | -------------------------------------------------------------------------------- /js/components/modules/Blockquote.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | module.exports = React.createClass( { 4 | propTypes: { 5 | text: React.PropTypes.string.isRequired, 6 | source: React.PropTypes.string.isRequired 7 | }, 8 | render: function () { 9 | return
    10 |

    {this.props.text}

    11 |
    12 | } 13 | } ) 14 | -------------------------------------------------------------------------------- /js/components/modules/CallToActionBlock.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Button from '../Button' 3 | 4 | module.exports = React.createClass( { 5 | 6 | render: function () { 7 | var divStyle 8 | if ( this.props.bg_image ) { 9 | var bg_img_url = this.props.bg_image 10 | divStyle = { 11 | background: 'linear-gradient(rgba(34, 48, 63, 0.75), rgba(34, 48, 63, 0.85)), url(' + bg_img_url + ')', 12 | backgroundPosition: '50% 50%', 13 | backgroundSize: 'cover' 14 | } 15 | } 16 | return ( 17 |
    18 |
    19 | { this.props.image.length > 0 && 20 | 21 | } 22 |
    23 | {this.props.heading && 24 |

    {this.props.heading}

    25 | } 26 | { this.props.subheading && 27 |

    {this.props.subheading}

    28 | } 29 |
    30 | { this.props.button.link && this.props.button.text ? 31 |
    34 |
    35 | ) 36 | } 37 | 38 | } ); 39 | -------------------------------------------------------------------------------- /js/components/modules/Header.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | module.exports = React.createClass( { 4 | propTypes: { 5 | heading: React.PropTypes.string.isRequired, 6 | subheading: React.PropTypes.string.isRequired 7 | }, 8 | render: function () { 9 | return ( 10 |
    11 |
    12 |

    {this.props.heading}

    13 | { this.props.subheading ? 14 |

    {this.props.subheading}

    15 | : '' } 16 |
    17 |
    18 | ) 19 | } 20 | } ) 21 | -------------------------------------------------------------------------------- /js/components/modules/Image.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | module.exports = React.createClass( { 4 | propTypes: { 5 | image: React.PropTypes.array.isRequired, 6 | caption: React.PropTypes.string 7 | }, 8 | render: function () { 9 | return
    10 | 11 |
    {this.props.caption}
    12 |
    13 | } 14 | } ) 15 | -------------------------------------------------------------------------------- /js/components/modules/Intro.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Button from '../Button' 3 | 4 | module.exports = React.createClass( { 5 | 6 | render: function () { 7 | return ( 8 |
    9 |
    10 | { this.props.image[0][0] ? 11 | 12 | : '' } 13 | { this.props.intro_text ? 14 |

    15 | : '' } 16 | { this.props.button_url && this.props.button_text ? 17 |

    24 |
    25 | ) 26 | } 27 | 28 | } ); 29 | -------------------------------------------------------------------------------- /js/components/modules/Loading.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | module.exports = React.createClass( { 4 | render: function () { 5 | return ( 6 |
    7 |
    8 |
    {this.props.message || "Loading..." }
    9 |
    10 | ) 11 | } 12 | } ) 13 | -------------------------------------------------------------------------------- /js/components/modules/Map.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {GoogleMapLoader, GoogleMap, Marker} from "react-google-maps"; 3 | 4 | module.exports = React.createClass( { 5 | propTypes: { 6 | latitude: React.PropTypes.string, 7 | longitude: React.PropTypes.string, 8 | place_id: React.PropTypes.string, 9 | zoom: React.PropTypes.number 10 | }, 11 | render: function () { 12 | return ( 13 | 16 | } 17 | googleMapElement={ 18 | 23 | 27 | 28 | } 29 | /> 30 | ) 31 | } 32 | } ) 33 | -------------------------------------------------------------------------------- /js/components/modules/OrganisedBy.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | module.exports = React.createClass( { 4 | render: function () { 5 | return ( 6 |
    7 |
    8 |

    A Day of Rest is organised by

    9 |
      10 |
    • Human Made 12 |
    • 13 |
    • Post Status 15 |
    • 16 |
    17 |
    18 |
    19 | ) 20 | } 21 | } ) 22 | -------------------------------------------------------------------------------- /js/components/modules/SpeakersOverview.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {fetchSpeakers} from '../../actions' 3 | import {Link} from 'react-router' 4 | import Loading from './Loading' 5 | import Header from './Header' 6 | 7 | module.exports = React.createClass( { 8 | 9 | componentDidMount: function () { 10 | this.props.dispatch( fetchSpeakers() ) 11 | }, 12 | 13 | render: function () { 14 | 15 | if ( ! this.props.posts.speakers.length ) { 16 | return ( 17 |
    18 |
    Gathering speakers...
    19 |
    20 | ) 21 | } 22 | 23 | return ( 24 |
    25 | { this.props.heading &&
    } 26 |
    27 | {this.props.posts.speakers.map( speaker => { 28 | var attr = {key: speaker.id} 29 | if ( speaker._embedded && speaker._embedded['wp:featuredmedia'] ) { 30 | attr.style = {backgroundImage: 'url(' + speaker._embedded['wp:featuredmedia'][0].source_url + ')'} 31 | } 32 | return 33 |
    34 |

    35 | {speaker.title.rendered} 36 | {speaker.company} 37 |

    38 |
    39 | 40 | 41 | } )} 42 |
    43 |
    44 | ) 45 | } 46 | } ) 47 | -------------------------------------------------------------------------------- /js/components/modules/TestimonialSlider.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {fetchTestimonials} from '../../actions' 3 | import Slider from 'react-slick' 4 | 5 | module.exports = React.createClass( { 6 | 7 | componentDidMount: function () { 8 | this.props.dispatch( fetchTestimonials() ) 9 | }, 10 | 11 | render: function () { 12 | if ( ! this.props.posts.testimonials.length ) { 13 | return ( 14 |
    15 |
    Retrieving Testimonials...
    16 |
    17 | ) 18 | } 19 | 20 | var testimonials = this.props.posts.testimonials; 21 | 22 | var settings = { 23 | dots: false, 24 | infinite: true, 25 | speed: 500, 26 | slidesToShow: 1, 27 | slidesToScroll: 1 28 | } 29 | 30 | return ( 31 |
    32 |
    33 |
      34 | 35 | {testimonials.map( testimonial => { 36 | return ( 37 |
    • 38 | 39 |
      40 | 41 | {testimonial.title.rendered} 42 | { testimonial.byline && ! testimonial.company_url && 43 | , {testimonial.byline} 44 | } 45 | { testimonial.byline && testimonial.company_url && 46 | , 47 | {testimonial.byline} 48 | 49 | } 50 | 51 |
    • 52 | ) 53 | } 54 | )} 55 |
      56 |
    57 |
    58 |
    59 | ) 60 | } 61 | } ) 62 | -------------------------------------------------------------------------------- /js/components/modules/Text.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | module.exports = React.createClass( { 4 | propTypes: { 5 | body: React.PropTypes.string.isRequired 6 | }, 7 | componentWillReceiveProps: function ( nextProps ) { 8 | if ( nextProps.body ) { 9 | nextProps.body = nextProps.body 10 | .replace( '', '' ) 12 | } 13 | }, 14 | render: function () { 15 | return ( 16 |
    17 |
    18 |
    19 |
    20 |
    21 | ) 22 | } 23 | } ) 24 | -------------------------------------------------------------------------------- /js/components/modules/Tickets.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | module.exports = React.createClass( { 4 | 5 | render: function () { 6 | return ( 7 |
    8 |
    9 |

    {this.props.heading}

    10 | { this.props.subheading ? 11 |

    {this.props.subheading}

    12 | : '' } 13 |
    14 |
    15 | ) 16 | } 17 | 18 | } ); 19 | -------------------------------------------------------------------------------- /js/components/modules/TwitterTimeline.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | module.exports = React.createClass( { 4 | propTypes: { 5 | username: React.PropTypes.string, 6 | widget_id: React.PropTypes.string 7 | }, 8 | componentDidMount: function () { 9 | window.twttr = ( 10 | function ( d, s, id ) { 11 | var js, fjs = d.getElementsByTagName( s )[0], 12 | t = window.twttr || {}; 13 | if ( d.getElementById( id ) ) { 14 | return t; 15 | } 16 | js = d.createElement( s ); 17 | js.id = id; 18 | js.src = "https://platform.twitter.com/widgets.js"; 19 | fjs.parentNode.insertBefore( js, fjs ); 20 | 21 | t._e = []; 22 | t.ready = function ( f ) { 23 | t._e.push( f ); 24 | }; 25 | 26 | return t; 27 | }( document, "script", "twitter-wjs" ) 28 | ); 29 | }, 30 | componentDidUpdate: function () { 31 | twttr.widgets.load(); 32 | }, 33 | render: function () { 34 | return 38 | } 39 | } ) 40 | -------------------------------------------------------------------------------- /js/components/pages/BuyTickets.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | module.exports = React.createClass( { 4 | render: function () { 5 | return ( 6 | 7 |
    8 |
    9 |
    10 |

    BUY YOUR TICKET!

    11 |

    28th January 2016, Conway Hall, London

    12 | 13 | 15 |

    WANT TO JOIN US FOR SOME REST IN JANUARY? WHO WOULDN’T? GENERAL TICKETS COVER THE EVENT 16 | ITSELF, INCLUDING LUNCH, BREAKS, AND SWAG, AND A FUN AFTER-PARTY.

    17 |
    18 |
    19 |
    20 | ) 21 | } 22 | } ) 23 | -------------------------------------------------------------------------------- /js/components/pages/NotFound.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Header from '../modules/Header' 3 | 4 | module.exports = React.createClass( { 5 | 6 | render: function () { 7 | 8 | return ( 9 |
    10 |
    11 |
    12 |
    13 |
    15 |
    16 |
    17 |
    18 | ) 19 | } 20 | } ) 21 | -------------------------------------------------------------------------------- /js/components/pages/Post.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {findWhere} from 'underscore' 3 | import {fetchPostBySlug} from '../../actions' 4 | import Post from '../Post' 5 | 6 | module.exports = React.createClass( { 7 | 8 | componentDidMount: function () { 9 | if ( ! this.props.posts.preview ) { 10 | this.props.dispatch( fetchPostBySlug( this.props.routeParams.slug ) ) 11 | } 12 | }, 13 | 14 | render: function () { 15 | var post = this.props.posts.preview || findWhere( this.props.posts.posts, {slug: this.props.routeParams.slug} ) 16 | 17 | if ( ! post ) { 18 | return ( 19 |
    20 |
    Loading
    21 |
    22 | ) 23 | } 24 | 25 | return ( 26 |
    27 |
    28 | 29 |
    30 |
    31 | 32 |
    33 |
    34 | 35 | ) 36 | } 37 | } ) 38 | -------------------------------------------------------------------------------- /js/components/pages/Posts.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {fetchPosts} from '../../actions' 3 | import Post from '../Post' 4 | 5 | module.exports = React.createClass( { 6 | 7 | componentDidMount: function () { 8 | this.props.dispatch( fetchPosts() ) 9 | }, 10 | 11 | render: function () { 12 | if ( ! this.props.posts.posts.length ) { 13 | return ( 14 |
    15 |
    Loading
    16 |
    17 | ) 18 | } 19 | return ( 20 |
    21 |
    22 | 23 |
    24 |
    25 |

    News

    26 |
      27 | {this.props.posts.posts.map( post => { 28 | return
    • 29 | 30 |
    • 31 | } )} 32 |
    33 |
    34 |
    35 | 36 | ) 37 | } 38 | } ) 39 | -------------------------------------------------------------------------------- /js/components/pages/Speaker.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {findWhere} from 'underscore' 3 | import {fetchSpeaker} from '../../actions' 4 | 5 | module.exports = React.createClass( { 6 | 7 | componentDidMount: function () { 8 | if ( ! this.props.posts.preview ) { 9 | this.props.dispatch( fetchSpeaker( Number( this.props.routeParams.id ) ) ) 10 | } 11 | window.addEventListener( 'scroll', this.eventListener = () => { 12 | if ( this.refs.parallax ) { 13 | this.refs.parallax.style.backgroundPosition = "0 -" + window.scrollY + 'px' 14 | } 15 | } ) 16 | }, 17 | 18 | componentWillUnmount: function () { 19 | window.removeEventListener( 'scroll', this.eventListener ) 20 | }, 21 | 22 | render: function () { 23 | var user = this.props.posts.preview || findWhere( this.props.posts.speakers, {id: Number( this.props.routeParams.id )} ) 24 | 25 | if ( ! user ) { 26 | return ( 27 |
    28 |
    Loading
    29 |
    30 | ) 31 | } 32 | 33 | return ( 34 |
    35 |
    36 | 37 |

    38 |
    {user.title.rendered}
    39 |

    40 |
    41 |
    42 |
    43 |
    44 |

    {user.company}

    45 | { user._embedded && user._embedded['wp:featuredmedia'] &&
    } 50 |
    51 |
    52 |
    53 |
    54 |
    55 | ) 56 | } 57 | } ) 58 | -------------------------------------------------------------------------------- /js/components/pages/Speakers.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {fetchSpeakers} from '../../actions' 3 | import {Link} from 'react-router' 4 | 5 | module.exports = React.createClass( { 6 | 7 | componentDidMount: function () { 8 | this.props.dispatch( fetchSpeakers() ) 9 | }, 10 | 11 | render: function () { 12 | if ( ! this.props.posts.speakers.length ) { 13 | return ( 14 |
    15 |
    Loading
    16 |
    17 | ) 18 | } 19 | return ( 20 |
      21 | {this.props.posts.speakers.map( speaker => { 22 | var attr = {key: speaker.id} 23 | if ( speaker._embedded && speaker._embedded['wp:featuredmedia'] ) { 24 | attr.style = {backgroundImage: 'url(' + speaker._embedded['wp:featuredmedia'][0].source_url + ')'} 25 | } 26 | return
    • 27 | 28 |

      {speaker.title.rendered}

      29 |

      {speaker.company}

      30 | 31 |
    • 32 | } )} 33 |
    34 | ) 35 | } 36 | } ) 37 | -------------------------------------------------------------------------------- /js/components/pages/Workshops.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {fetchWorkshops} from '../../actions' 3 | import {Link} from 'react-router' 4 | 5 | module.exports = React.createClass( { 6 | 7 | componentDidMount: function () { 8 | this.props.dispatch( fetchWorkshops() ) 9 | }, 10 | 11 | render: function () { 12 | if ( ! this.props.posts.workshops.length ) { 13 | return ( 14 |
    15 |
    Loading
    16 |
    17 | ) 18 | } 19 | return ( 20 |
      21 | {this.props.posts.workshops.map( workshop => { 22 | var attr = {key: workshop.id} 23 | if ( workshop._embedded && workshop._embedded['wp:featuredmedia'] ) { 24 | attr.style = {backgroundImage: 'url(' + workshop._embedded['wp:featuredmedia'][0].source_url + ')'} 25 | } 26 | return
    • 27 | 28 |

      {workshop.title.rendered}

      29 | 30 |
    • 31 | } )} 32 |
    33 | ) 34 | } 35 | } ) 36 | 37 | -------------------------------------------------------------------------------- /js/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom' 3 | import {compose, createStore, applyMiddleware} from 'redux' 4 | import {Provider, connect} from 'react-redux' 5 | import {reduxReactRouter, ReduxRouter} from 'redux-router' 6 | import {Router, Route, IndexRoute} from 'react-router' 7 | import createLogger from 'redux-logger' 8 | import thunkMiddleware from 'redux-thunk' 9 | import App from './components/App' 10 | import reducers from './reducers' 11 | import createHistory from 'history/lib/createBrowserHistory' 12 | import useBasename from 'history/lib/useBasename' 13 | import withScroll from 'scroll-behavior' 14 | import BuyTickets from './components/pages/BuyTickets' 15 | import Speakers from './components/pages/Speakers' 16 | import Speaker from './components/pages/Speaker' 17 | import Workshops from './components/pages/Workshops' 18 | import Workshop from './components/pages/Workshop' 19 | import Posts from './components/pages/Posts' 20 | import Page from './components/pages/Page' 21 | import Post from './components/pages/Post' 22 | import Preview from './components/Preview' 23 | import NotFound from './components/pages/NotFound' 24 | 25 | 26 | var logger = createLogger( { 27 | level: 'info', 28 | collapsed: false 29 | } ) 30 | 31 | var AppWithReduxConnected = connect( state => state )( App ) 32 | 33 | const history = withScroll( useBasename( createHistory )( {basename: app_data.base} ), ( prevLocation, location ) => ( 34 | prevLocation && location.pathname === prevLocation.pathname ? [0, 0] : true 35 | ) ) 36 | 37 | const routes = ( 38 | 39 | 40 | state )( Preview )}> 41 | state )( Page )}/> 42 | state )( Page )}/> 43 | state )( Speakers )}/> 44 | state )( Speaker )}/> 45 | state )( Workshops )}/> 46 | state )( Workshop )}/> 47 | state )( Posts )}/> 48 | state )( Post )}/> 49 | 50 | 51 | 52 | 53 | ); 54 | 55 | const store = compose( 56 | applyMiddleware( thunkMiddleware, logger ), 57 | reduxReactRouter( {history} ) 58 | )( createStore )( reducers ) 59 | 60 | ReactDOM.render( 61 | 62 | {routes} 63 | , 64 | document.getElementById( 'app' ) 65 | ) 66 | -------------------------------------------------------------------------------- /js/reducers.js: -------------------------------------------------------------------------------- 1 | import {combineReducers} from 'redux' 2 | import {routerStateReducer} from 'redux-router'; 3 | import {findWhere} from 'underscore' 4 | 5 | function posts( 6 | state = { 7 | speakers: [], 8 | workshops: [], 9 | posts: [], 10 | pages: [], 11 | pointsOfInterest: [], 12 | sponsors: [], 13 | testimonials: [], 14 | preview: null 15 | }, action 16 | ) { 17 | switch ( action.type ) { 18 | case 'UPDATE_SPEAKERS': 19 | state.speakers = action.speakers 20 | break 21 | case 'UPDATE_SPEAKER': 22 | if ( ! findWhere( state.speakers, {id: action.speaker.id} ) ) { 23 | state.speakers.push( action.speaker ); 24 | } 25 | break 26 | case 'UPDATE_WORKSHOPS': 27 | state.workshops = action.workshops 28 | break 29 | case 'UPDATE_WORKSHOP': 30 | if ( ! findWhere( state.workshops, {id: action.workshop.id} ) ) { 31 | state.workshops.push( action.workshop ) 32 | } 33 | break 34 | case 'UPDATE_SPONSORS': 35 | state.sponsors = action.sponsors 36 | break 37 | case 'UPDATE_POINTS_OF_INTEREST': 38 | state.pointsOfInterest = action.pointsOfInterest 39 | break 40 | case 'UPDATE_POSTS': 41 | state.posts = action.posts 42 | break 43 | case 'UPDATE_POST': 44 | if ( action.post && ! findWhere( state.posts, {id: action.post.id} ) ) { 45 | state.posts.push( action.post ); 46 | } 47 | break 48 | case 'UPDATE_PAGES': 49 | state.pages = action.pages 50 | break 51 | case 'UPDATE_PAGE': 52 | if ( ! findWhere( state.pages, {id: action.page.id} ) ) { 53 | state.pages.push( action.page ); 54 | } 55 | break 56 | case 'UPDATE_PREVIEW': 57 | state.preview = action.post 58 | break 59 | case 'UPDATE_TESTIMONIALS': 60 | state.testimonials = action.testimonials 61 | break 62 | } 63 | return {...state} 64 | } 65 | 66 | function menu( state = {items: []}, action ) { 67 | 68 | switch ( action.type ) { 69 | case 'UPDATE_MENU': 70 | return {...state, items: action.items} 71 | } 72 | 73 | return {...state} 74 | } 75 | 76 | 77 | function display( state = {consoleExpanded: false, showingMenu: false, isGoingBack: false}, action ) { 78 | 79 | switch ( action.type ) { 80 | case 'TOGGLED_CONSOLE': 81 | state.consoleExpanded = ! state.consoleExpanded 82 | break 83 | case 'TOGGLE_MENU': 84 | state.showingMenu = ! state.showingMenu 85 | break 86 | case '@@reduxReactRouter/routerDidChange': 87 | state.showingMenu = false 88 | break 89 | } 90 | 91 | return {...state} 92 | } 93 | 94 | var reducers = combineReducers( { 95 | menu, 96 | router: routerStateReducer, 97 | posts, 98 | display 99 | } ) 100 | 101 | module.exports = reducers 102 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "feelingrestful", 3 | "version": "1.0.0", 4 | "description": "WordPress theme for A Day of REST", 5 | "main": "index.php", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+ssh://git@github.com/humanmade/Human-Made-website.git" 12 | }, 13 | "author": "Human Made", 14 | "license": "GPL-2.0", 15 | "bugs": { 16 | "url": "https://github.com/humanmade/Human-Made-website/issues" 17 | }, 18 | "homepage": "https://github.com/humanmade/Human-Made-website#readme", 19 | "devDependencies": { 20 | "babel-core": "~5.8.22", 21 | "babel-loader": "~5.3.2", 22 | "grunt-autoprefixer": "^3.0.3", 23 | "grunt-contrib-watch": "^1.0.0", 24 | "grunt-sass": "^1.1.0", 25 | "grunt-webpack": "^1.0.18", 26 | "history": "^1.12.5", 27 | "jquery": "^2.1.4", 28 | "lodash": "^4.11.1", 29 | "moment": "^2.13.0", 30 | "object-assign": "~4.0.1", 31 | "react": "^0.14.0", 32 | "react-addons-css-transition-group": "^0.14.2", 33 | "react-dom": "^0.14.0", 34 | "react-google-maps": "^4.2.0", 35 | "react-redux": "~4.0.0", 36 | "react-router": "^1.0.0-rc3", 37 | "react-slick": "^0.12.0", 38 | "react-static-container": "^1.0.0", 39 | "redux": "^3.5.2", 40 | "redux-logger": "~1.0.6", 41 | "redux-router": "^1.0.0-beta3", 42 | "redux-thunk": "~0.1.0", 43 | "scroll-behavior": "^0.7.0", 44 | "underscore": "^1.8.3", 45 | "webpack": "^1.12.2", 46 | "webpack-dev-server": "^1.12.0", 47 | "webpack-livereload-plugin": "^0.8.0" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/humanmade/feelingrestful-theme/4bb557fc6bc5728ec20ef6b780e9a8de05e9764f/screenshot.png -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | /* 2 | Theme Name: Feeling RESTful - ADOR Boston 3 | Theme URI: https://github.com/humanmade/feelingrestful-theme 4 | Author: Human Made Limited 5 | Author URI: http://hmn.md/ 6 | Description: A updated version of Feeling RESTful Theme, for the A Day of Rest Boston Event. 7 | Version: 2.0.1 8 | License: GNU General Public License v2 or later 9 | License URI: http://www.gnu.org/licenses/gpl-2.0.html 10 | Text Domain: feelingrestful-theme 11 | Stylesheet located in: dist/main.css 12 | */ 13 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require( 'path' ); 2 | var LiveReloadPlugin = require( 'webpack-livereload-plugin' ); 3 | var webpack = require( 'webpack' ) 4 | 5 | module.exports = { 6 | // webpack options 7 | cache: true, 8 | entry: ["./js/index.js"], 9 | output: { 10 | path: "dist/", 11 | filename: "main.js", 12 | sourceMapFilename: '[file].map', 13 | publicPath: '/js/' 14 | }, 15 | 16 | stats: { 17 | // Configure the console output 18 | colors: true, 19 | modules: true, 20 | reasons: true 21 | }, 22 | module: { 23 | loaders: [ 24 | { 25 | test: /\.jsx?$/, 26 | exclude: /(node_modules|bower_components)/, 27 | loaders: ['babel'] 28 | } 29 | ] 30 | }, 31 | 32 | plugins: [ 33 | new webpack.DefinePlugin( { 34 | 'process.env': { 35 | 'NODE_ENV': JSON.stringify( 'production' ) 36 | } 37 | } ), 38 | new LiveReloadPlugin() 39 | ], 40 | 41 | externals: { 42 | //don't bundle the 'react' npm package with our bundle.js 43 | //but get it from a global 'React' variable 44 | //'react': 'React', 45 | //'react/addons' : 'React', 46 | 'google/maps': 'google.maps' 47 | }, 48 | 49 | resolve: { 50 | extensions: ['', '.js', '.jsx'] 51 | }, 52 | // stats: false disables the stats output 53 | 54 | progress: false, // Don't show progress 55 | // Defaults to true 56 | 57 | failOnError: false, // don't report error to grunt if webpack find errors 58 | // Use this if webpack errors are tolerable and grunt should continue 59 | 60 | watch: false, // use webpacks watcher 61 | // You need to keep the grunt process alive 62 | 63 | keepalive: false, // don't finish the grunt task 64 | // Use this in combination with the watch option 65 | } 66 | --------------------------------------------------------------------------------