gallerize-cli 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -4
- data/Gemfile +2 -2
- data/{assets/css → app/assets/images}/blank.gif +0 -0
- data/{assets/css → app/assets/images}/fancybox_loading.gif +0 -0
- data/{assets/css → app/assets/images}/fancybox_loading@2x.gif +0 -0
- data/{assets/css → app/assets/images}/fancybox_overlay.png +0 -0
- data/{assets/css → app/assets/images}/fancybox_sprite.png +0 -0
- data/{assets/css → app/assets/images}/fancybox_sprite@2x.png +0 -0
- data/{assets/js → app/assets/javascripts/plugins}/jquery-1.10.1.min.js +0 -0
- data/{assets/js → app/assets/javascripts/plugins}/jquery.fancybox.js +0 -0
- data/app/assets/javascripts/ready.js +14 -0
- data/app/assets/stylesheets/_gallerize.scss +144 -0
- data/app/assets/stylesheets/_jquery.fancybox.scss +273 -0
- data/app/assets/stylesheets/styles.scss +2 -0
- data/app/config/gallerize_cli.yml +28 -0
- data/app/templates/layout.html.haml +37 -0
- data/bin/{gallerize → gallerize_cli} +5 -2
- data/gallerize-cli.gemspec +15 -15
- data/lib/gallerize_cli/directory.rb +113 -0
- data/lib/gallerize_cli/image/version.rb +99 -0
- data/lib/gallerize_cli/image.rb +87 -0
- data/lib/gallerize_cli/render.rb +70 -0
- data/lib/gallerize_cli.rb +42 -0
- data/readme.md +35 -0
- metadata +35 -34
- data/Gemfile.lock +0 -37
- data/README.md +0 -50
- data/assets/css/jquery.fancybox.css +0 -274
- data/assets/css/styles.css +0 -76
- data/assets/js/imagesloaded.js +0 -7
- data/assets/js/jquery.masonry.js +0 -9
- data/config/global.yml.example +0 -10
- data/lib/gallerize/output_dir.rb +0 -44
- data/lib/gallerize/source_dir.rb +0 -17
- data/lib/gallerize.rb +0 -210
- data/templates/layout.html.erb +0 -59
data/assets/css/styles.css
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
body{
|
2
|
-
font-family: arial;
|
3
|
-
}
|
4
|
-
.images{
|
5
|
-
overflow: hidden;
|
6
|
-
display:none;
|
7
|
-
}
|
8
|
-
.inner-image{
|
9
|
-
margin: 5px;
|
10
|
-
overflow:hidden;
|
11
|
-
background-color: #f2f2f2;
|
12
|
-
}
|
13
|
-
.image img{
|
14
|
-
width: 100%;
|
15
|
-
}
|
16
|
-
.navigation{
|
17
|
-
overflow: auto;
|
18
|
-
margin-top: 5px;
|
19
|
-
margin-bottom: 10px;
|
20
|
-
margin-left: 5px;
|
21
|
-
}
|
22
|
-
.navigation .active,
|
23
|
-
.navigation a:hover{
|
24
|
-
background-color: #901414;
|
25
|
-
color: #fff;
|
26
|
-
}
|
27
|
-
.navigation a{
|
28
|
-
float: left;
|
29
|
-
display: inline-block;
|
30
|
-
text-decoration: none;
|
31
|
-
padding: 7px 10px 5px;
|
32
|
-
|
33
|
-
background: #ddd;
|
34
|
-
margin-right: 2px;
|
35
|
-
margin-bottom: 2px;
|
36
|
-
|
37
|
-
color: #901414;
|
38
|
-
font-weight: bold;
|
39
|
-
}
|
40
|
-
.page-title{
|
41
|
-
margin: 20px 5px 5px 5px;
|
42
|
-
color: #901414;
|
43
|
-
}
|
44
|
-
|
45
|
-
@media (min-width: 0px) and (max-width: 500px) {
|
46
|
-
.image{
|
47
|
-
width: 100%;
|
48
|
-
}
|
49
|
-
}
|
50
|
-
@media (min-width: 501px) and (max-width: 1000px) {
|
51
|
-
.image{
|
52
|
-
width: 50%;
|
53
|
-
}
|
54
|
-
}
|
55
|
-
@media (min-width: 1001px) and (max-width: 1600px) {
|
56
|
-
.image{
|
57
|
-
width: 25%;
|
58
|
-
}
|
59
|
-
}
|
60
|
-
@media (min-width: 1601px) and (max-width: 2000px) {
|
61
|
-
.image{
|
62
|
-
width: 20%;
|
63
|
-
}
|
64
|
-
}
|
65
|
-
|
66
|
-
@media (min-width: 2001px) and (max-width: 2800px) {
|
67
|
-
.image{
|
68
|
-
width: 15%;
|
69
|
-
}
|
70
|
-
}
|
71
|
-
|
72
|
-
@media (min-width: 2801px) {
|
73
|
-
.image{
|
74
|
-
width: 10%;
|
75
|
-
}
|
76
|
-
}
|
data/assets/js/imagesloaded.js
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* imagesLoaded PACKAGED v3.1.8
|
3
|
-
* JavaScript is all like "You images are done yet or what?"
|
4
|
-
* MIT License
|
5
|
-
*/
|
6
|
-
|
7
|
-
(function(){function e(){}function t(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var i=e.prototype,r=this,o=r.EventEmitter;i.getListeners=function(e){var t,n,i=this._getEvents();if("object"==typeof e){t={};for(n in i)i.hasOwnProperty(n)&&e.test(n)&&(t[n]=i[n])}else t=i[e]||(i[e]=[]);return t},i.flattenListeners=function(e){var t,n=[];for(t=0;e.length>t;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,r=this.getListenersAsObject(e),o="object"==typeof n;for(i in r)r.hasOwnProperty(i)&&-1===t(r[i],n)&&r[i].push(o?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&(i=t(o[r],n),-1!==i&&o[r].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,r,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)o.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(r=t[i])&&("function"==typeof r?o.call(this,i,r):s.call(this,i,r));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,r,o,s=this.getListenersAsObject(e);for(r in s)if(s.hasOwnProperty(r))for(i=s[r].length;i--;)n=s[r][i],n.once===!0&&this.removeListener(e,n.listener),o=n.listener.apply(this,t||[]),o===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return r.EventEmitter=o,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}).call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,i=function(){};n.addEventListener?i=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(i=function(e,n,i){e[n+i]=i.handleEvent?function(){var n=t(e);i.handleEvent.call(i,n)}:function(){var n=t(e);i.call(e,n)},e.attachEvent("on"+n,e[n+i])});var r=function(){};n.removeEventListener?r=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(r=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var o={bind:i,unbind:r};"function"==typeof define&&define.amd?define("eventie/eventie",o):e.eventie=o}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,i){return t(e,n,i)}):"object"==typeof exports?module.exports=t(e,require("wolfy87-eventemitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(window,function(e,t,n){function i(e,t){for(var n in t)e[n]=t[n];return e}function r(e){return"[object Array]"===d.call(e)}function o(e){var t=[];if(r(e))t=e;else if("number"==typeof e.length)for(var n=0,i=e.length;i>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=o(e),this.options=i({},this.options),"function"==typeof t?n=t:i(this.options,t),n&&this.on("always",n),this.getImages(),a&&(this.jqDeferred=new a.Deferred);var r=this;setTimeout(function(){r.check()})}function f(e){this.img=e}function c(e){this.src=e,v[e]=this}var a=e.jQuery,u=e.console,h=u!==void 0,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);var i=n.nodeType;if(i&&(1===i||9===i||11===i))for(var r=n.querySelectorAll("img"),o=0,s=r.length;s>o;o++){var f=r[o];this.addImage(f)}}},s.prototype.addImage=function(e){var t=new f(e);this.images.push(t)},s.prototype.check=function(){function e(e,r){return t.options.debug&&h&&u.log("confirm",e,r),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return this.complete(),void 0;for(var r=0;i>r;r++){var o=this.images[r];o.on("confirm",e),o.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},a&&(a.fn.imagesLoaded=function(e,t){var n=new s(this,e,t);return n.jqDeferred.promise(a(this))}),f.prototype=new t,f.prototype.check=function(){var e=v[this.img.src]||new c(this.img.src);if(e.isConfirmed)return this.confirm(e.isLoaded,"cached was confirmed"),void 0;if(this.img.complete&&void 0!==this.img.naturalWidth)return this.confirm(0!==this.img.naturalWidth,"naturalWidth"),void 0;var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},f.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var v={};return c.prototype=new t,c.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},c.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},c.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},c.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},c.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},c.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s});
|
data/assets/js/jquery.masonry.js
DELETED
@@ -1,9 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* Masonry PACKAGED v3.1.5
|
3
|
-
* Cascading grid layout library
|
4
|
-
* http://masonry.desandro.com
|
5
|
-
* MIT License
|
6
|
-
* by David DeSandro
|
7
|
-
*/
|
8
|
-
|
9
|
-
!function(a){function b(){}function c(a){function c(b){b.prototype.option||(b.prototype.option=function(b){a.isPlainObject(b)&&(this.options=a.extend(!0,this.options,b))})}function e(b,c){a.fn[b]=function(e){if("string"==typeof e){for(var g=d.call(arguments,1),h=0,i=this.length;i>h;h++){var j=this[h],k=a.data(j,b);if(k)if(a.isFunction(k[e])&&"_"!==e.charAt(0)){var l=k[e].apply(k,g);if(void 0!==l)return l}else f("no such method '"+e+"' for "+b+" instance");else f("cannot call methods on "+b+" prior to initialization; attempted to call '"+e+"'")}return this}return this.each(function(){var d=a.data(this,b);d?(d.option(e),d._init()):(d=new c(this,e),a.data(this,b,d))})}}if(a){var f="undefined"==typeof console?b:function(a){console.error(a)};return a.bridget=function(a,b){c(b),e(a,b)},a.bridget}}var d=Array.prototype.slice;"function"==typeof define&&define.amd?define("jquery-bridget/jquery.bridget",["jquery"],c):c(a.jQuery)}(window),function(a){function b(b){var c=a.event;return c.target=c.target||c.srcElement||b,c}var c=document.documentElement,d=function(){};c.addEventListener?d=function(a,b,c){a.addEventListener(b,c,!1)}:c.attachEvent&&(d=function(a,c,d){a[c+d]=d.handleEvent?function(){var c=b(a);d.handleEvent.call(d,c)}:function(){var c=b(a);d.call(a,c)},a.attachEvent("on"+c,a[c+d])});var e=function(){};c.removeEventListener?e=function(a,b,c){a.removeEventListener(b,c,!1)}:c.detachEvent&&(e=function(a,b,c){a.detachEvent("on"+b,a[b+c]);try{delete a[b+c]}catch(d){a[b+c]=void 0}});var f={bind:d,unbind:e};"function"==typeof define&&define.amd?define("eventie/eventie",f):"object"==typeof exports?module.exports=f:a.eventie=f}(this),function(a){function b(a){"function"==typeof a&&(b.isReady?a():f.push(a))}function c(a){var c="readystatechange"===a.type&&"complete"!==e.readyState;if(!b.isReady&&!c){b.isReady=!0;for(var d=0,g=f.length;g>d;d++){var h=f[d];h()}}}function d(d){return d.bind(e,"DOMContentLoaded",c),d.bind(e,"readystatechange",c),d.bind(a,"load",c),b}var e=a.document,f=[];b.isReady=!1,"function"==typeof define&&define.amd?(b.isReady="function"==typeof requirejs,define("doc-ready/doc-ready",["eventie/eventie"],d)):a.docReady=d(a.eventie)}(this),function(){function a(){}function b(a,b){for(var c=a.length;c--;)if(a[c].listener===b)return c;return-1}function c(a){return function(){return this[a].apply(this,arguments)}}var d=a.prototype,e=this,f=e.EventEmitter;d.getListeners=function(a){var b,c,d=this._getEvents();if(a instanceof RegExp){b={};for(c in d)d.hasOwnProperty(c)&&a.test(c)&&(b[c]=d[c])}else b=d[a]||(d[a]=[]);return b},d.flattenListeners=function(a){var b,c=[];for(b=0;b<a.length;b+=1)c.push(a[b].listener);return c},d.getListenersAsObject=function(a){var b,c=this.getListeners(a);return c instanceof Array&&(b={},b[a]=c),b||c},d.addListener=function(a,c){var d,e=this.getListenersAsObject(a),f="object"==typeof c;for(d in e)e.hasOwnProperty(d)&&-1===b(e[d],c)&&e[d].push(f?c:{listener:c,once:!1});return this},d.on=c("addListener"),d.addOnceListener=function(a,b){return this.addListener(a,{listener:b,once:!0})},d.once=c("addOnceListener"),d.defineEvent=function(a){return this.getListeners(a),this},d.defineEvents=function(a){for(var b=0;b<a.length;b+=1)this.defineEvent(a[b]);return this},d.removeListener=function(a,c){var d,e,f=this.getListenersAsObject(a);for(e in f)f.hasOwnProperty(e)&&(d=b(f[e],c),-1!==d&&f[e].splice(d,1));return this},d.off=c("removeListener"),d.addListeners=function(a,b){return this.manipulateListeners(!1,a,b)},d.removeListeners=function(a,b){return this.manipulateListeners(!0,a,b)},d.manipulateListeners=function(a,b,c){var d,e,f=a?this.removeListener:this.addListener,g=a?this.removeListeners:this.addListeners;if("object"!=typeof b||b instanceof RegExp)for(d=c.length;d--;)f.call(this,b,c[d]);else for(d in b)b.hasOwnProperty(d)&&(e=b[d])&&("function"==typeof e?f.call(this,d,e):g.call(this,d,e));return this},d.removeEvent=function(a){var b,c=typeof a,d=this._getEvents();if("string"===c)delete d[a];else if(a instanceof RegExp)for(b in d)d.hasOwnProperty(b)&&a.test(b)&&delete d[b];else delete this._events;return this},d.removeAllListeners=c("removeEvent"),d.emitEvent=function(a,b){var c,d,e,f,g=this.getListenersAsObject(a);for(e in g)if(g.hasOwnProperty(e))for(d=g[e].length;d--;)c=g[e][d],c.once===!0&&this.removeListener(a,c.listener),f=c.listener.apply(this,b||[]),f===this._getOnceReturnValue()&&this.removeListener(a,c.listener);return this},d.trigger=c("emitEvent"),d.emit=function(a){var b=Array.prototype.slice.call(arguments,1);return this.emitEvent(a,b)},d.setOnceReturnValue=function(a){return this._onceReturnValue=a,this},d._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},d._getEvents=function(){return this._events||(this._events={})},a.noConflict=function(){return e.EventEmitter=f,a},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return a}):"object"==typeof module&&module.exports?module.exports=a:this.EventEmitter=a}.call(this),function(a){function b(a){if(a){if("string"==typeof d[a])return a;a=a.charAt(0).toUpperCase()+a.slice(1);for(var b,e=0,f=c.length;f>e;e++)if(b=c[e]+a,"string"==typeof d[b])return b}}var c="Webkit Moz ms Ms O".split(" "),d=document.documentElement.style;"function"==typeof define&&define.amd?define("get-style-property/get-style-property",[],function(){return b}):"object"==typeof exports?module.exports=b:a.getStyleProperty=b}(window),function(a){function b(a){var b=parseFloat(a),c=-1===a.indexOf("%")&&!isNaN(b);return c&&b}function c(){for(var a={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},b=0,c=g.length;c>b;b++){var d=g[b];a[d]=0}return a}function d(a){function d(a){if("string"==typeof a&&(a=document.querySelector(a)),a&&"object"==typeof a&&a.nodeType){var d=f(a);if("none"===d.display)return c();var e={};e.width=a.offsetWidth,e.height=a.offsetHeight;for(var k=e.isBorderBox=!(!j||!d[j]||"border-box"!==d[j]),l=0,m=g.length;m>l;l++){var n=g[l],o=d[n];o=h(a,o);var p=parseFloat(o);e[n]=isNaN(p)?0:p}var q=e.paddingLeft+e.paddingRight,r=e.paddingTop+e.paddingBottom,s=e.marginLeft+e.marginRight,t=e.marginTop+e.marginBottom,u=e.borderLeftWidth+e.borderRightWidth,v=e.borderTopWidth+e.borderBottomWidth,w=k&&i,x=b(d.width);x!==!1&&(e.width=x+(w?0:q+u));var y=b(d.height);return y!==!1&&(e.height=y+(w?0:r+v)),e.innerWidth=e.width-(q+u),e.innerHeight=e.height-(r+v),e.outerWidth=e.width+s,e.outerHeight=e.height+t,e}}function h(a,b){if(e||-1===b.indexOf("%"))return b;var c=a.style,d=c.left,f=a.runtimeStyle,g=f&&f.left;return g&&(f.left=a.currentStyle.left),c.left=b,b=c.pixelLeft,c.left=d,g&&(f.left=g),b}var i,j=a("boxSizing");return function(){if(j){var a=document.createElement("div");a.style.width="200px",a.style.padding="1px 2px 3px 4px",a.style.borderStyle="solid",a.style.borderWidth="1px 2px 3px 4px",a.style[j]="border-box";var c=document.body||document.documentElement;c.appendChild(a);var d=f(a);i=200===b(d.width),c.removeChild(a)}}(),d}var e=a.getComputedStyle,f=e?function(a){return e(a,null)}:function(a){return a.currentStyle},g=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"];"function"==typeof define&&define.amd?define("get-size/get-size",["get-style-property/get-style-property"],d):"object"==typeof exports?module.exports=d(require("get-style-property")):a.getSize=d(a.getStyleProperty)}(window),function(a,b){function c(a,b){return a[h](b)}function d(a){if(!a.parentNode){var b=document.createDocumentFragment();b.appendChild(a)}}function e(a,b){d(a);for(var c=a.parentNode.querySelectorAll(b),e=0,f=c.length;f>e;e++)if(c[e]===a)return!0;return!1}function f(a,b){return d(a),c(a,b)}var g,h=function(){if(b.matchesSelector)return"matchesSelector";for(var a=["webkit","moz","ms","o"],c=0,d=a.length;d>c;c++){var e=a[c],f=e+"MatchesSelector";if(b[f])return f}}();if(h){var i=document.createElement("div"),j=c(i,"div");g=j?c:f}else g=e;"function"==typeof define&&define.amd?define("matches-selector/matches-selector",[],function(){return g}):window.matchesSelector=g}(this,Element.prototype),function(a){function b(a,b){for(var c in b)a[c]=b[c];return a}function c(a){for(var b in a)return!1;return b=null,!0}function d(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}function e(a,e,f){function h(a,b){a&&(this.element=a,this.layout=b,this.position={x:0,y:0},this._create())}var i=f("transition"),j=f("transform"),k=i&&j,l=!!f("perspective"),m={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"otransitionend",transition:"transitionend"}[i],n=["transform","transition","transitionDuration","transitionProperty"],o=function(){for(var a={},b=0,c=n.length;c>b;b++){var d=n[b],e=f(d);e&&e!==d&&(a[d]=e)}return a}();b(h.prototype,a.prototype),h.prototype._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},h.prototype.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},h.prototype.getSize=function(){this.size=e(this.element)},h.prototype.css=function(a){var b=this.element.style;for(var c in a){var d=o[c]||c;b[d]=a[c]}},h.prototype.getPosition=function(){var a=g(this.element),b=this.layout.options,c=b.isOriginLeft,d=b.isOriginTop,e=parseInt(a[c?"left":"right"],10),f=parseInt(a[d?"top":"bottom"],10);e=isNaN(e)?0:e,f=isNaN(f)?0:f;var h=this.layout.size;e-=c?h.paddingLeft:h.paddingRight,f-=d?h.paddingTop:h.paddingBottom,this.position.x=e,this.position.y=f},h.prototype.layoutPosition=function(){var a=this.layout.size,b=this.layout.options,c={};b.isOriginLeft?(c.left=this.position.x+a.paddingLeft+"px",c.right=""):(c.right=this.position.x+a.paddingRight+"px",c.left=""),b.isOriginTop?(c.top=this.position.y+a.paddingTop+"px",c.bottom=""):(c.bottom=this.position.y+a.paddingBottom+"px",c.top=""),this.css(c),this.emitEvent("layout",[this])};var p=l?function(a,b){return"translate3d("+a+"px, "+b+"px, 0)"}:function(a,b){return"translate("+a+"px, "+b+"px)"};h.prototype._transitionTo=function(a,b){this.getPosition();var c=this.position.x,d=this.position.y,e=parseInt(a,10),f=parseInt(b,10),g=e===this.position.x&&f===this.position.y;if(this.setPosition(a,b),g&&!this.isTransitioning)return void this.layoutPosition();var h=a-c,i=b-d,j={},k=this.layout.options;h=k.isOriginLeft?h:-h,i=k.isOriginTop?i:-i,j.transform=p(h,i),this.transition({to:j,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},h.prototype.goTo=function(a,b){this.setPosition(a,b),this.layoutPosition()},h.prototype.moveTo=k?h.prototype._transitionTo:h.prototype.goTo,h.prototype.setPosition=function(a,b){this.position.x=parseInt(a,10),this.position.y=parseInt(b,10)},h.prototype._nonTransition=function(a){this.css(a.to),a.isCleaning&&this._removeStyles(a.to);for(var b in a.onTransitionEnd)a.onTransitionEnd[b].call(this)},h.prototype._transition=function(a){if(!parseFloat(this.layout.options.transitionDuration))return void this._nonTransition(a);var b=this._transn;for(var c in a.onTransitionEnd)b.onEnd[c]=a.onTransitionEnd[c];for(c in a.to)b.ingProperties[c]=!0,a.isCleaning&&(b.clean[c]=!0);if(a.from){this.css(a.from);var d=this.element.offsetHeight;d=null}this.enableTransition(a.to),this.css(a.to),this.isTransitioning=!0};var q=j&&d(j)+",opacity";h.prototype.enableTransition=function(){this.isTransitioning||(this.css({transitionProperty:q,transitionDuration:this.layout.options.transitionDuration}),this.element.addEventListener(m,this,!1))},h.prototype.transition=h.prototype[i?"_transition":"_nonTransition"],h.prototype.onwebkitTransitionEnd=function(a){this.ontransitionend(a)},h.prototype.onotransitionend=function(a){this.ontransitionend(a)};var r={"-webkit-transform":"transform","-moz-transform":"transform","-o-transform":"transform"};h.prototype.ontransitionend=function(a){if(a.target===this.element){var b=this._transn,d=r[a.propertyName]||a.propertyName;if(delete b.ingProperties[d],c(b.ingProperties)&&this.disableTransition(),d in b.clean&&(this.element.style[a.propertyName]="",delete b.clean[d]),d in b.onEnd){var e=b.onEnd[d];e.call(this),delete b.onEnd[d]}this.emitEvent("transitionEnd",[this])}},h.prototype.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(m,this,!1),this.isTransitioning=!1},h.prototype._removeStyles=function(a){var b={};for(var c in a)b[c]="";this.css(b)};var s={transitionProperty:"",transitionDuration:""};return h.prototype.removeTransitionStyles=function(){this.css(s)},h.prototype.removeElem=function(){this.element.parentNode.removeChild(this.element),this.emitEvent("remove",[this])},h.prototype.remove=function(){if(!i||!parseFloat(this.layout.options.transitionDuration))return void this.removeElem();var a=this;this.on("transitionEnd",function(){return a.removeElem(),!0}),this.hide()},h.prototype.reveal=function(){delete this.isHidden,this.css({display:""});var a=this.layout.options;this.transition({from:a.hiddenStyle,to:a.visibleStyle,isCleaning:!0})},h.prototype.hide=function(){this.isHidden=!0,this.css({display:""});var a=this.layout.options;this.transition({from:a.visibleStyle,to:a.hiddenStyle,isCleaning:!0,onTransitionEnd:{opacity:function(){this.isHidden&&this.css({display:"none"})}}})},h.prototype.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},h}var f=a.getComputedStyle,g=f?function(a){return f(a,null)}:function(a){return a.currentStyle};"function"==typeof define&&define.amd?define("outlayer/item",["eventEmitter/EventEmitter","get-size/get-size","get-style-property/get-style-property"],e):(a.Outlayer={},a.Outlayer.Item=e(a.EventEmitter,a.getSize,a.getStyleProperty))}(window),function(a){function b(a,b){for(var c in b)a[c]=b[c];return a}function c(a){return"[object Array]"===l.call(a)}function d(a){var b=[];if(c(a))b=a;else if(a&&"number"==typeof a.length)for(var d=0,e=a.length;e>d;d++)b.push(a[d]);else b.push(a);return b}function e(a,b){var c=n(b,a);-1!==c&&b.splice(c,1)}function f(a){return a.replace(/(.)([A-Z])/g,function(a,b,c){return b+"-"+c}).toLowerCase()}function g(c,g,l,n,o,p){function q(a,c){if("string"==typeof a&&(a=h.querySelector(a)),!a||!m(a))return void(i&&i.error("Bad "+this.constructor.namespace+" element: "+a));this.element=a,this.options=b({},this.constructor.defaults),this.option(c);var d=++r;this.element.outlayerGUID=d,s[d]=this,this._create(),this.options.isInitLayout&&this.layout()}var r=0,s={};return q.namespace="outlayer",q.Item=p,q.defaults={containerStyle:{position:"relative"},isInitLayout:!0,isOriginLeft:!0,isOriginTop:!0,isResizeBound:!0,isResizingContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}},b(q.prototype,l.prototype),q.prototype.option=function(a){b(this.options,a)},q.prototype._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),b(this.element.style,this.options.containerStyle),this.options.isResizeBound&&this.bindResize()},q.prototype.reloadItems=function(){this.items=this._itemize(this.element.children)},q.prototype._itemize=function(a){for(var b=this._filterFindItemElements(a),c=this.constructor.Item,d=[],e=0,f=b.length;f>e;e++){var g=b[e],h=new c(g,this);d.push(h)}return d},q.prototype._filterFindItemElements=function(a){a=d(a);for(var b=this.options.itemSelector,c=[],e=0,f=a.length;f>e;e++){var g=a[e];if(m(g))if(b){o(g,b)&&c.push(g);for(var h=g.querySelectorAll(b),i=0,j=h.length;j>i;i++)c.push(h[i])}else c.push(g)}return c},q.prototype.getItemElements=function(){for(var a=[],b=0,c=this.items.length;c>b;b++)a.push(this.items[b].element);return a},q.prototype.layout=function(){this._resetLayout(),this._manageStamps();var a=void 0!==this.options.isLayoutInstant?this.options.isLayoutInstant:!this._isLayoutInited;this.layoutItems(this.items,a),this._isLayoutInited=!0},q.prototype._init=q.prototype.layout,q.prototype._resetLayout=function(){this.getSize()},q.prototype.getSize=function(){this.size=n(this.element)},q.prototype._getMeasurement=function(a,b){var c,d=this.options[a];d?("string"==typeof d?c=this.element.querySelector(d):m(d)&&(c=d),this[a]=c?n(c)[b]:d):this[a]=0},q.prototype.layoutItems=function(a,b){a=this._getItemsForLayout(a),this._layoutItems(a,b),this._postLayout()},q.prototype._getItemsForLayout=function(a){for(var b=[],c=0,d=a.length;d>c;c++){var e=a[c];e.isIgnored||b.push(e)}return b},q.prototype._layoutItems=function(a,b){function c(){d.emitEvent("layoutComplete",[d,a])}var d=this;if(!a||!a.length)return void c();this._itemsOn(a,"layout",c);for(var e=[],f=0,g=a.length;g>f;f++){var h=a[f],i=this._getItemLayoutPosition(h);i.item=h,i.isInstant=b||h.isLayoutInstant,e.push(i)}this._processLayoutQueue(e)},q.prototype._getItemLayoutPosition=function(){return{x:0,y:0}},q.prototype._processLayoutQueue=function(a){for(var b=0,c=a.length;c>b;b++){var d=a[b];this._positionItem(d.item,d.x,d.y,d.isInstant)}},q.prototype._positionItem=function(a,b,c,d){d?a.goTo(b,c):a.moveTo(b,c)},q.prototype._postLayout=function(){this.resizeContainer()},q.prototype.resizeContainer=function(){if(this.options.isResizingContainer){var a=this._getContainerSize();a&&(this._setContainerMeasure(a.width,!0),this._setContainerMeasure(a.height,!1))}},q.prototype._getContainerSize=k,q.prototype._setContainerMeasure=function(a,b){if(void 0!==a){var c=this.size;c.isBorderBox&&(a+=b?c.paddingLeft+c.paddingRight+c.borderLeftWidth+c.borderRightWidth:c.paddingBottom+c.paddingTop+c.borderTopWidth+c.borderBottomWidth),a=Math.max(a,0),this.element.style[b?"width":"height"]=a+"px"}},q.prototype._itemsOn=function(a,b,c){function d(){return e++,e===f&&c.call(g),!0}for(var e=0,f=a.length,g=this,h=0,i=a.length;i>h;h++){var j=a[h];j.on(b,d)}},q.prototype.ignore=function(a){var b=this.getItem(a);b&&(b.isIgnored=!0)},q.prototype.unignore=function(a){var b=this.getItem(a);b&&delete b.isIgnored},q.prototype.stamp=function(a){if(a=this._find(a)){this.stamps=this.stamps.concat(a);for(var b=0,c=a.length;c>b;b++){var d=a[b];this.ignore(d)}}},q.prototype.unstamp=function(a){if(a=this._find(a))for(var b=0,c=a.length;c>b;b++){var d=a[b];e(d,this.stamps),this.unignore(d)}},q.prototype._find=function(a){return a?("string"==typeof a&&(a=this.element.querySelectorAll(a)),a=d(a)):void 0},q.prototype._manageStamps=function(){if(this.stamps&&this.stamps.length){this._getBoundingRect();for(var a=0,b=this.stamps.length;b>a;a++){var c=this.stamps[a];this._manageStamp(c)}}},q.prototype._getBoundingRect=function(){var a=this.element.getBoundingClientRect(),b=this.size;this._boundingRect={left:a.left+b.paddingLeft+b.borderLeftWidth,top:a.top+b.paddingTop+b.borderTopWidth,right:a.right-(b.paddingRight+b.borderRightWidth),bottom:a.bottom-(b.paddingBottom+b.borderBottomWidth)}},q.prototype._manageStamp=k,q.prototype._getElementOffset=function(a){var b=a.getBoundingClientRect(),c=this._boundingRect,d=n(a),e={left:b.left-c.left-d.marginLeft,top:b.top-c.top-d.marginTop,right:c.right-b.right-d.marginRight,bottom:c.bottom-b.bottom-d.marginBottom};return e},q.prototype.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},q.prototype.bindResize=function(){this.isResizeBound||(c.bind(a,"resize",this),this.isResizeBound=!0)},q.prototype.unbindResize=function(){this.isResizeBound&&c.unbind(a,"resize",this),this.isResizeBound=!1},q.prototype.onresize=function(){function a(){b.resize(),delete b.resizeTimeout}this.resizeTimeout&&clearTimeout(this.resizeTimeout);var b=this;this.resizeTimeout=setTimeout(a,100)},q.prototype.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},q.prototype.needsResizeLayout=function(){var a=n(this.element),b=this.size&&a;return b&&a.innerWidth!==this.size.innerWidth},q.prototype.addItems=function(a){var b=this._itemize(a);return b.length&&(this.items=this.items.concat(b)),b},q.prototype.appended=function(a){var b=this.addItems(a);b.length&&(this.layoutItems(b,!0),this.reveal(b))},q.prototype.prepended=function(a){var b=this._itemize(a);if(b.length){var c=this.items.slice(0);this.items=b.concat(c),this._resetLayout(),this._manageStamps(),this.layoutItems(b,!0),this.reveal(b),this.layoutItems(c)}},q.prototype.reveal=function(a){var b=a&&a.length;if(b)for(var c=0;b>c;c++){var d=a[c];d.reveal()}},q.prototype.hide=function(a){var b=a&&a.length;if(b)for(var c=0;b>c;c++){var d=a[c];d.hide()}},q.prototype.getItem=function(a){for(var b=0,c=this.items.length;c>b;b++){var d=this.items[b];if(d.element===a)return d}},q.prototype.getItems=function(a){if(a&&a.length){for(var b=[],c=0,d=a.length;d>c;c++){var e=a[c],f=this.getItem(e);f&&b.push(f)}return b}},q.prototype.remove=function(a){a=d(a);var b=this.getItems(a);if(b&&b.length){this._itemsOn(b,"remove",function(){this.emitEvent("removeComplete",[this,b])});for(var c=0,f=b.length;f>c;c++){var g=b[c];g.remove(),e(g,this.items)}}},q.prototype.destroy=function(){var a=this.element.style;a.height="",a.position="",a.width="";for(var b=0,c=this.items.length;c>b;b++){var d=this.items[b];d.destroy()}this.unbindResize(),delete this.element.outlayerGUID,j&&j.removeData(this.element,this.constructor.namespace)},q.data=function(a){var b=a&&a.outlayerGUID;return b&&s[b]},q.create=function(a,c){function d(){q.apply(this,arguments)}return Object.create?d.prototype=Object.create(q.prototype):b(d.prototype,q.prototype),d.prototype.constructor=d,d.defaults=b({},q.defaults),b(d.defaults,c),d.prototype.settings={},d.namespace=a,d.data=q.data,d.Item=function(){p.apply(this,arguments)},d.Item.prototype=new p,g(function(){for(var b=f(a),c=h.querySelectorAll(".js-"+b),e="data-"+b+"-options",g=0,k=c.length;k>g;g++){var l,m=c[g],n=m.getAttribute(e);try{l=n&&JSON.parse(n)}catch(o){i&&i.error("Error parsing "+e+" on "+m.nodeName.toLowerCase()+(m.id?"#"+m.id:"")+": "+o);continue}var p=new d(m,l);j&&j.data(m,a,p)}}),j&&j.bridget&&j.bridget(a,d),d},q.Item=p,q}var h=a.document,i=a.console,j=a.jQuery,k=function(){},l=Object.prototype.toString,m="object"==typeof HTMLElement?function(a){return a instanceof HTMLElement}:function(a){return a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName},n=Array.prototype.indexOf?function(a,b){return a.indexOf(b)}:function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1};"function"==typeof define&&define.amd?define("outlayer/outlayer",["eventie/eventie","doc-ready/doc-ready","eventEmitter/EventEmitter","get-size/get-size","matches-selector/matches-selector","./item"],g):a.Outlayer=g(a.eventie,a.docReady,a.EventEmitter,a.getSize,a.matchesSelector,a.Outlayer.Item)}(window),function(a){function b(a,b){var d=a.create("masonry");return d.prototype._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns();var a=this.cols;for(this.colYs=[];a--;)this.colYs.push(0);this.maxY=0},d.prototype.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var a=this.items[0],c=a&&a.element;this.columnWidth=c&&b(c).outerWidth||this.containerWidth}this.columnWidth+=this.gutter,this.cols=Math.floor((this.containerWidth+this.gutter)/this.columnWidth),this.cols=Math.max(this.cols,1)},d.prototype.getContainerWidth=function(){var a=this.options.isFitWidth?this.element.parentNode:this.element,c=b(a);this.containerWidth=c&&c.innerWidth},d.prototype._getItemLayoutPosition=function(a){a.getSize();var b=a.size.outerWidth%this.columnWidth,d=b&&1>b?"round":"ceil",e=Math[d](a.size.outerWidth/this.columnWidth);e=Math.min(e,this.cols);for(var f=this._getColGroup(e),g=Math.min.apply(Math,f),h=c(f,g),i={x:this.columnWidth*h,y:g},j=g+a.size.outerHeight,k=this.cols+1-f.length,l=0;k>l;l++)this.colYs[h+l]=j;return i},d.prototype._getColGroup=function(a){if(2>a)return this.colYs;for(var b=[],c=this.cols+1-a,d=0;c>d;d++){var e=this.colYs.slice(d,d+a);b[d]=Math.max.apply(Math,e)}return b},d.prototype._manageStamp=function(a){var c=b(a),d=this._getElementOffset(a),e=this.options.isOriginLeft?d.left:d.right,f=e+c.outerWidth,g=Math.floor(e/this.columnWidth);g=Math.max(0,g);var h=Math.floor(f/this.columnWidth);h-=f%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var i=(this.options.isOriginTop?d.top:d.bottom)+c.outerHeight,j=g;h>=j;j++)this.colYs[j]=Math.max(i,this.colYs[j])},d.prototype._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var a={height:this.maxY};return this.options.isFitWidth&&(a.width=this._getContainerFitWidth()),a},d.prototype._getContainerFitWidth=function(){for(var a=0,b=this.cols;--b&&0===this.colYs[b];)a++;return(this.cols-a)*this.columnWidth-this.gutter},d.prototype.needsResizeLayout=function(){var a=this.containerWidth;return this.getContainerWidth(),a!==this.containerWidth},d}var c=Array.prototype.indexOf?function(a,b){return a.indexOf(b)}:function(a,b){for(var c=0,d=a.length;d>c;c++){var e=a[c];if(e===b)return c}return-1};"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size"],b):a.Masonry=b(a.Outlayer,a.getSize)}(window);
|
data/config/global.yml.example
DELETED
data/lib/gallerize/output_dir.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
class Gallerize
|
2
|
-
class OutputDir
|
3
|
-
|
4
|
-
attr_accessor :root
|
5
|
-
|
6
|
-
def initialize(path)
|
7
|
-
self.root = path
|
8
|
-
end
|
9
|
-
|
10
|
-
def root=(value)
|
11
|
-
@root = File.join( File.expand_path('.'), (value || 'gallerize') )
|
12
|
-
end
|
13
|
-
|
14
|
-
def relative_root
|
15
|
-
@relative_root ||= root.gsub(File.expand_path('.').to_s + "/", './')
|
16
|
-
end
|
17
|
-
|
18
|
-
def html_file(name)
|
19
|
-
name = name.to_s
|
20
|
-
name = "#{name}.html" unless name =~ /\.html/
|
21
|
-
File.join(root, name)
|
22
|
-
end
|
23
|
-
|
24
|
-
def images
|
25
|
-
File.join( root, 'images' )
|
26
|
-
end
|
27
|
-
|
28
|
-
def html_files
|
29
|
-
File.join( root, '*.html')
|
30
|
-
end
|
31
|
-
|
32
|
-
def copy_from_gem_source(*folders)
|
33
|
-
folders.each do |folder|
|
34
|
-
outdir = File.join( root, folder )
|
35
|
-
unless Dir.exists?(outdir)
|
36
|
-
puts "copy ./#{folder} #{outdir}"
|
37
|
-
FileUtils.mkdir_p( File.expand_path(File.join(outdir, '..')) )
|
38
|
-
FileUtils.cp_r( File.join( ROOT, folder ), outdir )
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
data/lib/gallerize/source_dir.rb
DELETED
data/lib/gallerize.rb
DELETED
@@ -1,210 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
require 'ostruct'
|
3
|
-
require 'active_support/all'
|
4
|
-
require 'parallel'
|
5
|
-
require 'mini_magick'
|
6
|
-
require 'pry'
|
7
|
-
require 'fileutils'
|
8
|
-
require 'exifr'
|
9
|
-
require 'erb'
|
10
|
-
|
11
|
-
require 'gallerize/output_dir'
|
12
|
-
require 'gallerize/source_dir'
|
13
|
-
|
14
|
-
ROOT = File.expand_path( File.join(__FILE__, '../../') )
|
15
|
-
|
16
|
-
class Gallerize
|
17
|
-
|
18
|
-
attr_accessor :image_paths
|
19
|
-
|
20
|
-
VERSION='0.2.2'
|
21
|
-
|
22
|
-
def self.generate
|
23
|
-
new.perform
|
24
|
-
end
|
25
|
-
|
26
|
-
def perform
|
27
|
-
if image_paths.blank?
|
28
|
-
puts "no images found in #{source_dir.root} matching #{config.image_types}"
|
29
|
-
else
|
30
|
-
prepare_output_directory
|
31
|
-
generate_images
|
32
|
-
ticker = 0
|
33
|
-
images_to_html(images.each_slice(config.per_page).to_a.first, 0, output_dir.html_file(:index) )
|
34
|
-
images.each_slice(per_page) do |some_images|
|
35
|
-
images_to_html(some_images, ticker)
|
36
|
-
ticker = ticker + 1
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def prepare_output_directory
|
42
|
-
# remove html files
|
43
|
-
Dir.glob( output_dir.html_files ){|f| FileUtils.rm(f) }
|
44
|
-
# ensure output directory
|
45
|
-
FileUtils.mkdir( output_dir.root ) unless File.exists?( output_dir.root )
|
46
|
-
# ensure output/images directory
|
47
|
-
FileUtils.mkdir( output_dir.images ) unless File.exists?( output_dir.images )
|
48
|
-
# copy css and js from gem to output
|
49
|
-
output_dir.copy_from_gem_source( 'assets/css', 'assets/js' )
|
50
|
-
end
|
51
|
-
|
52
|
-
def generate_images
|
53
|
-
generated = []
|
54
|
-
# generate images and skip any that fail
|
55
|
-
Parallel.map( image_paths, in_processes: config.workers.to_i ) do |f|
|
56
|
-
begin
|
57
|
-
generate_fullsize(f)
|
58
|
-
generate_thumbnail(f)
|
59
|
-
generated << f
|
60
|
-
rescue => e
|
61
|
-
# if any error occurs while processing the image, skip it
|
62
|
-
puts "failed to process #{f}. error: #{e} #{e.backtrace.first}"
|
63
|
-
nil
|
64
|
-
end
|
65
|
-
end
|
66
|
-
generated
|
67
|
-
end
|
68
|
-
|
69
|
-
def images_to_html(some_images, ticker=0, name=nil)
|
70
|
-
some_images ||= []
|
71
|
-
navigation = (images.count / per_page.to_f).ceil.times.collect{|r| %Q{<a class="#{'active' if r == ticker}" href="images-#{r}.html">#{r}</a>} }.join("\n")
|
72
|
-
navigation = (images.count > some_images.count) ? %Q{<div class="navigation">#{navigation}</div>} : ""
|
73
|
-
|
74
|
-
template = ERB.new(File.read(File.join(ROOT, 'templates/layout.html.erb')))
|
75
|
-
html = template.result(binding)
|
76
|
-
|
77
|
-
name ||= output_dir.html_file("images-#{ticker}")
|
78
|
-
puts "generate #{name.gsub(output_dir.root, output_dir.relative_root)}"
|
79
|
-
File.write(name, html)
|
80
|
-
end
|
81
|
-
|
82
|
-
def images
|
83
|
-
ticker = 0
|
84
|
-
image_paths.collect do |f|
|
85
|
-
image_fullsize = generate_fullsize(f)
|
86
|
-
image_thumbnail = generate_thumbnail(f)
|
87
|
-
even = (ticker % 2 == 0) ? 'image-even' : 'image-odd'
|
88
|
-
third = (ticker % 3 == 0) ? 'image-third' : ''
|
89
|
-
fourth = (ticker % 4 == 0) ? 'image-fourth' : ''
|
90
|
-
fancybox_attributes = get_fancybox_attributes(ticker)
|
91
|
-
src = %Q{
|
92
|
-
<div class="image #{even} #{fourth} #{third} image-#{ticker}">
|
93
|
-
<div class="inner-image">
|
94
|
-
<a href="./#{image_fullsize}" #{fancybox_attributes}><img src="./#{image_thumbnail}" alt="" /></a>
|
95
|
-
</div>
|
96
|
-
</div>
|
97
|
-
}
|
98
|
-
ticker = ticker + 1
|
99
|
-
src
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def image_paths
|
104
|
-
@image_paths ||= Dir.glob("*.{#{config.image_types}}").reject{|f|
|
105
|
-
# reject thumbnails
|
106
|
-
f =~ /thumbnail/
|
107
|
-
}.reject{|f|
|
108
|
-
begin
|
109
|
-
EXIFR::JPEG.new(f).date_time
|
110
|
-
false
|
111
|
-
rescue
|
112
|
-
true
|
113
|
-
end
|
114
|
-
}.sort_by{|f|
|
115
|
-
# sort by exif date
|
116
|
-
EXIFR::JPEG.new(f).date_time || Time.parse('3000-01-01')
|
117
|
-
}
|
118
|
-
end
|
119
|
-
|
120
|
-
def per_page
|
121
|
-
config.per_page
|
122
|
-
end
|
123
|
-
|
124
|
-
def generate_fullsize(source_path)
|
125
|
-
image = extract_image_extension(source_path)
|
126
|
-
output_path = File.join(output_dir.images, "#{image[:basename]}.#{image[:extension]}")
|
127
|
-
# generate the thumbnail
|
128
|
-
generate_image(source_path, output_path, config.image_width, config.image_height)
|
129
|
-
end
|
130
|
-
|
131
|
-
def generate_thumbnail(source_path)
|
132
|
-
image = extract_image_extension(source_path)
|
133
|
-
output_path = File.join(output_dir.images, "#{image[:basename]}-thumbnail.#{image[:extension]}")
|
134
|
-
# generate the thumbnail
|
135
|
-
generate_image(source_path, output_path, config.thumb_width, config.thumb_height)
|
136
|
-
end
|
137
|
-
|
138
|
-
def generate_image(source_path, output_path, width, height)
|
139
|
-
# ensure correct types
|
140
|
-
width, height = width.to_i, height.to_i
|
141
|
-
# skip if image exists
|
142
|
-
unless File.exists?(output_path)
|
143
|
-
puts "generate_image #{File.basename(source_path)} #{File.basename(output_path)} #{width} #{height}"
|
144
|
-
image = MiniMagick::Image.open(source_path)
|
145
|
-
image.auto_orient
|
146
|
-
# landscape?
|
147
|
-
if image[:width] > image[:height]
|
148
|
-
image.resize "#{width}x#{height}"
|
149
|
-
else
|
150
|
-
image.resize "#{height}x#{width.to_i * 1.25}"
|
151
|
-
end
|
152
|
-
image.write output_path
|
153
|
-
end
|
154
|
-
# strip the output_dir.root from the path so that the returned path is relative
|
155
|
-
output_path.gsub( output_dir.root, '' )
|
156
|
-
end
|
157
|
-
|
158
|
-
def extract_image_extension(image_path)
|
159
|
-
basename = image_path.split(".")
|
160
|
-
extension = basename.pop.downcase
|
161
|
-
basename = basename.join('.')
|
162
|
-
return { basename: basename, extension: extension }
|
163
|
-
end
|
164
|
-
|
165
|
-
def title
|
166
|
-
File.basename(File.expand_path('.')).titleize
|
167
|
-
end
|
168
|
-
|
169
|
-
def output_dir
|
170
|
-
@output_dir ||= OutputDir.new( config.output_name )
|
171
|
-
end
|
172
|
-
|
173
|
-
def config
|
174
|
-
@config ||= load_config
|
175
|
-
end
|
176
|
-
|
177
|
-
def load_config
|
178
|
-
config = {}
|
179
|
-
# load config from output directory if present
|
180
|
-
config = YAML.load( File.read( source_dir.config ) ) if source_dir.config?
|
181
|
-
# generate global config from example if missing
|
182
|
-
global_config = File.join(ROOT,'config/global.yml')
|
183
|
-
FileUtils.cp( "#{global_config}.example", global_config ) unless File.exists?( global_config )
|
184
|
-
# load global_config and merge with source config
|
185
|
-
OpenStruct.new(YAML.load(File.read(global_config)).merge(config))
|
186
|
-
end
|
187
|
-
|
188
|
-
def source_dir
|
189
|
-
@source_dir ||= SourceDir.new
|
190
|
-
end
|
191
|
-
|
192
|
-
def get_fancybox_attributes(ticker)
|
193
|
-
attributes = {
|
194
|
-
class: 'fancybox',
|
195
|
-
rel: 'group',
|
196
|
-
}
|
197
|
-
attributes["title"] = "IMG_#{ticker}" if config.titles
|
198
|
-
attributes.map{|k,v| "#{k}='#{v}'"}.join(' ')
|
199
|
-
end
|
200
|
-
|
201
|
-
def fancybox_options
|
202
|
-
options = {}
|
203
|
-
if config.titles
|
204
|
-
options["helpers"] = {title: {type: 'inside',position: 'bottom'}}
|
205
|
-
end
|
206
|
-
JSON.dump(options)
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
Gallerize.generate
|
data/templates/layout.html.erb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
3
|
-
<head>
|
4
|
-
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
|
5
|
-
<meta name="robots" content="noindex">
|
6
|
-
<meta name="googlebot" content="noindex">
|
7
|
-
|
8
|
-
<script type="text/javascript" src="assets/js/jquery-1.10.1.min.js"></script>
|
9
|
-
<script type="text/javascript" src="assets/js/jquery.fancybox.js"></script>
|
10
|
-
<script type="text/javascript" src="assets/js/imagesloaded.js"></script>
|
11
|
-
<script type="text/javascript" src="assets/js/jquery.masonry.js"></script>
|
12
|
-
|
13
|
-
<link rel="stylesheet" type="text/css" href="assets/css/styles.css" media="screen" />
|
14
|
-
<link rel="stylesheet" type="text/css" href="assets/css/jquery.fancybox.css" media="screen" />
|
15
|
-
<meta name="viewport" content="width=device-width, user-scalable=no">
|
16
|
-
|
17
|
-
<script type="text/javascript">
|
18
|
-
$(document).ready(function(){
|
19
|
-
$('#images-container').imagesLoaded( function() {
|
20
|
-
$('.images').show();
|
21
|
-
|
22
|
-
var container = document.querySelector('#images-container');
|
23
|
-
var msnry = new Masonry( container, {
|
24
|
-
|
25
|
-
itemSelector: '.image'
|
26
|
-
});
|
27
|
-
|
28
|
-
$('.fancybox').fancybox(<%= fancybox_options %>);
|
29
|
-
});
|
30
|
-
});
|
31
|
-
</script>
|
32
|
-
|
33
|
-
<% if config.tracking.present? %>
|
34
|
-
<script>
|
35
|
-
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
36
|
-
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
37
|
-
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
38
|
-
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
39
|
-
|
40
|
-
ga('create', '<%= config.tracking %>', 'auto');
|
41
|
-
ga('send', 'pageview');
|
42
|
-
|
43
|
-
</script>
|
44
|
-
<% end %>
|
45
|
-
|
46
|
-
<title><%= title %></title>
|
47
|
-
<link rel="stylesheet" href="css/styles.css" />
|
48
|
-
</head>
|
49
|
-
<body>
|
50
|
-
<h1 class="page-title"><%= title %></h1>
|
51
|
-
|
52
|
-
<%= navigation %>
|
53
|
-
<div id="images-container" class="images">
|
54
|
-
<%= some_images.join("\n") %>
|
55
|
-
</div>
|
56
|
-
<%= navigation %>
|
57
|
-
|
58
|
-
</body>
|
59
|
-
</html>
|