diff options
author | aerohub <aerohub@users.noreply.github.com> | 2016-08-17 20:02:51 +0300 |
---|---|---|
committer | aerohub <aerohub@users.noreply.github.com> | 2016-08-17 20:02:51 +0300 |
commit | 990df552565018bba985aae9e6bffb4a24e4d9ea (patch) | |
tree | 1e939d5f3f4682953ba75f884b86bb0053f75211 |
Initial commit
30 files changed, 1013 insertions, 0 deletions
diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..569bec5 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2016 [Pavel Kanyshev](https://github.com/aerohub) + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..2fa3d61 --- /dev/null +++ b/README.md @@ -0,0 +1,85 @@ +# Hugrid + +Hugrid (Hugo+grid) is a simple grid theme for Hugo. It's a kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on. + +# Origin + +Hugrid is based on Codrops' [Thumbnail Grid with Expanding Preview](http://tympanus.net/codrops/?p=14530). + +## Demo + +[Demo on themes.gohugo.io](http://themes.gohugo.io/theme/hugrid/) +[Original demo from Codrops](http://tympanus.net/Tutorials/ThumbnailGridExpandingPreview/) + +## Features + +- Responsive design +- Google Analytics + +## Screenshot + +![Hugrid screenshot](https://raw.githubusercontent.com/aerohub/hugrid/master/images/screenshot.png) + + +## Contents + +- [Installation](#installation) +- [Getting started](#getting-started) + - [The config file](#the-config-file) + - [Data file](#data-file) + - [Nearly finished](#nearly-finished) +- [Contributing](#contributing) +- [License](#license) +- [Annotations](#annotations) + + +## Installation + +Inside the folder of your new Hugo site run: + + $ mkdir themes + $ cd themes + $ git clone https://github.com/aerohub/hugrid + +For more information read the official [setup guide](//gohugo.io/overview/installing/) of Hugo. + + +## Getting started + +After installing the Identity Theme successfully it requires a just a few more steps to get your site running. + + +### The config file + +Take a look inside the [`exampleSite`](//github.com/aerohub/hugrid/tree/master/exampleSite) folder of this theme. You'll find a file called [`config.toml`](//github.com/aerohub/hugrid/blob/master/exampleSite/config.toml). To use it, copy the [`config.toml`](//github.com/aerohub/hugrid/blob/master/exampleSite/config.toml) in the root folder of your Hugo site. Feel free to change the strings in this theme. + +### Data file + +Take a look inside the [`exampleSite/data`](//github.com/aerohub/hugrid/tree/master/exampleSite/data) folder of this theme. You'll find a file called [`items.toml`](//github.com/aerohub/hugrid/blob/master/exampleSite/items.toml). To use it, copy the [`exampleSite/data`](//github.com/aerohub/hugrid/tree/master/exampleSite/data) folder in the root folder of your Hugo site. Change the strings in the `items.toml` with your data. + +### Nearly finished + +In order to see your site in action, run Hugo's built-in local server. + + $ hugo server -w + +Now enter `localhost:1313` in the address bar of your browser. + + +## Contributing + +Did you found a bug or got an idea for a new feature? Feel free to use the [issue tracker](//github.com/aerohub/hugrid/issues) to let me know. Or make directly a [pull request](//github.com/aerohub/hugrid/pulls). + + +## License + +This work is licensed under the MIT License. For more information read the [License](//github.com/aerohub/hugrid/blob/master/LICENSE.md). + + +## Annotations + +Thanks + +- to [spf13](//github.com/spf13) for creating Hugo and the awesome community around the project +- to [digitalcraftsman](//github.com/digitalcraftsman) for creating Hugo themes and writing nice READMEs +- to Codrops for original [Thumbnail Grid with Expanding Preview](http://tympanus.net/codrops/?p=14530).
\ No newline at end of file diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..f7ba421 --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,2 @@ ++++ ++++
\ No newline at end of file diff --git a/exampleSite/archetypes/.gitkeep b/exampleSite/archetypes/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/exampleSite/archetypes/.gitkeep diff --git a/exampleSite/config.toml b/exampleSite/config.toml new file mode 100644 index 0000000..4bfe81f --- /dev/null +++ b/exampleSite/config.toml @@ -0,0 +1,29 @@ +# Site settings +baseurl = "http://replace-this-with-your-hugo-site.com/" +languageCode = "en-us" +title = "Hugrid - Grid Theme For Hugo" +theme = "hugrid" +# Enter your tracking code to enable Google Analytics +googleAnalytics = "UA-XXXXXXXX-Y" + +contentdir = "content" +datadir = "data" +layoutdir = "layouts" +publishdir = "public" + +[params] + # Meta + title = "Hugrid - a simple grid theme for Hugo" + subtitle = "A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." + author = "Pavel Kanyshev" + description = "Hugrid - grid theme for Hugo with an expanding image preview." + keywords = "Hugo, Hugo theme, grid theme, portfolio, bookmarks, collection, contacts" + + # Body background color + bodybgcolor = "#f9f9f9" + + # Preview container button text + buttontext = "Get the theme" + + # Footer text + footertext = "Made by [Codrops](http://tympanus.net/codrops/2013/03/19/thumbnail-grid-with-expanding-preview/), [Hugo](http://gohugo.io) and [me](https://github.com/aerohub)"
\ No newline at end of file diff --git a/exampleSite/content/.gitkeep b/exampleSite/content/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/exampleSite/content/.gitkeep diff --git a/exampleSite/data/items.toml b/exampleSite/data/items.toml new file mode 100644 index 0000000..ec3c755 --- /dev/null +++ b/exampleSite/data/items.toml @@ -0,0 +1,105 @@ +[[items]] +title = "Hugrid Theme" +image = "images/full/1.png" +thumb = "images/thumbs/1.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/2.png" +thumb = "images/thumbs/2.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/3.png" +thumb = "images/thumbs/3.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/4.png" +thumb = "images/thumbs/4.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/5.png" +thumb = "images/thumbs/5.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/3.png" +thumb = "images/thumbs/3.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/4.png" +thumb = "images/thumbs/4.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/1.png" +thumb = "images/thumbs/1.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/2.png" +thumb = "images/thumbs/2.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/3.png" +thumb = "images/thumbs/3.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/4.png" +thumb = "images/thumbs/4.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/5.png" +thumb = "images/thumbs/5.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/2.png" +thumb = "images/thumbs/2.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/3.png" +thumb = "images/thumbs/3.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid" +[[items]] +title = "Hugrid Theme" +image = "images/full/1.png" +thumb = "images/thumbs/1.png" +alt = "Hugrid Theme" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly. Portfolio, collection, bookmarks, contacts and so on." +url = "https://github.com/aerohub/hugrid"
\ No newline at end of file diff --git a/images/screenshot.png b/images/screenshot.png Binary files differnew file mode 100644 index 0000000..01c7a1f --- /dev/null +++ b/images/screenshot.png diff --git a/images/tn.png b/images/tn.png Binary files differnew file mode 100644 index 0000000..145c3d0 --- /dev/null +++ b/images/tn.png diff --git a/layouts/_default/list.html b/layouts/_default/list.html new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/layouts/_default/list.html diff --git a/layouts/_default/single.html b/layouts/_default/single.html new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/layouts/_default/single.html diff --git a/layouts/index.html b/layouts/index.html new file mode 100644 index 0000000..99aa127 --- /dev/null +++ b/layouts/index.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html lang="{{ with .Site.LanguageCode }}{{ . }}{{ else }}en-US{{ end }}"> + <head> + {{ partial "head.html" . }} + </head> + {{ template "_internal/google_analytics.html" . }} + <body> + <div class="container"> + {{ partial "header.html" . }} + <div class="main"> + <ul id="og-grid" class="og-grid"> + {{ range $.Site.Data.items.items }} + <li> + <a href="{{.url}}" data-largesrc="{{.image}}" data-title="{{.title}}" data-description="{{.description }}"> + <img src="{{.thumb}}" alt="{{.alt}}"/> + </a> + </li> + {{ end }} + </ul> + {{ partial "footer.html" . }} + </div> + </div> + {{ partial "scripts.html" . }} + </body> +</html>
\ No newline at end of file diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html new file mode 100644 index 0000000..35cad37 --- /dev/null +++ b/layouts/partials/footer.html @@ -0,0 +1 @@ + <p>{{ with .Site.Params.footertext }}{{ . | markdownify }}{{ end }}</p>
\ No newline at end of file diff --git a/layouts/partials/head.html b/layouts/partials/head.html new file mode 100644 index 0000000..56aba86 --- /dev/null +++ b/layouts/partials/head.html @@ -0,0 +1,17 @@ + <meta charset="UTF-8" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>{{ .Site.Title }}</title> + <meta name="description" content="{{ with .Site.Params.description }}{{ . }}{{ end }}" /> + <meta name="keywords" content="{{ with .Site.Params.keywords }}{{ . }}{{ end }}" /> + <meta name="author" content="{{ with .Site.Params.author }}{{ . }}{{ end }}" /> + {{ .Hugo.Generator }} + <style> + body { + background: {{ .Site.Params.bodybgcolor }}; + color: {{ .Site.Params.bodytextcolor }}; + } + </style> + <link rel="stylesheet" type="text/css" href="{{ .Site.BaseURL }}css/default.css" /> + <link rel="stylesheet" type="text/css" href="{{ .Site.BaseURL }}css/component.css" /> + <script src="{{ .Site.BaseURL }}js/modernizr.custom.js"></script>
\ No newline at end of file diff --git a/layouts/partials/header.html b/layouts/partials/header.html new file mode 100644 index 0000000..0ebed2d --- /dev/null +++ b/layouts/partials/header.html @@ -0,0 +1,3 @@ + <header class="clearfix"> + <h1>{{ with .Site.Params.title }}{{ . | markdownify }}{{ end }}<span>{{ with .Site.Params.subtitle }}{{ . | markdownify }}{{ end }}</span></h1> + </header>
\ No newline at end of file diff --git a/layouts/partials/scripts.html b/layouts/partials/scripts.html new file mode 100644 index 0000000..b2c5fa4 --- /dev/null +++ b/layouts/partials/scripts.html @@ -0,0 +1,430 @@ + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> + <script> + var $event = $.event, + $special, + resizeTimeout; + + $special = $event.special.debouncedresize = { + setup: function() { + $( this ).on( "resize", $special.handler ); + }, + teardown: function() { + $( this ).off( "resize", $special.handler ); + }, + handler: function( event, execAsap ) { + var context = this, + args = arguments, + dispatch = function() { + event.type = "debouncedresize"; + $event.dispatch.apply( context, args ); + }; + + if ( resizeTimeout ) { + clearTimeout( resizeTimeout ); + } + + execAsap ? + dispatch() : + resizeTimeout = setTimeout( dispatch, $special.threshold ); + }, + threshold: 250 + }; + + var BLANK = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=='; + + $.fn.imagesLoaded = function( callback ) { + var $this = this, + deferred = $.isFunction($.Deferred) ? $.Deferred() : 0, + hasNotify = $.isFunction(deferred.notify), + $images = $this.find('img').add( $this.filter('img') ), + loaded = [], + proper = [], + broken = []; + + if ($.isPlainObject(callback)) { + $.each(callback, function (key, value) { + if (key === 'callback') { + callback = value; + } else if (deferred) { + deferred[key](value); + } + }); + } + + function doneLoading() { + var $proper = $(proper), + $broken = $(broken); + + if ( deferred ) { + if ( broken.length ) { + deferred.reject( $images, $proper, $broken ); + } else { + deferred.resolve( $images ); + } + } + + if ( $.isFunction( callback ) ) { + callback.call( $this, $images, $proper, $broken ); + } + } + + function imgLoaded( img, isBroken ) { + if ( img.src === BLANK || $.inArray( img, loaded ) !== -1 ) { + return; + } + + loaded.push( img ); + + if ( isBroken ) { + broken.push( img ); + } else { + proper.push( img ); + } + + $.data( img, 'imagesLoaded', { isBroken: isBroken, src: img.src } ); + + if ( hasNotify ) { + deferred.notifyWith( $(img), [ isBroken, $images, $(proper), $(broken) ] ); + } + + if ( $images.length === loaded.length ){ + setTimeout( doneLoading ); + $images.unbind( '.imagesLoaded' ); + } + } + + if ( !$images.length ) { + doneLoading(); + } else { + $images.bind( 'load.imagesLoaded error.imagesLoaded', function( event ){ + imgLoaded( event.target, event.type === 'error' ); + }).each( function( i, el ) { + var src = el.src; + + var cached = $.data( el, 'imagesLoaded' ); + if ( cached && cached.src === src ) { + imgLoaded( el, cached.isBroken ); + return; + } + + if ( el.complete && el.naturalWidth !== undefined ) { + imgLoaded( el, el.naturalWidth === 0 || el.naturalHeight === 0 ); + return; + } + + if ( el.readyState || el.complete ) { + el.src = BLANK; + el.src = src; + } + }); + } + + return deferred ? deferred.promise( $this ) : $this; + }; + + var Grid = (function() { + + var $grid = $( '#og-grid' ), + $items = $grid.children( 'li' ), + current = -1, + previewPos = -1, + scrollExtra = 0, + marginExpanded = 10, + $window = $( window ), winsize, + $body = $( 'html, body' ), + transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd', + 'MozTransition' : 'transitionend', + 'OTransition' : 'oTransitionEnd', + 'msTransition' : 'MSTransitionEnd', + 'transition' : 'transitionend' + }, + transEndEventName = transEndEventNames[ Modernizr.prefixed( 'transition' ) ], + support = Modernizr.csstransitions, + settings = { + minHeight : 500, + speed : 350, + easing : 'ease' + }; + + function init( config ) { + + settings = $.extend( true, {}, settings, config ); + + $grid.imagesLoaded( function() { + + saveItemInfo( true ); + getWinSize(); + initEvents(); + + } ); + + } + + function addItems( $newitems ) { + + $items = $items.add( $newitems ); + + $newitems.each( function() { + var $item = $( this ); + $item.data( { + offsetTop : $item.offset().top, + height : $item.height() + } ); + } ); + + initItemsEvents( $newitems ); + + } + + function saveItemInfo( saveheight ) { + $items.each( function() { + var $item = $( this ); + $item.data( 'offsetTop', $item.offset().top ); + if( saveheight ) { + $item.data( 'height', $item.height() ); + } + } ); + } + + function initEvents() { + + initItemsEvents( $items ); + + $window.on( 'debouncedresize', function() { + + scrollExtra = 0; + previewPos = -1; + saveItemInfo(); + getWinSize(); + var preview = $.data( this, 'preview' ); + if( typeof preview != 'undefined' ) { + hidePreview(); + } + + } ); + + } + + function initItemsEvents( $items ) { + $items.on( 'click', 'span.og-close', function() { + hidePreview(); + return false; + } ).children( 'a' ).on( 'click', function(e) { + + var $item = $( this ).parent(); + current === $item.index() ? hidePreview() : showPreview( $item ); + return false; + + } ); + } + + function getWinSize() { + winsize = { width : $window.width(), height : $window.height() }; + } + + function showPreview( $item ) { + + var preview = $.data( this, 'preview' ), + position = $item.data( 'offsetTop' ); + + scrollExtra = 0; + + if( typeof preview != 'undefined' ) { + + if( previewPos !== position ) { + if( position > previewPos ) { + scrollExtra = preview.height; + } + hidePreview(); + } + else { + preview.update( $item ); + return false; + } + + } + + previewPos = position; + preview = $.data( this, 'preview', new Preview( $item ) ); + preview.open(); + + } + + function hidePreview() { + current = -1; + var preview = $.data( this, 'preview' ); + preview.close(); + $.removeData( this, 'preview' ); + } + + function Preview( $item ) { + this.$item = $item; + this.expandedIdx = this.$item.index(); + this.create(); + this.update(); + } + + Preview.prototype = { + create : function() { + this.$title = $( '<h3></h3>' ); + this.$description = $( '<p></p>' ); + this.$href = $( '<a href="#">{{ .Site.Params.buttontext }}</a>' ); + this.$details = $( '<div class="og-details"></div>' ).append( this.$title, this.$description, this.$href ); + this.$loading = $( '<div class="og-loading"></div>' ); + this.$fullimage = $( '<div class="og-fullimg"></div>' ).append( this.$loading ); + this.$closePreview = $( '<span class="og-close"></span>' ); + this.$previewInner = $( '<div class="og-expander-inner"></div>' ).append( this.$closePreview, this.$fullimage, this.$details ); + this.$previewEl = $( '<div class="og-expander"></div>' ).append( this.$previewInner ); + this.$item.append( this.getEl() ); + if( support ) { + this.setTransition(); + } + }, + update : function( $item ) { + + if( $item ) { + this.$item = $item; + } + + if( current !== -1 ) { + var $currentItem = $items.eq( current ); + $currentItem.removeClass( 'og-expanded' ); + this.$item.addClass( 'og-expanded' ); + this.positionPreview(); + } + + current = this.$item.index(); + + var $itemEl = this.$item.children( 'a' ), + eldata = { + href : $itemEl.attr( 'href' ), + largesrc : $itemEl.data( 'largesrc' ), + title : $itemEl.data( 'title' ), + description : $itemEl.data( 'description' ) + }; + + this.$title.html( eldata.title ); + this.$description.html( eldata.description ); + this.$href.attr( 'href', eldata.href ); + + var self = this; + + if( typeof self.$largeImg != 'undefined' ) { + self.$largeImg.remove(); + } + + if( self.$fullimage.is( ':visible' ) ) { + this.$loading.show(); + $( '<img/>' ).load( function() { + var $img = $( this ); + if( $img.attr( 'src' ) === self.$item.children('a').data( 'largesrc' ) ) { + self.$loading.hide(); + self.$fullimage.find( 'img' ).remove(); + self.$largeImg = $img.fadeIn( 350 ); + self.$fullimage.append( self.$largeImg ); + } + } ).attr( 'src', eldata.largesrc ); + } + + }, + open : function() { + + setTimeout( $.proxy( function() { + this.setHeights(); + this.positionPreview(); + }, this ), 25 ); + + }, + close : function() { + + var self = this, + onEndFn = function() { + if( support ) { + $( this ).off( transEndEventName ); + } + self.$item.removeClass( 'og-expanded' ); + self.$previewEl.remove(); + }; + + setTimeout( $.proxy( function() { + + if( typeof this.$largeImg !== 'undefined' ) { + this.$largeImg.fadeOut( 'fast' ); + } + this.$previewEl.css( 'height', 0 ); + var $expandedItem = $items.eq( this.expandedIdx ); + $expandedItem.css( 'height', $expandedItem.data( 'height' ) ).on( transEndEventName, onEndFn ); + + if( !support ) { + onEndFn.call(); + } + + }, this ), 25 ); + + return false; + + }, + calcHeight : function() { + + var heightPreview = winsize.height - this.$item.data( 'height' ) - marginExpanded, + itemHeight = winsize.height; + + if( heightPreview < settings.minHeight ) { + heightPreview = settings.minHeight; + itemHeight = settings.minHeight + this.$item.data( 'height' ) + marginExpanded; + } + + this.height = heightPreview; + this.itemHeight = itemHeight; + + }, + setHeights : function() { + + var self = this, + onEndFn = function() { + if( support ) { + self.$item.off( transEndEventName ); + } + self.$item.addClass( 'og-expanded' ); + }; + + this.calcHeight(); + this.$previewEl.css( 'height', this.height ); + this.$item.css( 'height', this.itemHeight ).on( transEndEventName, onEndFn ); + + if( !support ) { + onEndFn.call(); + } + + }, + positionPreview : function() { + + var position = this.$item.data( 'offsetTop' ), + previewOffsetT = this.$previewEl.offset().top - scrollExtra, + scrollVal = this.height + this.$item.data( 'height' ) + marginExpanded <= winsize.height ? position : this.height < winsize.height ? previewOffsetT - ( winsize.height - this.height ) : previewOffsetT; + + $body.animate( { scrollTop : scrollVal }, settings.speed ); + + }, + setTransition : function() { + this.$previewEl.css( 'transition', 'height ' + settings.speed + 'ms ' + settings.easing ); + this.$item.css( 'transition', 'height ' + settings.speed + 'ms ' + settings.easing ); + }, + getEl : function() { + return this.$previewEl; + } + } + + return { + init : init, + addItems : addItems + }; + + })(); + </script> + <script> + $(function() { + Grid.init(); + }); + </script>
\ No newline at end of file diff --git a/static/css/component.css b/static/css/component.css new file mode 100644 index 0000000..8f21f49 --- /dev/null +++ b/static/css/component.css @@ -0,0 +1,195 @@ +.og-grid { + list-style: none; + padding: 20px 0; + margin: 0 auto; + text-align: center; + width: 100%; +} + +.og-grid li { + display: inline-block; + margin: 10px 5px 0 5px; + vertical-align: top; + height: 250px; +} + +.og-grid li > a, +.og-grid li > a img { + border: none; + outline: none; + display: block; + position: relative; +} + +.og-grid li.og-expanded > a::after { + top: auto; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-bottom-color: #ddd; + border-width: 15px; + left: 50%; + margin: -20px 0 0 -15px; +} + +.og-expander { + position: absolute; + background: #ddd; + top: auto; + left: 0; + width: 100%; + margin-top: 10px; + text-align: left; + height: 0; + overflow: hidden; +} + +.og-expander-inner { + padding: 50px 30px; + height: 100%; +} + +.og-close { + position: absolute; + width: 40px; + height: 40px; + top: 20px; + right: 20px; + cursor: pointer; +} + +.og-close::before, +.og-close::after { + content: ''; + position: absolute; + width: 100%; + top: 50%; + height: 1px; + background: #888; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + transform: rotate(45deg); +} + +.og-close::after { + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + transform: rotate(-45deg); +} + +.og-close:hover::before, +.og-close:hover::after { + background: #333; +} + +.og-fullimg, +.og-details { + width: 50%; + float: left; + height: 100%; + overflow: hidden; + position: relative; +} + +.og-details { + padding: 0 40px 0 20px; +} + +.og-fullimg { + text-align: center; +} + +.og-fullimg img { + display: inline-block; + max-height: 100%; + max-width: 100%; +} + +.og-details h3 { + font-weight: 300; + font-size: 52px; + padding: 40px 0 10px; + margin-bottom: 10px; +} + +.og-details p { + font-weight: 400; + font-size: 16px; + line-height: 22px; + color: #999; +} + +.og-details a { + font-weight: 700; + font-size: 16px; + color: #333; + text-transform: uppercase; + letter-spacing: 2px; + padding: 10px 20px; + border: 3px solid #333; + display: inline-block; + margin: 30px 0 0; + outline: none; +} + +.og-details a::before { + content: '\2192'; + display: inline-block; + margin-right: 10px; +} + +.og-details a:hover { + border-color: #999; + color: #999; +} + +.og-loading { + width: 20px; + height: 20px; + border-radius: 50%; + background: #ddd; + box-shadow: 0 0 1px #ccc, 15px 30px 1px #ccc, -15px 30px 1px #ccc; + position: absolute; + top: 50%; + left: 50%; + margin: -25px 0 0 -25px; + -webkit-animation: loader 0.5s infinite ease-in-out both; + -moz-animation: loader 0.5s infinite ease-in-out both; + animation: loader 0.5s infinite ease-in-out both; +} + +@-webkit-keyframes loader { + 0% { background: #ddd; } + 33% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ccc, -15px 30px 1px #ddd; } + 66% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ddd, -15px 30px 1px #ccc; } +} + +@-moz-keyframes loader { + 0% { background: #ddd; } + 33% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ccc, -15px 30px 1px #ddd; } + 66% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ddd, -15px 30px 1px #ccc; } +} + +@keyframes loader { + 0% { background: #ddd; } + 33% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ccc, -15px 30px 1px #ddd; } + 66% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ddd, -15px 30px 1px #ccc; } +} + +@media screen and (max-width: 830px) { + + .og-expander h3 { font-size: 32px; } + .og-expander p { font-size: 13px; } + .og-expander a { font-size: 12px; } + +} + +@media screen and (max-width: 650px) { + + .og-fullimg { display: none; } + .og-details { float: none; width: 100%; } + +}
\ No newline at end of file diff --git a/static/css/default.css b/static/css/default.css new file mode 100644 index 0000000..e68894b --- /dev/null +++ b/static/css/default.css @@ -0,0 +1,80 @@ +/* General Demo Style */ +@import url(http://fonts.googleapis.com/css?family=Lato:300,400,700); + +html { height: 100%; } + +*, +*:after, +*:before { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; + margin: 0; +} + +/* Clearfix hack by Nicolas Gallagher: http://nicolasgallagher.com/micro-clearfix-hack/ */ +.clearfix:before, +.clearfix:after { + content: " "; + display: table; +} + +.clearfix:after { + clear: both; +} + +.clearfix { + *zoom: 1; +} + +body { + font-family: 'Lato', Calibri, Arial, sans-serif; + font-weight: 300; + font-size: 15px; + color: #333; + overflow: scroll; + overflow-x: hidden; +} + +a { + color: #555; + text-decoration: none; +} + +.container { + width: 100%; + position: relative; +} + +.container > header { + width: 90%; + max-width: 1240px; + margin: 0 auto; + position: relative; + padding: 0 30px 50px 30px; +} + +.container > header { + padding: 60px 30px 50px; + text-align: center; +} + +.container > header h1 { + font-size: 34px; + line-height: 38px; + margin: 0 auto; + font-weight: 700; + color: #333; +} + +.container > header h1 span { + display: block; + font-size: 20px; + font-weight: 300; +} + +.main > p { + text-align: center; + padding: 50px 20px; +} diff --git a/static/images/full/1.png b/static/images/full/1.png Binary files differnew file mode 100644 index 0000000..9decf64 --- /dev/null +++ b/static/images/full/1.png diff --git a/static/images/full/2.png b/static/images/full/2.png Binary files differnew file mode 100644 index 0000000..d8dfeb6 --- /dev/null +++ b/static/images/full/2.png diff --git a/static/images/full/3.png b/static/images/full/3.png Binary files differnew file mode 100644 index 0000000..14b21c0 --- /dev/null +++ b/static/images/full/3.png diff --git a/static/images/full/4.png b/static/images/full/4.png Binary files differnew file mode 100644 index 0000000..dfd50fd --- /dev/null +++ b/static/images/full/4.png diff --git a/static/images/full/5.png b/static/images/full/5.png Binary files differnew file mode 100644 index 0000000..e0760c9 --- /dev/null +++ b/static/images/full/5.png diff --git a/static/images/thumbs/1.png b/static/images/thumbs/1.png Binary files differnew file mode 100644 index 0000000..d539c0a --- /dev/null +++ b/static/images/thumbs/1.png diff --git a/static/images/thumbs/2.png b/static/images/thumbs/2.png Binary files differnew file mode 100644 index 0000000..a34f4b1 --- /dev/null +++ b/static/images/thumbs/2.png diff --git a/static/images/thumbs/3.png b/static/images/thumbs/3.png Binary files differnew file mode 100644 index 0000000..aafc4a0 --- /dev/null +++ b/static/images/thumbs/3.png diff --git a/static/images/thumbs/4.png b/static/images/thumbs/4.png Binary files differnew file mode 100644 index 0000000..fb14b44 --- /dev/null +++ b/static/images/thumbs/4.png diff --git a/static/images/thumbs/5.png b/static/images/thumbs/5.png Binary files differnew file mode 100644 index 0000000..1964c23 --- /dev/null +++ b/static/images/thumbs/5.png diff --git a/static/js/modernizr.custom.js b/static/js/modernizr.custom.js new file mode 100644 index 0000000..fb55d0f --- /dev/null +++ b/static/js/modernizr.custom.js @@ -0,0 +1,4 @@ +/* Modernizr 2.6.2 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-csstransitions-shiv-cssclasses-prefixed-testprop-testallprops-domprefixes-load + */ +;window.Modernizr=function(a,b,c){function x(a){j.cssText=a}function y(a,b){return x(prefixes.join(a+";")+(b||""))}function z(a,b){return typeof a===b}function A(a,b){return!!~(""+a).indexOf(b)}function B(a,b){for(var d in a){var e=a[d];if(!A(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function C(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:z(f,"function")?f.bind(d||b):f}return!1}function D(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+n.join(d+" ")+d).split(" ");return z(b,"string")||z(b,"undefined")?B(e,b):(e=(a+" "+o.join(d+" ")+d).split(" "),C(e,b,c))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m="Webkit Moz O ms",n=m.split(" "),o=m.toLowerCase().split(" "),p={},q={},r={},s=[],t=s.slice,u,v={}.hasOwnProperty,w;!z(v,"undefined")&&!z(v.call,"undefined")?w=function(a,b){return v.call(a,b)}:w=function(a,b){return b in a&&z(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=t.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(t.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(t.call(arguments)))};return e}),p.csstransitions=function(){return D("transition")};for(var E in p)w(p,E)&&(u=E.toLowerCase(),e[u]=p[E](),s.push((e[u]?"":"no-")+u));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)w(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},x(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._domPrefixes=o,e._cssomPrefixes=n,e.testProp=function(a){return B([a])},e.testAllProps=D,e.prefixed=function(a,b,c){return b?D(a,b,c):D(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+s.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
\ No newline at end of file diff --git a/theme.toml b/theme.toml new file mode 100644 index 0000000..d8a41f1 --- /dev/null +++ b/theme.toml @@ -0,0 +1,17 @@ +name = "Hugrid" +license = "MIT License" #original Codrops Lisense is here http://tympanus.net/codrops/licensing/ +licenselink = "//github.com/aerohub/hugrid/blob/master/LICENSE.md" +description = "A simple grid theme for Hugo. A kind of boilerplate to perform anyone or anything quickly." +homepage = "//github.com/aerohub/hugrid" +tags = ["responsive", "grid", "portfolio", "cards", "simple", "collections", "google analytics"] +min_version = 0.15 + +[author] + name = "Pavel Kanyshev" + homepage = "//github.com/aerohub/hugrid" + +# If porting an existing theme +[original] + name = "Codrops' Thumbnail Grid with Expanding Preview" + homepage = "http://tympanus.net/codrops/2013/03/19/thumbnail-grid-with-expanding-preview/" + repo = "//github.com/codrops/ThumbnailGridExpandingPreview"
\ No newline at end of file |