├── .ruby-version ├── CNAME ├── sass ├── _temporary.scss ├── modules │ ├── _all.scss │ ├── _functions.scss │ ├── _colors.scss │ ├── _mixins.scss │ └── _typography.scss ├── partials │ ├── components │ │ ├── _gallery.scss │ │ ├── _pagination.scss │ │ ├── _widget.scss │ │ ├── _iconnav.scss │ │ ├── _search.scss │ │ ├── _logo.scss │ │ ├── _authorbox.scss │ │ ├── _article.scss │ │ ├── _syntax.scss │ │ ├── _menu.scss │ │ └── _lightbox.scss │ ├── layout │ │ ├── _sidebar.scss │ │ ├── _footer.scss │ │ ├── _index.scss │ │ ├── _post.scss │ │ └── _header.scss │ ├── _base.scss │ └── _general.scss ├── assets │ ├── _fixed-width.scss │ ├── _bordered-pulled.scss │ ├── _larger.scss │ ├── _core.scss │ ├── _list.scss │ ├── _font-awesome.scss │ ├── _stacked.scss │ ├── _spinning.scss │ ├── _path.scss │ ├── _rotated-flipped.scss │ ├── _mixins.scss │ ├── _prism.scss │ └── _variables.scss ├── main.scss ├── grid.scss ├── classic.scss └── _reset.scss ├── googlee0f82badf009e6eb.html ├── README.md ├── img ├── talk.jpg ├── contact.jpg ├── pydata.png ├── swirl.jpg ├── on_stage.jpg ├── profile-pic.jpg ├── pydata_members.jpg ├── pydata_london_meetup.jpg └── pydata_london2019_keynote.jpg ├── _layouts ├── index_alt.html ├── category_index.html ├── tag_index.html ├── index.html ├── page_full.html ├── page.html ├── author_index.html ├── post_full.html └── post.html ├── fonts ├── FontAwesome.otf ├── Roboto-Black-webfont.eot ├── Roboto-Black-webfont.ttf ├── Roboto-Light-webfont.eot ├── Roboto-Light-webfont.ttf ├── fontawesome-webfont.eot ├── fontawesome-webfont.ttf ├── fontawesome-webfont.woff ├── Roboto-Black-webfont.woff ├── Roboto-Light-webfont.woff ├── Roboto-Medium-webfont.eot ├── Roboto-Medium-webfont.ttf ├── Roboto-Medium-webfont.woff ├── Roboto-BlackItalic-webfont.eot ├── Roboto-BlackItalic-webfont.ttf ├── Roboto-BlackItalic-webfont.woff ├── Roboto-LightItalic-webfont.eot ├── Roboto-LightItalic-webfont.ttf ├── Roboto-LightItalic-webfont.woff ├── Roboto-MediumItalic-webfont.eot ├── Roboto-MediumItalic-webfont.ttf └── Roboto-MediumItalic-webfont.woff ├── conf_2016_assets ├── images │ ├── ian.jpg │ ├── ian.png │ ├── ruby.png │ ├── calvin.png │ ├── cecilia.png │ ├── chiha.png │ ├── daniel.png │ ├── elena.png │ ├── emlyn.png │ ├── florian.png │ ├── giles.png │ ├── graham.png │ ├── katie.png │ ├── linda.png │ ├── marco.png │ ├── maria.png │ ├── priya.png │ └── steve.png ├── original_images │ ├── ian.jpg │ ├── emlyn.jpg │ ├── giles.jpg │ ├── katie.jpg │ ├── linda.jpg │ ├── marco.jpg │ ├── maria.jpg │ ├── priya.jpg │ ├── daniel.jpg │ └── graham.jpeg ├── index.html ├── reviewers.json ├── css │ └── style.css └── scripts │ └── index.js ├── _includes ├── search.html ├── header.html ├── article_index_short.html ├── gallery.html ├── gallery_lightbox.html ├── footer.html ├── monthly_archive.html ├── yearly_archive.html ├── author.html ├── head.html ├── sidebar.html ├── article_index.html ├── nav.html └── logo.html ├── .gitignore ├── 404.html ├── _data ├── authors.yml └── galleries.yml ├── package.json ├── _plugins ├── markdown.rb ├── _tag_gen.rb ├── author_generator.rb └── generate_categories.rb ├── LICENSE.md ├── feed.xml ├── submit-a-talk └── index.md ├── contact-us └── index.md ├── conferences └── index.md ├── faq └── index.md ├── gruntfile.js ├── css ├── classic.css └── grid.css ├── _config.yml ├── index.md └── js ├── scripts.js └── 2-imagelightbox.js /.ruby-version: -------------------------------------------------------------------------------- 1 | 3.1.3 2 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | london.pydata.org -------------------------------------------------------------------------------- /sass/_temporary.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /googlee0f82badf009e6eb.html: -------------------------------------------------------------------------------- 1 | google-site-verification: googlee0f82badf009e6eb.html -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PyData London site 2 | 3 | A static page to host information about PyData London 4 | -------------------------------------------------------------------------------- /img/talk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/img/talk.jpg -------------------------------------------------------------------------------- /img/contact.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/img/contact.jpg -------------------------------------------------------------------------------- /img/pydata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/img/pydata.png -------------------------------------------------------------------------------- /img/swirl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/img/swirl.jpg -------------------------------------------------------------------------------- /img/on_stage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/img/on_stage.jpg -------------------------------------------------------------------------------- /img/profile-pic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/img/profile-pic.jpg -------------------------------------------------------------------------------- /_layouts/index_alt.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: index 3 | --- 4 |
5 | {{ content }} 6 |
7 | -------------------------------------------------------------------------------- /fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /img/pydata_members.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/img/pydata_members.jpg -------------------------------------------------------------------------------- /sass/modules/_all.scss: -------------------------------------------------------------------------------- 1 | @import "colors"; 2 | @import "typography"; 3 | @import "mixins"; 4 | @import "functions"; 5 | -------------------------------------------------------------------------------- /fonts/Roboto-Black-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-Black-webfont.eot -------------------------------------------------------------------------------- /fonts/Roboto-Black-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-Black-webfont.ttf -------------------------------------------------------------------------------- /fonts/Roboto-Light-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-Light-webfont.eot -------------------------------------------------------------------------------- /fonts/Roboto-Light-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-Light-webfont.ttf -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /img/pydata_london_meetup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/img/pydata_london_meetup.jpg -------------------------------------------------------------------------------- /conf_2016_assets/images/ian.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/ian.jpg -------------------------------------------------------------------------------- /conf_2016_assets/images/ian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/ian.png -------------------------------------------------------------------------------- /conf_2016_assets/images/ruby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/ruby.png -------------------------------------------------------------------------------- /fonts/Roboto-Black-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-Black-webfont.woff -------------------------------------------------------------------------------- /fonts/Roboto-Light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-Light-webfont.woff -------------------------------------------------------------------------------- /fonts/Roboto-Medium-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-Medium-webfont.eot -------------------------------------------------------------------------------- /fonts/Roboto-Medium-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-Medium-webfont.ttf -------------------------------------------------------------------------------- /fonts/Roboto-Medium-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-Medium-webfont.woff -------------------------------------------------------------------------------- /sass/partials/components/_gallery.scss: -------------------------------------------------------------------------------- 1 | .gallery{ 2 | padding-top: 30px; 3 | 4 | img{ 5 | width: 100%; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /conf_2016_assets/images/calvin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/calvin.png -------------------------------------------------------------------------------- /conf_2016_assets/images/cecilia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/cecilia.png -------------------------------------------------------------------------------- /conf_2016_assets/images/chiha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/chiha.png -------------------------------------------------------------------------------- /conf_2016_assets/images/daniel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/daniel.png -------------------------------------------------------------------------------- /conf_2016_assets/images/elena.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/elena.png -------------------------------------------------------------------------------- /conf_2016_assets/images/emlyn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/emlyn.png -------------------------------------------------------------------------------- /conf_2016_assets/images/florian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/florian.png -------------------------------------------------------------------------------- /conf_2016_assets/images/giles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/giles.png -------------------------------------------------------------------------------- /conf_2016_assets/images/graham.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/graham.png -------------------------------------------------------------------------------- /conf_2016_assets/images/katie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/katie.png -------------------------------------------------------------------------------- /conf_2016_assets/images/linda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/linda.png -------------------------------------------------------------------------------- /conf_2016_assets/images/marco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/marco.png -------------------------------------------------------------------------------- /conf_2016_assets/images/maria.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/maria.png -------------------------------------------------------------------------------- /conf_2016_assets/images/priya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/priya.png -------------------------------------------------------------------------------- /conf_2016_assets/images/steve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/images/steve.png -------------------------------------------------------------------------------- /img/pydata_london2019_keynote.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/img/pydata_london2019_keynote.jpg -------------------------------------------------------------------------------- /fonts/Roboto-BlackItalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-BlackItalic-webfont.eot -------------------------------------------------------------------------------- /fonts/Roboto-BlackItalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-BlackItalic-webfont.ttf -------------------------------------------------------------------------------- /fonts/Roboto-BlackItalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-BlackItalic-webfont.woff -------------------------------------------------------------------------------- /fonts/Roboto-LightItalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-LightItalic-webfont.eot -------------------------------------------------------------------------------- /fonts/Roboto-LightItalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-LightItalic-webfont.ttf -------------------------------------------------------------------------------- /fonts/Roboto-LightItalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-LightItalic-webfont.woff -------------------------------------------------------------------------------- /fonts/Roboto-MediumItalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-MediumItalic-webfont.eot -------------------------------------------------------------------------------- /fonts/Roboto-MediumItalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-MediumItalic-webfont.ttf -------------------------------------------------------------------------------- /conf_2016_assets/original_images/ian.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/original_images/ian.jpg -------------------------------------------------------------------------------- /fonts/Roboto-MediumItalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/fonts/Roboto-MediumItalic-webfont.woff -------------------------------------------------------------------------------- /conf_2016_assets/original_images/emlyn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/original_images/emlyn.jpg -------------------------------------------------------------------------------- /conf_2016_assets/original_images/giles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/original_images/giles.jpg -------------------------------------------------------------------------------- /conf_2016_assets/original_images/katie.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/original_images/katie.jpg -------------------------------------------------------------------------------- /conf_2016_assets/original_images/linda.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/original_images/linda.jpg -------------------------------------------------------------------------------- /conf_2016_assets/original_images/marco.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/original_images/marco.jpg -------------------------------------------------------------------------------- /conf_2016_assets/original_images/maria.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/original_images/maria.jpg -------------------------------------------------------------------------------- /conf_2016_assets/original_images/priya.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/original_images/priya.jpg -------------------------------------------------------------------------------- /conf_2016_assets/original_images/daniel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/original_images/daniel.jpg -------------------------------------------------------------------------------- /conf_2016_assets/original_images/graham.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/john-sandall/pydatalondon.github.io/master/conf_2016_assets/original_images/graham.jpeg -------------------------------------------------------------------------------- /_includes/search.html: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /_layouts/category_index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: index 3 | --- 4 | {% for post in site.categories[page.category] %} 5 | {% include article_index.html %} 6 | {% endfor %} 7 | -------------------------------------------------------------------------------- /sass/assets/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /_includes/header.html: -------------------------------------------------------------------------------- 1 |
2 | 5 |
6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # https://git-scm.com/docs/gitignore 2 | # https://help.github.com/articles/ignoring-files 3 | # Example .gitignore files: https://github.com/github/gitignore 4 | /node_modules/ 5 | /_site/ 6 | .DS_Store 7 | .idea 8 | -------------------------------------------------------------------------------- /sass/modules/_functions.scss: -------------------------------------------------------------------------------- 1 | // set color based on lightness of the color given. 2 | @function set-color($c){ 3 | @if (lightness($c) > 50){ 4 | @return black; 5 | } 6 | @else{ 7 | @return white; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /sass/partials/layout/_sidebar.scss: -------------------------------------------------------------------------------- 1 | .sidebar{ 2 | width: calc(25% - 20px); 3 | 4 | @media screen and (max-width: $sidebarcollapse){ 5 | width: 100%; 6 | 7 | .index &{ 8 | display: none; 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /_layouts/tag_index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: index 3 | --- 4 | {% for post in site.posts %} 5 | {% for tag in post.tags %} 6 | {% if tag == page.tag %} 7 | {% include article_index.html %} 8 | {% endif %} 9 | {% endfor %} 10 | {% endfor %} 11 | -------------------------------------------------------------------------------- /_includes/article_index_short.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | {{ post.date | date: '%b %d' }} {{ post.title }} 4 | 5 |
6 | -------------------------------------------------------------------------------- /sass/modules/_colors.scss: -------------------------------------------------------------------------------- 1 | $white: #FDFDFD; 2 | $black: #121212; 3 | 4 | $darkgray: #333; 5 | $gray: #5f5f5f; 6 | $mediumgray: #C7C6C5; 7 | $lightgray: #e3e3e3; 8 | 9 | // twister colors 10 | $green: #AEB9A0; 11 | $magenta: #75535F; 12 | $coal: #4A4240; 13 | $blue: #505879; 14 | $lightblue: #9BA4B5; 15 | $sand: #E6DED6; 16 | -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: index 3 | title: Ooops! 4 | --- 5 |
6 |

Something seems to have gone wrong here. Sorry 'bout that

7 |

Maybe we can make up for it with some posts and then be friends again?

8 |
9 | 10 | {% for post in site.posts limit:4 %} 11 | {% include article_index.html %} 12 | {% endfor %} 13 | -------------------------------------------------------------------------------- /sass/partials/components/_pagination.scss: -------------------------------------------------------------------------------- 1 | .pagination{ 2 | width: 100%; 3 | margin: 20px 0; 4 | box-sizing: border-box; 5 | text-align: center; 6 | 7 | a, 8 | span{ 9 | padding: 5px 10px; 10 | border: $box_line; 11 | background: $box_bg; 12 | } 13 | 14 | .disabled{ 15 | opacity: .5; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /sass/assets/_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 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /_includes/gallery.html: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /sass/assets/_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 | -------------------------------------------------------------------------------- /_data/authors.yml: -------------------------------------------------------------------------------- 1 | - 2 | id: someone 3 | name: Some Person 4 | avatar: /profile-pic.jpg 5 | bio: this is some more information about the author. 6 | facebook: https://www.facebook.com/someone 7 | twitter: https://twitter.com/someone 8 | instagram: http://instagram.com/someone 9 | email: someone@something.com 10 | - 11 | id: person 12 | avatar: /profile-pic.jpg 13 | bio: Lorem ipsum dolor sit amet, consectetur adipisicing elit. Id, quidem. 14 | -------------------------------------------------------------------------------- /sass/partials/layout/_footer.scss: -------------------------------------------------------------------------------- 1 | footer{ 2 | width: 100%; 3 | box-sizing: border-box; 4 | padding: 20px; 5 | border-top: $box_line; 6 | background: $box_bg; 7 | font-size: .8em; 8 | align-self: flex-end; 9 | 10 | .content{ 11 | @include flexbox(row, wrap, space-between, center); 12 | } 13 | 14 | .backtotop{ 15 | @extend a; 16 | 17 | &:hover{ 18 | cursor: pointer; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /sass/assets/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 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 | -------------------------------------------------------------------------------- /sass/assets/_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 | -------------------------------------------------------------------------------- /sass/assets/_font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.2.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 "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /sass/partials/components/_widget.scss: -------------------------------------------------------------------------------- 1 | .widget{ 2 | background: $box_bg; 3 | box-sizing: border-box; 4 | padding: 10px; 5 | border: $box_line; 6 | margin-bottom: 20px; 7 | 8 | &:last-of-type{ 9 | margin-bottom: 0px; 10 | } 11 | 12 | .title{ 13 | font-weight: $widget_title_font-weight; 14 | } 15 | 16 | ul{ 17 | list-style: armenian; 18 | padding: 0 25px; 19 | 20 | li{ 21 | padding-left: 0px; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /_data/galleries.yml: -------------------------------------------------------------------------------- 1 | - id: gallery 2 | imagefolder: /img/galleries/gallery-standard-post 3 | images: 4 | - filename: 1.jpg 5 | alttext: Bloom Flat 6 | - filename: 2.jpg 7 | alttext: Bloom 8 | - filename: 3.jpg 9 | alttext: Blossom in a Star 10 | - filename: 4.jpg 11 | alttext: Blossom 12 | - filename: 5.jpg 13 | alttext: Bubbly Bloom 14 | - filename: 6.jpg 15 | alttext: Rays of Gold 16 | - filename: 7.jpg 17 | alttext: Exotic 18 | - filename: 8.jpg 19 | alttext: Filled out 20 | -------------------------------------------------------------------------------- /sass/assets/_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 | -------------------------------------------------------------------------------- /sass/partials/layout/_index.scss: -------------------------------------------------------------------------------- 1 | // Style switcher on index pages 2 | .switch{ 3 | width: 100%; 4 | font-size: .8em; 5 | margin-bottom: 10px; 6 | 7 | @media screen and (max-width: 530px){ 8 | display: none; 9 | } 10 | 11 | span{ 12 | color: $layoutswitch_a_color; 13 | 14 | &:hover{ 15 | color: $layoutswitch_a_hover_color; 16 | cursor: pointer; 17 | } 18 | } 19 | } 20 | 21 | .title{ 22 | width: 100%; 23 | } 24 | 25 | .index{ 26 | article{ 27 | span{ 28 | padding: 10px; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /_includes/gallery_lightbox.html: -------------------------------------------------------------------------------- 1 |
2 | {% for gallery in site.data.galleries %} 3 | {% if gallery.id == page.gallery-id %} 4 | {% for image in gallery.images %} 5 | 6 | {{ image.alttext }} 7 | 8 | {% endfor %} 9 | {% endif %} 10 | {% endfor %} 11 |
12 | -------------------------------------------------------------------------------- /sass/partials/components/_iconnav.scss: -------------------------------------------------------------------------------- 1 | // social media and search icon container within main menu 2 | .iconnav{ 3 | 4 | // hide some of the icons once there is not enough space 5 | @media screen and (max-width: 368px){ 6 | .tumblr, 7 | .instagram, 8 | .twitter, 9 | .youtube { 10 | display: none; 11 | } 12 | } 13 | 14 | ul{ 15 | list-style: none; 16 | 17 | li{ 18 | list-style: none; 19 | display: inline-block; 20 | 21 | a{ 22 | padding: 0 3px; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 | 7 | 15 | -------------------------------------------------------------------------------- /_includes/monthly_archive.html: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /_includes/yearly_archive.html: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /sass/main.scss: -------------------------------------------------------------------------------- 1 | @import "assets/font-awesome"; 2 | @import "reset"; 3 | @import "modules/all"; 4 | @import "partials/base"; 5 | @import "partials/general"; 6 | @import "partials/layout/header"; 7 | @import "partials/layout/index"; 8 | @import "partials/components/article"; 9 | @import "partials/components/gallery"; 10 | @import "partials/components/pagination"; 11 | @import "partials/components/authorbox"; 12 | @import "partials/layout/post"; 13 | @import "partials/layout/sidebar"; 14 | @import "partials/layout/footer"; 15 | @import "partials/components/widget"; 16 | @import "partials/components/syntax"; 17 | @import "partials/components/lightbox"; 18 | @import "temporary"; 19 | -------------------------------------------------------------------------------- /sass/assets/_spinning.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 | @-webkit-keyframes fa-spin { 10 | 0% { 11 | -webkit-transform: rotate(0deg); 12 | transform: rotate(0deg); 13 | } 14 | 100% { 15 | -webkit-transform: rotate(359deg); 16 | transform: rotate(359deg); 17 | } 18 | } 19 | 20 | @keyframes fa-spin { 21 | 0% { 22 | -webkit-transform: rotate(0deg); 23 | transform: rotate(0deg); 24 | } 25 | 100% { 26 | -webkit-transform: rotate(359deg); 27 | transform: rotate(359deg); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "twister", 3 | "description": "A multimedia jekyll theme", 4 | "author": "Digitalmind ", 5 | "version": "1.0.0", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/DigitalMindCH/twister" 9 | }, 10 | "devDependencies": { 11 | "grunt": "^1.6.1", 12 | "grunt-autoprefixer": "^3.0.4", 13 | "grunt-build-control": "^0.7.1", 14 | "grunt-contrib-imagemin": "^4.0.0", 15 | "grunt-contrib-jshint": "~3.2.0", 16 | "grunt-contrib-nodeunit": "~5.0.0", 17 | "grunt-contrib-sass": "^2.0.0", 18 | "grunt-contrib-uglify": "^5.2.2", 19 | "grunt-contrib-watch": "^1.1.0", 20 | "grunt-sass": "^3.1.0", 21 | "grunt-shell": "^4.0.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /_plugins/markdown.rb: -------------------------------------------------------------------------------- 1 | =begin 2 | Jekyll tag to include Markdown text from _includes directory preprocessing with Liquid. 3 | Usage: 4 | {% markdown %} 5 | Dependency: 6 | - kramdown 7 | =end 8 | module Jekyll 9 | class MarkdownTag < Liquid::Tag 10 | def initialize(tag_name, text, tokens) 11 | super 12 | @text = text.strip 13 | end 14 | require "kramdown" 15 | def render(context) 16 | tmpl = File.read File.join Dir.pwd, "_includes", @text 17 | site = context.registers[:site] 18 | tmpl = (Liquid::Template.parse tmpl).render site.site_payload 19 | html = Kramdown::Document.new(tmpl).to_html 20 | end 21 | end 22 | end 23 | Liquid::Template.register_tag('markdown', Jekyll::MarkdownTag) 24 | -------------------------------------------------------------------------------- /sass/assets/_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.woff?v=#{$fa-version}') format('woff'), 9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /_includes/author.html: -------------------------------------------------------------------------------- 1 | {% if post.author %} 2 | {% assign author = post.author %} 3 | {% elsif page.author %} 4 | {% assign author = page.author %} 5 | {% else %} 6 | {% assign author = site.author %} 7 | {% endif %} 8 | {% if author %} 9 | Posted by 10 | {% assign the_author = site.data.authors | where: 'id', author %} 11 | {% for author in the_author %} 12 | 13 | {% if author.name %} 14 | {{ author.name }} 15 | {% else %} 16 | {{ author.id }} 17 | {% endif %} 18 | 19 | {% endfor %} 20 | 21 | {% endif %} 22 | -------------------------------------------------------------------------------- /sass/assets/_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 | -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | {{ site.name }}{% if page.title %} - {{ page.title }} {% endif%} 3 | {% if page.description %}{% endif %} 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /sass/grid.scss: -------------------------------------------------------------------------------- 1 | @import "modules/all"; 2 | @import "partials/base"; 3 | 4 | $fourtothree: 1460px; 5 | $threetotwo: 775px; 6 | $twotoone: 530px; 7 | 8 | .articles{ 9 | @include flexbox(row, wrap, flex-start, stretch); 10 | width: 75%; 11 | 12 | @media screen and (max-width: $sidebarcollapse){ 13 | width: 100%; 14 | } 15 | 16 | @media screen and (max-width: $twotoone){ 17 | justify-content: center; 18 | } 19 | 20 | article{ 21 | @include rowMachine(4, 1%, 25px); 22 | 23 | @media screen and (max-width: $fourtothree){ 24 | @include rowMachine(3, 1%, 25px); 25 | } 26 | 27 | @media screen and (max-width: $threetotwo){ 28 | @include rowMachine(2, 3%, 25px); 29 | } 30 | 31 | @media screen and (max-width: $twotoone){ 32 | @include rowMachine(1, 0, 25px); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /sass/partials/components/_search.scss: -------------------------------------------------------------------------------- 1 | body.overflow{ 2 | overflow: hidden; 3 | } 4 | 5 | // search overlay style 6 | #search { 7 | position: fixed; 8 | top: 0px; 9 | left: 0px; 10 | width: 100%; 11 | height: 100%; 12 | background-color: $so_bg; 13 | transition: 0.5s ease-in-out; 14 | transform: translate(0px, -100%) scale(0,0); 15 | opacity: 0; 16 | display: none; 17 | 18 | input[type="search"] { 19 | position: absolute; 20 | top: 50%; 21 | left: 50%; 22 | transform: translate(-50%, -50%); 23 | color: $so_color; 24 | background: transparent; 25 | font-size: 3em; 26 | font-weight: $main_font-weight; 27 | text-align: center; 28 | border: 0px; 29 | outline: none; 30 | } 31 | } 32 | 33 | #search.open { 34 | transition: 0.5s ease-in-out; 35 | transform: translate(0px, 0px) scale(1, 1); 36 | opacity: 1; 37 | z-index: 106; 38 | display: block; 39 | } 40 | -------------------------------------------------------------------------------- /_layouts/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | 7 | 8 | {% include svg.html %} 9 |
10 | {% include header.html %} 11 | {% include nav.html %} 12 |
13 | {% include search.html %} 14 |
15 |
16 |

switch layout: GridClassic

17 | {% if page.title %}

{{ page.title }}

{% endif %} 18 |
19 | {{ content }} 20 |
21 | {% include sidebar.html %} 22 |
23 |
24 | {% include footer.html %} 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /sass/modules/_mixins.scss: -------------------------------------------------------------------------------- 1 | //Mixins 2 | @mixin flexbox($direction, $wrap, $justify, $align){ 3 | display: flex; 4 | flex-direction: $direction; 5 | flex-wrap: $wrap; 6 | justify-content: $justify; 7 | align-items: $align; 8 | } 9 | //@include flexbox(direction, wrap, justify, align); 10 | 11 | @mixin rowMachine($numPerRow, $marginright, $marginbottom){ 12 | width: ((100% - (($numPerRow - 1) * $marginright)) / $numPerRow); 13 | 14 | &:nth-of-type(n){ 15 | margin-bottom: $marginbottom; 16 | margin-right: $marginright; 17 | } 18 | &:nth-of-type(#{$numPerRow}n){ 19 | margin-right: 0; 20 | } 21 | } 22 | //@include rowMachine(numPerRow, marginright, marginbottom); 23 | 24 | @mixin paddinghack($containerwidth, $ratiowidth, $ratioheight){ 25 | position: relative; 26 | width: $containerwidth; 27 | height: 0; 28 | padding: (($ratioheight / $ratiowidth) * $containerwidth) 0 0 0; 29 | } 30 | // @include paddinghack(width, ratiowidth, ratioheight); 31 | -------------------------------------------------------------------------------- /sass/partials/components/_logo.scss: -------------------------------------------------------------------------------- 1 | // Logo SVG styling 2 | 3 | .icon{ 4 | fill:$blue; 5 | fill-rule:nonzero; 6 | stroke:$lightblue; 7 | stroke-width:0.05; 8 | stroke-miterlimit:4; 9 | stroke-opacity:0.94117647; 10 | stroke-dasharray:none; 11 | transition: .3s all ease; 12 | } 13 | 14 | .twister{ 15 | font-size:25px; 16 | font-weight: $light; 17 | line-height:125%; 18 | fill:$coal; 19 | font-family: $roboto; 20 | text-transform: uppercase; 21 | transition: .3s all ease; 22 | } 23 | 24 | .slogan{ 25 | font-size:7px; 26 | font-weight:200; 27 | line-height:125%; 28 | fill:$magenta; 29 | font-family: $roboto; 30 | transition: .3s all ease; 31 | } 32 | 33 | a:hover{ 34 | svg{ 35 | .icon{ 36 | fill:$magenta; 37 | stroke:$coal; 38 | } 39 | 40 | .twister{ 41 | fill:$blue; 42 | } 43 | 44 | .slogan{ 45 | fill:$lightblue; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /sass/assets/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 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 | @mixin fa-icon-rotate($degrees, $rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 15 | -webkit-transform: rotate($degrees); 16 | -ms-transform: rotate($degrees); 17 | transform: rotate($degrees); 18 | } 19 | 20 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 22 | -webkit-transform: scale($horiz, $vert); 23 | -ms-transform: scale($horiz, $vert); 24 | transform: scale($horiz, $vert); 25 | } 26 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 DigitalMindCH 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /feed.xml: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | 5 | 6 | {{ site.name | xml_escape }} 7 | {% if site.description %}{{ site.description | xml_escape }}{% endif %} 8 | {{ site.url }} 9 | 10 | {% for post in site.posts limit:100 %} 11 | 12 | {{ post.title | xml_escape }} 13 | {% if post.author.name %} 14 | {{ post.author.name | xml_escape }} 15 | {% endif %} 16 | {% if post.excerpt %} 17 | {{ post.excerpt | xml_escape }} 18 | {% else %} 19 | {{ post.content | xml_escape }} 20 | {% endif %} 21 | {{ post.date | date: "%a, %d %b %Y %H:%M:%S %z" }} 22 | {{ site.url }}{{ post.url }} 23 | {{ site.url }}{{ post.url }} 24 | 25 | {% endfor %} 26 | 27 | 28 | -------------------------------------------------------------------------------- /_plugins/_tag_gen.rb: -------------------------------------------------------------------------------- 1 | module Jekyll 2 | class TagIndex < Page 3 | def initialize(site, base, dir, tag) 4 | @site = site 5 | @base = base 6 | @dir = dir 7 | @name = 'index.html' 8 | self.process(@name) 9 | self.read_yaml(File.join(base, '_layouts'), 'tag_index.html') 10 | self.data['tag'] = tag 11 | tag_title_prefix = site.config['tag_title_prefix'] || 'Posts Tagged: ' 12 | tag_title_suffix = site.config['tag_title_suffix'] || '' 13 | self.data['title'] = "#{tag_title_prefix}#{tag}#{tag_title_suffix}" 14 | end 15 | end 16 | class TagGenerator < Generator 17 | safe true 18 | def generate(site) 19 | if site.layouts.key? 'tag_index' 20 | dir = site.config['tag_dir'] || 'tag' 21 | site.tags.keys.each do |tag| 22 | write_tag_index(site, File.join(dir, tag), tag) 23 | end 24 | end 25 | end 26 | def write_tag_index(site, dir, tag) 27 | index = TagIndex.new(site, site.source, dir, tag) 28 | index.render(site.layouts, site.site_payload) 29 | index.write(site.dest) 30 | site.pages << index 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /sass/partials/components/_authorbox.scss: -------------------------------------------------------------------------------- 1 | $authorbox_collapse: 510px; 2 | 3 | .authorbox{ 4 | @include flexbox(row, wrap, flex-start, flex-start); 5 | width: 100%; 6 | box-sizing: border-box; 7 | padding: 10px; 8 | background: $box_bg; 9 | border: $box_line; 10 | margin-bottom: 20px; 11 | 12 | .avatar { 13 | padding-right: 20px; 14 | max-width: $avatar_width; 15 | 16 | img{ 17 | border-radius: 50em; 18 | } 19 | 20 | @media screen and (max-width: $authorbox_collapse){ 21 | @extend %center; 22 | padding-right: 0; 23 | } 24 | } 25 | 26 | .info{ 27 | $avatar: $avatar_width + 20px; // 20px being the right padding of the avatar container 28 | 29 | @include flexbox(row, wrap, flex-start,flex-start); 30 | width: 100%; 31 | 32 | @media screen and (min-width: $authorbox_collapse + 1){ 33 | width: calc(100% - #{$avatar} ); 34 | height: 100%; 35 | } 36 | 37 | .author_name, 38 | .bio, 39 | .social{ 40 | width: 100%; 41 | } 42 | 43 | .social{ 44 | align-self: flex-end; 45 | letter-spacing: 6px; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /_layouts/page_full.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | 7 | 8 | {% include svg.html %} 9 |
10 | {% include header.html %} 11 | {% include nav.html %} 12 |
13 | {% include search.html %} 14 |
15 |
16 |
17 |
18 | {% if page.featimg %} 19 | {{ page.featimg }} 20 | {% endif %} 21 | 22 |

23 | {{ page.title }} 24 |

25 |
26 | {{ content }} 27 |
28 |
29 |
30 |
31 |
32 | {% include footer.html %} 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /_layouts/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | 7 | 8 | {% include svg.html %} 9 |
10 | {% include header.html %} 11 | {% include nav.html %} 12 |
13 | {% include search.html %} 14 |
15 |
16 |
17 |
18 | {% if page.featimg %} 19 | {{ page.featimg }} 20 | {% endif %} 21 | 22 |

23 | {{ page.title }} 24 |

25 |
26 | {{ content }} 27 |
28 |
29 |
30 | {% include sidebar.html %} 31 |
32 |
33 | {% include footer.html %} 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /sass/classic.scss: -------------------------------------------------------------------------------- 1 | @import "modules/all"; 2 | @import "partials/base"; 3 | 4 | $imgchange: 775px; 5 | 6 | .articles{ 7 | width: 75%; 8 | 9 | @media screen and (max-width: $sidebarcollapse){ 10 | width: 100%; 11 | } 12 | 13 | article{ 14 | position: relative; 15 | @extend %clearfix; 16 | 17 | img, 18 | > iframe { 19 | width: 30%; 20 | 21 | @media screen and (max-width: $imgchange){ 22 | width: 100%; 23 | } 24 | } 25 | 26 | .video_container{ 27 | @media screen and (min-width: $imgchange + 1){ 28 | @include paddinghack(30%, 16, 9); 29 | } 30 | } 31 | 32 | @media screen and (min-width: $imgchange + 1){ 33 | &:nth-of-type(even){ 34 | img, 35 | > iframe, 36 | .video_container { 37 | float: left; 38 | margin-right: 15px; 39 | } 40 | 41 | .date{ 42 | left: calc(30% + 5px); 43 | } 44 | } 45 | 46 | &:nth-of-type(odd){ 47 | img, 48 | > iframe, 49 | .video_container{ 50 | float: right; 51 | margin-left: 15px; 52 | } 53 | } 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /sass/_reset.scss: -------------------------------------------------------------------------------- 1 | // Reset by Eric Meyer 2 | html, body, div, span, applet, object, iframe, 3 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 4 | a, abbr, acronym, address, big, cite, code, 5 | del, dfn, em, img, ins, kbd, q, s, samp, 6 | small, strike, strong, sub, sup, tt, var, 7 | b, u, i, center, 8 | dl, dt, dd, ul, li, 9 | fieldset, form, label, legend, 10 | table, caption, tbody, tfoot, thead, tr, th, td, 11 | article, aside, canvas, details, embed, 12 | figure, figcaption, footer, header, hgroup, 13 | menu, nav, output, ruby, section, summary, 14 | time, mark, audio, video { 15 | margin: 0; 16 | padding: 0; 17 | border: 0; 18 | font-size: 100%; 19 | font: inherit; 20 | vertical-align: baseline; 21 | } 22 | 23 | article, aside, details, figcaption, figure, 24 | footer, header, hgroup, menu, nav, section { 25 | display: block; 26 | } 27 | 28 | body { 29 | line-height: 1; 30 | } 31 | 32 | ul { 33 | list-style: none; 34 | } 35 | 36 | blockquote, q { 37 | quotes: none; 38 | } 39 | 40 | blockquote:before, blockquote:after, 41 | q:before, q:after { 42 | content: ''; 43 | content: none; 44 | } 45 | 46 | table { 47 | border-collapse: collapse; 48 | border-spacing: 0; 49 | } 50 | 51 | // add bold and italics back 52 | b, strong{ 53 | font-weight: bold; 54 | } 55 | 56 | i, em{ 57 | font-style: italic; 58 | } 59 | 60 | 61 | // Blogger Reset 62 | .section{ 63 | margin:0; 64 | } 65 | 66 | .widget{ 67 | margin:0; 68 | } 69 | 70 | .blogger-clickTrap{ 71 | display: none; 72 | } 73 | -------------------------------------------------------------------------------- /sass/partials/layout/_post.scss: -------------------------------------------------------------------------------- 1 | .content_container{ 2 | width: 75%; 3 | 4 | @media screen and (max-width: $sidebarcollapse){ 5 | width: 100%; 6 | } 7 | 8 | .full &{ 9 | width: 100%; 10 | } 11 | 12 | .post_title{ 13 | color: $title_color; 14 | padding: 10px 0; 15 | } 16 | 17 | .meta{ 18 | margin: 20px 0; 19 | padding: 10px 0; 20 | border-top: $box_line; 21 | border-bottom: $box_line; 22 | } 23 | 24 | .featsection{ 25 | margin: 10px 0; 26 | } 27 | 28 | .catsandtags{ 29 | margin: 20px 0; 30 | padding: 10px 0; 31 | border-top: $box_line; 32 | border-bottom: $box_line; 33 | line-height: 2.5; 34 | 35 | .category, 36 | .tags{ 37 | .name{ 38 | font-weight: $medium; 39 | padding: 5px; 40 | } 41 | } 42 | 43 | a{ 44 | padding: 5px; 45 | background: $box_bg; 46 | border: $box_line; 47 | } 48 | } 49 | 50 | .post_nav{ 51 | @extend %clearfix; 52 | margin: 20px 0; 53 | 54 | a{ 55 | padding: 5px 10px; 56 | border: $line; 57 | background: $white; 58 | } 59 | 60 | .prev{ 61 | float: left; 62 | } 63 | 64 | .next{ 65 | float: right; 66 | } 67 | 68 | @media screen and (max-width: 490px){ 69 | .long{ 70 | display: none; 71 | } 72 | } 73 | 74 | @media screen and (max-width: 318px){ 75 | .short{ 76 | display: none; 77 | } 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /submit-a-talk/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page_full 3 | featimg: talk.jpg 4 | title: Submit a Talk 5 | --- 6 | ## Speaking at PyData London Meetups 7 | 8 | Have you been working on an interesting project that you want to show off to 9 | fellow members? Found a really cool library that you want everyone to know 10 | about? Whether it's a half-hour slot or a 5-minute lightning talk, get in touch 11 | and let's get you on the stage! 12 | 13 | There's a few details to note: 14 | * We have 2 longer talks - 25 mins talk time & 5 mins Q&A 15 | * We have 2 or so 5-minute talks 16 | * All talks are timed, the lightning talks have a hard 5 minute limit, we have 17 | a hard exit time on the venue so please make sure you'll run to time 18 | (under-running is fine!) 19 | * Check the NumFOCUS [Code of Conduct](https://numfocus.org/code-of-conduct) - 20 | all language and imagery must be inclusionary, in particular try to avoid 21 | gendered reference (e.g. prefer something like 'folks' over 'guys') 22 | * No product pitches - we're strict about this - these aren't sales slots and 23 | the room is not populated by buyers 24 | * Your talk should educate, you're welcome to note 'we're hiring' or similar 25 | during your talk (that's a sensible quid-pro-quo for your company letting you 26 | write your talk whilst at work) 27 | * We usually schedule talks a few months in advance. If you're only available 28 | for a specific date please let us know and we'll try to accommodate. 29 | 30 | Send us your proposal by filling in [our talk proposal form](http://bit.ly/pydata-london-proposal). 31 | 32 | ## Speaking at PyData London Conferences 33 | 34 | Our next conference will take place in 2020. Please watch for announces at the 35 | meetup and on the monthly update emails for the next Call for Proposals. 36 | -------------------------------------------------------------------------------- /conf_2016_assets/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 |

Chairs

24 |
25 | 26 |
27 | 28 |

Organisers

29 |
30 | 31 |
32 | 33 |

Reviewers

34 |
35 | 36 |
37 |
38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /contact-us/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page_full 3 | featimg: contact.jpg 4 | title: Contact PyData London 5 | --- 6 | 7 | The best way to get in touch with us is via the "Contact" function on our 8 | [Meetup page](http://www.meetup.com/PyData-London-Meetup/). 9 | 10 | You can also follow and get in touch with us 11 | [@pydatalondon on Twitter](https://twitter.com/pydatalondon/). 12 | 13 | ## PyData London Organisers 14 | 15 | PyData London meetups are put together by the following volunteers: 16 | 17 | * Aaron Critchley - [GitHub](https://github.com/aaroncritchley) - [LinkedIn](https://www.linkedin.com/in/aaroncritchley/) - [Twitter](https://twitter.com/aaroncritchley) 18 | * Agata Brajdic 19 | * Cecilia Liao - [Blog](http://cecilialiao.com/) - [GitHub](https://github.com/cecilialiao) - [LinkedIn](https://www.linkedin.com/in/cecilialiao) - [Twitter](https://twitter.com/cecilialiao) 20 | * Emlyn Clay - [Twitter](https://twitter.com/emlynclay) 21 | * Florian Rathgeber - [Blog](https://kynan.github.io) - [Twitter](https://twitter.com/frathgeber) 22 | * Ian Ozsvald - [Blog](http://ianozsvald.com/) - [GitHub](https://github.com/ianozsvald) - [LinkedIn](https://www.linkedin.com/in/ianozsvald) - [Twitter](https://twitter.com/ianozsvald) 23 | * Marco Bonzanini - [Blog](https://marcobonzanini.com/) - [GitHub](https://github.com/bonzanini) - [LinkedIn](https://www.linkedin.com/in/marcobonzanini) - [Twitter](https://twitter.com/marcobonzanini) 24 | * Prashant Tiwari 25 | * Slavi Marinov - [Twitter](https://twitter.com/slavitweets) 26 | * Steve Holden - [Blog](http://holdenweb.blogspot.co.uk/) - [Twitter](https://twitter.com/holdenweb) 27 | 28 | ## PyData London Alumni 29 | 30 | Previous volunteers: 31 | 32 | * Alina Solovjova 33 | * Calvin Giles - [Twitter](https://twitter.com/calvingiles) 34 | * Graham Markall - [Twitter](https://twitter.com/gmarkall) 35 | * Priya Gogna - [Twitter](https://twitter.com/hello_kepler22b) 36 | * Ruby Childs - [Twitter](https://twitter.com/RubyChilds) 37 | * Simona Sikorskyte 38 | 39 | -------------------------------------------------------------------------------- /conferences/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page_full 3 | featimg: pydata_london2019_keynote.jpg 4 | title: Conferences 5 | --- 6 | 7 | * [2023 Conference @ Leonardo Royal Tower Bridge](https://pydata.org/london2023/) 8 | * videos (published after the conference) 9 | * photos (published after the conference) 10 | * [2022 Conference @ The Tower Hotel](https://pydata.org/london2022/) 11 | * videos (published after the conference) 12 | * photos (published after the conference) 13 | * [2019 Conference @ The Tower Hotel](https://pydata.org/london2019/) 14 | * [videos](https://www.youtube.com/playlist?list=PLGVZCDnMOq0ocea1dd0it7jX7HgvZCjSW) 15 | * [photos](https://www.flickr.com/photos/pydata/albums/72157709819963207) 16 | * [2018 Conference @ The Tower Hotel](https://pydata.org/london2018/) 17 | * [videos](https://youtube.com/playlist?list=PLGVZCDnMOq0ovNxfxOqYcBcQOIny9Zvb-) 18 | * [photos](https://www.flickr.com/photos/pydata/sets/72157693263374002) 19 | * [2017 Conference @ Bloomberg](https://pydata.org/london2017/) 20 | * [videos](https://www.youtube.com/playlist?list=PLGVZCDnMOq0pAwbVAb1kUN3lV7ukhLL2k) 21 | * [photos](https://www.flickr.com/photos/pydata/albums/72157682159602660/) 22 | * [2016 Conference @ Bloomberg](https://pydata.org/london2016/) 23 | * [videos](https://www.youtube.com/playlist?list=PLGVZCDnMOq0qfJkoiFj-hN7lSHgQzXtqQ) 24 | * [photos](https://www.flickr.com/photos/143444505@N07/albums/72157669069232026) 25 | * [In case you missed it - Pydata London 2016](http://www.datareply.co.uk/blog/2016/5/16/pydata-london-2016-1) by Ignas Vadaisa [May 16, 2016] 26 | * [PyData London 2016 - Part II](http://www.datareply.co.uk/blog/2016/5/27/part-ii-pydata-london-2016) by Ignas Vadaisa [May 27, 2016] 27 | * [2015 Conference @ Bloomberg](https://pydata.org/london2015/) 28 | * [videos](https://www.youtube.com/playlist?list=PLGVZCDnMOq0q6hrjJA56bq18eHtGusYJK) 29 | * [photos](https://www.flickr.com/photos/frathgeber/sets/72157654424330159) 30 | * [2014 Conference @ Level 39](https://pydata.org/ldn2014/) 31 | * [videos](https://www.youtube.com/playlist?list=PLGVZCDnMOq0pKUUMthfbXufGxA5avFRWt) 32 | -------------------------------------------------------------------------------- /sass/partials/components/_article.scss: -------------------------------------------------------------------------------- 1 | article{ 2 | box-sizing: border-box; 3 | background: $box_bg; 4 | margin-bottom: 20px; 5 | border: $box_line; 6 | position: relative; 7 | 8 | .content_container &{ 9 | padding: 20px; 10 | 11 | p{ 12 | padding: 0; 13 | } 14 | } 15 | 16 | .index & h1, 17 | .index & p, 18 | .index & span{ 19 | padding: 10px; 20 | } 21 | 22 | img{ 23 | transition: .3s all ease; 24 | } 25 | 26 | a:hover{ 27 | img{ 28 | opacity: .5; 29 | } 30 | } 31 | 32 | .category, 33 | .tags { 34 | text-transform: uppercase; 35 | 36 | .index &{ 37 | font-size: .7em; 38 | opacity: .6; 39 | } 40 | } 41 | 42 | .date{ 43 | .index &{ 44 | font-size: .7em; 45 | opacity: .6; 46 | position: absolute; 47 | bottom: 10px; 48 | left: 5px; 49 | } 50 | } 51 | 52 | .post_content{ 53 | .index &{ 54 | padding-bottom: 50px; 55 | } 56 | } 57 | 58 | ul, 59 | ol{ 60 | list-style: circle; 61 | padding: 0 35px; 62 | 63 | li{ 64 | padding-left: 0px; 65 | } 66 | } 67 | 68 | ol{ 69 | list-style: decimal; 70 | } 71 | } 72 | 73 | .wrapper{ 74 | width: 100%; 75 | border: $box_line; 76 | height: auto; 77 | box-sizing: border-box; 78 | background: $box_bg; 79 | } 80 | 81 | .short{ 82 | width: 100%; 83 | border-bottom: $box_line; 84 | 85 | &:hover{ 86 | background: darken($box_bg, 3%); 87 | } 88 | 89 | a{ 90 | display: block; 91 | width: 100%; 92 | padding: 10px; 93 | 94 | .shortdate{ 95 | font-size: .8em; 96 | opacity: .8; 97 | padding-right: 10px; 98 | margin-right: 10px; 99 | border-right: $line; 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /_layouts/author_index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: index 3 | --- 4 | {% assign the_author = site.data.authors | where: 'id', page.author %} 5 | {% for author in the_author %} 6 |
7 |
8 | {% if author.avatar %} 9 | {{ author.id }} avatar 10 | {% else %} 11 | avatar 12 | {% endif %} 13 |
14 |
15 |

16 | {% if author.name %} 17 | {{ author.name }} 18 | {% else %} 19 | {{ author.id }} 20 | {% endif %} 21 |

22 | {% if author.bio%} 23 |

{{ author.bio }}

24 | {% endif %} 25 | {% if author.facebook or author.twitter or author.instagram or author.email %} 26 | 43 | {% endif %} 44 |
45 |
46 | {% endfor %} 47 | 48 | {% for post in site.posts %} 49 | {% if post.author contains page.author %} 50 | {% include article_index.html %} 51 | {% endif %} 52 | {% endfor %} 53 | 54 | -------------------------------------------------------------------------------- /faq/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page_full 3 | title: FAQ 4 | --- 5 | 6 | # Q: When is the next meetup? 7 | A: As a rule of thumb, we host our meetups on the First Tuesday of every month. 8 | 9 | # Q: How do I submit a talk? 10 | A: Our meetups rely on wonderful people like you to speak about python and data related topics. The main talk is 25-30 minutes (with 5 minutes for Q&As), and lightning talks are strictly 5 minutes max. To submit a talk, message us on the Meetup website via the “Contact” button, with your full name, talk's title, and abstract. 11 | 12 | # Q: Why don’t we use a larger venue? 13 | A: We limit meetups to 250 members to keep a friendly vibe (can you imagine walking into a room of 1,000 people!?), not to mention the logistics behind a bigger meetup require much more resources, human and otherwise. We are grateful to our host who provide the venue and catering so that meetups are free of charge for our members to attend. 14 | 15 | # Q: Why am I getting bumped from the waiting list to Yes with only x minutes before a meetup? It’s no good to me because I have to travel y miles! 16 | A: We understand plans change, and sometimes you may have to cancel an RSVP at the last minute. We encourage our members to un-RSVP as early as possible, so that other members on the waiting list have more notice. 17 | 18 | # Q: Can I contact PyData members about a job opportunity at my company? 19 | A: We welcome community announcements during our meetups, but please do not send group messages via Meetup notice board. 20 | 21 | # Q: Why is it so hard to get a spot to a meetup? 22 | A: We keep our meetups to 250 members in size to give everyone a great experience (and that includes the organisers and our generous host!). We have thousands of active members, so… well, you can do the maths. Currently, we operate a lottery system so there’s more of an equal chance for our members to attend. 23 | 24 | # Q: Can we have more meetups? 25 | A: Yes! Our meetups are run by a team of volunteers, who at this time can only afford to organise one event per month. If you want to see more meetups, we encourage you to take matter into your own hands and organise side events, either via PyData umbrella or your own Meetup group. Let us know if you want to get started and we'll be happy to help! 26 | -------------------------------------------------------------------------------- /_includes/sidebar.html: -------------------------------------------------------------------------------- 1 | 52 | -------------------------------------------------------------------------------- /sass/partials/_base.scss: -------------------------------------------------------------------------------- 1 | // Shortcuts 2 | $noborder: 0px solid transparent; 3 | $line: 1px solid $sand; 4 | 5 | // Settings 6 | //--------------------------------------------- 7 | // General 8 | $main_font-family: $roboto; 9 | $main_font-weight: $light; 10 | $body_bg-color: $white; 11 | $body_bg-img: url(/img/swirl.jpg); // adjust if you use baseurl, place this before as it will not automatically be added 12 | $main_color: $black; 13 | $root_font_size: 20px; 14 | $general_line-height: 1.5; 15 | 16 | $sidebarcollapse: 1330px; 17 | 18 | $layoutswitch_a_color: $blue; 19 | $layoutswitch_a_hover_color: $green; 20 | // Headings 21 | $h_font-weight: $medium; 22 | $h_text_transform: none; 23 | 24 | // Links 25 | $a_color: #679bb6; 26 | $a_hover_color: #d88f49; 27 | $a_line: #679bb6 1px solid; 28 | 29 | // Content 30 | $max-width: 1500px; 31 | $content-width: 90%; 32 | $box_bg: $white; 33 | $box_line: $line; 34 | 35 | // Logo Collapses 36 | $from_full_to_noslogan: 935px; 37 | $from_noslogan_to_icon: 640px; 38 | 39 | // header 40 | $head_bg: $box_bg; 41 | 42 | // search overlay 43 | $so_bg: rgba(white, .8); 44 | $so_color: black; 45 | 46 | // Menu 47 | $mainnav_collapse: 1068px; 48 | $mainnav_bg: $white; 49 | $mainnav_border: $line; 50 | $mainnav_text-transform: uppercase; 51 | $mainnav_a_color: $a_color; 52 | $mainnav_a_hover: $a_hover_color; 53 | $mainnav_a_hover_bg: $lightblue; 54 | $mainnav_responsive_text_align: center; 55 | $mainav_parent_plus_display: yes; 56 | 57 | // Post Pages 58 | $title_color: $blue; 59 | 60 | // author box 61 | $avatar_width: 150px; 62 | 63 | // widgets 64 | $widget_title_font-weight: $light; 65 | 66 | // lightbox 67 | $lightbox_container_background: $black; 68 | 69 | // Extendonly 70 | //--------------------------------------------- 71 | 72 | %clearfix{ 73 | &:after{ 74 | content: ""; 75 | display: table; 76 | clear: both; 77 | } 78 | } 79 | 80 | %paddinghack{ 81 | position: absolute; 82 | top: 0; 83 | left: 0; 84 | right: 0; 85 | bottom: 0; 86 | width: 100%; 87 | height: 100%; 88 | } 89 | 90 | %visuallyhidden{ 91 | margin: -1px; 92 | padding: 0; 93 | width: 1px; 94 | height: 1px; 95 | overflow: hidden; 96 | position: absolute; 97 | } 98 | 99 | %center{ 100 | display: block; 101 | position: relative; 102 | margin: 0px auto; 103 | } 104 | -------------------------------------------------------------------------------- /_includes/article_index.html: -------------------------------------------------------------------------------- 1 |
2 | {% if post.homedisplay == "iframe" %} 3 | {% if post.type == "vimeo" %} 4 | {% if post.vimeo-embed %} 5 |
6 | {{ post.vimeo-embed }} 7 |
8 | {% endif %} 9 | {% elsif post.type == "youtube" %} 10 | {% if post.yt-video-id %} 11 |
12 | 13 |
14 | {% endif %} 15 | {% elsif post.type == "audio" %} 16 | {% if post.audio-embed %} 17 | {{ post.audio-embed }} 18 | {% endif %} 19 | {% else %} 20 | {% if post.featimg %} 21 | 22 | {{ post.featimg }} 23 | 24 | {% endif %} 25 | {% endif %} 26 | {% else %} 27 | {% if post.type == "youtube" %} 28 | {% if post.yt-video-id %} 29 | 30 | {{ post.title }} thumbnail 31 | 32 | {% endif %} 33 | {% else %} 34 | {% if post.featimg %} 35 | 36 | {{ post.featimg }} 37 | 38 | {% endif %} 39 | {% endif %} 40 | {% endif %} 41 | {% if post.category %} 42 | 43 | {{ post.category }} 44 | 45 | {% endif %} 46 | 47 |

{{ post.title }}

48 |
49 |

{{ post.content | strip_html | truncatewords: 15 }}

50 | {{ post.date | date: '%B %d, %Y' }} 51 |
52 | -------------------------------------------------------------------------------- /sass/partials/layout/_header.scss: -------------------------------------------------------------------------------- 1 | @import "../components/iconnav"; 2 | @import "../components/logo"; 3 | @import "../components/search"; 4 | @import "../components/menu"; 5 | 6 | .head{ 7 | position: fixed; 8 | top: 0px; 9 | left: 0px; 10 | width: 100%; 11 | background: $head_bg; 12 | z-index: 20; 13 | 14 | @media screen and (min-width: $from_full_to_noslogan){ 15 | .ts_no_slogan, 16 | .ts_icon{ 17 | display: none; 18 | } 19 | } 20 | 21 | @media screen and (max-width: $from_full_to_noslogan - 1) and (min-width: $from_noslogan_to_icon + 1){ 22 | .ts_full, 23 | .ts_icon{ 24 | display: none; 25 | } 26 | } 27 | 28 | @media screen and (max-width: $from_noslogan_to_icon){ 29 | .ts_full, 30 | .ts_no_slogan{ 31 | display: none; 32 | } 33 | } 34 | 35 | .row{ 36 | position: relative; 37 | width: 100%; 38 | top: 0; 39 | left: 0; 40 | margin: 20px 0; 41 | transition: .3s all ease-in-out; 42 | padding: 110px 10px; // adjust to change header height 43 | box-sizing: border-box; 44 | overflow: hidden; 45 | 46 | @media screen and (max-width: $from_noslogan_to_icon){ 47 | padding: 120px 10px; 48 | } 49 | 50 | .logo { 51 | @include paddinghack(100%, 400, 175); // use your logo dimensions here 52 | position: absolute; 53 | top: 50%; 54 | left: 50%; 55 | transform: translate(-50%, -50%) scale(1); 56 | transition: .3s all ease-in-out; 57 | height: 100px; 58 | display: block; 59 | max-width: 400px; 60 | width: 50%; 61 | 62 | svg{ 63 | @extend %paddinghack; 64 | } 65 | } 66 | 67 | .title{ 68 | position: absolute; 69 | top: 50%; 70 | left: 50%; 71 | transform: translate(-50%, -50%) scale(0); 72 | font-size: 0em; 73 | font-weight: bold; 74 | text-transform: uppercase; 75 | transition: .3s all ease-in-out; 76 | } 77 | } 78 | 79 | // header style on scroll 80 | .shrink{ 81 | padding: 0px 10px; 82 | box-sizing: border-box; 83 | margin: 0; 84 | 85 | .logo{ 86 | transform: translate(-50%, -50%) scale(0); 87 | } 88 | 89 | .title{ 90 | font-size: 1em; 91 | transform: translate(-50%, -50%) scale(1); 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /sass/assets/_prism.scss: -------------------------------------------------------------------------------- 1 | /* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+php+scss+git */ 2 | /** 3 | * prism.js default theme for JavaScript, CSS and HTML 4 | * Based on dabblet (http://dabblet.com) 5 | * @author Lea Verou 6 | */ 7 | 8 | code[class*="language-"], 9 | pre[class*="language-"] { 10 | color: black; 11 | text-shadow: 0 1px white; 12 | font-family: Consolas, Monaco, 'Andale Mono', monospace; 13 | direction: ltr; 14 | text-align: left; 15 | white-space: pre; 16 | word-spacing: normal; 17 | word-break: normal; 18 | line-height: 1.5; 19 | 20 | -moz-tab-size: 4; 21 | -o-tab-size: 4; 22 | tab-size: 4; 23 | 24 | -webkit-hyphens: none; 25 | -moz-hyphens: none; 26 | -ms-hyphens: none; 27 | hyphens: none; 28 | } 29 | 30 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, 31 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { 32 | text-shadow: none; 33 | background: #b3d4fc; 34 | } 35 | 36 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection, 37 | code[class*="language-"]::selection, code[class*="language-"] ::selection { 38 | text-shadow: none; 39 | background: #b3d4fc; 40 | } 41 | 42 | @media print { 43 | code[class*="language-"], 44 | pre[class*="language-"] { 45 | text-shadow: none; 46 | } 47 | } 48 | 49 | /* Code blocks */ 50 | pre[class*="language-"] { 51 | padding: 1em; 52 | margin: .5em 0; 53 | overflow: auto; 54 | } 55 | 56 | :not(pre) > code[class*="language-"], 57 | pre[class*="language-"] { 58 | background: #f5f2f0; 59 | } 60 | 61 | /* Inline code */ 62 | :not(pre) > code[class*="language-"] { 63 | padding: .1em; 64 | border-radius: .3em; 65 | } 66 | 67 | .token.comment, 68 | .token.prolog, 69 | .token.doctype, 70 | .token.cdata { 71 | color: slategray; 72 | } 73 | 74 | .token.punctuation { 75 | color: #999; 76 | } 77 | 78 | .namespace { 79 | opacity: .7; 80 | } 81 | 82 | .token.property, 83 | .token.tag, 84 | .token.boolean, 85 | .token.number, 86 | .token.constant, 87 | .token.symbol, 88 | .token.deleted { 89 | color: #905; 90 | } 91 | 92 | .token.selector, 93 | .token.attr-name, 94 | .token.string, 95 | .token.char, 96 | .token.builtin, 97 | .token.inserted { 98 | color: #690; 99 | } 100 | 101 | .token.operator, 102 | .token.entity, 103 | .token.url, 104 | .language-css .token.string, 105 | .style .token.string { 106 | color: #a67f59; 107 | background: hsla(0, 0%, 100%, .5); 108 | } 109 | 110 | .token.atrule, 111 | .token.attr-value, 112 | .token.keyword { 113 | color: #07a; 114 | } 115 | 116 | .token.function { 117 | color: #DD4A68; 118 | } 119 | 120 | .token.regex, 121 | .token.important, 122 | .token.variable { 123 | color: #e90; 124 | } 125 | 126 | .token.important { 127 | font-weight: bold; 128 | } 129 | 130 | .token.entity { 131 | cursor: help; 132 | } 133 | 134 | -------------------------------------------------------------------------------- /gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | // Project configuration. 4 | grunt.initConfig({ 5 | pkg: grunt.file.readJSON('package.json'), 6 | 7 | uglify: { 8 | build: { 9 | src: 'js/*.js', 10 | dest: 'js/build/global.min.js' 11 | } 12 | }, 13 | 14 | sass: { 15 | options: { 16 | outputStyle: 'compressed', 17 | }, 18 | dist: { 19 | files: { 20 | 'css/main.css': 'sass/main.scss', 21 | 'css/grid.css': 'sass/grid.scss', 22 | 'css/classic.css': 'sass/classic.scss' 23 | } 24 | } 25 | }, 26 | 27 | autoprefixer: { 28 | options: { 29 | browsers: ['> 1%'] 30 | }, 31 | no_dest: { 32 | src: 'css/*.css' // globbing is also possible here 33 | }, 34 | }, 35 | 36 | watch: { 37 | options: { 38 | livereload: true 39 | }, 40 | site: { 41 | files: ["*.html", "**/*.html", "*.md", "**/*.md", "**/*.yml", "*.yml", "!_site/*.*", "!_site/**/*.*"], 42 | tasks: ["shell:jekyllBuild"] 43 | }, 44 | js: { 45 | files: ["js/*.js"], 46 | tasks: ["uglify", "shell:jekyllBuild"] 47 | }, 48 | css: { 49 | files: ["sass/*.scss", "sass/partials/*.scss", "sass/partials/components/*.scss", "sass/partials/layout/*.scss", "sass/modules/*.scss"], 50 | tasks: ["sass", "autoprefixer", "shell:jekyllBuild"] 51 | } 52 | }, 53 | 54 | buildcontrol: { 55 | options: { 56 | dir: '_site', 57 | commit: true, 58 | push: true, 59 | message: 'Built _site from commit %sourceCommit% on branch %sourceBranch%' 60 | }, 61 | pages: { 62 | options: { 63 | remote: 'https://github.com/user/reponame.git', // change that 64 | branch: 'gh-pages' // adjust here 65 | } 66 | } 67 | }, 68 | 69 | shell: { 70 | jekyllServe: { 71 | command: "jekyll serve --no-watch" 72 | }, 73 | jekyllBuild: { 74 | command: "jekyll build" 75 | } 76 | } 77 | }); 78 | 79 | 80 | grunt.loadNpmTasks('grunt-contrib-uglify'); 81 | grunt.loadNpmTasks('grunt-sass'); 82 | grunt.loadNpmTasks('grunt-contrib-watch'); 83 | grunt.loadNpmTasks('grunt-autoprefixer'); 84 | grunt.loadNpmTasks('grunt-shell'); 85 | grunt.loadNpmTasks('grunt-build-control'); 86 | 87 | // Default task(s). 88 | 89 | grunt.registerTask("serve", ["shell:jekyllServe"]); 90 | grunt.registerTask("default", ["sass", "autoprefixer", "shell:jekyllBuild", "watch"]); 91 | grunt.registerTask("deploy", ["buildcontrol:pages"]); 92 | }; 93 | -------------------------------------------------------------------------------- /sass/partials/_general.scss: -------------------------------------------------------------------------------- 1 | html{ 2 | font: { 3 | family: $main_font-family; 4 | size: $root_font_size; 5 | weight: $main_font-weight; 6 | } 7 | color: $main_color; 8 | } 9 | body{ 10 | @extend html; 11 | line-height: $general_line-height; 12 | background:{ 13 | color: $body_bg-color; 14 | image: $body_bg-img; 15 | attachment: fixed; 16 | position: center; 17 | repeat: repeat; 18 | } 19 | transition: .3s all ease-in-out; 20 | @include flexbox(row, wrap, center, flex-start); 21 | } 22 | 23 | h1, h2, h3, h4, h5, h6{ 24 | font-weight: $h_font-weight; 25 | text-transform: $h_text_transform; 26 | line-height: 1; 27 | padding: 10px 0px; 28 | } 29 | 30 | h1{ 31 | font-size: 2.1em; 32 | } 33 | 34 | h2{ 35 | font-size: 1.6em; 36 | } 37 | 38 | h3{ 39 | font-size: 1.2em; 40 | } 41 | 42 | h4{ 43 | font-size: 1em; 44 | } 45 | 46 | h5{ 47 | font-size: .83em; 48 | } 49 | 50 | h6{ 51 | font-size: .75em; 52 | } 53 | 54 | p { 55 | display: block; 56 | margin-top: 10px; 57 | } 58 | 59 | a{ 60 | transition: .3s all; 61 | color: $a_color; 62 | text-decoration: none; 63 | border-bottom: $a_line; 64 | 65 | &:hover{ 66 | transiton: .3s all; 67 | color: $a_hover_color; 68 | border-bottom: transparent 1px solid; 69 | } 70 | 71 | &.noline, 72 | nav &{ 73 | border-bottom: $noborder; 74 | } 75 | } 76 | 77 | img{ 78 | max-width: 100%; 79 | } 80 | 81 | iframe{ 82 | width: 100%; 83 | height: auto; 84 | } 85 | 86 | // responsive video (Format 16:9) 87 | .video_container{ 88 | @include paddinghack(100%, 16, 9); 89 | 90 | iframe{ 91 | @extend %paddinghack; 92 | } 93 | } 94 | 95 | // content container 96 | .content{ 97 | width: $content_width; 98 | max-width: $max_width; 99 | @extend %center; 100 | } 101 | 102 | .margin{ 103 | padding-top: 50px; 104 | width: 100%; 105 | .content{ 106 | @include flexbox(row, wrap, space-between, stretch); 107 | 108 | @media screen and (max-width: $sidebarcollapse){ 109 | @include flexbox(column, wrap, flex-start, center); 110 | } 111 | } 112 | } 113 | 114 | // 404 error msg 115 | .error{ 116 | width: 100%; 117 | margin-bottom: 20px; 118 | padding: 10px; 119 | box-sizing: border-box; 120 | background: $box_bg; 121 | border: $box_line; 122 | } 123 | 124 | .archive{ 125 | article & { 126 | list-style: none; 127 | padding: 0; 128 | } 129 | 130 | .date{ 131 | opacity: .5; 132 | font-size: .8em; 133 | } 134 | 135 | h3{ 136 | padding: 10px; 137 | } 138 | } 139 | 140 | blockquote{ 141 | margin-left: 5%; 142 | padding: 10px; 143 | box-sizing: border-box; 144 | border-left: $line; 145 | } 146 | 147 | code{ 148 | font-family: 'Source Code Pro', 'Courier New', monospace; 149 | } 150 | 151 | .featimg{ 152 | width: 100%; 153 | } 154 | -------------------------------------------------------------------------------- /css/classic.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:'Roboto';src:url("../fonts/Roboto-MediumItalic-webfont.eot");src:url("../fonts/Roboto-MediumItalic-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-MediumItalic-webfont.woff") format("woff"),url("../fonts/Roboto-MediumItalic-webfont.ttf") format("truetype"),url("../fonts/Roboto-MediumItalic-webfont.svg#robotomedium_italic") format("svg");font-weight:500;font-style:italic}@font-face{font-family:'Roboto';src:url("../fonts/Roboto-Medium-webfont.eot");src:url("../fonts/Roboto-Medium-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-Medium-webfont.woff") format("woff"),url("../fonts/Roboto-Medium-webfont.ttf") format("truetype"),url("../fonts/Roboto-Medium-webfont.svg#robotomedium") format("svg");font-weight:500;font-style:normal}@font-face{font-family:'Roboto';src:url("../fonts/Roboto-LightItalic-webfont.eot");src:url("../fonts/Roboto-LightItalic-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-LightItalic-webfont.woff") format("woff"),url("../fonts/Roboto-LightItalic-webfont.ttf") format("truetype"),url("../fonts/Roboto-LightItalic-webfont.svg#robotolight_italic") format("svg");font-weight:300;font-style:italic}@font-face{font-family:'Roboto';src:url("../fonts/Roboto-Light-webfont.eot");src:url("../fonts/Roboto-Light-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-Light-webfont.woff") format("woff"),url("../fonts/Roboto-Light-webfont.ttf") format("truetype"),url("../fonts/Roboto-Light-webfont.svg#robotolight") format("svg");font-weight:300;font-style:normal}@font-face{font-family:'Roboto';src:url("../fonts/Roboto-BlackItalic-webfont.eot");src:url("../fonts/Roboto-BlackItalic-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-BlackItalic-webfont.woff") format("woff"),url("../fonts/Roboto-BlackItalic-webfont.ttf") format("truetype"),url("../fonts/Roboto-BlackItalic-webfont.svg#robotoblack_italic") format("svg");font-weight:900;font-style:italic}@font-face{font-family:'Roboto';src:url("../fonts/Roboto-Black-webfont.eot");src:url("../fonts/Roboto-Black-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-Black-webfont.woff") format("woff"),url("../fonts/Roboto-Black-webfont.ttf") format("truetype"),url("../fonts/Roboto-Black-webfont.svg#robotoblack") format("svg");font-weight:900;font-style:normal}.articles article:after{content:"";display:table;clear:both}.articles{width:75%}@media screen and (max-width: 1330px){.articles{width:100%}}.articles article{position:relative}.articles article img,.articles article>iframe{width:30%}@media screen and (max-width: 775px){.articles article img,.articles article>iframe{width:100%}}@media screen and (min-width: 776px){.articles article .video_container{position:relative;width:30%;height:0;padding:16.875% 0 0 0}}@media screen and (min-width: 776px){.articles article:nth-of-type(even) img,.articles article:nth-of-type(even)>iframe,.articles article:nth-of-type(even) .video_container{float:left;margin-right:15px}.articles article:nth-of-type(even) .date{left:calc(30% + 5px)}.articles article:nth-of-type(odd) img,.articles article:nth-of-type(odd)>iframe,.articles article:nth-of-type(odd) .video_container{float:right;margin-left:15px}} 2 | -------------------------------------------------------------------------------- /sass/modules/_typography.scss: -------------------------------------------------------------------------------- 1 | // Font definition 2 | @font-face { 3 | font-family: 'Roboto'; 4 | src: url('../fonts/Roboto-MediumItalic-webfont.eot'); 5 | src: url('../fonts/Roboto-MediumItalic-webfont.eot?#iefix') format('embedded-opentype'), 6 | url('../fonts/Roboto-MediumItalic-webfont.woff') format('woff'), 7 | url('../fonts/Roboto-MediumItalic-webfont.ttf') format('truetype'), 8 | url('../fonts/Roboto-MediumItalic-webfont.svg#robotomedium_italic') format('svg'); 9 | font-weight: 500; 10 | font-style: italic; 11 | } 12 | 13 | @font-face { 14 | font-family: 'Roboto'; 15 | src: url('../fonts/Roboto-Medium-webfont.eot'); 16 | src: url('../fonts/Roboto-Medium-webfont.eot?#iefix') format('embedded-opentype'), 17 | url('../fonts/Roboto-Medium-webfont.woff') format('woff'), 18 | url('../fonts/Roboto-Medium-webfont.ttf') format('truetype'), 19 | url('../fonts/Roboto-Medium-webfont.svg#robotomedium') format('svg'); 20 | font-weight: 500; 21 | font-style: normal; 22 | } 23 | 24 | @font-face { 25 | font-family: 'Roboto'; 26 | src: url('../fonts/Roboto-LightItalic-webfont.eot'); 27 | src: url('../fonts/Roboto-LightItalic-webfont.eot?#iefix') format('embedded-opentype'), 28 | url('../fonts/Roboto-LightItalic-webfont.woff') format('woff'), 29 | url('../fonts/Roboto-LightItalic-webfont.ttf') format('truetype'), 30 | url('../fonts/Roboto-LightItalic-webfont.svg#robotolight_italic') format('svg'); 31 | font-weight: 300; 32 | font-style: italic; 33 | } 34 | 35 | @font-face { 36 | font-family: 'Roboto'; 37 | src: url('../fonts/Roboto-Light-webfont.eot'); 38 | src: url('../fonts/Roboto-Light-webfont.eot?#iefix') format('embedded-opentype'), 39 | url('../fonts/Roboto-Light-webfont.woff') format('woff'), 40 | url('../fonts/Roboto-Light-webfont.ttf') format('truetype'), 41 | url('../fonts/Roboto-Light-webfont.svg#robotolight') format('svg'); 42 | font-weight: 300; 43 | font-style: normal; 44 | } 45 | 46 | @font-face { 47 | font-family: 'Roboto'; 48 | src: url('../fonts/Roboto-BlackItalic-webfont.eot'); 49 | src: url('../fonts/Roboto-BlackItalic-webfont.eot?#iefix') format('embedded-opentype'), 50 | url('../fonts/Roboto-BlackItalic-webfont.woff') format('woff'), 51 | url('../fonts/Roboto-BlackItalic-webfont.ttf') format('truetype'), 52 | url('../fonts/Roboto-BlackItalic-webfont.svg#robotoblack_italic') format('svg'); 53 | font-weight: 900; 54 | font-style: italic; 55 | } 56 | 57 | @font-face { 58 | font-family: 'Roboto'; 59 | src: url('../fonts/Roboto-Black-webfont.eot'); 60 | src: url('../fonts/Roboto-Black-webfont.eot?#iefix') format('embedded-opentype'), 61 | url('../fonts/Roboto-Black-webfont.woff') format('woff'), 62 | url('../fonts/Roboto-Black-webfont.ttf') format('truetype'), 63 | url('../fonts/Roboto-Black-webfont.svg#robotoblack') format('svg'); 64 | font-weight: 900; 65 | font-style: normal; 66 | } 67 | 68 | // Font Weights 69 | $black: 900; 70 | $medium: 500; 71 | $light: 300; 72 | 73 | // Font Variables 74 | $roboto: "Roboto", "Calibri", "Arial", sans-serif; 75 | -------------------------------------------------------------------------------- /css/grid.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:'Roboto';src:url("../fonts/Roboto-MediumItalic-webfont.eot");src:url("../fonts/Roboto-MediumItalic-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-MediumItalic-webfont.woff") format("woff"),url("../fonts/Roboto-MediumItalic-webfont.ttf") format("truetype"),url("../fonts/Roboto-MediumItalic-webfont.svg#robotomedium_italic") format("svg");font-weight:500;font-style:italic}@font-face{font-family:'Roboto';src:url("../fonts/Roboto-Medium-webfont.eot");src:url("../fonts/Roboto-Medium-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-Medium-webfont.woff") format("woff"),url("../fonts/Roboto-Medium-webfont.ttf") format("truetype"),url("../fonts/Roboto-Medium-webfont.svg#robotomedium") format("svg");font-weight:500;font-style:normal}@font-face{font-family:'Roboto';src:url("../fonts/Roboto-LightItalic-webfont.eot");src:url("../fonts/Roboto-LightItalic-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-LightItalic-webfont.woff") format("woff"),url("../fonts/Roboto-LightItalic-webfont.ttf") format("truetype"),url("../fonts/Roboto-LightItalic-webfont.svg#robotolight_italic") format("svg");font-weight:300;font-style:italic}@font-face{font-family:'Roboto';src:url("../fonts/Roboto-Light-webfont.eot");src:url("../fonts/Roboto-Light-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-Light-webfont.woff") format("woff"),url("../fonts/Roboto-Light-webfont.ttf") format("truetype"),url("../fonts/Roboto-Light-webfont.svg#robotolight") format("svg");font-weight:300;font-style:normal}@font-face{font-family:'Roboto';src:url("../fonts/Roboto-BlackItalic-webfont.eot");src:url("../fonts/Roboto-BlackItalic-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-BlackItalic-webfont.woff") format("woff"),url("../fonts/Roboto-BlackItalic-webfont.ttf") format("truetype"),url("../fonts/Roboto-BlackItalic-webfont.svg#robotoblack_italic") format("svg");font-weight:900;font-style:italic}@font-face{font-family:'Roboto';src:url("../fonts/Roboto-Black-webfont.eot");src:url("../fonts/Roboto-Black-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/Roboto-Black-webfont.woff") format("woff"),url("../fonts/Roboto-Black-webfont.ttf") format("truetype"),url("../fonts/Roboto-Black-webfont.svg#robotoblack") format("svg");font-weight:900;font-style:normal}.articles{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:stretch;width:75%}@media screen and (max-width: 1330px){.articles{width:100%}}@media screen and (max-width: 530px){.articles{justify-content:center}}.articles article{width:24.25%}.articles article:nth-of-type(n){margin-bottom:25px;margin-right:1%}.articles article:nth-of-type(4n){margin-right:0}@media screen and (max-width: 1460px){.articles article{width:32.6666666667%}.articles article:nth-of-type(n){margin-bottom:25px;margin-right:1%}.articles article:nth-of-type(3n){margin-right:0}}@media screen and (max-width: 775px){.articles article{width:48.5%}.articles article:nth-of-type(n){margin-bottom:25px;margin-right:3%}.articles article:nth-of-type(2n){margin-right:0}}@media screen and (max-width: 530px){.articles article{width:100%}.articles article:nth-of-type(n){margin-bottom:25px;margin-right:0}.articles article:nth-of-type(1n){margin-right:0}} 2 | -------------------------------------------------------------------------------- /_includes/nav.html: -------------------------------------------------------------------------------- 1 | 82 | -------------------------------------------------------------------------------- /sass/partials/components/_syntax.scss: -------------------------------------------------------------------------------- 1 | .highlighter-rouge{ 2 | // margin: 30px 0; 3 | } 4 | 5 | pre{ 6 | background-color: #f8f8f8; 7 | padding: 6px 10px; 8 | border-radius: 2px; 9 | overflow-x:auto; 10 | font-size: .9em; 11 | } 12 | 13 | $olivegray: #999988; 14 | $palepink: #e3d2d2; 15 | $darkred: #a61717; 16 | $medgray: #999; 17 | 18 | .highlight{ 19 | 20 | pre, 21 | .hll { 22 | @extend pre; 23 | } 24 | 25 | .c, 26 | .cm, 27 | .c1 { 28 | color: $olivegray; 29 | } 30 | 31 | .err, 32 | .gr, 33 | .gt { 34 | color: $darkred; 35 | } 36 | 37 | .k, 38 | .o, 39 | .cp, 40 | .cs, 41 | .gs, 42 | .kc, 43 | .kd, 44 | .kn, 45 | .kp, 46 | .kr, 47 | .gu, 48 | .ne, 49 | .nf, 50 | .ow { 51 | font-weight: bold; 52 | } 53 | 54 | .cp, 55 | .cs, 56 | .gh { 57 | color: $medgray; 58 | } 59 | 60 | .gd, 61 | .gd .x, 62 | .gi, 63 | .gi .x { 64 | color: black; 65 | } 66 | 67 | .gd, 68 | .err{ 69 | background-color: $palepink; 70 | } 71 | 72 | .gd .x { 73 | background-color: #ffaaaa; 74 | } 75 | 76 | .gi { 77 | background-color: #ddffdd; 78 | 79 | .x{ 80 | background-color: #aaffaa; 81 | } 82 | } 83 | 84 | .go { 85 | color: #888; 86 | } 87 | 88 | .gp { 89 | color: #555; 90 | } 91 | 92 | .gu { 93 | color: #800080; 94 | } 95 | 96 | .kt { 97 | color: #445588; 98 | font-weight: bold; 99 | } 100 | 101 | .m { 102 | color: #009999; 103 | } 104 | 105 | .s { 106 | color: #dd1144; 107 | } 108 | 109 | .n { 110 | color: #333; 111 | } 112 | 113 | .na { 114 | color: teal; 115 | } 116 | 117 | .nb { 118 | color: #0086b3; 119 | } 120 | 121 | .nc { 122 | color: #445588; 123 | font-weight: bold; 124 | } 125 | 126 | .no { 127 | color: teal; 128 | } 129 | 130 | .ni { 131 | color: purple; 132 | } 133 | 134 | .ne { 135 | color: #990000; 136 | } 137 | 138 | .nf { 139 | color: #990000; 140 | } 141 | 142 | .nn { 143 | color: #555555; 144 | } 145 | 146 | .nt { 147 | color: navy; 148 | } 149 | 150 | .nv { 151 | color: teal; 152 | } 153 | 154 | .w { 155 | color: #bbbbbb; 156 | } 157 | 158 | .mf { 159 | color: #009999; 160 | } 161 | 162 | .mh { 163 | color: #009999; 164 | } 165 | 166 | .mi { 167 | color: #009999; 168 | } 169 | 170 | .mo { 171 | color: #009999; 172 | } 173 | 174 | .sb { 175 | color: #dd1144; 176 | } 177 | 178 | .sc { 179 | color: #dd1144; 180 | } 181 | 182 | .sd { 183 | color: #dd1144; 184 | } 185 | 186 | .s2 { 187 | color: #dd1144; 188 | } 189 | 190 | .se { 191 | color: #dd1144; 192 | } 193 | 194 | .sh { 195 | color: #dd1144; 196 | } 197 | 198 | .si { 199 | color: #dd1144; 200 | } 201 | 202 | .sx { 203 | color: #dd1144; 204 | } 205 | 206 | .sr { 207 | color: #009926; 208 | } 209 | 210 | .s1 { 211 | color: #dd1144; 212 | } 213 | 214 | .ss { 215 | color: #990073; 216 | } 217 | 218 | .bp { 219 | color: $medgray; 220 | } 221 | 222 | .vc { 223 | color: teal; 224 | } 225 | 226 | .vg { 227 | color: teal; 228 | } 229 | 230 | .vi { 231 | color: teal; 232 | } 233 | 234 | .il { 235 | color: #009999; 236 | } 237 | 238 | .gc { 239 | color: #999; 240 | background-color: #EAF2F5; 241 | } 242 | } 243 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | name: PyData London 2 | description: Official website for PyData London Meetups and Conference 3 | url: http://london.pydata.org 4 | baseurl: #place folder name if site is served in subfolder 5 | permalink: /:title/ 6 | paginate: 8 7 | paginate_path: /page/:num/ 8 | tag_dir: /tag 9 | category_dir: /category 10 | author_dir: /author 11 | author_title_prefix: 'Posted by ' 12 | media_folder: /img 13 | author_default_avatar: /profile-pic.jpg 14 | analytics_id: UA-73343207-1 15 | twitter: "https://twitter.com/pydatalondon" 16 | youtube: "https://www.youtube.com/user/PyDataTV" 17 | vimeo: "https://vimeo.com/pydata" 18 | 19 | encoding: utf-8 20 | defaults: 21 | - 22 | scope: 23 | path: "" 24 | type: "posts" 25 | values: 26 | layout: "post" 27 | type: "standard" 28 | homedisplay: "featimg" 29 | markdown: kramdown 30 | kramdown: 31 | input: GFM 32 | syntax_highlighter: rouge 33 | relative_permalinks: false 34 | exclude: [.git, .gitignore, sass, .sass-cache, package.json, gruntfile.js, node_modules, README.md, documentation] 35 | 36 | # prose.io configurations 37 | prose: 38 | media: "img" 39 | metadata: 40 | _posts: 41 | - name: "title" 42 | field: 43 | element: "text" 44 | label: "title" 45 | - name: "layout" 46 | field: 47 | element: "select" 48 | label: "Layout" 49 | help: "display post at full width or with sidebar" 50 | options: 51 | - name: "with sidebar" 52 | value: "post" 53 | - name: "full width" 54 | value: "post_full" 55 | - name: "author" 56 | field: 57 | element: "text" 58 | label: "Author" 59 | help: "author id as defined within _data/authors.yml" 60 | type: "text" 61 | - name: "featimg" 62 | field: 63 | element: "text" 64 | label: "Featured Image" 65 | help: "featured image within the img-folder" 66 | type: "text" 67 | - name: "type" 68 | field: 69 | element: "select" 70 | label: "Post Type" 71 | help: "each type has some special feature" 72 | options: 73 | - name: "Standard" 74 | value: "standard" 75 | - name: "Image" 76 | value: "image" 77 | - name: "Gallery" 78 | value: "gallery" 79 | - name: "Audio" 80 | value: "audio" 81 | - name: "YouTube" 82 | value: "youtube" 83 | - name: "Vimeo" 84 | value: "vimeo" 85 | - name: "homedisplay" 86 | field: 87 | element: "select" 88 | label: "Home Display" 89 | help: "decide whether to display embedded element (for post types: audio, youtube, vimeo) or Featured Image on home page" 90 | options: 91 | - name: "Featured Image" 92 | value: "featimg" 93 | - name: "Embedded Element" 94 | value: "iframe" 95 | - name: "vimeo-embed" 96 | field: 97 | element: "text" 98 | label: "Vimeo Embedding Code" 99 | help: "Set post type to vimeo in order for this to work" 100 | - name: "gallery-id" 101 | field: 102 | element: "text" 103 | label: "Gallery ID" 104 | help: "ID of the gallery defined within _data/galleries.yml - use include in content to use" 105 | - name: "audio-embed" 106 | field: 107 | element: "text" 108 | label: "Audio Embedding Code" 109 | help: "Set post type to audio in order for this to work" 110 | - name: "yt-video-id" 111 | field: 112 | element: "text" 113 | label: "YouTube Video ID" 114 | help: "Set post type to youtube in order for this to work. Do not set featured image, as the youtube video thumbnail will be used" 115 | type: "text" 116 | 117 | -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page_full 3 | featimg: pydata_members.jpg 4 | title: Welcome to PyData London! 5 | --- 6 | 7 | ## Conference 8 | 9 | ### [PyData London 2025](https://pydata.org/london2025/) 10 | 11 | Fri 6th - Sun 8th June 2025, [Convene Sancroft, St. Paul's](https://convene.com/locations/london/sancroft-st-pauls/), Sancroft, Rose St, Paternoster Sq., London EC4M 7DQ. 12 | 13 | ### 🎟 Tickets 14 | 15 | Tickets are on sale here: [Tickets](https://ti.to/pydata/pydata-london-25) 16 | 17 | ### 📆 Schedule 18 | 19 | The CFP has now closed and the talks [will be announced here](https://pydata.org/london2025/cfp#talks) 20 | 21 |
22 | 23 | ## About the community 24 | 25 | The monthly meetups and annual conferences are put together by a group of volunteers passionate about Python. Since 2014, we have provided Pythonistas in London a forum to learn from each other on the use of Python in the ever-evolving fields of data management, processing, analytics and visualisation. 26 | PyData London meetups take place on the first Tuesday of each month, currently under the generous sponsorship from AHL. 27 | 28 | ## About the speakers 29 | All speakers at PyData London meetups and conferences do so altruistically! A big thank you to all speakers who volunteer their time to prepare amazing content to educate and enlighten fellow Pythonistas. 30 | 31 | We welcome speakers from all levels and backgrounds - please [submit a talk](/submit-a-talk)! 32 | 33 | ## About the volunteers 34 | Behind the scene, unpaid volunteers organise the logistics and content of every meetups and conferences. The organisers have day jobs to pay their bills and dedicate their free time for the benefit of the community. So when you see the organisers at the next event, don't forget to thank them. Both volunteers and speakers are especially partial to free drinks and good chat at the pub! 35 | 36 | Current organisers include: 37 | 38 | * Amit Kumar - [Website](https://iamit.in/blog) - [GitHub](https://github.com/aktech) - [LinkedIn](https://www.linkedin.com/in/iaktech) - [Twitter](https://twitter.com/iaktech) 39 | * Atharva Lad - [LinkedIn](https://www.linkedin.com/in/atharvalad/) 40 | * Cheuk Ting Ho - [Blog](https://cheuk.dev/) - [GitHub](https://github.com/Cheukting) - [LinkedIn](https://www.linkedin.com/in/cheukting-ho) - [Twitter](https://twitter.com/cheukting_ho) - [YouTube](https://www.youtube.com/%40cheuktingho) 41 | * Emlyn Clay - [Twitter](https://twitter.com/emlynclay) - [LinkedIn](https://www.linkedin.com/in/emlynclay/) - [GitHub](https://github.com/emlync) - [Twitter](https://twitter.com/emlynclay) 42 | * Ian Ozsvald - [Blog](http://ianozsvald.com/) - [GitHub](https://github.com/ianozsvald) - [LinkedIn](https://www.linkedin.com/in/ianozsvald) - [Twitter](https://twitter.com/ianozsvald) 43 | * Jessica Walkenhorst - [LinkedIn](https://www.linkedin.com/in/jessica-walkenhorst/) 44 | * John Sandall - [LinkedIn](https://www.linkedin.com/in/johnsandall) - [Twitter](https://twitter.com/john_sandall) - [GitHub](https://github.com/john-sandall/) 45 | * Prashant Tiwari - [LinkedIn](https://www.linkedin.com/in/prashanttiwari247/) - [Twitter](https://twitter.com/PT_247) 46 | 47 | Alumni organisers include: 48 | 49 | * Aaron Critchley - [GitHub](https://github.com/aaroncritchley) - [LinkedIn](https://www.linkedin.com/in/aaroncritchley/) - [Twitter](https://twitter.com/aaroncritchley) 50 | * Agata Brajdic 51 | * Cecilia Liao - [Blog](http://cecilialiao.com/) - [GitHub](https://github.com/cecilialiao) - [LinkedIn](https://www.linkedin.com/in/cecilialiao) - [Twitter](https://twitter.com/cecilialiao) 52 | * Florian Rathgeber - [Blog](https://kynan.github.io) - [Twitter](https://twitter.com/frathgeber) 53 | * Marco Bonzanini - [Blog](https://marcobonzanini.com/) - [GitHub](https://github.com/bonzanini) - [LinkedIn](https://www.linkedin.com/in/marcobonzanini) - [Twitter](https://twitter.com/marcobonzanini) 54 | * Marie-Louise Annan - [LinkedIn](https://www.linkedin.com/in/marie-louise-annan-18776529/) 55 | * Slavi Marinov - [Twitter](https://twitter.com/slavitweets) 56 | * Steve Holden - [Blog](http://holdenweb.blogspot.co.uk/) - [Twitter](https://twitter.com/holdenweb) 57 | -------------------------------------------------------------------------------- /conf_2016_assets/reviewers.json: -------------------------------------------------------------------------------- 1 | { "data": [ 2 | {"name": "Ruby Childs", 3 | "twitter": "rubychilds", 4 | "github": "https://github.com/rubychilds", 5 | "linkedin": "https://www.linkedin.com/in/rubychilds1", 6 | "personal_website": "http://rubychilds.com/", 7 | "image": "images/ruby.jpg"}, 8 | 9 | {"name": "Elena Chatzimichali", 10 | "twitter": "eaHatz", 11 | "github": "", 12 | "linkedin": "https://uk.linkedin.com/in/eachatzimichali", 13 | "personal_website": "", 14 | "image": "images/elena.jpg" 15 | }, 16 | 17 | {"name": "Graham Markall", 18 | "twitter": "gmarkall", 19 | "github": "https://github.com/gmarkall", 20 | "linkedin": "https://www.linkedin.com/in/graham-markall-0087a215", 21 | "personal_website": "http://www.big-grey.co.uk", 22 | "image": "images/graham.jpg"}, 23 | 24 | {"name": "Ian Ozsvald", 25 | "twitter": "ianozsvald", 26 | "github": "https://github.com/ianozsvald/", 27 | "linkedin": "http://www.linkedin.com/in/ianozsvald", 28 | "personal_website": "http://ianozsvald.com/", 29 | "image": "images/ian.jpg"}, 30 | 31 | {"name": "Chih-Chun Chen", 32 | "twitter": "chihchun_chen", 33 | "github": "https://github.com/cambridgecoding", 34 | "linkedin": "https://www.linkedin.com/in/chihchunchen", 35 | "personal_website": "http://abmcet.net/Chih-Chun_Chen/home.html", 36 | "image": "images/chiha.jpg" 37 | }, 38 | 39 | {"name": "Marco Bonzanini", 40 | "twitter": "marcobonzanini", 41 | "github": "https://github.com/bonzanini", 42 | "linkedin": "https://uk.linkedin.com/in/marcobonzanini", 43 | "personal_website": "http://marcobonzanini.com", 44 | "image": "images/marco.jpg" 45 | }, 46 | 47 | {"name": "Katie Barr", 48 | "twitter": "drkbarr", 49 | "github": "https://github.com/kebarr", 50 | "linkedin": "https://uk.linkedin.com/in/dr-katie-barr-40a49b27", 51 | "personal_website": "", 52 | "image": "images/katie.jpg" 53 | }, 54 | 55 | {"name": "Emlyn Clay", 56 | "twitter": "emlynclay", 57 | "github": "https://github.com/emlync", 58 | "linkedin": "https://www.linkedin.com/in/emlynclay", 59 | "personal_website": "http://emlynclay.co.uk", 60 | "image": "images/emlyn.jpg" 61 | }, 62 | 63 | {"name": "Daniel Slater", 64 | "twitter": "danielslaterish", 65 | "github": "https://github.com/DanielSlater/", 66 | "linkedin": "https://uk.linkedin.com/in/daniel-slater-3032a016", 67 | "personal_website": "www.danielslater.net", 68 | "image": "images/daniel.jpg" 69 | }, 70 | {"name": "Linda Uruchurtu", 71 | "twitter": "lindauruchurtu", 72 | "github": "", 73 | "linkedin": "https://www.linkedin.com/in/lindauruchurtu", 74 | "personal_website": "www.danielslater.net", 75 | "image": "images/linda.jpg" 76 | }, 77 | {"name": "Priya Gogna", 78 | "github": "https://github.com/pri9", 79 | "linkedin": "https://uk.linkedin.com/in/priyagogna", 80 | "twitter": "hello_kepler22b", 81 | "personal_website": "", 82 | "image": "images/priya.jpg" 83 | }, 84 | 85 | {"name": "Maria Lehl", 86 | "github": "", 87 | "linkedin": "https://uk.linkedin.com/in/maria-lehl-51264b92", 88 | "twitter": "", 89 | "personal_website": "", 90 | "image": "images/maria.jpg" 91 | } 92 | 93 | {"name": "Giles Weaver", 94 | "github": "", 95 | "linkedin": "https://uk.linkedin.com/in/giles-weaver-3b66371", 96 | "twitter": "gilesweaver", 97 | "personal_website": "", 98 | "image": "images/giles.jpg" 99 | } 100 | ]} 101 | -------------------------------------------------------------------------------- /_layouts/post_full.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | 7 | 8 | {% include svg.html %} 9 |
10 | {% include header.html %} 11 | {% include nav.html %} 12 |
13 | {% include search.html %} 14 |
15 |
16 |
17 |
18 | {% if page.type == "vimeo" %} 19 | {% if page.vimeo-embed %} 20 |
21 | {{ page.vimeo-embed }} 22 |
23 | {% endif %} 24 | {% elsif page.type == "youtube" %} 25 | {% if page.yt-video-id %} 26 |
27 | 28 |
29 | {% endif %} 30 | {% elsif page.type == "image" or page.type == "gallery" %} 31 | {% if page.featimg %} 32 | {{ page.featimg }} 33 | {% endif %} 34 | {% elsif page.type == "audio" %} 35 | {% if page.audio-embed %} 36 | {{ page.audio-embed }} 37 | {% endif %} 38 | {% endif %} 39 | 40 |

41 | {{ page.title }} 42 |

43 |
44 | {% include author.html%} • 45 | 46 | Published on {{ page.date | date: '%B %d, %Y' }} 47 | 48 |
49 | {% if page.type == "standard" %} 50 | {% if page.featimg %} 51 | {{ page.featimg }} 52 | {% endif %} 53 | {% endif %} 54 |
55 | {{ content }} 56 |
57 | {% if page.category || page.tags %} 58 |
59 | {% if page.category %} 60 |

61 | Categories: 62 | {{ page.categories | category_links }} 63 |

64 | {% endif %} 65 | {% if page.tags %} 66 |

67 | Tags: 68 | {% for tag in page.tags %} 69 | {{ tag }} 70 | {% endfor %} 71 |

72 | {% endif %} 73 |
74 | {% endif %} 75 |
76 |
77 | {% if page.previous.url %} 78 | 79 | {% endif %} 80 | {% if page.next.url %} 81 | 82 | {% endif %} 83 |
84 |
85 |
86 |
87 | {% include footer.html %} 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /_layouts/post.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | 7 | 8 | {% include svg.html %} 9 |
10 | {% include header.html %} 11 | {% include nav.html %} 12 |
13 | {% include search.html %} 14 |
15 |
16 |
17 |
18 | {% if page.type == "vimeo" %} 19 | {% if page.vimeo-embed %} 20 |
21 | {{ page.vimeo-embed }} 22 |
23 | {% endif %} 24 | {% elsif page.type == "youtube" %} 25 | {% if page.yt-video-id %} 26 |
27 | 28 |
29 | {% endif %} 30 | {% elsif page.type == "image" or page.type == "gallery" %} 31 | {% if page.featimg %} 32 | {{ page.featimg }} 33 | {% endif %} 34 | {% elsif page.type == "audio" %} 35 | {% if page.audio-embed %} 36 | {{ page.audio-embed }} 37 | {% endif %} 38 | {% endif %} 39 | 40 |

41 | {{ page.title }} 42 |

43 |
44 | {% include author.html%} • 45 | 46 | Published on {{ page.date | date: '%B %d, %Y' }} 47 | 48 |
49 | {% if page.type == "standard" %} 50 | {% if page.featimg %} 51 | {{ page.featimg }} 52 | {% endif %} 53 | {% endif %} 54 |
55 | {{ content }} 56 |
57 | {% if page.category || page.tags %} 58 |
59 | {% if page.category %} 60 |

61 | Categories: 62 | {{ page.categories | category_links }} 63 |

64 | {% endif %} 65 | {% if page.tags %} 66 |

67 | Tags: 68 | {% for tag in page.tags %} 69 | {{ tag }} 70 | {% endfor %} 71 |

72 | {% endif %} 73 |
74 | {% endif %} 75 |
76 |
77 | {% if page.previous.url %} 78 | 79 | {% endif %} 80 | {% if page.next.url %} 81 | 82 | {% endif %} 83 |
84 |
85 | {% include sidebar.html %} 86 |
87 |
88 | {% include footer.html %} 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /_plugins/author_generator.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | # 3 | # Jekyll author page generator. 4 | # http://recursive-design.com/projects/jekyll-plugins/ 5 | # 6 | # Version: 0.1.4 (201101061053) 7 | # 8 | # Copyright (c) 2010 Dave Perrett, http://recursive-design.com/ 9 | # Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) 10 | # 11 | # A generator that creates author pages for jekyll sites. 12 | # 13 | # Included filters : 14 | # - author_links: Outputs the list of author as comma-separated links. 15 | # - date_to_html_string: Outputs the post.date as formatted html, with hooks for CSS styling. 16 | # 17 | # Available _config.yml settings : 18 | # - author_dir: The subfolder to build author pages in (default is 'authors'). 19 | # - author_title_prefix: The string used before the author name in the page title (default is 20 | # 'Author: '). 21 | 22 | module Jekyll 23 | 24 | # The AuthorIndex class creates a single author page for the specified author. 25 | class AuthorIndex < Page 26 | 27 | # Initializes a new AuthorIndex. 28 | # 29 | # +base+ is the String path to the . 30 | # +author_dir+ is the String path between and the author folder. 31 | # +author+ is the author currently being processed. 32 | def initialize(site, base, author_dir, author) 33 | @site = site 34 | @base = base 35 | @dir = author_dir 36 | @name = 'index.html' 37 | puts "author #{author} @dir #{author_dir}" 38 | self.process(@name) 39 | # Read the YAML data from the layout page. 40 | self.read_yaml(File.join(base, '_layouts'), 'author_index.html') 41 | self.data['author'] = author 42 | # Set the title for this page. 43 | title_prefix = site.config['author_title_prefix'] || 'author: ' 44 | self.data['title'] = "#{title_prefix}#{author}" 45 | # Set the meta-description for this page. 46 | meta_description_prefix = site.config['author_meta_description_prefix'] || 'author: ' 47 | self.data['description'] = "#{meta_description_prefix}#{author}" 48 | end 49 | 50 | end 51 | 52 | 53 | # The Site class is a built-in Jekyll class with access to global site config information. 54 | class Site 55 | 56 | # Creates an instance of AuthorIndex for each author page, renders it, and 57 | # writes the output to a file. 58 | # 59 | # +author_dir+ is the String path to the author folder. 60 | # +author+ is the author currently being processed. 61 | def write_author_index(author_dir, author) 62 | index = AuthorIndex.new(self, self.source, author_dir, author) 63 | index.render(self.layouts, site_payload) 64 | index.write(self.dest) 65 | # Record the fact that this page has been added, otherwise Site::cleanup will remove it. 66 | self.pages << index 67 | 68 | end 69 | 70 | # Loops through the list of author pages and processes each one. 71 | def write_author_indexes 72 | if self.layouts.key? 'author_index' 73 | dir = self.config['author_dir'] || 'authors' 74 | self.posts.each do |post| 75 | post_authors = post.data["author"] 76 | if String.try_convert(post_authors) 77 | post_authors = [ post_authors ] 78 | end 79 | post_authors.each do |author| 80 | self.write_author_index(File.join(dir, author.downcase.gsub(' ', '-')), author) 81 | end unless post_authors.nil? 82 | end 83 | # Throw an exception if the layout couldn't be found. 84 | else 85 | throw "No 'author_index' layout found." 86 | end 87 | end 88 | 89 | end 90 | 91 | 92 | # Jekyll hook - the generate method is called by jekyll, and generates all of the author pages. 93 | class GenerateAuthor < Generator 94 | safe true 95 | priority :high 96 | 97 | def generate(site) 98 | site.write_author_indexes 99 | #puts "site.authors #{site.authors}" 100 | end 101 | 102 | end 103 | 104 | 105 | # Adds some extra filters used during the author creation process. 106 | module Filters 107 | 108 | # Outputs a list of authors as comma-separated links. This is used 109 | # to output the author list for each post on a author page. 110 | # 111 | # +author+ is the list of author to format. 112 | # 113 | # Returns string 114 | # 115 | def author_links(authors) 116 | dir = @context.registers[:site].config['author_dir'] || "authors" 117 | if String.try_convert(authors) 118 | authors = [ authors ] 119 | end 120 | authors = authors.map do |author| 121 | "#{author}" 122 | end 123 | case authors.length 124 | when 0 125 | "" 126 | when 1 127 | authors[0].to_s 128 | else 129 | "#{authors[0...-1].join(', ')}, #{authors[-1]}" 130 | end 131 | end 132 | 133 | # Outputs the post.date as formatted html, with hooks for CSS styling. 134 | # 135 | # +date+ is the date object to format as HTML. 136 | # 137 | # Returns string 138 | def date_to_html_string(date) 139 | result = '' + date.strftime('%b').upcase + ' ' 140 | result += date.strftime('%d ') 141 | result += date.strftime('%Y ') 142 | result 143 | end 144 | 145 | end 146 | 147 | end 148 | -------------------------------------------------------------------------------- /sass/partials/components/_menu.scss: -------------------------------------------------------------------------------- 1 | // Main Nav 2 | .main_menu{ 3 | background: $mainnav_bg; 4 | position: relative; 5 | top: 0px; 6 | width: 100%; 7 | left: 0px; 8 | border-top: $mainnav_border; 9 | border-bottom: $mainnav_border; 10 | text-transform: $mainnav_text-transform; 11 | 12 | .content{ 13 | @include flexbox(row, wrap, space-between, center); 14 | } 15 | } 16 | 17 | #menu{ 18 | position: relative; 19 | display: block; 20 | background: $mainnav_bg; 21 | box-sizing: border-box; 22 | color: $mainnav_a_color; 23 | font-size: 1em; 24 | z-index: 105; 25 | 26 | a{ 27 | color: $mainnav_a_color; 28 | 29 | &:hover{ 30 | color: $mainnav_a_hover; 31 | } 32 | } 33 | 34 | .toggle_link{ 35 | display: none; 36 | } 37 | 38 | > ul { 39 | text-align: center; 40 | } 41 | 42 | li{ 43 | display: inline-block; 44 | padding: 20px 7px; 45 | transition: .3s all linear; 46 | 47 | > a{ 48 | width: 100%; 49 | display: block; 50 | } 51 | 52 | &:hover{ 53 | transition: .3s all linear; 54 | 55 | > a{ 56 | color: $mainnav_a_hover; 57 | } 58 | } 59 | } 60 | 61 | // Drop Down 62 | .parent{ 63 | margin-left: 0; 64 | position: relative; 65 | 66 | @if $mainav_parent_plus_display == yes{ 67 | > a{ 68 | &:before{ 69 | content:"+ "; 70 | } 71 | } 72 | } 73 | 74 | > ul{ 75 | padding-top: 0px; 76 | display: none; 77 | 78 | @media screen and (min-width: $mainnav_collapse+1){ 79 | background: $mainnav_bg; 80 | position: absolute; 81 | top: 100%; 82 | left: 50%; 83 | transform: translateX(-50%); 84 | width: auto; 85 | border-top: $mainnav_border; 86 | border-left: $mainnav_border; 87 | border-right: $mainnav_border; 88 | 89 | &:before{ 90 | content: ""; 91 | width: 10px; 92 | height: 10px; 93 | background: $mainnav_bg; 94 | position: absolute; 95 | top: -6px; 96 | left: 50%; 97 | transform: translateX(-50%) rotate(45deg); 98 | border-left: $mainnav_border; 99 | border-top: $mainnav_border; 100 | } 101 | } 102 | 103 | li{ 104 | display: block; 105 | padding: 10px 0px; 106 | 107 | @media screen and (min-width: $mainnav_collapse+1){ 108 | padding: 10px 30px; 109 | border-bottom: $mainnav_border; 110 | } 111 | } 112 | } 113 | 114 | &:hover, 115 | &:focus{ 116 | cursor: pointer; 117 | @media screen and (min-width: $mainnav_collapse+1){ 118 | > ul{ 119 | display: block; 120 | } 121 | } 122 | } 123 | } 124 | 125 | // Responsive Version (Off-Canvas) 126 | @media screen and (max-width: $mainnav_collapse){ 127 | padding: 35px 0px 0px; 128 | width: 280px; 129 | height: 80vh; 130 | overflow-y: sroll; 131 | overflow-x: hidden; 132 | position: fixed; 133 | top: 0px; 134 | right: -320px; 135 | transform: translate(0px, 0px); 136 | transition: .3s all ease; 137 | z-index: 108; 138 | box-shadow: 0px 0px 5px 0px rgba(black, .5); 139 | 140 | &.active{ 141 | transform: translate(-340px, 20px); 142 | transition: .3s all ease; 143 | } 144 | 145 | .toggle_link{ 146 | display: block; 147 | position: absolute; 148 | top: 5px; 149 | right: 5px; 150 | 151 | &:after{ 152 | content: ""; 153 | } 154 | } 155 | 156 | > ul{ 157 | text-align: $mainnav_responsive_text_align; 158 | width: 100%; 159 | position: relative; 160 | } 161 | 162 | li{ 163 | display: block; 164 | padding: 10px 15px; 165 | border-top: 1px solid lighten($mainnav_bg, 5%); 166 | 167 | &:first-of-type{ 168 | border-top: $noborder; 169 | } 170 | 171 | &:hover{ 172 | transition: .3s all linear; 173 | background: rgba($mainnav_a_hover_bg, .4); 174 | } 175 | } 176 | 177 | // Sub Items 178 | .parent{ 179 | margin-left: 0; 180 | 181 | > ul{ 182 | padding-top: 15px; 183 | display: none; 184 | 185 | li{ 186 | padding: 10px 0px; 187 | 188 | &:first-of-type{ 189 | border-top: 1px solid lighten($mainnav_bg, 5%); 190 | } 191 | } 192 | } 193 | } 194 | .open{ 195 | > ul{ 196 | display: block; 197 | } 198 | } 199 | } 200 | } 201 | 202 | // Toggle 203 | .toggle_link{ 204 | @media screen and (min-width: $mainnav_collapse){ 205 | display: none; 206 | } 207 | } 208 | -------------------------------------------------------------------------------- /sass/partials/components/_lightbox.scss: -------------------------------------------------------------------------------- 1 | @keyframes clockwise { 2 | 0% { transform: rotate(0deg) } 3 | 100%{ transform: rotate(360deg) } 4 | } 5 | 6 | @keyframes anticlockwise { 7 | 0% { transform: rotate(360deg) } 8 | 100%{ transform: rotate(0deg) } 9 | } 10 | 11 | #imagelightbox { 12 | cursor: pointer; 13 | position: fixed; 14 | z-index: 10000; 15 | touch-action: none; 16 | } 17 | 18 | #imagelightbox-loading { 19 | border-radius: 50%; 20 | width: 2.5em; 21 | height: 2.5em; 22 | background-color: transparent; 23 | position: fixed; 24 | z-index: 10003; 25 | top: 50%; 26 | left: 50%; 27 | padding: 0.625em; 28 | margin: -1.25em 0 0 -1.25em; 29 | 30 | div { 31 | animation: clockwise 1.5s linear infinite; 32 | display: block; 33 | height: 2em; 34 | position: relative; 35 | width: 2em; 36 | 37 | &, 38 | &:before, 39 | &:after { 40 | border: .2em solid transparent; 41 | border-radius: 50%; 42 | border-top-color: $white; 43 | margin: auto; 44 | } 45 | 46 | &:before, 47 | &:after { 48 | content: ''; 49 | position: absolute; 50 | } 51 | 52 | &:before { 53 | animation: anticlockwise .9s linear infinite; 54 | top: -.6em; 55 | right: -.6em; 56 | bottom: -.6em; 57 | left: -.6em; 58 | } 59 | 60 | &:after { 61 | animation: anticlockwise .66s linear infinite; 62 | top: .3em; 63 | right: .3em; 64 | bottom: .3em; 65 | left: .3em; 66 | } 67 | 68 | 69 | } 70 | } 71 | 72 | #imagelightbox-overlay { 73 | background-color: rgba(0,0,0, .8); 74 | position: fixed; 75 | z-index: 9998; 76 | top: 0; 77 | right: 0; 78 | bottom: 0; 79 | left: 0; 80 | } 81 | 82 | #imagelightbox-close { 83 | color: $white; 84 | position: fixed; 85 | z-index: 10002; 86 | top: 2em; 87 | right: 2em; 88 | transition: .3s ease; 89 | border: 0px solid transparent; 90 | font-size: 2em; 91 | background: transparent; 92 | 93 | &:hover, 94 | &:focus{ 95 | color: darken($white, 20%); 96 | cursor: pointer; 97 | } 98 | } 99 | 100 | #imagelightbox-caption { 101 | text-align: center; 102 | color: #fff; 103 | background-color: $black; 104 | position: fixed; 105 | z-index: 10001; 106 | left: 0; 107 | right: 0; 108 | bottom: 0; 109 | padding: 0.3em; 110 | } 111 | 112 | .imagelightbox-arrow { 113 | width: 3.75em; 114 | height: 7.5em; 115 | background-color: transparent; 116 | vertical-align: middle; 117 | display: none; 118 | position: fixed; 119 | z-index: 10001; 120 | top: 50%; 121 | margin-top: -3.75em; 122 | border: 0px solid transparent; 123 | 124 | &:hover{ 125 | cursor: pointer; 126 | } 127 | } 128 | .imagelightbox-arrow-left { 129 | left: 2.5em; /* 40 */ 130 | 131 | &:before{ 132 | border-left: 2px solid $white; 133 | border-bottom: 2px solid $white; 134 | } 135 | 136 | &:hover{ 137 | &:before{ 138 | border-color: darken($white, 30%); 139 | } 140 | } 141 | } 142 | 143 | .imagelightbox-arrow-right { 144 | right: 2.5em; /* 40 */ 145 | 146 | &:before{ 147 | border-top: 2px solid $white; 148 | border-right: 2px solid $white; 149 | } 150 | 151 | &:hover{ 152 | &:before{ 153 | border-color: darken($white, 30%); 154 | } 155 | } 156 | } 157 | 158 | .imagelightbox-arrow:before{ 159 | width: 3em; 160 | height: 3em; 161 | transform: rotate(45deg); 162 | content: ''; 163 | display: inline-block; 164 | margin-bottom: -0.125em; /* 2 */ 165 | } 166 | 167 | 168 | #imagelightbox-loading, 169 | #imagelightbox-overlay, 170 | #imagelightbox-close, 171 | #imagelightbox-caption, 172 | #imagelightbox-nav, 173 | .imagelightbox-arrow { 174 | animation: fade-in .25s linear; 175 | } 176 | 177 | @keyframes fade-in { 178 | from { opacity: 0; } 179 | to { opacity: 1; } 180 | } 181 | 182 | @media only screen and (max-width: 41.250em) { 183 | #container{ 184 | width: 100%; 185 | } 186 | 187 | #imagelightbox-close { 188 | top: 1.25em; /* 20 */ 189 | right: 1.25em; /* 20 */ 190 | } 191 | 192 | #imagelightbox-nav { 193 | bottom: 1.25em; /* 20 */ 194 | } 195 | 196 | .imagelightbox-arrow { 197 | width: 2.5em; /* 40 */ 198 | height: 3.75em; /* 60 */ 199 | margin-top: -2.75em; /* 30 */ 200 | } 201 | 202 | .imagelightbox-arrow-left { 203 | left: 1.25em; /* 20 */ 204 | } 205 | 206 | .imagelightbox-arrow-right { 207 | right: 1.25em; /* 20 */ 208 | } 209 | } 210 | 211 | @media only screen and (max-width: 20em) /* 320 */{ 212 | .imagelightbox-arrow-left { 213 | left: 0; 214 | } 215 | 216 | .imagelightbox-arrow-right { 217 | right: 0; 218 | } 219 | } 220 | 221 | .masonry{ 222 | @include flexbox(row, wrap, flex-start, flex-start); 223 | width: 100%; 224 | box-sizing: border-box; 225 | background: $lightbox_container_background; 226 | 227 | a{ 228 | width: calc((100% / 3) - 20px ); 229 | padding: 0; 230 | margin: 10px; 231 | line-height: 0; 232 | font-size: 0; 233 | 234 | img{ 235 | width: 100%; 236 | opacity: .8; 237 | } 238 | 239 | &:hover{ 240 | img{ 241 | opacity: 1; 242 | } 243 | } 244 | } 245 | } 246 | -------------------------------------------------------------------------------- /conf_2016_assets/css/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #fff; /* fallback for old browsers */ 3 | background-color: #fff; 4 | } 5 | 6 | p { 7 | font-size: 16px; 8 | } 9 | 10 | p.small { 11 | font-size: 16px; 12 | } 13 | 14 | 15 | .portfolio-item .portfolio-link .caption .caption-content h3, .portfolio-item .portfolio-link .caption .caption-content h4 16 | { 17 | font-family: "HelveticaNeue-Light", 18 | "Helvetica Neue Light", 19 | "Helvetica Neue", 20 | Helvetica,Montserrat,Arial,sans-serif; 21 | font-weight: 700; 22 | color: #000; 23 | } 24 | 25 | 26 | hr:after, 27 | hr:after { 28 | content: "\f005"; 29 | display: inline-block; 30 | position: relative; 31 | top: -.8em; 32 | padding: 0 .25em; 33 | font-family: FontAwesome; 34 | font-size: 2em; 35 | color: #fff; 36 | background-color: #18bc9c; 37 | } 38 | 39 | a href { 40 | color: #000; 41 | } 42 | 43 | .img-centered { 44 | margin: 0 auto; 45 | }ß 46 | 47 | #portfolio{ 48 | width:100%; 49 | height:100%; 50 | background-color: #c44df1; 51 | background: transparent; 52 | } 53 | 54 | .portfolio-text { 55 | font-weight: 700; 56 | color: #8b509a; 57 | } 58 | 59 | .icons .glyphicon { 60 | padding-left: 5px; 61 | padding-right: 5px; 62 | } 63 | 64 | section { 65 | padding-top: 100px; 66 | padding-bottom: 100px; 67 | } 68 | 69 | section.success { 70 | color: #fff; 71 | background: #8b509a; 72 | } 73 | 74 | section.success a, 75 | section.success a:hover, 76 | section.success a:focus, 77 | section.success a:active, 78 | section.success a.active { 79 | outline: 0; 80 | color: #2c3e50; 81 | } 82 | 83 | @media(max-width:767px) { 84 | section { 85 | padding: 75px 0; 86 | } 87 | section.first { 88 | padding-top: 75px; 89 | } 90 | } 91 | 92 | .portfolio-item { 93 | right: 0; 94 | margin: 0 0 0px; 95 | } 96 | 97 | .portfolio-item .portfolio-link { 98 | display: block; 99 | position: relative; 100 | margin: 0 auto; 101 | max-width: 300px; 102 | } 103 | 104 | .portfolio-item .portfolio-link .caption { 105 | position: absolute; 106 | width: 100%; 107 | height: 100%; 108 | opacity: 0; 109 | background: #fff; 110 | -webkit-transition: all ease .5s; 111 | -moz-transition: all ease .5s; 112 | transition: all ease .5s; 113 | padding-top: -40px; 114 | } 115 | 116 | .portfolio-item .portfolio-link .caption:hover { 117 | opacity: 0.7; 118 | } 119 | 120 | .portfolio-item .portfolio-link .caption .caption-content { 121 | position: absolute; 122 | top: 50%; 123 | width: 100%; 124 | height: 20px; 125 | margin-top: -30px; 126 | text-align: center; 127 | font-size: 20px; 128 | color: #000; 129 | } 130 | 131 | .portfolio-item .portfolio-link .caption .caption-content i { 132 | margin-top: -12px; 133 | } 134 | 135 | .portfolio-item .portfolio-link .caption .caption-content h3, 136 | .portfolio-item .portfolio-link .caption .caption-content h4 { 137 | margin: 0; 138 | padding-top: 0px; 139 | } 140 | 141 | 142 | .portfolio-modal .modal-content { 143 | color: #fff; 144 | background-color: #85f9c8; 145 | padding: 100px 0 0 30px; 146 | min-height: 100%; 147 | border: 0; 148 | border-radius: 0; 149 | text-align: center; 150 | background-clip: border-box; 151 | -webkit-box-shadow: none; 152 | box-shadow: none; 153 | } 154 | 155 | @media(min-width:767px) { 156 | .portfolio-item { 157 | margin: 0 0 30px; 158 | } 159 | } 160 | 161 | .btn-outline { 162 | margin-top: 15px; 163 | border: solid 2px #fff; 164 | font-size: 20px; 165 | color: #fff; 166 | background: 0 0; 167 | transition: all .3s ease-in-out; 168 | } 169 | 170 | .btn-outline:hover, 171 | .btn-outline:focus, 172 | .btn-outline:active, 173 | .btn-outline.active { 174 | border: solid 2px #fff; 175 | color: #000; 176 | background: #fff; 177 | background-color: #8b509a; 178 | } 179 | 180 | .floating-label-form-group { 181 | position: relative; 182 | margin-bottom: 0; 183 | padding-bottom: .5em; 184 | border-bottom: 1px solid #eee; 185 | } 186 | 187 | .floating-label-form-group input, 188 | .floating-label-form-group textarea { 189 | z-index: 1; 190 | position: relative; 191 | padding-right: 0; 192 | padding-left: 0; 193 | border: 0; 194 | border-radius: 0; 195 | font-size: 1.5em; 196 | background: 0 0; 197 | box-shadow: none!important; 198 | resize: none; 199 | } 200 | 201 | .floating-label-form-group label { 202 | display: block; 203 | z-index: 0; 204 | position: relative; 205 | top: 2em; 206 | margin: 0; 207 | font-size: .85em; 208 | line-height: 1.764705882em; 209 | vertical-align: middle; 210 | vertical-align: baseline; 211 | opacity: 0; 212 | -webkit-transition: top .3s ease,opacity .3s ease; 213 | -moz-transition: top .3s ease,opacity .3s ease; 214 | -ms-transition: top .3s ease,opacity .3s ease; 215 | transition: top .3s ease,opacity .3s ease; 216 | } 217 | 218 | .floating-label-form-group::not(:first-child) { 219 | padding-left: 14px; 220 | border-left: 1px solid #eee; 221 | } 222 | 223 | .floating-label-form-group-with-value label { 224 | top: 0; 225 | opacity: 1; 226 | } 227 | 228 | .floating-label-form-group-with-focus label { 229 | color: #18bc9c; 230 | } 231 | 232 | form .row:first-child .floating-label-form-group { 233 | border-top: 1px solid #eee; 234 | } 235 | 236 | .btn-social { 237 | display: inline-block; 238 | text-align: center; 239 | font-size: 20px; 240 | line-height: 45px; 241 | color: #000; 242 | padding-top: 10px; 243 | } 244 | 245 | .btn { 246 | border: none; 247 | background-color: #c44df1; 248 | color: #ffffff; 249 | } 250 | 251 | .btn:focus, 252 | .btn:active, 253 | .btn.active, 254 | .btn:hover, 255 | .btn:active:focus { 256 | outline: 0; 257 | background-color: #8b509a; 258 | color: #ffffff; 259 | border: none; 260 | } 261 | 262 | .scroll-top { 263 | z-index: 1049; 264 | position: fixed; 265 | right: 2%; 266 | bottom: 2%; 267 | width: 50px; 268 | height: 50px; 269 | } 270 | 271 | .scroll-top .btn { 272 | width: 50px; 273 | height: 50px; 274 | border-radius: 100%; 275 | font-size: 20px; 276 | line-height: 28px; 277 | } 278 | 279 | .scroll-top .btn:focus { 280 | outline: 0; 281 | } 282 | 283 | fb-profile img.fb-image-lg{ 284 | z-index: 0; 285 | width: 100%; 286 | margin-bottom: 10px; 287 | border: none; 288 | outline: none; 289 | } 290 | -------------------------------------------------------------------------------- /js/scripts.js: -------------------------------------------------------------------------------- 1 | // grab some heights 2 | var $fullheight = $('.head').innerHeight(), 3 | $shrinkheight = $('shrink').innerHeight(), 4 | $menuhheight = $('main_menu').innerHeight(), 5 | $minheight = $(window).height() + 10 + $menuhheight + $shrinkheight; 6 | 7 | $(document).ready(function() { 8 | // add header height as margin to body, set min-height so header can shrink without causing problems 9 | $('body').css({ 'margin-top': $fullheight, 'min-height': $minheight }); 10 | 11 | // Back to top link 12 | $('.backtotop').click(function () { 13 | $('body,html').animate({ 14 | scrollTop: 0 15 | }, 500); 16 | return false; 17 | }); 18 | 19 | // Responsive Menu 20 | $(".toggle_link").click(function () { 21 | $("#menu").toggleClass("active"); 22 | }); 23 | 24 | $(".parent a").attr("aria-haspopup", "true"); 25 | $(".parent a").click(function () { 26 | $(this).parent().toggleClass("open"); 27 | }); 28 | 29 | // Search 30 | $('a[href="#search"]').click(function(){ 31 | $('#search').addClass('open'); 32 | $('#search input').focus(); 33 | $('body').addClass('overflow'); 34 | }); 35 | 36 | $('#search, #search button.close').on('click keyup', function(event) { 37 | if (event.target == this || event.target.className == 'close' || event.keyCode == 27) { 38 | $(this).removeClass('open'); 39 | $('body').removeClass('overflow'); 40 | } 41 | }); 42 | 43 | // Style Switch 44 | $(".switch span").click(function(){ 45 | var id = $(this).attr("id"); 46 | 47 | // adjust link here 48 | $("#switch_style").attr("href", "/css/" + id + ".css"); 49 | }); 50 | 51 | if($('.articles').find('div.wrapper').length != 0){ 52 | $('.switch').hide(); 53 | }else{ 54 | $('.switch').show(); 55 | }}); 56 | 57 | 58 | $(window).scroll(function() { 59 | var $shrunkheight = $('.head').innerHeight(); 60 | 61 | // shrink header on scroll 62 | if ($(this).scrollTop() > 80) { 63 | $('.head .row').addClass("shrink"); 64 | $('body').css({ 'margin-top': $shrunkheight }); 65 | } else{ 66 | $('.head .row').removeClass("shrink"); 67 | $('body').css({ 'margin-top': $fullheight }); 68 | } 69 | }); 70 | 71 | // lightbox stuff 72 | $( function(){ 73 | var activityIndicatorOn = function() { 74 | $( '
' ).appendTo( 'body' ); 75 | }, 76 | activityIndicatorOff = function() { 77 | $( '#imagelightbox-loading' ).remove(); 78 | }, 79 | 80 | // OVERLAY 81 | overlayOn = function() { 82 | $( '
' ).appendTo( 'body' ); 83 | }, 84 | overlayOff = function() { 85 | $( '#imagelightbox-overlay' ).remove(); 86 | }, 87 | 88 | // CLOSE BUTTON 89 | closeButtonOn = function( instance ) { 90 | $( '' ).appendTo( 'body' ).on( 'click touchend', function(){ $( this ).remove(); instance.quitImageLightbox(); return false; }); 91 | }, 92 | closeButtonOff = function() { 93 | $( '#imagelightbox-close' ).remove(); 94 | }, 95 | 96 | // CAPTION 97 | captionOn = function() { 98 | var description = $( 'a[href="' + $( '#imagelightbox' ).attr( 'src' ) + '"] img' ).attr( 'alt' ); 99 | if( description.length > 0 ) 100 | $( '
' + description + '
' ).appendTo( 'body' ); 101 | }, 102 | captionOff = function() { 103 | $( '#imagelightbox-caption' ).remove(); 104 | }, 105 | 106 | // NAVIGATION 107 | navigationOn = function( instance, selector ) { 108 | var images = $( selector ); 109 | if( images.length ) { 110 | var nav = $( '
' ); 111 | for( var i = 0; i < images.length; i++ ) 112 | nav.append( '' ); 113 | nav.appendTo( 'body' ); 114 | nav.on( 'click touchend', function(){ return false; }); 115 | var navItems = nav.find( 'button' ); 116 | navItems.on( 'click touchend', function(){ 117 | var $this = $( this ); 118 | if( images.eq( $this.index() ).attr( 'href' ) != $( '#imagelightbox' ).attr( 'src' ) ) 119 | instance.switchImageLightbox( $this.index() ); 120 | navItems.removeClass( 'active' ); 121 | navItems.eq( $this.index() ).addClass( 'active' ); 122 | return false; 123 | }) 124 | .on( 'touchend', function(){ return false; }); 125 | } 126 | }, 127 | navigationUpdate = function( selector ) { 128 | var items = $( '#imagelightbox-nav button' ); 129 | items.removeClass( 'active' ); 130 | items.eq( $( selector ).filter( '[href="' + $( '#imagelightbox' ).attr( 'src' ) + '"]' ).index( selector ) ).addClass( 'active' ); 131 | }, 132 | navigationOff = function() { 133 | $( '#imagelightbox-nav' ).remove(); 134 | }, 135 | 136 | // ARROWS 137 | arrowsOn = function( instance, selector ) { 138 | var $arrows = $( '' ); 139 | $arrows.appendTo( 'body' ); 140 | $arrows.on( 'click touchend', function( e ) { 141 | e.preventDefault(); 142 | var $this = $( this ), 143 | $target = $( selector + '[href="' + $( '#imagelightbox' ).attr( 'src' ) + '"]' ), 144 | index = $target.index( selector ); 145 | 146 | if( $this.hasClass( 'imagelightbox-arrow-left' ) ) { 147 | index = index - 1; 148 | if( !$( selector ).eq( index ).length ) 149 | index = $( selector ).length; 150 | } 151 | else { 152 | index = index + 1; 153 | if( !$( selector ).eq( index ).length ) 154 | index = 0; 155 | } 156 | instance.switchImageLightbox( index ); 157 | return false; 158 | }); 159 | }, 160 | arrowsOff = function() { 161 | $( '.imagelightbox-arrow' ).remove(); 162 | }; 163 | 164 | // ALL COMBINED 165 | var selectorF = 'a[data-imagelightbox="f"]'; 166 | var instanceF = $( selectorF ).imageLightbox( { 167 | onStart: function() { overlayOn(); closeButtonOn( instanceF ); arrowsOn( instanceF, selectorF ); }, 168 | onEnd: function() { overlayOff(); captionOff(); closeButtonOff(); arrowsOff(); activityIndicatorOff(); }, 169 | onLoadStart: function() { captionOff(); activityIndicatorOn(); }, 170 | onLoadEnd: function() { captionOn(); activityIndicatorOff(); $( '.imagelightbox-arrow' ).css( 'display', 'block' ); } 171 | }); 172 | }); 173 | -------------------------------------------------------------------------------- /_plugins/generate_categories.rb: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | # 3 | # Jekyll category page generator. 4 | # http://recursive-design.com/projects/jekyll-plugins/ 5 | # 6 | # Version: 0.2.4 (201210160037) 7 | # 8 | # Copyright (c) 2010 Dave Perrett, http://recursive-design.com/ 9 | # Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) 10 | # 11 | # A generator that creates category pages for jekyll sites. 12 | # 13 | # To use it, simply drop this script into the _plugins directory of your Jekyll site. You should 14 | # also create a file called 'category_index.html' in the _layouts directory of your jekyll site 15 | # with the following contents (note: you should remove the leading '# ' characters): 16 | # 17 | # ================================== COPY BELOW THIS LINE ================================== 18 | # --- 19 | # layout: default 20 | # --- 21 | # 22 | #

{{ page.title }}

23 | # 30 | # ================================== COPY ABOVE THIS LINE ================================== 31 | # 32 | # You can alter the _layout_ setting if you wish to use an alternate layout, and obviously you 33 | # can change the HTML above as you see fit. 34 | # 35 | # When you compile your jekyll site, this plugin will loop through the list of categories in your 36 | # site, and use the layout above to generate a page for each one with a list of links to the 37 | # individual posts. 38 | # 39 | # You can also (optionally) generate an atom.xml feed for each category. To do this, copy 40 | # the category_feed.xml file to the _includes/custom directory of your own project 41 | # (https://github.com/recurser/jekyll-plugins/blob/master/_includes/custom/category_feed.xml). 42 | # You'll also need to copy the octopress_filters.rb file into the _plugins directory of your 43 | # project as the category_feed.xml requires a couple of extra filters 44 | # (https://github.com/recurser/jekyll-plugins/blob/master/_plugins/octopress_filters.rb). 45 | # 46 | # Included filters : 47 | # - category_links: Outputs the list of categories as comma-separated links. 48 | # - date_to_html_string: Outputs the post.date as formatted html, with hooks for CSS styling. 49 | # 50 | # Available _config.yml settings : 51 | # - category_dir: The subfolder to build category pages in (default is 'categories'). 52 | # - category_title_prefix: The string used before the category name in the page title (default is 53 | # 'Category: '). 54 | module Jekyll 55 | 56 | # The CategoryIndex class creates a single category page for the specified category. 57 | class CategoryPage < Page 58 | 59 | # Initializes a new CategoryIndex. 60 | # 61 | # +template_path+ is the path to the layout template to use. 62 | # +site+ is the Jekyll Site instance. 63 | # +base+ is the String path to the . 64 | # +category_dir+ is the String path between and the category folder. 65 | # +category+ is the category currently being processed. 66 | def initialize(template_path, name, site, base, category_dir, category) 67 | @site = site 68 | @base = base 69 | @dir = category_dir 70 | @name = name 71 | 72 | self.process(name) 73 | 74 | if File.exist?(template_path) 75 | @perform_render = true 76 | template_dir = File.dirname(template_path) 77 | template = File.basename(template_path) 78 | # Read the YAML data from the layout page. 79 | self.read_yaml(template_dir, template) 80 | self.data['category'] = category 81 | # Set the title for this page. 82 | title_prefix = site.config['category_title_prefix'] || 'Category: ' 83 | self.data['title'] = "#{title_prefix}#{category}" 84 | # Set the meta-description for this page. 85 | meta_description_prefix = site.config['category_meta_description_prefix'] || 'Category: ' 86 | self.data['description'] = "#{meta_description_prefix}#{category}" 87 | else 88 | @perform_render = false 89 | end 90 | end 91 | 92 | def render? 93 | @perform_render 94 | end 95 | 96 | end 97 | 98 | # The CategoryIndex class creates a single category page for the specified category. 99 | class CategoryIndex < CategoryPage 100 | 101 | # Initializes a new CategoryIndex. 102 | # 103 | # +site+ is the Jekyll Site instance. 104 | # +base+ is the String path to the . 105 | # +category_dir+ is the String path between and the category folder. 106 | # +category+ is the category currently being processed. 107 | def initialize(site, base, category_dir, category) 108 | template_path = File.join(base, '_layouts', 'category_index.html') 109 | super(template_path, 'index.html', site, base, category_dir, category) 110 | end 111 | 112 | end 113 | 114 | # The CategoryFeed class creates an Atom feed for the specified category. 115 | class CategoryFeed < CategoryPage 116 | 117 | # Initializes a new CategoryFeed. 118 | # 119 | # +site+ is the Jekyll Site instance. 120 | # +base+ is the String path to the . 121 | # +category_dir+ is the String path between and the category folder. 122 | # +category+ is the category currently being processed. 123 | def initialize(site, base, category_dir, category) 124 | template_path = File.join(base, '_includes', 'custom', 'category_feed.xml') 125 | super(template_path, 'atom.xml', site, base, category_dir, category) 126 | 127 | # Set the correct feed URL. 128 | self.data['feed_url'] = "#{category_dir}/#{name}" if render? 129 | end 130 | 131 | end 132 | 133 | # The Site class is a built-in Jekyll class with access to global site config information. 134 | class Site 135 | 136 | # Creates an instance of CategoryIndex for each category page, renders it, and 137 | # writes the output to a file. 138 | # 139 | # +category+ is the category currently being processed. 140 | def write_category_index(category) 141 | target_dir = GenerateCategories.category_dir(self.config['category_dir'], category) 142 | index = CategoryIndex.new(self, self.source, target_dir, category) 143 | if index.render? 144 | index.render(self.layouts, site_payload) 145 | index.write(self.dest) 146 | # Record the fact that this pages has been added, otherwise Site::cleanup will remove it. 147 | self.pages << index 148 | end 149 | 150 | # Create an Atom-feed for each index. 151 | feed = CategoryFeed.new(self, self.source, target_dir, category) 152 | if feed.render? 153 | feed.render(self.layouts, site_payload) 154 | feed.write(self.dest) 155 | # Record the fact that this pages has been added, otherwise Site::cleanup will remove it. 156 | self.pages << feed 157 | end 158 | end 159 | 160 | # Loops through the list of category pages and processes each one. 161 | def write_category_indexes 162 | if self.layouts.key? 'category_index' 163 | self.categories.keys.each do |category| 164 | self.write_category_index(category) 165 | end 166 | 167 | # Throw an exception if the layout couldn't be found. 168 | else 169 | throw "No 'category_index' layout found." 170 | end 171 | end 172 | 173 | end 174 | 175 | 176 | # Jekyll hook - the generate method is called by jekyll, and generates all of the category pages. 177 | class GenerateCategories < Generator 178 | safe true 179 | priority :low 180 | 181 | CATEGORY_DIR = 'categories' 182 | 183 | def generate(site) 184 | site.write_category_indexes 185 | end 186 | 187 | # Processes the given dir and removes leading and trailing slashes. Falls 188 | # back on the default if no dir is provided. 189 | def self.category_dir(base_dir, category) 190 | base_dir = (base_dir || CATEGORY_DIR).gsub(/^\/*(.*)\/*$/, '\1') 191 | category = category.gsub(/_|\P{Word}/, '-').gsub(/-{2,}/, '-').downcase 192 | File.join(base_dir, category) 193 | end 194 | 195 | end 196 | 197 | 198 | # Adds some extra filters used during the category creation process. 199 | module Filters 200 | 201 | # Outputs a list of categories as comma-separated links. This is used 202 | # to output the category list for each post on a category page. 203 | # 204 | # +categories+ is the list of categories to format. 205 | # 206 | # Returns string 207 | def category_links(categories) 208 | base_dir = @context.registers[:site].config['category_dir'] 209 | categories = categories.sort!.map do |category| 210 | category_dir = GenerateCategories.category_dir(base_dir, category) 211 | # Make sure the category directory begins with a slash. 212 | category_dir = "/#{category_dir}" unless category_dir =~ /^\// 213 | "#{category}" 214 | end 215 | 216 | case categories.length 217 | when 0 218 | "" 219 | when 1 220 | categories[0].to_s 221 | else 222 | categories.join(', ') 223 | end 224 | end 225 | 226 | # Outputs the post.date as formatted html, with hooks for CSS styling. 227 | # 228 | # +date+ is the date object to format as HTML. 229 | # 230 | # Returns string 231 | def date_to_html_string(date) 232 | result = '' + date.strftime('%b').upcase + ' ' 233 | result += date.strftime('%d ') 234 | result += date.strftime('%Y ') 235 | result 236 | end 237 | 238 | end 239 | 240 | end 241 | -------------------------------------------------------------------------------- /js/2-imagelightbox.js: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | By Osvaldas Valutis, www.osvaldas.info 4 | Available for use under the MIT License 5 | */ 6 | 7 | ;( function( $, window, document, undefined ) 8 | { 9 | 'use strict'; 10 | 11 | var cssTransitionSupport = function() 12 | { 13 | var s = document.body || document.documentElement, s = s.style; 14 | if( s.WebkitTransition == '' ) return '-webkit-'; 15 | if( s.MozTransition == '' ) return '-moz-'; 16 | if( s.OTransition == '' ) return '-o-'; 17 | if( s.transition == '' ) return ''; 18 | return false; 19 | }, 20 | 21 | isCssTransitionSupport = cssTransitionSupport() === false ? false : true, 22 | 23 | cssTransitionTranslateX = function( element, positionX, speed ) 24 | { 25 | var options = {}, prefix = cssTransitionSupport(); 26 | options[ prefix + 'transform' ] = 'translateX(' + positionX + ')'; 27 | options[ prefix + 'transition' ] = prefix + 'transform ' + speed + 's linear'; 28 | element.css( options ); 29 | }, 30 | 31 | hasTouch = ( 'ontouchstart' in window ), 32 | hasPointers = window.navigator.pointerEnabled || window.navigator.msPointerEnabled, 33 | wasTouched = function( event ) 34 | { 35 | if( hasTouch ) 36 | return true; 37 | 38 | if( !hasPointers || typeof event === 'undefined' || typeof event.pointerType === 'undefined' ) 39 | return false; 40 | 41 | if( typeof event.MSPOINTER_TYPE_MOUSE !== 'undefined' ) 42 | { 43 | if( event.MSPOINTER_TYPE_MOUSE != event.pointerType ) 44 | return true; 45 | } 46 | else 47 | if( event.pointerType != 'mouse' ) 48 | return true; 49 | 50 | return false; 51 | }; 52 | 53 | $.fn.imageLightbox = function( options ) 54 | { 55 | var options = $.extend( 56 | { 57 | selector: 'id="imagelightbox"', 58 | allowedTypes: 'png|jpg|jpeg|gif', 59 | animationSpeed: 250, 60 | preloadNext: true, 61 | enableKeyboard: true, 62 | quitOnEnd: false, 63 | quitOnImgClick: false, 64 | quitOnDocClick: true, 65 | onStart: false, 66 | onEnd: false, 67 | onLoadStart: false, 68 | onLoadEnd: false 69 | }, 70 | options ), 71 | 72 | targets = $([]), 73 | target = $(), 74 | image = $(), 75 | imageWidth = 0, 76 | imageHeight = 0, 77 | swipeDiff = 0, 78 | inProgress = false, 79 | 80 | isTargetValid = function( element ) 81 | { 82 | return $( element ).prop( 'tagName' ).toLowerCase() == 'a' && ( new RegExp( '\.(' + options.allowedTypes + ')$', 'i' ) ).test( $( element ).attr( 'href' ) ); 83 | }, 84 | 85 | setImage = function() 86 | { 87 | if( !image.length ) return true; 88 | 89 | var screenWidth = $( window ).width() * 0.8, 90 | screenHeight = $( window ).height() * 0.9, 91 | tmpImage = new Image(); 92 | 93 | tmpImage.src = image.attr( 'src' ); 94 | tmpImage.onload = function() 95 | { 96 | imageWidth = tmpImage.width; 97 | imageHeight = tmpImage.height; 98 | 99 | if( imageWidth > screenWidth || imageHeight > screenHeight ) 100 | { 101 | var ratio = imageWidth / imageHeight > screenWidth / screenHeight ? imageWidth / screenWidth : imageHeight / screenHeight; 102 | imageWidth /= ratio; 103 | imageHeight /= ratio; 104 | } 105 | 106 | image.css( 107 | { 108 | 'width': imageWidth + 'px', 109 | 'height': imageHeight + 'px', 110 | 'top': ( $( window ).height() - imageHeight ) / 2 + 'px', 111 | 'left': ( $( window ).width() - imageWidth ) / 2 + 'px' 112 | }); 113 | }; 114 | }, 115 | 116 | loadImage = function( direction ) 117 | { 118 | if( inProgress ) return false; 119 | 120 | direction = typeof direction === 'undefined' ? false : direction == 'left' ? 1 : -1; 121 | 122 | if( image.length ) 123 | { 124 | if( direction !== false && ( targets.length < 2 || ( options.quitOnEnd === true && ( ( direction === -1 && targets.index( target ) == 0 ) || ( direction === 1 && targets.index( target ) == targets.length - 1 ) ) ) ) ) 125 | { 126 | quitLightbox(); 127 | return false; 128 | } 129 | var params = { 'opacity': 0 }; 130 | if( isCssTransitionSupport ) cssTransitionTranslateX( image, ( 100 * direction ) - swipeDiff + 'px', options.animationSpeed / 1000 ); 131 | else params.left = parseInt( image.css( 'left' ) ) + 100 * direction + 'px'; 132 | image.animate( params, options.animationSpeed, function(){ removeImage(); }); 133 | swipeDiff = 0; 134 | } 135 | 136 | inProgress = true; 137 | if( options.onLoadStart !== false ) options.onLoadStart(); 138 | 139 | setTimeout( function() 140 | { 141 | image = $( '' ) 142 | .attr( 'src', target.attr( 'href' ) ) 143 | .load( function() 144 | { 145 | image.appendTo( 'body' ); 146 | setImage(); 147 | 148 | var params = { 'opacity': 1 }; 149 | 150 | image.css( 'opacity', 0 ); 151 | if( isCssTransitionSupport ) 152 | { 153 | cssTransitionTranslateX( image, -100 * direction + 'px', 0 ); 154 | setTimeout( function(){ cssTransitionTranslateX( image, 0 + 'px', options.animationSpeed / 1000 ) }, 50 ); 155 | } 156 | else 157 | { 158 | var imagePosLeft = parseInt( image.css( 'left' ) ); 159 | params.left = imagePosLeft + 'px'; 160 | image.css( 'left', imagePosLeft - 100 * direction + 'px' ); 161 | } 162 | 163 | image.animate( params, options.animationSpeed, function() 164 | { 165 | inProgress = false; 166 | if( options.onLoadEnd !== false ) options.onLoadEnd(); 167 | }); 168 | if( options.preloadNext ) 169 | { 170 | var nextTarget = targets.eq( targets.index( target ) + 1 ); 171 | if( !nextTarget.length ) nextTarget = targets.eq( 0 ); 172 | $( '' ).attr( 'src', nextTarget.attr( 'href' ) ).load(); 173 | } 174 | }) 175 | .error( function() 176 | { 177 | if( options.onLoadEnd !== false ) options.onLoadEnd(); 178 | }) 179 | 180 | var swipeStart = 0, 181 | swipeEnd = 0, 182 | imagePosLeft = 0; 183 | 184 | image.on( hasPointers ? 'pointerup MSPointerUp' : 'click', function( e ) 185 | { 186 | e.preventDefault(); 187 | if( options.quitOnImgClick ) 188 | { 189 | quitLightbox(); 190 | return false; 191 | } 192 | if( wasTouched( e.originalEvent ) ) return true; 193 | var posX = ( e.pageX || e.originalEvent.pageX ) - e.target.offsetLeft; 194 | target = targets.eq( targets.index( target ) - ( imageWidth / 2 > posX ? 1 : -1 ) ); 195 | if( !target.length ) target = targets.eq( imageWidth / 2 > posX ? targets.length : 0 ); 196 | loadImage( imageWidth / 2 > posX ? 'left' : 'right' ); 197 | }) 198 | .on( 'touchstart pointerdown MSPointerDown', function( e ) 199 | { 200 | if( !wasTouched( e.originalEvent ) || options.quitOnImgClick ) return true; 201 | if( isCssTransitionSupport ) imagePosLeft = parseInt( image.css( 'left' ) ); 202 | swipeStart = e.originalEvent.pageX || e.originalEvent.touches[ 0 ].pageX; 203 | }) 204 | .on( 'touchmove pointermove MSPointerMove', function( e ) 205 | { 206 | if( !wasTouched( e.originalEvent ) || options.quitOnImgClick ) return true; 207 | e.preventDefault(); 208 | swipeEnd = e.originalEvent.pageX || e.originalEvent.touches[ 0 ].pageX; 209 | swipeDiff = swipeStart - swipeEnd; 210 | if( isCssTransitionSupport ) cssTransitionTranslateX( image, -swipeDiff + 'px', 0 ); 211 | else image.css( 'left', imagePosLeft - swipeDiff + 'px' ); 212 | }) 213 | .on( 'touchend touchcancel pointerup pointercancel MSPointerUp MSPointerCancel', function( e ) 214 | { 215 | if( !wasTouched( e.originalEvent ) || options.quitOnImgClick ) return true; 216 | if( Math.abs( swipeDiff ) > 50 ) 217 | { 218 | target = targets.eq( targets.index( target ) - ( swipeDiff < 0 ? 1 : -1 ) ); 219 | if( !target.length ) target = targets.eq( swipeDiff < 0 ? targets.length : 0 ); 220 | loadImage( swipeDiff > 0 ? 'right' : 'left' ); 221 | } 222 | else 223 | { 224 | if( isCssTransitionSupport ) cssTransitionTranslateX( image, 0 + 'px', options.animationSpeed / 1000 ); 225 | else image.animate({ 'left': imagePosLeft + 'px' }, options.animationSpeed / 2 ); 226 | } 227 | }); 228 | 229 | }, options.animationSpeed + 100 ); 230 | }, 231 | 232 | removeImage = function() 233 | { 234 | if( !image.length ) return false; 235 | image.remove(); 236 | image = $(); 237 | }, 238 | 239 | quitLightbox = function() 240 | { 241 | if( !image.length ) return false; 242 | image.animate({ 'opacity': 0 }, options.animationSpeed, function() 243 | { 244 | removeImage(); 245 | inProgress = false; 246 | if( options.onEnd !== false ) options.onEnd(); 247 | }); 248 | }; 249 | 250 | $( window ).on( 'resize', setImage ); 251 | 252 | if( options.quitOnDocClick ) 253 | { 254 | $( document ).on( hasTouch ? 'touchend' : 'click', function( e ) 255 | { 256 | if( image.length && !$( e.target ).is( image ) ) quitLightbox(); 257 | }) 258 | } 259 | 260 | if( options.enableKeyboard ) 261 | { 262 | $( document ).on( 'keyup', function( e ) 263 | { 264 | if( !image.length ) return true; 265 | e.preventDefault(); 266 | if( e.keyCode == 27 ) quitLightbox(); 267 | if( e.keyCode == 37 || e.keyCode == 39 ) 268 | { 269 | target = targets.eq( targets.index( target ) - ( e.keyCode == 37 ? 1 : -1 ) ); 270 | if( !target.length ) target = targets.eq( e.keyCode == 37 ? targets.length : 0 ); 271 | loadImage( e.keyCode == 37 ? 'left' : 'right' ); 272 | } 273 | }); 274 | } 275 | 276 | $( document ).on( 'click', this.selector, function( e ) 277 | { 278 | if( !isTargetValid( this ) ) return true; 279 | e.preventDefault(); 280 | if( inProgress ) return false; 281 | inProgress = false; 282 | if( options.onStart !== false ) options.onStart(); 283 | target = $( this ); 284 | loadImage(); 285 | }); 286 | 287 | this.each( function() 288 | { 289 | if( !isTargetValid( this ) ) return true; 290 | targets = targets.add( $( this ) ); 291 | }); 292 | 293 | this.switchImageLightbox = function( index ) 294 | { 295 | var tmpTarget = targets.eq( index ); 296 | if( tmpTarget.length ) 297 | { 298 | var currentIndex = targets.index( target ); 299 | target = tmpTarget; 300 | loadImage( index < currentIndex ? 'left' : 'right' ); 301 | } 302 | return this; 303 | }; 304 | 305 | this.quitImageLightbox = function() 306 | { 307 | quitLightbox(); 308 | return this; 309 | }; 310 | 311 | return this; 312 | }; 313 | })( jQuery, window, document ); 314 | -------------------------------------------------------------------------------- /_includes/logo.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 11 | 16 | 17 | 18 | 24 | 36 | 41 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 101 | 107 | 118 | 128 | 134 | 135 | -------------------------------------------------------------------------------- /conf_2016_assets/scripts/index.js: -------------------------------------------------------------------------------- 1 | var committee = { "data": [{"name": "Ruby Childs", 2 | "twitter": "rubychilds", 3 | "github": "https://github.com/rubychilds", 4 | "linkedin": "https://www.linkedin.com/in/rubychilds1", 5 | "personal_website": "http://rubychilds.com/", 6 | "image": "images/ruby.png"}, 7 | 8 | {"name": "Graham Markall", 9 | "twitter": "gmarkall", 10 | "github": "https://github.com/gmarkall", 11 | "linkedin": "https://www.linkedin.com/in/graham-markall-0087a215", 12 | "personal_website": "http://www.big-grey.co.uk", 13 | "image": "images/graham.png"}, 14 | 15 | {"name": "Priya Gogna", 16 | "github": "https://github.com/pri9", 17 | "linkedin": "https://uk.linkedin.com/in/priyagogna", 18 | "twitter": "hello_kepler22b", 19 | "personal_website": "", 20 | "image": "images/priya.png" 21 | }, 22 | 23 | {"name": "Ian Ozsvald", 24 | "twitter": "ianozsvald", 25 | "github": "https://github.com/ianozsvald/", 26 | "linkedin": "http://www.linkedin.com/in/ianozsvald", 27 | "personal_website": "http://ianozsvald.com/", 28 | "image": "images/ian.png"}, 29 | 30 | {"name": "Chih-Chun Chen", 31 | "twitter": "chihchun_chen", 32 | "github": "https://github.com/cambridgecoding", 33 | "linkedin": "https://www.linkedin.com/in/chihchunchen", 34 | "personal_website": "http://abmcet.net/Chih-Chun_Chen/home.html", 35 | "image": "images/chiha.png" 36 | }, 37 | 38 | {"name": "Marco Bonzanini", 39 | "twitter": "marcobonzanini", 40 | "github": "https://github.com/bonzanini", 41 | "linkedin": "https://uk.linkedin.com/in/marcobonzanini", 42 | "personal_website": "http://marcobonzanini.com", 43 | "image": "images/marco.png" 44 | }, 45 | 46 | {"name": "Katie Barr", 47 | "twitter": "drkbarr", 48 | "github": "https://github.com/kebarr", 49 | "linkedin": "https://uk.linkedin.com/in/dr-katie-barr-40a49b27", 50 | "personal_website": "", 51 | "image": "images/katie.png" 52 | }, 53 | 54 | {"name": "Emlyn Clay", 55 | "twitter": "emlynclay", 56 | "github": "https://github.com/emlync", 57 | "linkedin": "https://www.linkedin.com/in/emlynclay", 58 | "personal_website": "http://emlynclay.co.uk", 59 | "image": "images/emlyn.png" 60 | }, 61 | 62 | {"name": "Linda Uruchurtu", 63 | "twitter": "lindauruchurtu", 64 | "github": "", 65 | "linkedin": "https://www.linkedin.com/in/lindauruchurtu", 66 | "personal_website": "www.danielslater.net", 67 | "image": "images/linda.png" 68 | }, 69 | 70 | {"name": "Daniel Slater", 71 | "twitter": "danielslaterish", 72 | "github": "https://github.com/DanielSlater/", 73 | "linkedin": "https://uk.linkedin.com/in/daniel-slater-3032a016", 74 | "personal_website": "www.danielslater.net", 75 | "image": "images/daniel.png" 76 | }, 77 | 78 | {"name": "Maria Lehl", 79 | "github": "", 80 | "linkedin": "https://uk.linkedin.com/in/maria-lehl-51264b92", 81 | "twitter": "", 82 | "personal_website": "", 83 | "image": "images/maria.png" 84 | }, 85 | 86 | {"name": "Giles Weaver", 87 | "github": "", 88 | "linkedin": "https://uk.linkedin.com/in/giles-weaver-3b66371", 89 | "twitter": "gilesweaver", 90 | "personal_website": "", 91 | "image": "images/giles.png" 92 | }, 93 | {"name": "Elena Chatzimichali", 94 | "twitter": "eaHatz", 95 | "github": "", 96 | "linkedin": "https://uk.linkedin.com/in/eachatzimichali", 97 | "personal_website": "", 98 | "image": "images/elena.png" 99 | } 100 | ]}; 101 | 102 | var chairs = {"data": [ 103 | {"name": "Ian Ozsvald", 104 | "twitter": "ianozsvald", 105 | "github": "https://github.com/ianozsvald/", 106 | "linkedin": "http://www.linkedin.com/in/ianozsvald", 107 | "personal_website": "http://ianozsvald.com/", 108 | "image": "images/ian.png"}, 109 | {"name": "Emlyn Clay", 110 | "twitter": "emlynclay", 111 | "github": "https://github.com/emlync", 112 | "linkedin": "https://www.linkedin.com/in/emlynclay", 113 | "personal_website": "http://emlynclay.co.uk", 114 | "image": "images/emlyn.png" 115 | } 116 | ]}; 117 | 118 | var organisers = { "data": [ 119 | 120 | {"name": "Graham Markall", 121 | "twitter": "gmarkall", 122 | "github": "https://github.com/gmarkall", 123 | "linkedin": "https://www.linkedin.com/in/graham-markall-0087a215", 124 | "personal_website": "http://www.big-grey.co.uk", 125 | "image": "images/graham.png"}, 126 | 127 | {"name": "Ian Ozsvald", 128 | "twitter": "ianozsvald", 129 | "github": "https://github.com/ianozsvald/", 130 | "linkedin": "http://www.linkedin.com/in/ianozsvald", 131 | "personal_website": "http://ianozsvald.com/", 132 | "image": "images/ian.png"}, 133 | 134 | {"name": "Ruby Childs", 135 | "twitter": "rubychilds", 136 | "github": "https://github.com/rubychilds", 137 | "linkedin": "https://www.linkedin.com/in/rubychilds1", 138 | "personal_website": "http://rubychilds.com/", 139 | "image": "images/ruby.png"}, 140 | 141 | {"name": "Emlyn Clay", 142 | "twitter": "emlynclay", 143 | "github": "https://github.com/emlync", 144 | "linkedin": "https://www.linkedin.com/in/emlynclay", 145 | "personal_website": "http://emlynclay.co.uk", 146 | "image": "images/emlyn.png" 147 | }, 148 | {"name": "Priya Gogna", 149 | "github": "https://github.com/pri9", 150 | "linkedin": "https://uk.linkedin.com/in/priyagogna", 151 | "twitter": "hello_kepler22b", 152 | "personal_website": "", 153 | "image": "images/priya.png" 154 | }, 155 | {"name": "Florian Rathgeber", 156 | "github": "", 157 | "linkedin": "https://uk.linkedin.com/in/florianrathgeber", 158 | "twitter": "frathgeber", 159 | "personal_website": "https://kynan.github.io/", 160 | "image": "images/florian.png" 161 | }, 162 | {"name": "Calvin Giles", 163 | "github": "", 164 | "linkedin": "https://uk.linkedin.com/in/calvingiles", 165 | "twitter": "calvingiles", 166 | "personal_website": "http://untangleconsulting.io/", 167 | "image": "images/calvin.png" 168 | }, 169 | {"name": "Cecilia Liao", 170 | "github": "", 171 | "linkedin": "https://uk.linkedin.com/in/cecilialiao", 172 | "twitter": "cecilialiao", 173 | "personal_website": "https://about.me/cecilia.liao", 174 | "image": "images/cecilia.png" 175 | }, 176 | {"name": "Steve Holden", 177 | "github": "", 178 | "linkedin": "https://uk.linkedin.com/in/holdenweb", 179 | "twitter": "holdenweb", 180 | "personal_website": "http://holdenweb.blogspot.co.uk/", 181 | "image": "images/steve.png" 182 | } 183 | ]}; 184 | 185 | $(function(){ 186 | GetCommittee(organisers["data"], '.organisers'); 187 | GetCommittee(committee["data"], '.reviewers'); 188 | GetCommittee(chairs["data"], '.chairs'); 189 | }); 190 | 191 | function Edit(elm){ 192 | var id = $(elm).attr('data-id'); 193 | var person = committee["data"][parseInt(id)]; 194 | $('#editTitle').val(person['name']); 195 | $('#editDescription').val(person['email']); 196 | $('#editModal').modal(); 197 | } 198 | 199 | function Url(elem){ 200 | open($(elem).attr('href')); 201 | } 202 | 203 | function GetCommittee(data, well_name){ 204 | var itemsPerRow = 4; 205 | var div = $('
').attr('class', 'row'); 206 | var well = $(well_name).empty(); 207 | var container = $('
').attr({'class':"center-block container"}); 208 | for (var i = 0; i < data.length; i++) { 209 | var mainDiv = CreateThumb(i, data[i].name, data[i].bio, data[i].email, data[i].twitter, 210 | data[i].github, data[i].linkedin, data[i].personal_website, 211 | data[i].image); 212 | div.append(mainDiv); 213 | if((i+1)%itemsPerRow == 0 && i != 0){ 214 | container.append(div); 215 | div = $('
').attr('class', 'row'); 216 | } 217 | else { 218 | div.append(mainDiv); 219 | } 220 | } 221 | container.append(div); 222 | well.append(container); 223 | } 224 | 225 | function CreateThumb(id, name, bio, email, twitter, github, linkedin, personal_website, image){ 226 | 227 | var mainDiv = $('
').attr({ 228 | 'class': "col-sm-2 portfolio-item" 229 | }); 230 | var portfolioLink = $('').attr({ 231 | 'class': 'portfolio-link', 232 | 'data-toggle': 'modal' 233 | }); 234 | var caption = $('
').attr({ 235 | 'class': 'caption' 236 | }); 237 | var caption_content = $('
').attr({ 238 | 'class': 'caption-content' 239 | }); 240 | var name = $('
').attr({ 241 | 'data-id': id, 242 | 'onclick': 'Edit(this)' 243 | }).append($('

').append($('

').text(name))); 244 | 245 | var icons = $('
'); 246 | 247 | if(twitter != ''){ 248 | var twitter = $('
').attr({ 249 | 'class': "btn-social nav-entry", 250 | }).append($('').attr({'href': 'http://twitter.com/' + twitter, 251 | 'onclick': "Url(this)" 252 | })); 253 | icons.append(twitter); 254 | } 255 | 256 | if(linkedin){ 257 | var linkedin = $('
').attr({ 258 | 'class': "btn-social nav-entry", 259 | }).append($('').attr({'href': linkedin, 260 | 'onclick': "Url(this)" 261 | })); 262 | icons.append(linkedin); 263 | } 264 | 265 | if(personal_website){ 266 | var web = $('
').attr({ 267 | 'class': "btn-social nav-entry", 268 | }).append($('').attr({'href': personal_website, 269 | 'onclick': "Url(this)" 270 | })); 271 | icons.append(web); 272 | } 273 | 274 | if(github){ 275 | var github = $('
').attr({ 276 | 'class': "btn-social nav-entry", 277 | }).append($('').attr({'href': github, 278 | 'onclick': "Url(this)" 279 | })); 280 | icons.append(github); 281 | } 282 | 283 | var image = $('').attr({ 284 | 'class': "img-responsive center-block", 285 | 'src': 'https://cdn.rawgit.com/PyDataLondon/pydatalondon.github.io/master/conf_2016_assets/' + image, 286 | 'alt': '', 287 | 'width': '150px', 288 | 'height': '150px' 289 | }); 290 | 291 | caption_content.append(name); 292 | caption_content.append(icons); 293 | caption.append(caption_content); 294 | portfolioLink.append(caption); 295 | portfolioLink.append(image); 296 | mainDiv.append(portfolioLink); 297 | 298 | return mainDiv; 299 | } 300 | -------------------------------------------------------------------------------- /sass/assets/_variables.scss: -------------------------------------------------------------------------------- 1 | // Variables 2 | // -------------------------- 3 | 4 | $fa-font-path: "../fonts" !default; 5 | //$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.2.0/fonts" !default; // for referencing Bootstrap CDN font files directly 6 | $fa-css-prefix: fa !default; 7 | $fa-version: "4.2.0" !default; 8 | $fa-border-color: #eee !default; 9 | $fa-inverse: #fff !default; 10 | $fa-li-width: (30em / 14) !default; 11 | 12 | $fa-var-adjust: "\f042"; 13 | $fa-var-adn: "\f170"; 14 | $fa-var-align-center: "\f037"; 15 | $fa-var-align-justify: "\f039"; 16 | $fa-var-align-left: "\f036"; 17 | $fa-var-align-right: "\f038"; 18 | $fa-var-ambulance: "\f0f9"; 19 | $fa-var-anchor: "\f13d"; 20 | $fa-var-android: "\f17b"; 21 | $fa-var-angellist: "\f209"; 22 | $fa-var-angle-double-down: "\f103"; 23 | $fa-var-angle-double-left: "\f100"; 24 | $fa-var-angle-double-right: "\f101"; 25 | $fa-var-angle-double-up: "\f102"; 26 | $fa-var-angle-down: "\f107"; 27 | $fa-var-angle-left: "\f104"; 28 | $fa-var-angle-right: "\f105"; 29 | $fa-var-angle-up: "\f106"; 30 | $fa-var-apple: "\f179"; 31 | $fa-var-archive: "\f187"; 32 | $fa-var-area-chart: "\f1fe"; 33 | $fa-var-arrow-circle-down: "\f0ab"; 34 | $fa-var-arrow-circle-left: "\f0a8"; 35 | $fa-var-arrow-circle-o-down: "\f01a"; 36 | $fa-var-arrow-circle-o-left: "\f190"; 37 | $fa-var-arrow-circle-o-right: "\f18e"; 38 | $fa-var-arrow-circle-o-up: "\f01b"; 39 | $fa-var-arrow-circle-right: "\f0a9"; 40 | $fa-var-arrow-circle-up: "\f0aa"; 41 | $fa-var-arrow-down: "\f063"; 42 | $fa-var-arrow-left: "\f060"; 43 | $fa-var-arrow-right: "\f061"; 44 | $fa-var-arrow-up: "\f062"; 45 | $fa-var-arrows: "\f047"; 46 | $fa-var-arrows-alt: "\f0b2"; 47 | $fa-var-arrows-h: "\f07e"; 48 | $fa-var-arrows-v: "\f07d"; 49 | $fa-var-asterisk: "\f069"; 50 | $fa-var-at: "\f1fa"; 51 | $fa-var-automobile: "\f1b9"; 52 | $fa-var-backward: "\f04a"; 53 | $fa-var-ban: "\f05e"; 54 | $fa-var-bank: "\f19c"; 55 | $fa-var-bar-chart: "\f080"; 56 | $fa-var-bar-chart-o: "\f080"; 57 | $fa-var-barcode: "\f02a"; 58 | $fa-var-bars: "\f0c9"; 59 | $fa-var-beer: "\f0fc"; 60 | $fa-var-behance: "\f1b4"; 61 | $fa-var-behance-square: "\f1b5"; 62 | $fa-var-bell: "\f0f3"; 63 | $fa-var-bell-o: "\f0a2"; 64 | $fa-var-bell-slash: "\f1f6"; 65 | $fa-var-bell-slash-o: "\f1f7"; 66 | $fa-var-bicycle: "\f206"; 67 | $fa-var-binoculars: "\f1e5"; 68 | $fa-var-birthday-cake: "\f1fd"; 69 | $fa-var-bitbucket: "\f171"; 70 | $fa-var-bitbucket-square: "\f172"; 71 | $fa-var-bitcoin: "\f15a"; 72 | $fa-var-bold: "\f032"; 73 | $fa-var-bolt: "\f0e7"; 74 | $fa-var-bomb: "\f1e2"; 75 | $fa-var-book: "\f02d"; 76 | $fa-var-bookmark: "\f02e"; 77 | $fa-var-bookmark-o: "\f097"; 78 | $fa-var-briefcase: "\f0b1"; 79 | $fa-var-btc: "\f15a"; 80 | $fa-var-bug: "\f188"; 81 | $fa-var-building: "\f1ad"; 82 | $fa-var-building-o: "\f0f7"; 83 | $fa-var-bullhorn: "\f0a1"; 84 | $fa-var-bullseye: "\f140"; 85 | $fa-var-bus: "\f207"; 86 | $fa-var-cab: "\f1ba"; 87 | $fa-var-calculator: "\f1ec"; 88 | $fa-var-calendar: "\f073"; 89 | $fa-var-calendar-o: "\f133"; 90 | $fa-var-camera: "\f030"; 91 | $fa-var-camera-retro: "\f083"; 92 | $fa-var-car: "\f1b9"; 93 | $fa-var-caret-down: "\f0d7"; 94 | $fa-var-caret-left: "\f0d9"; 95 | $fa-var-caret-right: "\f0da"; 96 | $fa-var-caret-square-o-down: "\f150"; 97 | $fa-var-caret-square-o-left: "\f191"; 98 | $fa-var-caret-square-o-right: "\f152"; 99 | $fa-var-caret-square-o-up: "\f151"; 100 | $fa-var-caret-up: "\f0d8"; 101 | $fa-var-cc: "\f20a"; 102 | $fa-var-cc-amex: "\f1f3"; 103 | $fa-var-cc-discover: "\f1f2"; 104 | $fa-var-cc-mastercard: "\f1f1"; 105 | $fa-var-cc-paypal: "\f1f4"; 106 | $fa-var-cc-stripe: "\f1f5"; 107 | $fa-var-cc-visa: "\f1f0"; 108 | $fa-var-certificate: "\f0a3"; 109 | $fa-var-chain: "\f0c1"; 110 | $fa-var-chain-broken: "\f127"; 111 | $fa-var-check: "\f00c"; 112 | $fa-var-check-circle: "\f058"; 113 | $fa-var-check-circle-o: "\f05d"; 114 | $fa-var-check-square: "\f14a"; 115 | $fa-var-check-square-o: "\f046"; 116 | $fa-var-chevron-circle-down: "\f13a"; 117 | $fa-var-chevron-circle-left: "\f137"; 118 | $fa-var-chevron-circle-right: "\f138"; 119 | $fa-var-chevron-circle-up: "\f139"; 120 | $fa-var-chevron-down: "\f078"; 121 | $fa-var-chevron-left: "\f053"; 122 | $fa-var-chevron-right: "\f054"; 123 | $fa-var-chevron-up: "\f077"; 124 | $fa-var-child: "\f1ae"; 125 | $fa-var-circle: "\f111"; 126 | $fa-var-circle-o: "\f10c"; 127 | $fa-var-circle-o-notch: "\f1ce"; 128 | $fa-var-circle-thin: "\f1db"; 129 | $fa-var-clipboard: "\f0ea"; 130 | $fa-var-clock-o: "\f017"; 131 | $fa-var-close: "\f00d"; 132 | $fa-var-cloud: "\f0c2"; 133 | $fa-var-cloud-download: "\f0ed"; 134 | $fa-var-cloud-upload: "\f0ee"; 135 | $fa-var-cny: "\f157"; 136 | $fa-var-code: "\f121"; 137 | $fa-var-code-fork: "\f126"; 138 | $fa-var-codepen: "\f1cb"; 139 | $fa-var-coffee: "\f0f4"; 140 | $fa-var-cog: "\f013"; 141 | $fa-var-cogs: "\f085"; 142 | $fa-var-columns: "\f0db"; 143 | $fa-var-comment: "\f075"; 144 | $fa-var-comment-o: "\f0e5"; 145 | $fa-var-comments: "\f086"; 146 | $fa-var-comments-o: "\f0e6"; 147 | $fa-var-compass: "\f14e"; 148 | $fa-var-compress: "\f066"; 149 | $fa-var-copy: "\f0c5"; 150 | $fa-var-copyright: "\f1f9"; 151 | $fa-var-credit-card: "\f09d"; 152 | $fa-var-crop: "\f125"; 153 | $fa-var-crosshairs: "\f05b"; 154 | $fa-var-css3: "\f13c"; 155 | $fa-var-cube: "\f1b2"; 156 | $fa-var-cubes: "\f1b3"; 157 | $fa-var-cut: "\f0c4"; 158 | $fa-var-cutlery: "\f0f5"; 159 | $fa-var-dashboard: "\f0e4"; 160 | $fa-var-database: "\f1c0"; 161 | $fa-var-dedent: "\f03b"; 162 | $fa-var-delicious: "\f1a5"; 163 | $fa-var-desktop: "\f108"; 164 | $fa-var-deviantart: "\f1bd"; 165 | $fa-var-digg: "\f1a6"; 166 | $fa-var-dollar: "\f155"; 167 | $fa-var-dot-circle-o: "\f192"; 168 | $fa-var-download: "\f019"; 169 | $fa-var-dribbble: "\f17d"; 170 | $fa-var-dropbox: "\f16b"; 171 | $fa-var-drupal: "\f1a9"; 172 | $fa-var-edit: "\f044"; 173 | $fa-var-eject: "\f052"; 174 | $fa-var-ellipsis-h: "\f141"; 175 | $fa-var-ellipsis-v: "\f142"; 176 | $fa-var-empire: "\f1d1"; 177 | $fa-var-envelope: "\f0e0"; 178 | $fa-var-envelope-o: "\f003"; 179 | $fa-var-envelope-square: "\f199"; 180 | $fa-var-eraser: "\f12d"; 181 | $fa-var-eur: "\f153"; 182 | $fa-var-euro: "\f153"; 183 | $fa-var-exchange: "\f0ec"; 184 | $fa-var-exclamation: "\f12a"; 185 | $fa-var-exclamation-circle: "\f06a"; 186 | $fa-var-exclamation-triangle: "\f071"; 187 | $fa-var-expand: "\f065"; 188 | $fa-var-external-link: "\f08e"; 189 | $fa-var-external-link-square: "\f14c"; 190 | $fa-var-eye: "\f06e"; 191 | $fa-var-eye-slash: "\f070"; 192 | $fa-var-eyedropper: "\f1fb"; 193 | $fa-var-facebook: "\f09a"; 194 | $fa-var-facebook-square: "\f082"; 195 | $fa-var-fast-backward: "\f049"; 196 | $fa-var-fast-forward: "\f050"; 197 | $fa-var-fax: "\f1ac"; 198 | $fa-var-female: "\f182"; 199 | $fa-var-fighter-jet: "\f0fb"; 200 | $fa-var-file: "\f15b"; 201 | $fa-var-file-archive-o: "\f1c6"; 202 | $fa-var-file-audio-o: "\f1c7"; 203 | $fa-var-file-code-o: "\f1c9"; 204 | $fa-var-file-excel-o: "\f1c3"; 205 | $fa-var-file-image-o: "\f1c5"; 206 | $fa-var-file-movie-o: "\f1c8"; 207 | $fa-var-file-o: "\f016"; 208 | $fa-var-file-pdf-o: "\f1c1"; 209 | $fa-var-file-photo-o: "\f1c5"; 210 | $fa-var-file-picture-o: "\f1c5"; 211 | $fa-var-file-powerpoint-o: "\f1c4"; 212 | $fa-var-file-sound-o: "\f1c7"; 213 | $fa-var-file-text: "\f15c"; 214 | $fa-var-file-text-o: "\f0f6"; 215 | $fa-var-file-video-o: "\f1c8"; 216 | $fa-var-file-word-o: "\f1c2"; 217 | $fa-var-file-zip-o: "\f1c6"; 218 | $fa-var-files-o: "\f0c5"; 219 | $fa-var-film: "\f008"; 220 | $fa-var-filter: "\f0b0"; 221 | $fa-var-fire: "\f06d"; 222 | $fa-var-fire-extinguisher: "\f134"; 223 | $fa-var-flag: "\f024"; 224 | $fa-var-flag-checkered: "\f11e"; 225 | $fa-var-flag-o: "\f11d"; 226 | $fa-var-flash: "\f0e7"; 227 | $fa-var-flask: "\f0c3"; 228 | $fa-var-flickr: "\f16e"; 229 | $fa-var-floppy-o: "\f0c7"; 230 | $fa-var-folder: "\f07b"; 231 | $fa-var-folder-o: "\f114"; 232 | $fa-var-folder-open: "\f07c"; 233 | $fa-var-folder-open-o: "\f115"; 234 | $fa-var-font: "\f031"; 235 | $fa-var-forward: "\f04e"; 236 | $fa-var-foursquare: "\f180"; 237 | $fa-var-frown-o: "\f119"; 238 | $fa-var-futbol-o: "\f1e3"; 239 | $fa-var-gamepad: "\f11b"; 240 | $fa-var-gavel: "\f0e3"; 241 | $fa-var-gbp: "\f154"; 242 | $fa-var-ge: "\f1d1"; 243 | $fa-var-gear: "\f013"; 244 | $fa-var-gears: "\f085"; 245 | $fa-var-gift: "\f06b"; 246 | $fa-var-git: "\f1d3"; 247 | $fa-var-git-square: "\f1d2"; 248 | $fa-var-github: "\f09b"; 249 | $fa-var-github-alt: "\f113"; 250 | $fa-var-github-square: "\f092"; 251 | $fa-var-gittip: "\f184"; 252 | $fa-var-glass: "\f000"; 253 | $fa-var-globe: "\f0ac"; 254 | $fa-var-google: "\f1a0"; 255 | $fa-var-google-plus: "\f0d5"; 256 | $fa-var-google-plus-square: "\f0d4"; 257 | $fa-var-google-wallet: "\f1ee"; 258 | $fa-var-graduation-cap: "\f19d"; 259 | $fa-var-group: "\f0c0"; 260 | $fa-var-h-square: "\f0fd"; 261 | $fa-var-hacker-news: "\f1d4"; 262 | $fa-var-hand-o-down: "\f0a7"; 263 | $fa-var-hand-o-left: "\f0a5"; 264 | $fa-var-hand-o-right: "\f0a4"; 265 | $fa-var-hand-o-up: "\f0a6"; 266 | $fa-var-hdd-o: "\f0a0"; 267 | $fa-var-header: "\f1dc"; 268 | $fa-var-headphones: "\f025"; 269 | $fa-var-heart: "\f004"; 270 | $fa-var-heart-o: "\f08a"; 271 | $fa-var-history: "\f1da"; 272 | $fa-var-home: "\f015"; 273 | $fa-var-hospital-o: "\f0f8"; 274 | $fa-var-html5: "\f13b"; 275 | $fa-var-ils: "\f20b"; 276 | $fa-var-image: "\f03e"; 277 | $fa-var-inbox: "\f01c"; 278 | $fa-var-indent: "\f03c"; 279 | $fa-var-info: "\f129"; 280 | $fa-var-info-circle: "\f05a"; 281 | $fa-var-inr: "\f156"; 282 | $fa-var-instagram: "\f16d"; 283 | $fa-var-institution: "\f19c"; 284 | $fa-var-ioxhost: "\f208"; 285 | $fa-var-italic: "\f033"; 286 | $fa-var-joomla: "\f1aa"; 287 | $fa-var-jpy: "\f157"; 288 | $fa-var-jsfiddle: "\f1cc"; 289 | $fa-var-key: "\f084"; 290 | $fa-var-keyboard-o: "\f11c"; 291 | $fa-var-krw: "\f159"; 292 | $fa-var-language: "\f1ab"; 293 | $fa-var-laptop: "\f109"; 294 | $fa-var-lastfm: "\f202"; 295 | $fa-var-lastfm-square: "\f203"; 296 | $fa-var-leaf: "\f06c"; 297 | $fa-var-legal: "\f0e3"; 298 | $fa-var-lemon-o: "\f094"; 299 | $fa-var-level-down: "\f149"; 300 | $fa-var-level-up: "\f148"; 301 | $fa-var-life-bouy: "\f1cd"; 302 | $fa-var-life-buoy: "\f1cd"; 303 | $fa-var-life-ring: "\f1cd"; 304 | $fa-var-life-saver: "\f1cd"; 305 | $fa-var-lightbulb-o: "\f0eb"; 306 | $fa-var-line-chart: "\f201"; 307 | $fa-var-link: "\f0c1"; 308 | $fa-var-linkedin: "\f0e1"; 309 | $fa-var-linkedin-square: "\f08c"; 310 | $fa-var-linux: "\f17c"; 311 | $fa-var-list: "\f03a"; 312 | $fa-var-list-alt: "\f022"; 313 | $fa-var-list-ol: "\f0cb"; 314 | $fa-var-list-ul: "\f0ca"; 315 | $fa-var-location-arrow: "\f124"; 316 | $fa-var-lock: "\f023"; 317 | $fa-var-long-arrow-down: "\f175"; 318 | $fa-var-long-arrow-left: "\f177"; 319 | $fa-var-long-arrow-right: "\f178"; 320 | $fa-var-long-arrow-up: "\f176"; 321 | $fa-var-magic: "\f0d0"; 322 | $fa-var-magnet: "\f076"; 323 | $fa-var-mail-forward: "\f064"; 324 | $fa-var-mail-reply: "\f112"; 325 | $fa-var-mail-reply-all: "\f122"; 326 | $fa-var-male: "\f183"; 327 | $fa-var-map-marker: "\f041"; 328 | $fa-var-maxcdn: "\f136"; 329 | $fa-var-meanpath: "\f20c"; 330 | $fa-var-medkit: "\f0fa"; 331 | $fa-var-meh-o: "\f11a"; 332 | $fa-var-microphone: "\f130"; 333 | $fa-var-microphone-slash: "\f131"; 334 | $fa-var-minus: "\f068"; 335 | $fa-var-minus-circle: "\f056"; 336 | $fa-var-minus-square: "\f146"; 337 | $fa-var-minus-square-o: "\f147"; 338 | $fa-var-mobile: "\f10b"; 339 | $fa-var-mobile-phone: "\f10b"; 340 | $fa-var-money: "\f0d6"; 341 | $fa-var-moon-o: "\f186"; 342 | $fa-var-mortar-board: "\f19d"; 343 | $fa-var-music: "\f001"; 344 | $fa-var-navicon: "\f0c9"; 345 | $fa-var-newspaper-o: "\f1ea"; 346 | $fa-var-openid: "\f19b"; 347 | $fa-var-outdent: "\f03b"; 348 | $fa-var-pagelines: "\f18c"; 349 | $fa-var-paint-brush: "\f1fc"; 350 | $fa-var-paper-plane: "\f1d8"; 351 | $fa-var-paper-plane-o: "\f1d9"; 352 | $fa-var-paperclip: "\f0c6"; 353 | $fa-var-paragraph: "\f1dd"; 354 | $fa-var-paste: "\f0ea"; 355 | $fa-var-pause: "\f04c"; 356 | $fa-var-paw: "\f1b0"; 357 | $fa-var-paypal: "\f1ed"; 358 | $fa-var-pencil: "\f040"; 359 | $fa-var-pencil-square: "\f14b"; 360 | $fa-var-pencil-square-o: "\f044"; 361 | $fa-var-phone: "\f095"; 362 | $fa-var-phone-square: "\f098"; 363 | $fa-var-photo: "\f03e"; 364 | $fa-var-picture-o: "\f03e"; 365 | $fa-var-pie-chart: "\f200"; 366 | $fa-var-pied-piper: "\f1a7"; 367 | $fa-var-pied-piper-alt: "\f1a8"; 368 | $fa-var-pinterest: "\f0d2"; 369 | $fa-var-pinterest-square: "\f0d3"; 370 | $fa-var-plane: "\f072"; 371 | $fa-var-play: "\f04b"; 372 | $fa-var-play-circle: "\f144"; 373 | $fa-var-play-circle-o: "\f01d"; 374 | $fa-var-plug: "\f1e6"; 375 | $fa-var-plus: "\f067"; 376 | $fa-var-plus-circle: "\f055"; 377 | $fa-var-plus-square: "\f0fe"; 378 | $fa-var-plus-square-o: "\f196"; 379 | $fa-var-power-off: "\f011"; 380 | $fa-var-print: "\f02f"; 381 | $fa-var-puzzle-piece: "\f12e"; 382 | $fa-var-qq: "\f1d6"; 383 | $fa-var-qrcode: "\f029"; 384 | $fa-var-question: "\f128"; 385 | $fa-var-question-circle: "\f059"; 386 | $fa-var-quote-left: "\f10d"; 387 | $fa-var-quote-right: "\f10e"; 388 | $fa-var-ra: "\f1d0"; 389 | $fa-var-random: "\f074"; 390 | $fa-var-rebel: "\f1d0"; 391 | $fa-var-recycle: "\f1b8"; 392 | $fa-var-reddit: "\f1a1"; 393 | $fa-var-reddit-square: "\f1a2"; 394 | $fa-var-refresh: "\f021"; 395 | $fa-var-remove: "\f00d"; 396 | $fa-var-renren: "\f18b"; 397 | $fa-var-reorder: "\f0c9"; 398 | $fa-var-repeat: "\f01e"; 399 | $fa-var-reply: "\f112"; 400 | $fa-var-reply-all: "\f122"; 401 | $fa-var-retweet: "\f079"; 402 | $fa-var-rmb: "\f157"; 403 | $fa-var-road: "\f018"; 404 | $fa-var-rocket: "\f135"; 405 | $fa-var-rotate-left: "\f0e2"; 406 | $fa-var-rotate-right: "\f01e"; 407 | $fa-var-rouble: "\f158"; 408 | $fa-var-rss: "\f09e"; 409 | $fa-var-rss-square: "\f143"; 410 | $fa-var-rub: "\f158"; 411 | $fa-var-ruble: "\f158"; 412 | $fa-var-rupee: "\f156"; 413 | $fa-var-save: "\f0c7"; 414 | $fa-var-scissors: "\f0c4"; 415 | $fa-var-search: "\f002"; 416 | $fa-var-search-minus: "\f010"; 417 | $fa-var-search-plus: "\f00e"; 418 | $fa-var-send: "\f1d8"; 419 | $fa-var-send-o: "\f1d9"; 420 | $fa-var-share: "\f064"; 421 | $fa-var-share-alt: "\f1e0"; 422 | $fa-var-share-alt-square: "\f1e1"; 423 | $fa-var-share-square: "\f14d"; 424 | $fa-var-share-square-o: "\f045"; 425 | $fa-var-shekel: "\f20b"; 426 | $fa-var-sheqel: "\f20b"; 427 | $fa-var-shield: "\f132"; 428 | $fa-var-shopping-cart: "\f07a"; 429 | $fa-var-sign-in: "\f090"; 430 | $fa-var-sign-out: "\f08b"; 431 | $fa-var-signal: "\f012"; 432 | $fa-var-sitemap: "\f0e8"; 433 | $fa-var-skype: "\f17e"; 434 | $fa-var-slack: "\f198"; 435 | $fa-var-sliders: "\f1de"; 436 | $fa-var-slideshare: "\f1e7"; 437 | $fa-var-smile-o: "\f118"; 438 | $fa-var-soccer-ball-o: "\f1e3"; 439 | $fa-var-sort: "\f0dc"; 440 | $fa-var-sort-alpha-asc: "\f15d"; 441 | $fa-var-sort-alpha-desc: "\f15e"; 442 | $fa-var-sort-amount-asc: "\f160"; 443 | $fa-var-sort-amount-desc: "\f161"; 444 | $fa-var-sort-asc: "\f0de"; 445 | $fa-var-sort-desc: "\f0dd"; 446 | $fa-var-sort-down: "\f0dd"; 447 | $fa-var-sort-numeric-asc: "\f162"; 448 | $fa-var-sort-numeric-desc: "\f163"; 449 | $fa-var-sort-up: "\f0de"; 450 | $fa-var-soundcloud: "\f1be"; 451 | $fa-var-space-shuttle: "\f197"; 452 | $fa-var-spinner: "\f110"; 453 | $fa-var-spoon: "\f1b1"; 454 | $fa-var-spotify: "\f1bc"; 455 | $fa-var-square: "\f0c8"; 456 | $fa-var-square-o: "\f096"; 457 | $fa-var-stack-exchange: "\f18d"; 458 | $fa-var-stack-overflow: "\f16c"; 459 | $fa-var-star: "\f005"; 460 | $fa-var-star-half: "\f089"; 461 | $fa-var-star-half-empty: "\f123"; 462 | $fa-var-star-half-full: "\f123"; 463 | $fa-var-star-half-o: "\f123"; 464 | $fa-var-star-o: "\f006"; 465 | $fa-var-steam: "\f1b6"; 466 | $fa-var-steam-square: "\f1b7"; 467 | $fa-var-step-backward: "\f048"; 468 | $fa-var-step-forward: "\f051"; 469 | $fa-var-stethoscope: "\f0f1"; 470 | $fa-var-stop: "\f04d"; 471 | $fa-var-strikethrough: "\f0cc"; 472 | $fa-var-stumbleupon: "\f1a4"; 473 | $fa-var-stumbleupon-circle: "\f1a3"; 474 | $fa-var-subscript: "\f12c"; 475 | $fa-var-suitcase: "\f0f2"; 476 | $fa-var-sun-o: "\f185"; 477 | $fa-var-superscript: "\f12b"; 478 | $fa-var-support: "\f1cd"; 479 | $fa-var-table: "\f0ce"; 480 | $fa-var-tablet: "\f10a"; 481 | $fa-var-tachometer: "\f0e4"; 482 | $fa-var-tag: "\f02b"; 483 | $fa-var-tags: "\f02c"; 484 | $fa-var-tasks: "\f0ae"; 485 | $fa-var-taxi: "\f1ba"; 486 | $fa-var-tencent-weibo: "\f1d5"; 487 | $fa-var-terminal: "\f120"; 488 | $fa-var-text-height: "\f034"; 489 | $fa-var-text-width: "\f035"; 490 | $fa-var-th: "\f00a"; 491 | $fa-var-th-large: "\f009"; 492 | $fa-var-th-list: "\f00b"; 493 | $fa-var-thumb-tack: "\f08d"; 494 | $fa-var-thumbs-down: "\f165"; 495 | $fa-var-thumbs-o-down: "\f088"; 496 | $fa-var-thumbs-o-up: "\f087"; 497 | $fa-var-thumbs-up: "\f164"; 498 | $fa-var-ticket: "\f145"; 499 | $fa-var-times: "\f00d"; 500 | $fa-var-times-circle: "\f057"; 501 | $fa-var-times-circle-o: "\f05c"; 502 | $fa-var-tint: "\f043"; 503 | $fa-var-toggle-down: "\f150"; 504 | $fa-var-toggle-left: "\f191"; 505 | $fa-var-toggle-off: "\f204"; 506 | $fa-var-toggle-on: "\f205"; 507 | $fa-var-toggle-right: "\f152"; 508 | $fa-var-toggle-up: "\f151"; 509 | $fa-var-trash: "\f1f8"; 510 | $fa-var-trash-o: "\f014"; 511 | $fa-var-tree: "\f1bb"; 512 | $fa-var-trello: "\f181"; 513 | $fa-var-trophy: "\f091"; 514 | $fa-var-truck: "\f0d1"; 515 | $fa-var-try: "\f195"; 516 | $fa-var-tty: "\f1e4"; 517 | $fa-var-tumblr: "\f173"; 518 | $fa-var-tumblr-square: "\f174"; 519 | $fa-var-turkish-lira: "\f195"; 520 | $fa-var-twitch: "\f1e8"; 521 | $fa-var-twitter: "\f099"; 522 | $fa-var-twitter-square: "\f081"; 523 | $fa-var-umbrella: "\f0e9"; 524 | $fa-var-underline: "\f0cd"; 525 | $fa-var-undo: "\f0e2"; 526 | $fa-var-university: "\f19c"; 527 | $fa-var-unlink: "\f127"; 528 | $fa-var-unlock: "\f09c"; 529 | $fa-var-unlock-alt: "\f13e"; 530 | $fa-var-unsorted: "\f0dc"; 531 | $fa-var-upload: "\f093"; 532 | $fa-var-usd: "\f155"; 533 | $fa-var-user: "\f007"; 534 | $fa-var-user-md: "\f0f0"; 535 | $fa-var-users: "\f0c0"; 536 | $fa-var-video-camera: "\f03d"; 537 | $fa-var-vimeo-square: "\f194"; 538 | $fa-var-vine: "\f1ca"; 539 | $fa-var-vk: "\f189"; 540 | $fa-var-volume-down: "\f027"; 541 | $fa-var-volume-off: "\f026"; 542 | $fa-var-volume-up: "\f028"; 543 | $fa-var-warning: "\f071"; 544 | $fa-var-wechat: "\f1d7"; 545 | $fa-var-weibo: "\f18a"; 546 | $fa-var-weixin: "\f1d7"; 547 | $fa-var-wheelchair: "\f193"; 548 | $fa-var-wifi: "\f1eb"; 549 | $fa-var-windows: "\f17a"; 550 | $fa-var-won: "\f159"; 551 | $fa-var-wordpress: "\f19a"; 552 | $fa-var-wrench: "\f0ad"; 553 | $fa-var-xing: "\f168"; 554 | $fa-var-xing-square: "\f169"; 555 | $fa-var-yahoo: "\f19e"; 556 | $fa-var-yelp: "\f1e9"; 557 | $fa-var-yen: "\f157"; 558 | $fa-var-youtube: "\f167"; 559 | $fa-var-youtube-play: "\f16a"; 560 | $fa-var-youtube-square: "\f166"; 561 | 562 | --------------------------------------------------------------------------------