holder_rails 2.6.1 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 080ed0eebeb8a1bac01370583970f0cbd37c7f57
4
- data.tar.gz: f045fa17b0ab12a4c6e23d2d05bef11cce64e070
3
+ metadata.gz: 3f5c3a770e0c80448742019d0849ea3e7c45950a
4
+ data.tar.gz: 8a8d4de74ad35c0efaf7b578ed430c93028fecb2
5
5
  SHA512:
6
- metadata.gz: 9ac66c503b6d760b2b4868eaf8c758c9eddefefacbc89e18b3f6e86fb4753bbb08b74e6f8c2d9855cf521b6f1b1b41820ebc64fa9cdd86967f79390be8c0d0fc
7
- data.tar.gz: 8723af936fea7d8c221e7e4dd3c04656c6d66c4c1a63624c596ed3204564ab9b51932971ad6bf5aab17059915246d8e0f4ab8a5bb360fb1537fb1f773570b0f2
6
+ metadata.gz: b99e07db39f012cd52cfc6ac409d892378bd2f9984eae2a0919c8a05c8aa6986b39010478ae02adb3aced1d4ce511366408ab1e19b298f3a10a117db828937d9
7
+ data.tar.gz: 0eef472aca3d1f0caeae6d80809d4a24c1b5d1039a8f921a1a84f46496e35bc711fcb54e5a7f3084100bbd273b5065c032ea2d158d8b0a15e93872d199574b01
@@ -1,3 +1,3 @@
1
1
  module HolderRails
2
- VERSION = "2.6.1"
2
+ VERSION = "2.7.0"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
 
3
3
  Holder - client side image placeholders
4
- Version 2.6.1+6bti3
4
+ Version 2.7.0+6h7nj
5
5
  © 2015 Ivan Malopinsky - http://imsky.co
6
6
 
7
7
  Site: http://holderjs.com
@@ -9,220 +9,225 @@ Issues: https://github.com/imsky/holder/issues
9
9
  License: http://opensource.org/licenses/MIT
10
10
 
11
11
  */
12
- //https://github.com/inexorabletash/polyfill/blob/master/web.js
13
- if (!document.querySelectorAll) {
14
- document.querySelectorAll = function (selectors) {
15
- var style = document.createElement('style'), elements = [], element;
16
- document.documentElement.firstChild.appendChild(style);
17
- document._qsa = [];
18
-
19
- style.styleSheet.cssText = selectors + '{x-qsa:expression(document._qsa && document._qsa.push(this))}';
20
- window.scrollBy(0, 0);
21
- style.parentNode.removeChild(style);
22
-
23
- while (document._qsa.length) {
24
- element = document._qsa.shift();
25
- element.style.removeAttribute('x-qsa');
26
- elements.push(element);
27
- }
28
- document._qsa = null;
29
- return elements;
30
- };
31
- }
12
+ (function (window) {
13
+ if (!window.document) return;
14
+ var document = window.document;
15
+
16
+ //https://github.com/inexorabletash/polyfill/blob/master/web.js
17
+ if (!document.querySelectorAll) {
18
+ document.querySelectorAll = function (selectors) {
19
+ var style = document.createElement('style'), elements = [], element;
20
+ document.documentElement.firstChild.appendChild(style);
21
+ document._qsa = [];
22
+
23
+ style.styleSheet.cssText = selectors + '{x-qsa:expression(document._qsa && document._qsa.push(this))}';
24
+ window.scrollBy(0, 0);
25
+ style.parentNode.removeChild(style);
26
+
27
+ while (document._qsa.length) {
28
+ element = document._qsa.shift();
29
+ element.style.removeAttribute('x-qsa');
30
+ elements.push(element);
31
+ }
32
+ document._qsa = null;
33
+ return elements;
34
+ };
35
+ }
32
36
 
33
- if (!document.querySelector) {
34
- document.querySelector = function (selectors) {
35
- var elements = document.querySelectorAll(selectors);
36
- return (elements.length) ? elements[0] : null;
37
- };
38
- }
37
+ if (!document.querySelector) {
38
+ document.querySelector = function (selectors) {
39
+ var elements = document.querySelectorAll(selectors);
40
+ return (elements.length) ? elements[0] : null;
41
+ };
42
+ }
43
+
44
+ if (!document.getElementsByClassName) {
45
+ document.getElementsByClassName = function (classNames) {
46
+ classNames = String(classNames).replace(/^|\s+/g, '.');
47
+ return document.querySelectorAll(classNames);
48
+ };
49
+ }
39
50
 
40
- if (!document.getElementsByClassName) {
41
- document.getElementsByClassName = function (classNames) {
42
- classNames = String(classNames).replace(/^|\s+/g, '.');
43
- return document.querySelectorAll(classNames);
51
+ //https://github.com/inexorabletash/polyfill
52
+ // ES5 15.2.3.14 Object.keys ( O )
53
+ // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys
54
+ if (!Object.keys) {
55
+ Object.keys = function (o) {
56
+ if (o !== Object(o)) { throw TypeError('Object.keys called on non-object'); }
57
+ var ret = [], p;
58
+ for (p in o) {
59
+ if (Object.prototype.hasOwnProperty.call(o, p)) {
60
+ ret.push(p);
61
+ }
62
+ }
63
+ return ret;
44
64
  };
45
65
  }
46
66
 
47
- //https://github.com/inexorabletash/polyfill
48
- // ES5 15.2.3.14 Object.keys ( O )
49
- // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys
50
- if (!Object.keys) {
51
- Object.keys = function (o) {
52
- if (o !== Object(o)) { throw TypeError('Object.keys called on non-object'); }
53
- var ret = [], p;
54
- for (p in o) {
55
- if (Object.prototype.hasOwnProperty.call(o, p)) {
56
- ret.push(p);
67
+ //https://github.com/inexorabletash/polyfill/blob/master/web.js
68
+ (function (global) {
69
+ var B64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
70
+ global.atob = global.atob || function (input) {
71
+ input = String(input);
72
+ var position = 0,
73
+ output = [],
74
+ buffer = 0, bits = 0, n;
75
+
76
+ input = input.replace(/\s/g, '');
77
+ if ((input.length % 4) === 0) { input = input.replace(/=+$/, ''); }
78
+ if ((input.length % 4) === 1) { throw Error('InvalidCharacterError'); }
79
+ if (/[^+/0-9A-Za-z]/.test(input)) { throw Error('InvalidCharacterError'); }
80
+
81
+ while (position < input.length) {
82
+ n = B64_ALPHABET.indexOf(input.charAt(position));
83
+ buffer = (buffer << 6) | n;
84
+ bits += 6;
85
+
86
+ if (bits === 24) {
87
+ output.push(String.fromCharCode((buffer >> 16) & 0xFF));
88
+ output.push(String.fromCharCode((buffer >> 8) & 0xFF));
89
+ output.push(String.fromCharCode(buffer & 0xFF));
90
+ bits = 0;
91
+ buffer = 0;
92
+ }
93
+ position += 1;
57
94
  }
58
- }
59
- return ret;
60
- };
61
- }
62
-
63
- //https://github.com/inexorabletash/polyfill/blob/master/web.js
64
- (function (global) {
65
- var B64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
66
- global.atob = global.atob || function (input) {
67
- input = String(input);
68
- var position = 0,
69
- output = [],
70
- buffer = 0, bits = 0, n;
71
-
72
- input = input.replace(/\s/g, '');
73
- if ((input.length % 4) === 0) { input = input.replace(/=+$/, ''); }
74
- if ((input.length % 4) === 1) { throw Error('InvalidCharacterError'); }
75
- if (/[^+/0-9A-Za-z]/.test(input)) { throw Error('InvalidCharacterError'); }
76
-
77
- while (position < input.length) {
78
- n = B64_ALPHABET.indexOf(input.charAt(position));
79
- buffer = (buffer << 6) | n;
80
- bits += 6;
81
-
82
- if (bits === 24) {
83
- output.push(String.fromCharCode((buffer >> 16) & 0xFF));
84
- output.push(String.fromCharCode((buffer >> 8) & 0xFF));
95
+
96
+ if (bits === 12) {
97
+ buffer = buffer >> 4;
98
+ output.push(String.fromCharCode(buffer & 0xFF));
99
+ } else if (bits === 18) {
100
+ buffer = buffer >> 2;
101
+ output.push(String.fromCharCode((buffer >> 8) & 0xFF));
85
102
  output.push(String.fromCharCode(buffer & 0xFF));
86
- bits = 0;
87
- buffer = 0;
88
103
  }
89
- position += 1;
90
- }
91
-
92
- if (bits === 12) {
93
- buffer = buffer >> 4;
94
- output.push(String.fromCharCode(buffer & 0xFF));
95
- } else if (bits === 18) {
96
- buffer = buffer >> 2;
97
- output.push(String.fromCharCode((buffer >> 8) & 0xFF));
98
- output.push(String.fromCharCode(buffer & 0xFF));
99
- }
100
-
101
- return output.join('');
102
- };
103
-
104
- global.btoa = global.btoa || function (input) {
105
- input = String(input);
106
- var position = 0,
107
- out = [],
108
- o1, o2, o3,
109
- e1, e2, e3, e4;
110
104
 
111
- if (/[^\x00-\xFF]/.test(input)) { throw Error('InvalidCharacterError'); }
112
-
113
- while (position < input.length) {
114
- o1 = input.charCodeAt(position++);
115
- o2 = input.charCodeAt(position++);
116
- o3 = input.charCodeAt(position++);
117
-
118
- // 111111 112222 222233 333333
119
- e1 = o1 >> 2;
120
- e2 = ((o1 & 0x3) << 4) | (o2 >> 4);
121
- e3 = ((o2 & 0xf) << 2) | (o3 >> 6);
122
- e4 = o3 & 0x3f;
105
+ return output.join('');
106
+ };
123
107
 
124
- if (position === input.length + 2) {
125
- e3 = 64; e4 = 64;
108
+ global.btoa = global.btoa || function (input) {
109
+ input = String(input);
110
+ var position = 0,
111
+ out = [],
112
+ o1, o2, o3,
113
+ e1, e2, e3, e4;
114
+
115
+ if (/[^\x00-\xFF]/.test(input)) { throw Error('InvalidCharacterError'); }
116
+
117
+ while (position < input.length) {
118
+ o1 = input.charCodeAt(position++);
119
+ o2 = input.charCodeAt(position++);
120
+ o3 = input.charCodeAt(position++);
121
+
122
+ // 111111 112222 222233 333333
123
+ e1 = o1 >> 2;
124
+ e2 = ((o1 & 0x3) << 4) | (o2 >> 4);
125
+ e3 = ((o2 & 0xf) << 2) | (o3 >> 6);
126
+ e4 = o3 & 0x3f;
127
+
128
+ if (position === input.length + 2) {
129
+ e3 = 64; e4 = 64;
130
+ }
131
+ else if (position === input.length + 1) {
132
+ e4 = 64;
133
+ }
134
+
135
+ out.push(B64_ALPHABET.charAt(e1),
136
+ B64_ALPHABET.charAt(e2),
137
+ B64_ALPHABET.charAt(e3),
138
+ B64_ALPHABET.charAt(e4));
126
139
  }
127
- else if (position === input.length + 1) {
128
- e4 = 64;
129
- }
130
-
131
- out.push(B64_ALPHABET.charAt(e1),
132
- B64_ALPHABET.charAt(e2),
133
- B64_ALPHABET.charAt(e3),
134
- B64_ALPHABET.charAt(e4));
135
- }
136
140
 
137
- return out.join('');
138
- };
139
- }(this));
140
-
141
- //https://gist.github.com/jimeh/332357
142
- if (!Object.prototype.hasOwnProperty){
143
- /*jshint -W001, -W103 */
144
- Object.prototype.hasOwnProperty = function(prop) {
145
- var proto = this.__proto__ || this.constructor.prototype;
146
- return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
147
- };
148
- /*jshint +W001, +W103 */
149
- }
150
-
151
- // @license http://opensource.org/licenses/MIT
152
- // copyright Paul Irish 2015
141
+ return out.join('');
142
+ };
143
+ }(window));
144
+
145
+ //https://gist.github.com/jimeh/332357
146
+ if (!Object.prototype.hasOwnProperty){
147
+ /*jshint -W001, -W103 */
148
+ Object.prototype.hasOwnProperty = function(prop) {
149
+ var proto = this.__proto__ || this.constructor.prototype;
150
+ return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
151
+ };
152
+ /*jshint +W001, +W103 */
153
+ }
153
154
 
155
+ // @license http://opensource.org/licenses/MIT
156
+ // copyright Paul Irish 2015
154
157
 
155
- // Date.now() is supported everywhere except IE8. For IE8 we use the Date.now polyfill
156
- // github.com/Financial-Times/polyfill-service/blob/master/polyfills/Date.now/polyfill.js
157
- // as Safari 6 doesn't have support for NavigationTiming, we use a Date.now() timestamp for relative values
158
158
 
159
- // if you want values similar to what you'd get with real perf.now, place this towards the head of the page
160
- // but in reality, you're just getting the delta between now() calls, so it's not terribly important where it's placed
159
+ // Date.now() is supported everywhere except IE8. For IE8 we use the Date.now polyfill
160
+ // github.com/Financial-Times/polyfill-service/blob/master/polyfills/Date.now/polyfill.js
161
+ // as Safari 6 doesn't have support for NavigationTiming, we use a Date.now() timestamp for relative values
161
162
 
163
+ // if you want values similar to what you'd get with real perf.now, place this towards the head of the page
164
+ // but in reality, you're just getting the delta between now() calls, so it's not terribly important where it's placed
162
165
 
163
- (function(){
164
166
 
165
- if ('performance' in window === false) {
166
- window.performance = {};
167
- }
168
-
169
- Date.now = (Date.now || function () { // thanks IE8
170
- return new Date().getTime();
171
- });
167
+ (function(){
172
168
 
173
- if ('now' in window.performance === false){
174
-
175
- var nowOffset = Date.now();
176
-
177
- if (performance.timing && performance.timing.navigationStart){
178
- nowOffset = performance.timing.navigationStart;
169
+ if ('performance' in window === false) {
170
+ window.performance = {};
179
171
  }
172
+
173
+ Date.now = (Date.now || function () { // thanks IE8
174
+ return new Date().getTime();
175
+ });
176
+
177
+ if ('now' in window.performance === false){
178
+
179
+ var nowOffset = Date.now();
180
+
181
+ if (performance.timing && performance.timing.navigationStart){
182
+ nowOffset = performance.timing.navigationStart;
183
+ }
180
184
 
181
- window.performance.now = function now(){
182
- return Date.now() - nowOffset;
183
- };
184
- }
185
+ window.performance.now = function now(){
186
+ return Date.now() - nowOffset;
187
+ };
188
+ }
185
189
 
186
- })();
187
-
188
- //requestAnimationFrame polyfill for older Firefox/Chrome versions
189
- if (!window.requestAnimationFrame) {
190
- if (window.webkitRequestAnimationFrame) {
191
- //https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-webkit.js
192
- (function (global) {
193
- // window.requestAnimationFrame
194
- global.requestAnimationFrame = function (callback) {
195
- return webkitRequestAnimationFrame(function () {
196
- callback(global.performance.now());
197
- });
198
- };
199
-
200
- // window.cancelAnimationFrame
201
- global.cancelAnimationFrame = webkitCancelAnimationFrame;
202
- }(this));
203
- } else if (window.mozRequestAnimationFrame) {
204
- //https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-moz.js
205
- (function (global) {
206
- // window.requestAnimationFrame
207
- global.requestAnimationFrame = function (callback) {
208
- return mozRequestAnimationFrame(function () {
209
- callback(global.performance.now());
210
- });
211
- };
212
-
213
- // window.cancelAnimationFrame
214
- global.cancelAnimationFrame = mozCancelAnimationFrame;
215
- }(this));
216
- } else {
217
- (function (global) {
218
- global.requestAnimationFrame = function (callback) {
219
- return global.setTimeout(callback, 1000 / 60);
220
- };
221
-
222
- global.cancelAnimationFrame = global.clearTimeout;
223
- })(this);
190
+ })();
191
+
192
+ //requestAnimationFrame polyfill for older Firefox/Chrome versions
193
+ if (!window.requestAnimationFrame) {
194
+ if (window.webkitRequestAnimationFrame) {
195
+ //https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-webkit.js
196
+ (function (global) {
197
+ // window.requestAnimationFrame
198
+ global.requestAnimationFrame = function (callback) {
199
+ return webkitRequestAnimationFrame(function () {
200
+ callback(global.performance.now());
201
+ });
202
+ };
203
+
204
+ // window.cancelAnimationFrame
205
+ global.cancelAnimationFrame = webkitCancelAnimationFrame;
206
+ }(window));
207
+ } else if (window.mozRequestAnimationFrame) {
208
+ //https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-moz.js
209
+ (function (global) {
210
+ // window.requestAnimationFrame
211
+ global.requestAnimationFrame = function (callback) {
212
+ return mozRequestAnimationFrame(function () {
213
+ callback(global.performance.now());
214
+ });
215
+ };
216
+
217
+ // window.cancelAnimationFrame
218
+ global.cancelAnimationFrame = mozCancelAnimationFrame;
219
+ }(window));
220
+ } else {
221
+ (function (global) {
222
+ global.requestAnimationFrame = function (callback) {
223
+ return global.setTimeout(callback, 1000 / 60);
224
+ };
225
+
226
+ global.cancelAnimationFrame = global.clearTimeout;
227
+ })(window);
228
+ }
224
229
  }
225
- }
230
+ })(this);
226
231
 
227
232
  (function webpackUniversalModuleDefinition(root, factory) {
228
233
  if(typeof exports === 'object' && typeof module === 'object')
@@ -289,19 +294,16 @@ return /******/ (function(modules) { // webpackBootstrap
289
294
  var onDomReady = __webpack_require__(1);
290
295
  var SceneGraph = __webpack_require__(2);
291
296
  var utils = __webpack_require__(3);
297
+ var querystring = __webpack_require__(4);
292
298
 
293
299
  var extend = utils.extend;
294
- var cssProps = utils.cssProps;
295
- var encodeHtmlEntity = utils.encodeHtmlEntity;
296
- var decodeHtmlEntity = utils.decodeHtmlEntity;
297
- var imageExists = utils.imageExists;
298
300
  var getNodeArray = utils.getNodeArray;
299
301
  var dimensionCheck = utils.dimensionCheck;
300
302
 
301
303
  //Constants and definitions
302
304
  var SVG_NS = 'http://www.w3.org/2000/svg';
303
305
  var NODE_TYPE_COMMENT = 8;
304
- var version = '2.6.1';
306
+ var version = '2.7.0';
305
307
  var generatorComment = '\n' +
306
308
  'Created with Holder.js ' + version + '.\n' +
307
309
  'Learn more at http://holderjs.com\n' +
@@ -481,7 +483,7 @@ return /******/ (function(modules) { // webpackBootstrap
481
483
  } else {
482
484
  //If the placeholder has not been rendered, check if the image exists and render a fallback if it doesn't
483
485
  (function(src, options, engineSettings, dataSrc, image) {
484
- imageExists(src, function(exists) {
486
+ utils.imageExists(src, function(exists) {
485
487
  if (!exists) {
486
488
  prepareImageElement(options, engineSettings, dataSrc, image);
487
489
  }
@@ -538,6 +540,7 @@ return /******/ (function(modules) { // webpackBootstrap
538
540
  units: 'pt',
539
541
  scale: 1 / 16
540
542
  },
543
+ //todo: remove in 2.8
541
544
  flags: {
542
545
  dimensions: {
543
546
  regex: /^(\d+)x(\d+)$/,
@@ -624,22 +627,124 @@ return /******/ (function(modules) { // webpackBootstrap
624
627
  }
625
628
 
626
629
  /**
627
- * Processes a Holder URL and extracts flags
630
+ * Processes a Holder URL
628
631
  *
629
632
  * @private
630
633
  * @param url URL
631
634
  * @param options Instance options from Holder.run
632
635
  */
633
636
  function parseURL(url, options) {
634
- var ret = {
637
+ var holder = {
635
638
  theme: extend(App.settings.themes.gray, null),
636
639
  stylesheets: options.stylesheets,
637
- holderURL: []
640
+ instanceOptions: options
641
+ };
642
+
643
+ if (url.match(/([\d]+p?)x([\d]+p?)(?:\?|$)/)) {
644
+ return parseQueryString(url, holder);
645
+ } else {
646
+ return parseFlags(url, holder);
647
+ }
648
+ }
649
+
650
+ /**
651
+ * Processes a Holder URL and extracts configuration from query string
652
+ *
653
+ * @private
654
+ * @param url URL
655
+ * @param holder Staging Holder object
656
+ */
657
+ function parseQueryString(url, holder) {
658
+ var parts = url.split('?');
659
+ var basics = parts[0].split('/');
660
+
661
+ holder.holderURL = url;
662
+
663
+ var dimensions = basics[1];
664
+ var dimensionData = dimensions.match(/([\d]+p?)x([\d]+p?)/);
665
+
666
+ if (!dimensionData) return false;
667
+
668
+ holder.fluid = dimensions.indexOf('p') !== -1;
669
+
670
+ holder.dimensions = {
671
+ width: dimensionData[1].replace('p', '%'),
672
+ height: dimensionData[2].replace('p', '%')
638
673
  };
674
+
675
+ if (parts.length === 2) {
676
+ var options = querystring.parse(parts[1]);
677
+
678
+ // Colors
679
+
680
+ if (options.bg) {
681
+ holder.theme.background = (options.bg.indexOf('#') === -1 ? '#' : '') + options.bg;
682
+ }
683
+
684
+ if (options.fg) {
685
+ holder.theme.foreground = (options.fg.indexOf('#') === -1 ? '#' : '') + options.fg;
686
+ }
687
+
688
+ if (options.theme && holder.instanceOptions.themes.hasOwnProperty(options.theme)) {
689
+ holder.theme = extend(holder.instanceOptions.themes[options.theme], null);
690
+ }
691
+
692
+ // Text
693
+
694
+ if (options.text) {
695
+ holder.text = options.text;
696
+ }
697
+
698
+ if (options.textmode) {
699
+ holder.textmode = options.textmode;
700
+ }
701
+
702
+ if (options.size) {
703
+ holder.size = options.size;
704
+ }
705
+
706
+ if (options.font) {
707
+ holder.font = options.font;
708
+ }
709
+
710
+ if (options.align) {
711
+ holder.align = options.align;
712
+ }
713
+
714
+ holder.nowrap = utils.truthy(options.nowrap);
715
+
716
+ // Miscellaneous
717
+
718
+ holder.auto = utils.truthy(options.auto);
719
+
720
+ if (utils.truthy(options.random)) {
721
+ App.vars.cache.themeKeys = App.vars.cache.themeKeys || Object.keys(holder.instanceOptions.themes);
722
+ var _theme = App.vars.cache.themeKeys[0 | Math.random() * App.vars.cache.themeKeys.length];
723
+ holder.theme = extend(holder.instanceOptions.themes[_theme], null);
724
+ }
725
+ }
726
+
727
+ return holder;
728
+ }
729
+
730
+ //todo: remove in 2.8
731
+ /**
732
+ * Processes a Holder URL and extracts flags
733
+ *
734
+ * @private
735
+ * @deprecated
736
+ * @param url URL
737
+ * @param holder Staging Holder object
738
+ */
739
+ function parseFlags(url, holder) {
639
740
  var render = false;
640
741
  var vtab = String.fromCharCode(11);
641
742
  var flags = url.replace(/([^\\])\//g, '$1' + vtab).split(vtab);
642
743
  var uriRegex = /%[0-9a-f]{2}/gi;
744
+ var options = holder.instanceOptions;
745
+
746
+ holder.holderURL = [];
747
+
643
748
  for (var fl = flags.length, j = 0; j < fl; j++) {
644
749
  var flag = flags[j];
645
750
  if (flag.match(uriRegex)) {
@@ -654,55 +759,54 @@ return /******/ (function(modules) { // webpackBootstrap
654
759
 
655
760
  if (App.flags.dimensions.match(flag)) {
656
761
  render = true;
657
- ret.dimensions = App.flags.dimensions.output(flag);
762
+ holder.dimensions = App.flags.dimensions.output(flag);
658
763
  push = true;
659
764
  } else if (App.flags.fluid.match(flag)) {
660
765
  render = true;
661
- ret.dimensions = App.flags.fluid.output(flag);
662
- ret.fluid = true;
766
+ holder.dimensions = App.flags.fluid.output(flag);
767
+ holder.fluid = true;
663
768
  push = true;
664
769
  } else if (App.flags.textmode.match(flag)) {
665
- ret.textmode = App.flags.textmode.output(flag);
770
+ holder.textmode = App.flags.textmode.output(flag);
666
771
  push = true;
667
772
  } else if (App.flags.colors.match(flag)) {
668
773
  var colors = App.flags.colors.output(flag);
669
- ret.theme = extend(ret.theme, colors);
670
- //todo: convert implicit theme use to a theme: flag
774
+ holder.theme = extend(holder.theme, colors);
671
775
  push = true;
672
776
  } else if (options.themes[flag]) {
673
777
  //If a theme is specified, it will override custom colors
674
778
  if (options.themes.hasOwnProperty(flag)) {
675
- ret.theme = extend(options.themes[flag], null);
779
+ holder.theme = extend(options.themes[flag], null);
676
780
  }
677
781
  push = true;
678
782
  } else if (App.flags.font.match(flag)) {
679
- ret.font = App.flags.font.output(flag);
783
+ holder.font = App.flags.font.output(flag);
680
784
  push = true;
681
785
  } else if (App.flags.auto.match(flag)) {
682
- ret.auto = true;
786
+ holder.auto = true;
683
787
  push = true;
684
788
  } else if (App.flags.text.match(flag)) {
685
- ret.text = App.flags.text.output(flag);
789
+ holder.text = App.flags.text.output(flag);
686
790
  push = true;
687
791
  } else if (App.flags.size.match(flag)) {
688
- ret.size = App.flags.size.output(flag);
792
+ holder.size = App.flags.size.output(flag);
689
793
  push = true;
690
794
  } else if (App.flags.random.match(flag)) {
691
795
  if (App.vars.cache.themeKeys == null) {
692
796
  App.vars.cache.themeKeys = Object.keys(options.themes);
693
797
  }
694
798
  var theme = App.vars.cache.themeKeys[0 | Math.random() * App.vars.cache.themeKeys.length];
695
- ret.theme = extend(options.themes[theme], null);
799
+ holder.theme = extend(options.themes[theme], null);
696
800
  push = true;
697
801
  }
698
802
 
699
803
  if (push) {
700
- ret.holderURL.push(flag);
804
+ holder.holderURL.push(flag);
701
805
  }
702
806
  }
703
- ret.holderURL.unshift(options.domain);
704
- ret.holderURL = ret.holderURL.join('/');
705
- return render ? ret : false;
807
+ holder.holderURL.unshift(options.domain);
808
+ holder.holderURL = holder.holderURL.join('/');
809
+ return render ? holder : false;
706
810
  }
707
811
 
708
812
  /**
@@ -728,7 +832,7 @@ return /******/ (function(modules) { // webpackBootstrap
728
832
  if (el.nodeName.toLowerCase() === 'object') {
729
833
  var textLines = theme.text.split('\\n');
730
834
  for (var k = 0; k < textLines.length; k++) {
731
- textLines[k] = encodeHtmlEntity(textLines[k]);
835
+ textLines[k] = utils.encodeHtmlEntity(textLines[k]);
732
836
  }
733
837
  theme.text = textLines.join('\\n');
734
838
  }
@@ -881,6 +985,7 @@ return /******/ (function(modules) { // webpackBootstrap
881
985
  default:
882
986
  throw 'Holder: invalid renderer: ' + engineSettings.renderer;
883
987
  }
988
+
884
989
  return image;
885
990
  }
886
991
 
@@ -941,6 +1046,8 @@ return /******/ (function(modules) { // webpackBootstrap
941
1046
  * @private
942
1047
  * @param scene Holder scene object
943
1048
  */
1049
+ //todo: make this function reusable
1050
+ //todo: merge app defaults and setup properties into the scene argument
944
1051
  function buildSceneGraph(scene) {
945
1052
  var fontSize = App.defaults.size;
946
1053
  if (parseFloat(scene.theme.size)) {
@@ -955,7 +1062,12 @@ return /******/ (function(modules) { // webpackBootstrap
955
1062
  units: scene.theme.units ? scene.theme.units : App.defaults.units,
956
1063
  weight: scene.theme.fontweight ? scene.theme.fontweight : 'bold'
957
1064
  };
958
- scene.text = scene.theme.text ? scene.theme.text : Math.floor(scene.width) + 'x' + Math.floor(scene.height);
1065
+
1066
+ scene.text = scene.theme.text || Math.floor(scene.width) + 'x' + Math.floor(scene.height);
1067
+
1068
+ scene.noWrap = scene.theme.nowrap || scene.flags.nowrap;
1069
+
1070
+ scene.align = scene.theme.align || scene.flags.align || 'center';
959
1071
 
960
1072
  switch (scene.flags.textmode) {
961
1073
  case 'literal':
@@ -983,7 +1095,7 @@ return /******/ (function(modules) { // webpackBootstrap
983
1095
 
984
1096
  var holderTextGroup = new Shape.Group('holderTextGroup', {
985
1097
  text: scene.text,
986
- align: 'center',
1098
+ align: scene.align,
987
1099
  font: scene.font,
988
1100
  fill: scene.theme.foreground
989
1101
  });
@@ -997,7 +1109,6 @@ return /******/ (function(modules) { // webpackBootstrap
997
1109
  }
998
1110
  holderTextGroup.properties.leading = tpdata.boundingBox.height;
999
1111
 
1000
- //todo: alignment: TL, TC, TR, CL, CR, BL, BC, BR
1001
1112
  var textNode = null;
1002
1113
  var line = null;
1003
1114
 
@@ -1006,22 +1117,30 @@ return /******/ (function(modules) { // webpackBootstrap
1006
1117
  line.height = height;
1007
1118
  parent.width = Math.max(parent.width, line.width);
1008
1119
  parent.height += line.height;
1009
- parent.add(line);
1010
1120
  }
1011
1121
 
1122
+ var sceneMargin = scene.width * App.setup.lineWrapRatio;
1123
+ var maxLineWidth = sceneMargin;
1124
+
1012
1125
  if (tpdata.lineCount > 1) {
1013
1126
  var offsetX = 0;
1014
1127
  var offsetY = 0;
1015
- var maxLineWidth = scene.width * App.setup.lineWrapRatio;
1016
1128
  var lineIndex = 0;
1129
+ var lineKey;
1017
1130
  line = new Shape.Group('line' + lineIndex);
1018
1131
 
1132
+ //Double margin so that left/right-aligned next is not flush with edge of image
1133
+ if (scene.align === 'left' || scene.align === 'right') {
1134
+ maxLineWidth = scene.width * (1 - (1 - (App.setup.lineWrapRatio)) * 2);
1135
+ }
1136
+
1019
1137
  for (var i = 0; i < tpdata.words.length; i++) {
1020
1138
  var word = tpdata.words[i];
1021
1139
  textNode = new Shape.Text(word.text);
1022
1140
  var newline = word.text == '\\n';
1023
- if (offsetX + word.width >= maxLineWidth || newline === true) {
1141
+ if (!scene.noWrap && (offsetX + word.width >= maxLineWidth || newline === true)) {
1024
1142
  finalizeLine(holderTextGroup, line, offsetX, holderTextGroup.properties.leading);
1143
+ holderTextGroup.add(line);
1025
1144
  offsetX = 0;
1026
1145
  offsetY += holderTextGroup.properties.leading;
1027
1146
  lineIndex += 1;
@@ -1037,18 +1156,27 @@ return /******/ (function(modules) { // webpackBootstrap
1037
1156
  }
1038
1157
 
1039
1158
  finalizeLine(holderTextGroup, line, offsetX, holderTextGroup.properties.leading);
1159
+ holderTextGroup.add(line);
1160
+
1161
+ if (scene.align === 'left') {
1162
+ holderTextGroup.moveTo(scene.width - sceneMargin, null, null);
1163
+ } else if (scene.align === 'right') {
1164
+ for (lineKey in holderTextGroup.children) {
1165
+ line = holderTextGroup.children[lineKey];
1166
+ line.moveTo(scene.width - line.width, null, null);
1167
+ }
1040
1168
 
1041
- for (var lineKey in holderTextGroup.children) {
1042
- line = holderTextGroup.children[lineKey];
1043
- line.moveTo(
1044
- (holderTextGroup.width - line.width) / 2,
1045
- null,
1046
- null);
1169
+ holderTextGroup.moveTo(0 - (scene.width - sceneMargin), null, null);
1170
+ } else {
1171
+ for (lineKey in holderTextGroup.children) {
1172
+ line = holderTextGroup.children[lineKey];
1173
+ line.moveTo((holderTextGroup.width - line.width) / 2, null, null);
1174
+ }
1175
+
1176
+ holderTextGroup.moveTo((scene.width - holderTextGroup.width) / 2, null, null);
1047
1177
  }
1048
1178
 
1049
- holderTextGroup.moveTo(
1050
- (scene.width - holderTextGroup.width) / 2, (scene.height - holderTextGroup.height) / 2,
1051
- null);
1179
+ holderTextGroup.moveTo(null, (scene.height - holderTextGroup.height) / 2, null);
1052
1180
 
1053
1181
  //If the text exceeds vertical space, move it down so the first line is visible
1054
1182
  if ((scene.height - holderTextGroup.height) / 2 < 0) {
@@ -1060,9 +1188,15 @@ return /******/ (function(modules) { // webpackBootstrap
1060
1188
  line.add(textNode);
1061
1189
  holderTextGroup.add(line);
1062
1190
 
1063
- holderTextGroup.moveTo(
1064
- (scene.width - tpdata.boundingBox.width) / 2, (scene.height - tpdata.boundingBox.height) / 2,
1065
- null);
1191
+ if (scene.align === 'left') {
1192
+ holderTextGroup.moveTo(scene.width - sceneMargin, null, null);
1193
+ } else if (scene.align === 'right') {
1194
+ holderTextGroup.moveTo(0 - (scene.width - sceneMargin), null, null);
1195
+ } else {
1196
+ holderTextGroup.moveTo((scene.width - tpdata.boundingBox.width) / 2, null, null);
1197
+ }
1198
+
1199
+ holderTextGroup.moveTo(null, (scene.height - tpdata.boundingBox.height) / 2, null);
1066
1200
  }
1067
1201
 
1068
1202
  //todo: renderlist
@@ -1276,7 +1410,7 @@ return /******/ (function(modules) { // webpackBootstrap
1276
1410
  var htgProps = holderTextGroup.properties;
1277
1411
  setAttr(stagingText, {
1278
1412
  'y': htgProps.font.size,
1279
- 'style': cssProps({
1413
+ 'style': utils.cssProps({
1280
1414
  'font-weight': htgProps.font.weight,
1281
1415
  'font-size': htgProps.font.size + htgProps.font.units,
1282
1416
  'font-family': htgProps.font.family
@@ -1307,7 +1441,7 @@ return /******/ (function(modules) { // webpackBootstrap
1307
1441
  stagingTextNode.nodeValue = '';
1308
1442
  for (var i = 0; i < words.length; i++) {
1309
1443
  if (words[i].length === 0) continue;
1310
- stagingTextNode.nodeValue = decodeHtmlEntity(words[i]);
1444
+ stagingTextNode.nodeValue = utils.decodeHtmlEntity(words[i]);
1311
1445
  var bbox = stagingText.getBBox();
1312
1446
  wordWidths.push({
1313
1447
  text: words[i],
@@ -1397,7 +1531,7 @@ return /******/ (function(modules) { // webpackBootstrap
1397
1531
  var textGroupEl = newEl('g', SVG_NS);
1398
1532
  var tpdata = textGroup.textPositionData;
1399
1533
  var textCSSRule = '#' + holderId + ' text { ' +
1400
- cssProps({
1534
+ utils.cssProps({
1401
1535
  'fill': tgProps.fill,
1402
1536
  'font-weight': tgProps.font.weight,
1403
1537
  'font-family': tgProps.font.family + ', monospace',
@@ -1447,14 +1581,34 @@ return /******/ (function(modules) { // webpackBootstrap
1447
1581
  }
1448
1582
  }
1449
1583
 
1450
- var svgString = 'data:image/svg+xml;base64,' +
1451
- btoa(unescape(encodeURIComponent(serializeSVG(svg, renderSettings.engineSettings))));
1584
+ //todo: factor the background check up the chain, perhaps only return reference
1585
+ var svgString = svgStringToDataURI(serializeSVG(svg, renderSettings.engineSettings), renderSettings.mode === 'background');
1452
1586
  return svgString;
1453
1587
  };
1454
1588
  })();
1455
1589
 
1456
1590
  //Helpers
1457
1591
 
1592
+ //todo: move svg-related helpers to a dedicated file
1593
+
1594
+ /**
1595
+ * Converts serialized SVG to a string suitable for data URI use
1596
+ * @param svgString Serialized SVG string
1597
+ * @param [base64] Use base64 encoding for data URI
1598
+ */
1599
+ var svgStringToDataURI = function() {
1600
+ var rawPrefix = 'data:image/svg+xml;charset=UTF-8,';
1601
+ var base64Prefix = 'data:image/svg+xml;charset=UTF-8;base64,';
1602
+
1603
+ return function(svgString, base64) {
1604
+ if (base64) {
1605
+ return base64Prefix + btoa(unescape(encodeURIComponent(svgString)));
1606
+ } else {
1607
+ return rawPrefix + encodeURIComponent(svgString);
1608
+ }
1609
+ };
1610
+ }();
1611
+
1458
1612
  /**
1459
1613
  * Generic new DOM element function
1460
1614
  *
@@ -1556,12 +1710,6 @@ return /******/ (function(modules) { // webpackBootstrap
1556
1710
  xml.insertBefore(csspi, xml.firstChild);
1557
1711
  }
1558
1712
 
1559
- //Add <?xml ... ?> UTF-8 directive
1560
- //todo: remove in 2.7
1561
- /*
1562
- var xmlpi = xml.createProcessingInstruction('xml', 'version="1.0" encoding="UTF-8" standalone="yes"');
1563
- xml.insertBefore(xmlpi, xml.firstChild);
1564
- */
1565
1713
  xml.removeChild(xml.documentElement);
1566
1714
  svgCSS = serializer.serializeToString(xml);
1567
1715
  }
@@ -1862,7 +2010,7 @@ return /******/ (function(modules) { // webpackBootstrap
1862
2010
  /* 2 */
1863
2011
  /***/ function(module, exports, __webpack_require__) {
1864
2012
 
1865
- var augment = __webpack_require__(4);
2013
+ var augment = __webpack_require__(5);
1866
2014
 
1867
2015
  var SceneGraph = function(sceneProperties) {
1868
2016
  var nodeCount = 1;
@@ -2083,7 +2231,6 @@ return /******/ (function(modules) { // webpackBootstrap
2083
2231
  /**
2084
2232
  * Returns an element's dimensions if it's visible, `false` otherwise.
2085
2233
  *
2086
- * @private
2087
2234
  * @param el DOM element
2088
2235
  */
2089
2236
  exports.dimensionCheck = function(el) {
@@ -2099,10 +2246,130 @@ return /******/ (function(modules) { // webpackBootstrap
2099
2246
  }
2100
2247
  };
2101
2248
 
2249
+
2250
+ /**
2251
+ * Returns true if value is truthy or if it is "semantically truthy"
2252
+ * @param val
2253
+ */
2254
+ exports.truthy = function(val) {
2255
+ if (typeof val === 'string') {
2256
+ return val === 'true' || val === 'yes' || val === '1' || val === 'on' || val === '✓';
2257
+ }
2258
+ return !!val;
2259
+ };
2260
+
2102
2261
  /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
2103
2262
 
2104
2263
  /***/ },
2105
2264
  /* 4 */
2265
+ /***/ function(module, exports, __webpack_require__) {
2266
+
2267
+ //Modified version of component/querystring
2268
+ //Changes: updated dependencies, dot notation parsing, JSHint fixes
2269
+ //Fork at https://github.com/imsky/querystring
2270
+
2271
+ /**
2272
+ * Module dependencies.
2273
+ */
2274
+
2275
+ var encode = encodeURIComponent;
2276
+ var decode = decodeURIComponent;
2277
+ var trim = __webpack_require__(7);
2278
+ var type = __webpack_require__(6);
2279
+
2280
+ var arrayRegex = /(\w+)\[(\d+)\]/;
2281
+ var objectRegex = /\w+\.\w+/;
2282
+
2283
+ /**
2284
+ * Parse the given query `str`.
2285
+ *
2286
+ * @param {String} str
2287
+ * @return {Object}
2288
+ * @api public
2289
+ */
2290
+
2291
+ exports.parse = function(str){
2292
+ if ('string' !== typeof str) return {};
2293
+
2294
+ str = trim(str);
2295
+ if ('' === str) return {};
2296
+ if ('?' === str.charAt(0)) str = str.slice(1);
2297
+
2298
+ var obj = {};
2299
+ var pairs = str.split('&');
2300
+ for (var i = 0; i < pairs.length; i++) {
2301
+ var parts = pairs[i].split('=');
2302
+ var key = decode(parts[0]);
2303
+ var m, ctx, prop;
2304
+
2305
+ if (m = arrayRegex.exec(key)) {
2306
+ obj[m[1]] = obj[m[1]] || [];
2307
+ obj[m[1]][m[2]] = decode(parts[1]);
2308
+ continue;
2309
+ }
2310
+
2311
+ if (m = objectRegex.test(key)) {
2312
+ m = key.split('.');
2313
+ ctx = obj;
2314
+
2315
+ while (m.length) {
2316
+ prop = m.shift();
2317
+
2318
+ if (!prop.length) continue;
2319
+
2320
+ if (!ctx[prop]) {
2321
+ ctx[prop] = {};
2322
+ } else if (ctx[prop] && typeof ctx[prop] !== 'object') {
2323
+ break;
2324
+ }
2325
+
2326
+ if (!m.length) {
2327
+ ctx[prop] = decode(parts[1]);
2328
+ }
2329
+
2330
+ ctx = ctx[prop];
2331
+ }
2332
+
2333
+ continue;
2334
+ }
2335
+
2336
+ obj[parts[0]] = null == parts[1] ? '' : decode(parts[1]);
2337
+ }
2338
+
2339
+ return obj;
2340
+ };
2341
+
2342
+ /**
2343
+ * Stringify the given `obj`.
2344
+ *
2345
+ * @param {Object} obj
2346
+ * @return {String}
2347
+ * @api public
2348
+ */
2349
+
2350
+ exports.stringify = function(obj){
2351
+ if (!obj) return '';
2352
+ var pairs = [];
2353
+
2354
+ for (var key in obj) {
2355
+ var value = obj[key];
2356
+
2357
+ if ('array' == type(value)) {
2358
+ for (var i = 0; i < value.length; ++i) {
2359
+ pairs.push(encode(key + '[' + i + ']') + '=' + encode(value[i]));
2360
+ }
2361
+ continue;
2362
+ }
2363
+
2364
+ pairs.push(encode(key) + '=' + encode(obj[key]));
2365
+ }
2366
+
2367
+ return pairs.join('&');
2368
+ };
2369
+
2370
+
2371
+ /***/ },
2372
+ /* 5 */
2106
2373
  /***/ function(module, exports, __webpack_require__) {
2107
2374
 
2108
2375
  var Factory = function () {};
@@ -2133,7 +2400,72 @@ return /******/ (function(modules) { // webpackBootstrap
2133
2400
 
2134
2401
  module.exports = augment;
2135
2402
 
2403
+ /***/ },
2404
+ /* 6 */
2405
+ /***/ function(module, exports, __webpack_require__) {
2406
+
2407
+ /**
2408
+ * toString ref.
2409
+ */
2410
+
2411
+ var toString = Object.prototype.toString;
2412
+
2413
+ /**
2414
+ * Return the type of `val`.
2415
+ *
2416
+ * @param {Mixed} val
2417
+ * @return {String}
2418
+ * @api public
2419
+ */
2420
+
2421
+ module.exports = function(val){
2422
+ switch (toString.call(val)) {
2423
+ case '[object Date]': return 'date';
2424
+ case '[object RegExp]': return 'regexp';
2425
+ case '[object Arguments]': return 'arguments';
2426
+ case '[object Array]': return 'array';
2427
+ case '[object Error]': return 'error';
2428
+ }
2429
+
2430
+ if (val === null) return 'null';
2431
+ if (val === undefined) return 'undefined';
2432
+ if (val !== val) return 'nan';
2433
+ if (val && val.nodeType === 1) return 'element';
2434
+
2435
+ val = val.valueOf
2436
+ ? val.valueOf()
2437
+ : Object.prototype.valueOf.apply(val)
2438
+
2439
+ return typeof val;
2440
+ };
2441
+
2442
+
2443
+ /***/ },
2444
+ /* 7 */
2445
+ /***/ function(module, exports, __webpack_require__) {
2446
+
2447
+
2448
+ exports = module.exports = trim;
2449
+
2450
+ function trim(str){
2451
+ return str.replace(/^\s*|\s*$/g, '');
2452
+ }
2453
+
2454
+ exports.left = function(str){
2455
+ return str.replace(/^\s*/, '');
2456
+ };
2457
+
2458
+ exports.right = function(str){
2459
+ return str.replace(/\s*$/, '');
2460
+ };
2461
+
2462
+
2136
2463
  /***/ }
2137
2464
  /******/ ])
2138
2465
  });
2139
- ;
2466
+ ;
2467
+ (function(ctx, isMeteorPackage) {
2468
+ if (isMeteorPackage) {
2469
+ Holder = ctx.Holder;
2470
+ }
2471
+ })(this, Meteor && Package);
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
 
3
3
  Holder - client side image placeholders
4
- Version 2.6.1+6bti3
4
+ Version 2.7.0+6h7nj
5
5
  © 2015 Ivan Malopinsky - http://imsky.co
6
6
 
7
7
  Site: http://holderjs.com
@@ -9,4 +9,4 @@ Issues: https://github.com/imsky/holder/issues
9
9
  License: http://opensource.org/licenses/MIT
10
10
 
11
11
  */
12
- document.querySelectorAll||(document.querySelectorAll=function(a){var b,c=document.createElement("style"),d=[];for(document.documentElement.firstChild.appendChild(c),document._qsa=[],c.styleSheet.cssText=a+"{x-qsa:expression(document._qsa && document._qsa.push(this))}",window.scrollBy(0,0),c.parentNode.removeChild(c);document._qsa.length;)b=document._qsa.shift(),b.style.removeAttribute("x-qsa"),d.push(b);return document._qsa=null,d}),document.querySelector||(document.querySelector=function(a){var b=document.querySelectorAll(a);return b.length?b[0]:null}),document.getElementsByClassName||(document.getElementsByClassName=function(a){return a=String(a).replace(/^|\s+/g,"."),document.querySelectorAll(a)}),Object.keys||(Object.keys=function(a){if(a!==Object(a))throw TypeError("Object.keys called on non-object");var b,c=[];for(b in a)Object.prototype.hasOwnProperty.call(a,b)&&c.push(b);return c}),function(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";a.atob=a.atob||function(a){a=String(a);var c,d=0,e=[],f=0,g=0;if(a=a.replace(/\s/g,""),a.length%4===0&&(a=a.replace(/=+$/,"")),a.length%4===1)throw Error("InvalidCharacterError");if(/[^+/0-9A-Za-z]/.test(a))throw Error("InvalidCharacterError");for(;d<a.length;)c=b.indexOf(a.charAt(d)),f=f<<6|c,g+=6,24===g&&(e.push(String.fromCharCode(f>>16&255)),e.push(String.fromCharCode(f>>8&255)),e.push(String.fromCharCode(255&f)),g=0,f=0),d+=1;return 12===g?(f>>=4,e.push(String.fromCharCode(255&f))):18===g&&(f>>=2,e.push(String.fromCharCode(f>>8&255)),e.push(String.fromCharCode(255&f))),e.join("")},a.btoa=a.btoa||function(a){a=String(a);var c,d,e,f,g,h,i,j=0,k=[];if(/[^\x00-\xFF]/.test(a))throw Error("InvalidCharacterError");for(;j<a.length;)c=a.charCodeAt(j++),d=a.charCodeAt(j++),e=a.charCodeAt(j++),f=c>>2,g=(3&c)<<4|d>>4,h=(15&d)<<2|e>>6,i=63&e,j===a.length+2?(h=64,i=64):j===a.length+1&&(i=64),k.push(b.charAt(f),b.charAt(g),b.charAt(h),b.charAt(i));return k.join("")}}(this),Object.prototype.hasOwnProperty||(Object.prototype.hasOwnProperty=function(a){var b=this.__proto__||this.constructor.prototype;return a in this&&(!(a in b)||b[a]!==this[a])}),function(){if("performance"in window==!1&&(window.performance={}),Date.now=Date.now||function(){return(new Date).getTime()},"now"in window.performance==!1){var a=Date.now();performance.timing&&performance.timing.navigationStart&&(a=performance.timing.navigationStart),window.performance.now=function(){return Date.now()-a}}}(),window.requestAnimationFrame||(window.webkitRequestAnimationFrame?!function(a){a.requestAnimationFrame=function(b){return webkitRequestAnimationFrame(function(){b(a.performance.now())})},a.cancelAnimationFrame=webkitCancelAnimationFrame}(this):window.mozRequestAnimationFrame?!function(a){a.requestAnimationFrame=function(b){return mozRequestAnimationFrame(function(){b(a.performance.now())})},a.cancelAnimationFrame=mozCancelAnimationFrame}(this):!function(a){a.requestAnimationFrame=function(b){return a.setTimeout(b,1e3/60)},a.cancelAnimationFrame=a.clearTimeout}(this)),function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):"object"==typeof exports?exports.Holder=b():a.Holder=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){(function(b){function d(a,b,c,d){var g=e(c.substr(c.lastIndexOf(a.domain)),a);g&&f({mode:null,el:d,flags:g,engineSettings:b})}function e(a,b){for(var c={theme:y(K.settings.themes.gray,null),stylesheets:b.stylesheets,holderURL:[]},d=!1,e=String.fromCharCode(11),f=a.replace(/([^\\])\//g,"$1"+e).split(e),g=/%[0-9a-f]{2}/gi,h=f.length,i=0;h>i;i++){var j=f[i];if(j.match(g))try{j=decodeURIComponent(j)}catch(k){j=f[i]}var l=!1;if(K.flags.dimensions.match(j))d=!0,c.dimensions=K.flags.dimensions.output(j),l=!0;else if(K.flags.fluid.match(j))d=!0,c.dimensions=K.flags.fluid.output(j),c.fluid=!0,l=!0;else if(K.flags.textmode.match(j))c.textmode=K.flags.textmode.output(j),l=!0;else if(K.flags.colors.match(j)){var m=K.flags.colors.output(j);c.theme=y(c.theme,m),l=!0}else if(b.themes[j])b.themes.hasOwnProperty(j)&&(c.theme=y(b.themes[j],null)),l=!0;else if(K.flags.font.match(j))c.font=K.flags.font.output(j),l=!0;else if(K.flags.auto.match(j))c.auto=!0,l=!0;else if(K.flags.text.match(j))c.text=K.flags.text.output(j),l=!0;else if(K.flags.size.match(j))c.size=K.flags.size.output(j),l=!0;else if(K.flags.random.match(j)){null==K.vars.cache.themeKeys&&(K.vars.cache.themeKeys=Object.keys(b.themes));var n=K.vars.cache.themeKeys[0|Math.random()*K.vars.cache.themeKeys.length];c.theme=y(b.themes[n],null),l=!0}l&&c.holderURL.push(j)}return c.holderURL.unshift(b.domain),c.holderURL=c.holderURL.join("/"),d?c:!1}function f(a){var b=a.mode,c=a.el,d=a.flags,e=a.engineSettings,f=d.dimensions,h=d.theme,i=f.width+"x"+f.height;if(b=null==b?d.fluid?"fluid":"image":b,null!=d.text&&(h.text=d.text,"object"===c.nodeName.toLowerCase())){for(var l=h.text.split("\\n"),m=0;m<l.length;m++)l[m]=A(l[m]);h.text=l.join("\\n")}var n=d.holderURL,o=y(e,null);if(d.font&&(h.font=d.font,!o.noFontFallback&&"img"===c.nodeName.toLowerCase()&&K.setup.supportsCanvas&&"svg"===o.renderer&&(o=y(o,{renderer:"canvas"}))),d.font&&"canvas"==o.renderer&&(o.reRender=!0),"background"==b)null==c.getAttribute("data-background-src")&&p(c,{"data-background-src":n});else{var q={};q[K.vars.dataAttr]=n,p(c,q)}d.theme=h,c.holderData={flags:d,engineSettings:o},("image"==b||"fluid"==b)&&p(c,{alt:h.text?h.text+" ["+i+"]":i});var r={mode:b,el:c,holderSettings:{dimensions:f,theme:h,flags:d},engineSettings:o};"image"==b?("html"!=o.renderer&&d.auto||(c.style.width=f.width+"px",c.style.height=f.height+"px"),"html"==o.renderer?c.style.backgroundColor=h.background:(g(r),"exact"==d.textmode&&(c.holderData.resizeUpdate=!0,K.vars.resizableImages.push(c),j(c)))):"background"==b&&"html"!=o.renderer?g(r):"fluid"==b&&(c.holderData.resizeUpdate=!0,"%"==f.height.slice(-1)?c.style.height=f.height:null!=d.auto&&d.auto||(c.style.height=f.height+"px"),"%"==f.width.slice(-1)?c.style.width=f.width:null!=d.auto&&d.auto||(c.style.width=f.width+"px"),("inline"==c.style.display||""===c.style.display||"none"==c.style.display)&&(c.style.display="block"),k(c),"html"==o.renderer?c.style.backgroundColor=h.background:(K.vars.resizableImages.push(c),j(c)))}function g(a){function c(){var b=null;switch(i.renderer){case"canvas":b=M(k,a);break;case"svg":b=N(k,a);break;default:throw"Holder: invalid renderer: "+i.renderer}return b}var d=null,e=a.mode,f=a.holderSettings,g=a.el,i=a.engineSettings;switch(i.renderer){case"svg":if(!K.setup.supportsSVG)return;break;case"canvas":if(!K.setup.supportsCanvas)return;break;default:return}var j={width:f.dimensions.width,height:f.dimensions.height,theme:f.theme,flags:f.flags},k=h(j);if(d=c(),null==d)throw"Holder: couldn't render placeholder";"background"==e?(g.style.backgroundImage="url("+d+")",g.style.backgroundSize=j.width+"px "+j.height+"px"):("img"===g.nodeName.toLowerCase()?p(g,{src:d}):"object"===g.nodeName.toLowerCase()&&(p(g,{data:d}),p(g,{type:"image/svg+xml"})),i.reRender&&b.setTimeout(function(){var a=c();if(null==a)throw"Holder: couldn't render placeholder";"img"===g.nodeName.toLowerCase()?p(g,{src:a}):"object"===g.nodeName.toLowerCase()&&(p(g,{data:a}),p(g,{type:"image/svg+xml"}))},100)),p(g,{"data-holder-rendered":!0})}function h(a){function b(a,b,c,d){b.width=c,b.height=d,a.width=Math.max(a.width,b.width),a.height+=b.height,a.add(b)}var c=K.defaults.size;switch(parseFloat(a.theme.size)?c=a.theme.size:parseFloat(a.flags.size)&&(c=a.flags.size),a.font={family:a.theme.font?a.theme.font:"Arial, Helvetica, Open Sans, sans-serif",size:i(a.width,a.height,c),units:a.theme.units?a.theme.units:K.defaults.units,weight:a.theme.fontweight?a.theme.fontweight:"bold"},a.text=a.theme.text?a.theme.text:Math.floor(a.width)+"x"+Math.floor(a.height),a.flags.textmode){case"literal":a.text=a.flags.dimensions.width+"x"+a.flags.dimensions.height;break;case"exact":if(!a.flags.exactDimensions)break;a.text=Math.floor(a.flags.exactDimensions.width)+"x"+Math.floor(a.flags.exactDimensions.height)}var d=new w({width:a.width,height:a.height}),e=d.Shape,f=new e.Rect("holderBg",{fill:a.theme.background});f.resize(a.width,a.height),d.root.add(f);var g=new e.Group("holderTextGroup",{text:a.text,align:"center",font:a.font,fill:a.theme.foreground});g.moveTo(null,null,1),d.root.add(g);var h=g.textPositionData=L(d);if(!h)throw"Holder: staging fallback not supported yet.";g.properties.leading=h.boundingBox.height;var j=null,k=null;if(h.lineCount>1){var l=0,m=0,n=a.width*K.setup.lineWrapRatio,o=0;k=new e.Group("line"+o);for(var p=0;p<h.words.length;p++){var q=h.words[p];j=new e.Text(q.text);var r="\\n"==q.text;(l+q.width>=n||r===!0)&&(b(g,k,l,g.properties.leading),l=0,m+=g.properties.leading,o+=1,k=new e.Group("line"+o),k.y=m),r!==!0&&(j.moveTo(l,0),l+=h.spaceWidth+q.width,k.add(j))}b(g,k,l,g.properties.leading);for(var s in g.children)k=g.children[s],k.moveTo((g.width-k.width)/2,null,null);g.moveTo((a.width-g.width)/2,(a.height-g.height)/2,null),(a.height-g.height)/2<0&&g.moveTo(null,0,null)}else j=new e.Text(a.text),k=new e.Group("line0"),k.add(j),g.add(k),g.moveTo((a.width-h.boundingBox.width)/2,(a.height-h.boundingBox.height)/2,null);return d}function i(a,b,c){var d=parseInt(a,10),e=parseInt(b,10),f=Math.max(d,e),g=Math.min(d,e),h=.8*Math.min(g,f*K.defaults.scale);return Math.round(Math.max(c,h))}function j(a){var b;b=null==a||null==a.nodeType?K.vars.resizableImages:[a];for(var c=0,d=b.length;d>c;c++){var e=b[c];if(e.holderData){var f=e.holderData.flags,h=E(e);if(h){if(!e.holderData.resizeUpdate)continue;if(f.fluid&&f.auto){var i=e.holderData.fluidConfig;switch(i.mode){case"width":h.height=h.width/i.ratio;break;case"height":h.width=h.height*i.ratio}}var j={mode:"image",holderSettings:{dimensions:h,theme:f.theme,flags:f},el:e,engineSettings:e.holderData.engineSettings};"exact"==f.textmode&&(f.exactDimensions=h,j.holderSettings.dimensions=f.dimensions),g(j)}else n(e)}}}function k(a){if(a.holderData){var b=E(a);if(b){var c=a.holderData.flags,d={fluidHeight:"%"==c.dimensions.height.slice(-1),fluidWidth:"%"==c.dimensions.width.slice(-1),mode:null,initialDimensions:b};d.fluidWidth&&!d.fluidHeight?(d.mode="width",d.ratio=d.initialDimensions.width/parseFloat(c.dimensions.height)):!d.fluidWidth&&d.fluidHeight&&(d.mode="height",d.ratio=parseFloat(c.dimensions.width)/d.initialDimensions.height),a.holderData.fluidConfig=d}else n(a)}}function l(){for(var a,c=[],d=Object.keys(K.vars.invisibleImages),e=0,f=d.length;f>e;e++)a=K.vars.invisibleImages[d[e]],E(a)&&"img"==a.nodeName.toLowerCase()&&(c.push(a),delete K.vars.invisibleImages[d[e]]);c.length&&J.run({images:c}),b.requestAnimationFrame(l)}function m(){K.vars.visibilityCheckStarted||(b.requestAnimationFrame(l),K.vars.visibilityCheckStarted=!0)}function n(a){a.holderData.invisibleId||(K.vars.invisibleId+=1,K.vars.invisibleImages["i"+K.vars.invisibleId]=a,a.holderData.invisibleId=K.vars.invisibleId)}function o(a,b){return null==b?document.createElement(a):document.createElementNS(b,a)}function p(a,b){for(var c in b)a.setAttribute(c,b[c])}function q(a,b,c){var d,e;null==a?(a=o("svg",F),d=o("defs",F),e=o("style",F),p(e,{type:"text/css"}),d.appendChild(e),a.appendChild(d)):e=a.querySelector("style"),a.webkitMatchesSelector&&a.setAttribute("xmlns",F);for(var f=0;f<a.childNodes.length;f++)a.childNodes[f].nodeType===G&&a.removeChild(a.childNodes[f]);for(;e.childNodes.length;)e.removeChild(e.childNodes[0]);return p(a,{width:b,height:c,viewBox:"0 0 "+b+" "+c,preserveAspectRatio:"none"}),a}function r(a,c){if(b.XMLSerializer){var d=new XMLSerializer,e="",f=c.stylesheets;if(c.svgXMLStylesheet){for(var g=s(),h=f.length-1;h>=0;h--){var i=g.createProcessingInstruction("xml-stylesheet",'href="'+f[h]+'" rel="stylesheet"');g.insertBefore(i,g.firstChild)}g.removeChild(g.documentElement),e=d.serializeToString(g)}var j=d.serializeToString(a);return j=j.replace(/\&amp;(\#[0-9]{2,}\;)/g,"&$1"),e+j}}function s(){return b.DOMParser?(new DOMParser).parseFromString("<xml />","application/xml"):void 0}function t(a){K.vars.debounceTimer||a.call(this),K.vars.debounceTimer&&b.clearTimeout(K.vars.debounceTimer),K.vars.debounceTimer=b.setTimeout(function(){K.vars.debounceTimer=null,a.call(this)},K.setup.debounce)}function u(){t(function(){j(null)})}var v=c(1),w=c(2),x=c(3),y=x.extend,z=x.cssProps,A=x.encodeHtmlEntity,B=x.decodeHtmlEntity,C=x.imageExists,D=x.getNodeArray,E=x.dimensionCheck,F="http://www.w3.org/2000/svg",G=8,H="2.6.1",I="\nCreated with Holder.js "+H+".\nLearn more at http://holderjs.com\n(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n",J={version:H,addTheme:function(a,b){return null!=a&&null!=b&&(K.settings.themes[a]=b),delete K.vars.cache.themeKeys,this},addImage:function(a,b){var c=document.querySelectorAll(b);if(c.length)for(var d=0,e=c.length;e>d;d++){var f=o("img"),g={};g[K.vars.dataAttr]=a,p(f,g),c[d].appendChild(f)}return this},setResizeUpdate:function(a,b){a.holderData&&(a.holderData.resizeUpdate=!!b,a.holderData.resizeUpdate&&j(a))},run:function(a){a=a||{};var c={},g=y(K.settings,a);K.vars.preempted=!0,K.vars.dataAttr=g.dataAttr||K.vars.dataAttr,c.renderer=g.renderer?g.renderer:K.setup.renderer,-1===K.setup.renderers.join(",").indexOf(c.renderer)&&(c.renderer=K.setup.supportsSVG?"svg":K.setup.supportsCanvas?"canvas":"html");var h=D(g.images),i=D(g.bgnodes),j=D(g.stylenodes),k=D(g.objects);c.stylesheets=[],c.svgXMLStylesheet=!0,c.noFontFallback=g.noFontFallback?g.noFontFallback:!1;for(var l=0;l<j.length;l++){var m=j[l];if(m.attributes.rel&&m.attributes.href&&"stylesheet"==m.attributes.rel.value){var n=m.attributes.href.value,p=o("a");p.href=n;var q=p.protocol+"//"+p.host+p.pathname+p.search;c.stylesheets.push(q)}}for(l=0;l<i.length;l++)if(b.getComputedStyle){var r=b.getComputedStyle(i[l],null).getPropertyValue("background-image"),s=i[l].getAttribute("data-background-src"),t=null;t=null==s?r:s;var u=null,v="?"+g.domain+"/";if(0===t.indexOf(v))u=t.slice(1);else if(-1!=t.indexOf(v)){var w=t.substr(t.indexOf(v)).slice(1),x=w.match(/([^\"]*)"?\)/);null!=x&&(u=x[1])}if(null!=u){var z=e(u,g);z&&f({mode:"background",el:i[l],flags:z,engineSettings:c})}}for(l=0;l<k.length;l++){var A=k[l],B={};try{B.data=A.getAttribute("data"),B.dataSrc=A.getAttribute(K.vars.dataAttr)}catch(E){}var F=null!=B.data&&0===B.data.indexOf(g.domain),G=null!=B.dataSrc&&0===B.dataSrc.indexOf(g.domain);F?d(g,c,B.data,A):G&&d(g,c,B.dataSrc,A)}for(l=0;l<h.length;l++){var H=h[l],I={};try{I.src=H.getAttribute("src"),I.dataSrc=H.getAttribute(K.vars.dataAttr),I.rendered=H.getAttribute("data-holder-rendered")}catch(E){}var J=null!=I.src,L=null!=I.dataSrc&&0===I.dataSrc.indexOf(g.domain),M=null!=I.rendered&&"true"==I.rendered;J?0===I.src.indexOf(g.domain)?d(g,c,I.src,H):L&&(M?d(g,c,I.dataSrc,H):!function(a,b,c,e,f){C(a,function(a){a||d(b,c,e,f)})}(I.src,g,c,I.dataSrc,H)):L&&d(g,c,I.dataSrc,H)}return this}},K={settings:{domain:"holder.js",images:"img",objects:"object",bgnodes:"body .holderjs",stylenodes:"head link.holderjs",stylesheets:[],themes:{gray:{background:"#EEEEEE",foreground:"#AAAAAA"},social:{background:"#3a5a97",foreground:"#FFFFFF"},industrial:{background:"#434A52",foreground:"#C2F200"},sky:{background:"#0D8FDB",foreground:"#FFFFFF"},vine:{background:"#39DBAC",foreground:"#1E292C"},lava:{background:"#F8591A",foreground:"#1C2846"}}},defaults:{size:10,units:"pt",scale:1/16},flags:{dimensions:{regex:/^(\d+)x(\d+)$/,output:function(a){var b=this.regex.exec(a);return{width:+b[1],height:+b[2]}}},fluid:{regex:/^([0-9]+%?)x([0-9]+%?)$/,output:function(a){var b=this.regex.exec(a);return{width:b[1],height:b[2]}}},colors:{regex:/(?:#|\^)([0-9a-f]{3,})\:(?:#|\^)([0-9a-f]{3,})/i,output:function(a){var b=this.regex.exec(a);return{foreground:"#"+b[2],background:"#"+b[1]}}},text:{regex:/text\:(.*)/,output:function(a){return this.regex.exec(a)[1].replace("\\/","/")}},font:{regex:/font\:(.*)/,output:function(a){return this.regex.exec(a)[1]}},auto:{regex:/^auto$/},textmode:{regex:/textmode\:(.*)/,output:function(a){return this.regex.exec(a)[1]}},random:{regex:/^random$/},size:{regex:/size\:(\d+)/,output:function(a){return this.regex.exec(a)[1]}}}},L=function(){var a=null,b=null,c=null;return function(d){var e=d.root;if(K.setup.supportsSVG){var f=!1,g=function(a){return document.createTextNode(a)};(null==a||a.parentNode!==document.body)&&(f=!0),a=q(a,e.properties.width,e.properties.height),a.style.display="block",f&&(b=o("text",F),c=g(null),p(b,{x:0}),b.appendChild(c),a.appendChild(b),document.body.appendChild(a),a.style.visibility="hidden",a.style.position="absolute",a.style.top="-100%",a.style.left="-100%");var h=e.children.holderTextGroup,i=h.properties;p(b,{y:i.font.size,style:z({"font-weight":i.font.weight,"font-size":i.font.size+i.font.units,"font-family":i.font.family})}),c.nodeValue=i.text;var j=b.getBBox(),k=Math.ceil(j.width/(e.properties.width*K.setup.lineWrapRatio)),l=i.text.split(" "),m=i.text.match(/\\n/g);k+=null==m?0:m.length,c.nodeValue=i.text.replace(/[ ]+/g,"");var n=b.getComputedTextLength(),r=j.width-n,s=Math.round(r/Math.max(1,l.length-1)),t=[];if(k>1){c.nodeValue="";for(var u=0;u<l.length;u++)if(0!==l[u].length){c.nodeValue=B(l[u]);var v=b.getBBox();t.push({text:l[u],width:v.width})}}return a.style.display="none",{spaceWidth:s,lineCount:k,boundingBox:j,words:t}}return!1}}(),M=function(){var a=o("canvas"),b=null;return function(c){null==b&&(b=a.getContext("2d"));var d=c.root;a.width=K.dpr(d.properties.width),a.height=K.dpr(d.properties.height),b.textBaseline="middle",b.fillStyle=d.children.holderBg.properties.fill,b.fillRect(0,0,K.dpr(d.children.holderBg.width),K.dpr(d.children.holderBg.height));{var e=d.children.holderTextGroup;e.properties}b.font=e.properties.font.weight+" "+K.dpr(e.properties.font.size)+e.properties.font.units+" "+e.properties.font.family+", monospace",b.fillStyle=e.properties.fill;for(var f in e.children){var g=e.children[f];for(var h in g.children){var i=g.children[h],j=K.dpr(e.x+g.x+i.x),k=K.dpr(e.y+g.y+i.y+e.properties.leading/2);b.fillText(i.properties.text,j,k)}}return a.toDataURL("image/png")}}(),N=function(){if(b.XMLSerializer){var a=s(),c=q(null,0,0),d=o("rect",F);return c.appendChild(d),function(b,e){var f=b.root;q(c,f.properties.width,f.properties.height);for(var g=c.querySelectorAll("g"),h=0;h<g.length;h++)g[h].parentNode.removeChild(g[h]);var i=e.holderSettings.flags.holderURL,j="holder_"+(Number(new Date)+32768+(0|32768*Math.random())).toString(16),k=o("g",F),l=f.children.holderTextGroup,m=l.properties,n=o("g",F),s=l.textPositionData,t="#"+j+" text { "+z({fill:m.fill,"font-weight":m.font.weight,"font-family":m.font.family+", monospace","font-size":m.font.size+m.font.units})+" } ",u=a.createComment("\nSource URL: "+i+I),v=a.createCDATASection(t),w=c.querySelector("style");p(k,{id:j}),c.insertBefore(u,c.firstChild),w.appendChild(v),k.appendChild(d),k.appendChild(n),c.appendChild(k),p(d,{width:f.children.holderBg.width,height:f.children.holderBg.height,fill:f.children.holderBg.properties.fill}),l.y+=.8*s.boundingBox.height;for(var x in l.children){var y=l.children[x];for(var A in y.children){var B=y.children[A],C=l.x+y.x+B.x,D=l.y+y.y+B.y,E=o("text",F),G=document.createTextNode(null);p(E,{x:C,y:D}),G.nodeValue=B.properties.text,E.appendChild(G),n.appendChild(E)}}var H="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(r(c,e.engineSettings))));return H}}}();for(var O in K.flags)K.flags.hasOwnProperty(O)&&(K.flags[O].match=function(a){return a.match(this.regex)});K.setup={renderer:"html",debounce:100,ratio:1,supportsCanvas:!1,supportsSVG:!1,lineWrapRatio:.9,renderers:["html","canvas","svg"]},K.dpr=function(a){return a*K.setup.ratio},K.vars={preempted:!1,resizableImages:[],invisibleImages:{},invisibleId:0,visibilityCheckStarted:!1,debounceTimer:null,cache:{},dataAttr:"data-src"},function(){var a=1,c=1,d=o("canvas"),e=null;d.getContext&&-1!=d.toDataURL("image/png").indexOf("data:image/png")&&(K.setup.renderer="canvas",e=d.getContext("2d"),K.setup.supportsCanvas=!0),K.setup.supportsCanvas&&(a=b.devicePixelRatio||1,c=e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),K.setup.ratio=a/c,document.createElementNS&&document.createElementNS(F,"svg").createSVGRect&&(K.setup.renderer="svg",K.setup.supportsSVG=!0)}(),m(),v&&v(function(){K.vars.preempted||J.run(),b.addEventListener?(b.addEventListener("resize",u,!1),b.addEventListener("orientationchange",u,!1)):b.attachEvent("onresize",u),"object"==typeof b.Turbolinks&&b.document.addEventListener("page:change",function(){J.run()})}),a.exports=J}).call(b,function(){return this}())},function(a){function b(a){function b(a){if(!v){if(!g.body)return e(b);for(v=!0;a=w.shift();)e(a)}}function c(a){(t||a.type===i||g[m]===l)&&(d(),b())}function d(){t?(g[s](q,c,j),a[s](i,c,j)):(g[o](r,c),a[o](k,c))}function e(a,b){setTimeout(a,+b>=0?b:1)}function f(a){v?e(a):w.push(a)}null==document.readyState&&document.addEventListener&&(document.addEventListener("DOMContentLoaded",function y(){document.removeEventListener("DOMContentLoaded",y,!1),document.readyState="complete"},!1),document.readyState="loading");var g=a.document,h=g.documentElement,i="load",j=!1,k="on"+i,l="complete",m="readyState",n="attachEvent",o="detachEvent",p="addEventListener",q="DOMContentLoaded",r="onreadystatechange",s="removeEventListener",t=p in g,u=j,v=j,w=[];if(g[m]===l)e(b);else if(t)g[p](q,c,j),a[p](i,c,j);else{g[n](r,c),a[n](k,c);try{u=null==a.frameElement&&h}catch(x){}u&&u.doScroll&&!function z(){if(!v){try{u.doScroll("left")}catch(a){return e(z,50)}d(),b()}}()}return f.version="1.4.0",f.isReady=function(){return v},f}a.exports="undefined"!=typeof window&&b(window)},function(a,b,c){var d=c(4),e=function(a){function b(a,b){for(var c in b)a[c]=b[c];return a}var c=1,e=d.defclass({constructor:function(a){c++,this.parent=null,this.children={},this.id=c,this.name="n"+c,null!=a&&(this.name=a),this.x=0,this.y=0,this.z=0,this.width=0,this.height=0},resize:function(a,b){null!=a&&(this.width=a),null!=b&&(this.height=b)},moveTo:function(a,b,c){this.x=null!=a?a:this.x,this.y=null!=b?b:this.y,this.z=null!=c?c:this.z},add:function(a){var b=a.name;if(null!=this.children[b])throw"SceneGraph: child with that name already exists: "+b;this.children[b]=a,a.parent=this}}),f=d(e,function(b){this.constructor=function(){b.constructor.call(this,"root"),this.properties=a}}),g=d(e,function(a){function c(c,d){if(a.constructor.call(this,c),this.properties={fill:"#000"},null!=d)b(this.properties,d);else if(null!=c&&"string"!=typeof c)throw"SceneGraph: invalid node name"}this.Group=d.extend(this,{constructor:c,type:"group"}),this.Rect=d.extend(this,{constructor:c,type:"rect"}),this.Text=d.extend(this,{constructor:function(a){c.call(this),this.properties.text=a},type:"text"})}),h=new f;return this.Shape=g,this.root=h,this};a.exports=e},function(a,b){(function(a){b.extend=function(a,b){var c={};for(var d in a)a.hasOwnProperty(d)&&(c[d]=a[d]);if(null!=b)for(var e in b)b.hasOwnProperty(e)&&(c[e]=b[e]);return c},b.cssProps=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c+":"+a[c]);return b.join(";")},b.encodeHtmlEntity=function(a){for(var b=[],c=0,d=a.length-1;d>=0;d--)c=a.charCodeAt(d),b.unshift(c>128?["&#",c,";"].join(""):a[d]);return b.join("")},b.getNodeArray=function(b){var c=null;return"string"==typeof b?c=document.querySelectorAll(b):a.NodeList&&b instanceof a.NodeList?c=b:a.Node&&b instanceof a.Node?c=[b]:a.HTMLCollection&&b instanceof a.HTMLCollection?c=b:b instanceof Array?c=b:null===b&&(c=[]),c},b.imageExists=function(a,b){var c=new Image;c.onerror=function(){b.call(this,!1)},c.onload=function(){b.call(this,!0)},c.src=a},b.decodeHtmlEntity=function(a){return a.replace(/&#(\d+);/g,function(a,b){return String.fromCharCode(b)})},b.dimensionCheck=function(a){var b={height:a.clientHeight,width:a.clientWidth};return b.height&&b.width?b:!1}}).call(b,function(){return this}())},function(a){var b=function(){},c=Array.prototype.slice,d=function(a,d){var e=b.prototype="function"==typeof a?a.prototype:a,f=new b,g=d.apply(f,c.call(arguments,2).concat(e));if("object"==typeof g)for(var h in g)f[h]=g[h];if(!f.hasOwnProperty("constructor"))return f;var i=f.constructor;return i.prototype=f,i};d.defclass=function(a){var b=a.constructor;return b.prototype=a,b},d.extend=function(a,b){return d(a,function(a){return this.uber=a,b})},a.exports=d}])});
12
+ !function(a){if(a.document){var b=a.document;b.querySelectorAll||(b.querySelectorAll=function(c){var d,e=b.createElement("style"),f=[];for(b.documentElement.firstChild.appendChild(e),b._qsa=[],e.styleSheet.cssText=c+"{x-qsa:expression(document._qsa && document._qsa.push(this))}",a.scrollBy(0,0),e.parentNode.removeChild(e);b._qsa.length;)d=b._qsa.shift(),d.style.removeAttribute("x-qsa"),f.push(d);return b._qsa=null,f}),b.querySelector||(b.querySelector=function(a){var c=b.querySelectorAll(a);return c.length?c[0]:null}),b.getElementsByClassName||(b.getElementsByClassName=function(a){return a=String(a).replace(/^|\s+/g,"."),b.querySelectorAll(a)}),Object.keys||(Object.keys=function(a){if(a!==Object(a))throw TypeError("Object.keys called on non-object");var b,c=[];for(b in a)Object.prototype.hasOwnProperty.call(a,b)&&c.push(b);return c}),function(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";a.atob=a.atob||function(a){a=String(a);var c,d=0,e=[],f=0,g=0;if(a=a.replace(/\s/g,""),a.length%4===0&&(a=a.replace(/=+$/,"")),a.length%4===1)throw Error("InvalidCharacterError");if(/[^+/0-9A-Za-z]/.test(a))throw Error("InvalidCharacterError");for(;d<a.length;)c=b.indexOf(a.charAt(d)),f=f<<6|c,g+=6,24===g&&(e.push(String.fromCharCode(f>>16&255)),e.push(String.fromCharCode(f>>8&255)),e.push(String.fromCharCode(255&f)),g=0,f=0),d+=1;return 12===g?(f>>=4,e.push(String.fromCharCode(255&f))):18===g&&(f>>=2,e.push(String.fromCharCode(f>>8&255)),e.push(String.fromCharCode(255&f))),e.join("")},a.btoa=a.btoa||function(a){a=String(a);var c,d,e,f,g,h,i,j=0,k=[];if(/[^\x00-\xFF]/.test(a))throw Error("InvalidCharacterError");for(;j<a.length;)c=a.charCodeAt(j++),d=a.charCodeAt(j++),e=a.charCodeAt(j++),f=c>>2,g=(3&c)<<4|d>>4,h=(15&d)<<2|e>>6,i=63&e,j===a.length+2?(h=64,i=64):j===a.length+1&&(i=64),k.push(b.charAt(f),b.charAt(g),b.charAt(h),b.charAt(i));return k.join("")}}(a),Object.prototype.hasOwnProperty||(Object.prototype.hasOwnProperty=function(a){var b=this.__proto__||this.constructor.prototype;return a in this&&(!(a in b)||b[a]!==this[a])}),function(){if("performance"in a==!1&&(a.performance={}),Date.now=Date.now||function(){return(new Date).getTime()},"now"in a.performance==!1){var b=Date.now();performance.timing&&performance.timing.navigationStart&&(b=performance.timing.navigationStart),a.performance.now=function(){return Date.now()-b}}}(),a.requestAnimationFrame||(a.webkitRequestAnimationFrame?!function(a){a.requestAnimationFrame=function(b){return webkitRequestAnimationFrame(function(){b(a.performance.now())})},a.cancelAnimationFrame=webkitCancelAnimationFrame}(a):a.mozRequestAnimationFrame?!function(a){a.requestAnimationFrame=function(b){return mozRequestAnimationFrame(function(){b(a.performance.now())})},a.cancelAnimationFrame=mozCancelAnimationFrame}(a):!function(a){a.requestAnimationFrame=function(b){return a.setTimeout(b,1e3/60)},a.cancelAnimationFrame=a.clearTimeout}(a))}}(this),function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):"object"==typeof exports?exports.Holder=b():a.Holder=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){(function(b){function d(a,b,c,d){var f=e(c.substr(c.lastIndexOf(a.domain)),a);f&&h({mode:null,el:d,flags:f,engineSettings:b})}function e(a,b){var c={theme:B(J.settings.themes.gray,null),stylesheets:b.stylesheets,instanceOptions:b};return a.match(/([\d]+p?)x([\d]+p?)(?:\?|$)/)?f(a,c):g(a,c)}function f(a,b){var c=a.split("?"),d=c[0].split("/");b.holderURL=a;var e=d[1],f=e.match(/([\d]+p?)x([\d]+p?)/);if(!f)return!1;if(b.fluid=-1!==e.indexOf("p"),b.dimensions={width:f[1].replace("p","%"),height:f[2].replace("p","%")},2===c.length){var g=A.parse(c[1]);if(g.bg&&(b.theme.background=(-1===g.bg.indexOf("#")?"#":"")+g.bg),g.fg&&(b.theme.foreground=(-1===g.fg.indexOf("#")?"#":"")+g.fg),g.theme&&b.instanceOptions.themes.hasOwnProperty(g.theme)&&(b.theme=B(b.instanceOptions.themes[g.theme],null)),g.text&&(b.text=g.text),g.textmode&&(b.textmode=g.textmode),g.size&&(b.size=g.size),g.font&&(b.font=g.font),g.align&&(b.align=g.align),b.nowrap=z.truthy(g.nowrap),b.auto=z.truthy(g.auto),z.truthy(g.random)){J.vars.cache.themeKeys=J.vars.cache.themeKeys||Object.keys(b.instanceOptions.themes);var h=J.vars.cache.themeKeys[0|Math.random()*J.vars.cache.themeKeys.length];b.theme=B(b.instanceOptions.themes[h],null)}}return b}function g(a,b){var c=!1,d=String.fromCharCode(11),e=a.replace(/([^\\])\//g,"$1"+d).split(d),f=/%[0-9a-f]{2}/gi,g=b.instanceOptions;b.holderURL=[];for(var h=e.length,i=0;h>i;i++){var j=e[i];if(j.match(f))try{j=decodeURIComponent(j)}catch(k){j=e[i]}var l=!1;if(J.flags.dimensions.match(j))c=!0,b.dimensions=J.flags.dimensions.output(j),l=!0;else if(J.flags.fluid.match(j))c=!0,b.dimensions=J.flags.fluid.output(j),b.fluid=!0,l=!0;else if(J.flags.textmode.match(j))b.textmode=J.flags.textmode.output(j),l=!0;else if(J.flags.colors.match(j)){var m=J.flags.colors.output(j);b.theme=B(b.theme,m),l=!0}else if(g.themes[j])g.themes.hasOwnProperty(j)&&(b.theme=B(g.themes[j],null)),l=!0;else if(J.flags.font.match(j))b.font=J.flags.font.output(j),l=!0;else if(J.flags.auto.match(j))b.auto=!0,l=!0;else if(J.flags.text.match(j))b.text=J.flags.text.output(j),l=!0;else if(J.flags.size.match(j))b.size=J.flags.size.output(j),l=!0;else if(J.flags.random.match(j)){null==J.vars.cache.themeKeys&&(J.vars.cache.themeKeys=Object.keys(g.themes));var n=J.vars.cache.themeKeys[0|Math.random()*J.vars.cache.themeKeys.length];b.theme=B(g.themes[n],null),l=!0}l&&b.holderURL.push(j)}return b.holderURL.unshift(g.domain),b.holderURL=b.holderURL.join("/"),c?b:!1}function h(a){var b=a.mode,c=a.el,d=a.flags,e=a.engineSettings,f=d.dimensions,g=d.theme,h=f.width+"x"+f.height;if(b=null==b?d.fluid?"fluid":"image":b,null!=d.text&&(g.text=d.text,"object"===c.nodeName.toLowerCase())){for(var j=g.text.split("\\n"),k=0;k<j.length;k++)j[k]=z.encodeHtmlEntity(j[k]);g.text=j.join("\\n")}var n=d.holderURL,o=B(e,null);if(d.font&&(g.font=d.font,!o.noFontFallback&&"img"===c.nodeName.toLowerCase()&&J.setup.supportsCanvas&&"svg"===o.renderer&&(o=B(o,{renderer:"canvas"}))),d.font&&"canvas"==o.renderer&&(o.reRender=!0),"background"==b)null==c.getAttribute("data-background-src")&&r(c,{"data-background-src":n});else{var p={};p[J.vars.dataAttr]=n,r(c,p)}d.theme=g,c.holderData={flags:d,engineSettings:o},("image"==b||"fluid"==b)&&r(c,{alt:g.text?g.text+" ["+h+"]":h});var q={mode:b,el:c,holderSettings:{dimensions:f,theme:g,flags:d},engineSettings:o};"image"==b?("html"!=o.renderer&&d.auto||(c.style.width=f.width+"px",c.style.height=f.height+"px"),"html"==o.renderer?c.style.backgroundColor=g.background:(i(q),"exact"==d.textmode&&(c.holderData.resizeUpdate=!0,J.vars.resizableImages.push(c),l(c)))):"background"==b&&"html"!=o.renderer?i(q):"fluid"==b&&(c.holderData.resizeUpdate=!0,"%"==f.height.slice(-1)?c.style.height=f.height:null!=d.auto&&d.auto||(c.style.height=f.height+"px"),"%"==f.width.slice(-1)?c.style.width=f.width:null!=d.auto&&d.auto||(c.style.width=f.width+"px"),("inline"==c.style.display||""===c.style.display||"none"==c.style.display)&&(c.style.display="block"),m(c),"html"==o.renderer?c.style.backgroundColor=g.background:(J.vars.resizableImages.push(c),l(c)))}function i(a){function c(){var b=null;switch(h.renderer){case"canvas":b=L(k,a);break;case"svg":b=M(k,a);break;default:throw"Holder: invalid renderer: "+h.renderer}return b}var d=null,e=a.mode,f=a.holderSettings,g=a.el,h=a.engineSettings;switch(h.renderer){case"svg":if(!J.setup.supportsSVG)return;break;case"canvas":if(!J.setup.supportsCanvas)return;break;default:return}var i={width:f.dimensions.width,height:f.dimensions.height,theme:f.theme,flags:f.flags},k=j(i);if(d=c(),null==d)throw"Holder: couldn't render placeholder";"background"==e?(g.style.backgroundImage="url("+d+")",g.style.backgroundSize=i.width+"px "+i.height+"px"):("img"===g.nodeName.toLowerCase()?r(g,{src:d}):"object"===g.nodeName.toLowerCase()&&(r(g,{data:d}),r(g,{type:"image/svg+xml"})),h.reRender&&b.setTimeout(function(){var a=c();if(null==a)throw"Holder: couldn't render placeholder";"img"===g.nodeName.toLowerCase()?r(g,{src:a}):"object"===g.nodeName.toLowerCase()&&(r(g,{data:a}),r(g,{type:"image/svg+xml"}))},100)),r(g,{"data-holder-rendered":!0})}function j(a){function b(a,b,c,d){b.width=c,b.height=d,a.width=Math.max(a.width,b.width),a.height+=b.height}var c=J.defaults.size;switch(parseFloat(a.theme.size)?c=a.theme.size:parseFloat(a.flags.size)&&(c=a.flags.size),a.font={family:a.theme.font?a.theme.font:"Arial, Helvetica, Open Sans, sans-serif",size:k(a.width,a.height,c),units:a.theme.units?a.theme.units:J.defaults.units,weight:a.theme.fontweight?a.theme.fontweight:"bold"},a.text=a.theme.text||Math.floor(a.width)+"x"+Math.floor(a.height),a.noWrap=a.theme.nowrap||a.flags.nowrap,a.align=a.theme.align||a.flags.align||"center",a.flags.textmode){case"literal":a.text=a.flags.dimensions.width+"x"+a.flags.dimensions.height;break;case"exact":if(!a.flags.exactDimensions)break;a.text=Math.floor(a.flags.exactDimensions.width)+"x"+Math.floor(a.flags.exactDimensions.height)}var d=new y({width:a.width,height:a.height}),e=d.Shape,f=new e.Rect("holderBg",{fill:a.theme.background});f.resize(a.width,a.height),d.root.add(f);var g=new e.Group("holderTextGroup",{text:a.text,align:a.align,font:a.font,fill:a.theme.foreground});g.moveTo(null,null,1),d.root.add(g);var h=g.textPositionData=K(d);if(!h)throw"Holder: staging fallback not supported yet.";g.properties.leading=h.boundingBox.height;var i=null,j=null,l=a.width*J.setup.lineWrapRatio,m=l;if(h.lineCount>1){var n,o=0,p=0,q=0;j=new e.Group("line"+q),("left"===a.align||"right"===a.align)&&(m=a.width*(1-2*(1-J.setup.lineWrapRatio)));for(var r=0;r<h.words.length;r++){var s=h.words[r];i=new e.Text(s.text);var t="\\n"==s.text;!a.noWrap&&(o+s.width>=m||t===!0)&&(b(g,j,o,g.properties.leading),g.add(j),o=0,p+=g.properties.leading,q+=1,j=new e.Group("line"+q),j.y=p),t!==!0&&(i.moveTo(o,0),o+=h.spaceWidth+s.width,j.add(i))}if(b(g,j,o,g.properties.leading),g.add(j),"left"===a.align)g.moveTo(a.width-l,null,null);else if("right"===a.align){for(n in g.children)j=g.children[n],j.moveTo(a.width-j.width,null,null);g.moveTo(0-(a.width-l),null,null)}else{for(n in g.children)j=g.children[n],j.moveTo((g.width-j.width)/2,null,null);g.moveTo((a.width-g.width)/2,null,null)}g.moveTo(null,(a.height-g.height)/2,null),(a.height-g.height)/2<0&&g.moveTo(null,0,null)}else i=new e.Text(a.text),j=new e.Group("line0"),j.add(i),g.add(j),"left"===a.align?g.moveTo(a.width-l,null,null):"right"===a.align?g.moveTo(0-(a.width-l),null,null):g.moveTo((a.width-h.boundingBox.width)/2,null,null),g.moveTo(null,(a.height-h.boundingBox.height)/2,null);return d}function k(a,b,c){var d=parseInt(a,10),e=parseInt(b,10),f=Math.max(d,e),g=Math.min(d,e),h=.8*Math.min(g,f*J.defaults.scale);return Math.round(Math.max(c,h))}function l(a){var b;b=null==a||null==a.nodeType?J.vars.resizableImages:[a];for(var c=0,d=b.length;d>c;c++){var e=b[c];if(e.holderData){var f=e.holderData.flags,g=D(e);if(g){if(!e.holderData.resizeUpdate)continue;if(f.fluid&&f.auto){var h=e.holderData.fluidConfig;switch(h.mode){case"width":g.height=g.width/h.ratio;break;case"height":g.width=g.height*h.ratio}}var j={mode:"image",holderSettings:{dimensions:g,theme:f.theme,flags:f},el:e,engineSettings:e.holderData.engineSettings};"exact"==f.textmode&&(f.exactDimensions=g,j.holderSettings.dimensions=f.dimensions),i(j)}else p(e)}}}function m(a){if(a.holderData){var b=D(a);if(b){var c=a.holderData.flags,d={fluidHeight:"%"==c.dimensions.height.slice(-1),fluidWidth:"%"==c.dimensions.width.slice(-1),mode:null,initialDimensions:b};d.fluidWidth&&!d.fluidHeight?(d.mode="width",d.ratio=d.initialDimensions.width/parseFloat(c.dimensions.height)):!d.fluidWidth&&d.fluidHeight&&(d.mode="height",d.ratio=parseFloat(c.dimensions.width)/d.initialDimensions.height),a.holderData.fluidConfig=d}else p(a)}}function n(){for(var a,c=[],d=Object.keys(J.vars.invisibleImages),e=0,f=d.length;f>e;e++)a=J.vars.invisibleImages[d[e]],D(a)&&"img"==a.nodeName.toLowerCase()&&(c.push(a),delete J.vars.invisibleImages[d[e]]);c.length&&I.run({images:c}),b.requestAnimationFrame(n)}function o(){J.vars.visibilityCheckStarted||(b.requestAnimationFrame(n),J.vars.visibilityCheckStarted=!0)}function p(a){a.holderData.invisibleId||(J.vars.invisibleId+=1,J.vars.invisibleImages["i"+J.vars.invisibleId]=a,a.holderData.invisibleId=J.vars.invisibleId)}function q(a,b){return null==b?document.createElement(a):document.createElementNS(b,a)}function r(a,b){for(var c in b)a.setAttribute(c,b[c])}function s(a,b,c){var d,e;null==a?(a=q("svg",E),d=q("defs",E),e=q("style",E),r(e,{type:"text/css"}),d.appendChild(e),a.appendChild(d)):e=a.querySelector("style"),a.webkitMatchesSelector&&a.setAttribute("xmlns",E);for(var f=0;f<a.childNodes.length;f++)a.childNodes[f].nodeType===F&&a.removeChild(a.childNodes[f]);for(;e.childNodes.length;)e.removeChild(e.childNodes[0]);return r(a,{width:b,height:c,viewBox:"0 0 "+b+" "+c,preserveAspectRatio:"none"}),a}function t(a,c){if(b.XMLSerializer){var d=new XMLSerializer,e="",f=c.stylesheets;if(c.svgXMLStylesheet){for(var g=u(),h=f.length-1;h>=0;h--){var i=g.createProcessingInstruction("xml-stylesheet",'href="'+f[h]+'" rel="stylesheet"');g.insertBefore(i,g.firstChild)}g.removeChild(g.documentElement),e=d.serializeToString(g)}var j=d.serializeToString(a);return j=j.replace(/\&amp;(\#[0-9]{2,}\;)/g,"&$1"),e+j}}function u(){return b.DOMParser?(new DOMParser).parseFromString("<xml />","application/xml"):void 0}function v(a){J.vars.debounceTimer||a.call(this),J.vars.debounceTimer&&b.clearTimeout(J.vars.debounceTimer),J.vars.debounceTimer=b.setTimeout(function(){J.vars.debounceTimer=null,a.call(this)},J.setup.debounce)}function w(){v(function(){l(null)})}var x=c(1),y=c(2),z=c(3),A=c(4),B=z.extend,C=z.getNodeArray,D=z.dimensionCheck,E="http://www.w3.org/2000/svg",F=8,G="2.7.0",H="\nCreated with Holder.js "+G+".\nLearn more at http://holderjs.com\n(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n",I={version:G,addTheme:function(a,b){return null!=a&&null!=b&&(J.settings.themes[a]=b),delete J.vars.cache.themeKeys,this},addImage:function(a,b){var c=document.querySelectorAll(b);if(c.length)for(var d=0,e=c.length;e>d;d++){var f=q("img"),g={};g[J.vars.dataAttr]=a,r(f,g),c[d].appendChild(f)}return this},setResizeUpdate:function(a,b){a.holderData&&(a.holderData.resizeUpdate=!!b,a.holderData.resizeUpdate&&l(a))},run:function(a){a=a||{};var c={},f=B(J.settings,a);J.vars.preempted=!0,J.vars.dataAttr=f.dataAttr||J.vars.dataAttr,c.renderer=f.renderer?f.renderer:J.setup.renderer,-1===J.setup.renderers.join(",").indexOf(c.renderer)&&(c.renderer=J.setup.supportsSVG?"svg":J.setup.supportsCanvas?"canvas":"html");var g=C(f.images),i=C(f.bgnodes),j=C(f.stylenodes),k=C(f.objects);c.stylesheets=[],c.svgXMLStylesheet=!0,c.noFontFallback=f.noFontFallback?f.noFontFallback:!1;for(var l=0;l<j.length;l++){var m=j[l];if(m.attributes.rel&&m.attributes.href&&"stylesheet"==m.attributes.rel.value){var n=m.attributes.href.value,o=q("a");o.href=n;var p=o.protocol+"//"+o.host+o.pathname+o.search;c.stylesheets.push(p)}}for(l=0;l<i.length;l++)if(b.getComputedStyle){var r=b.getComputedStyle(i[l],null).getPropertyValue("background-image"),s=i[l].getAttribute("data-background-src"),t=null;t=null==s?r:s;var u=null,v="?"+f.domain+"/";if(0===t.indexOf(v))u=t.slice(1);else if(-1!=t.indexOf(v)){var w=t.substr(t.indexOf(v)).slice(1),x=w.match(/([^\"]*)"?\)/);null!=x&&(u=x[1])}if(null!=u){var y=e(u,f);y&&h({mode:"background",el:i[l],flags:y,engineSettings:c})}}for(l=0;l<k.length;l++){var A=k[l],D={};try{D.data=A.getAttribute("data"),D.dataSrc=A.getAttribute(J.vars.dataAttr)}catch(E){}var F=null!=D.data&&0===D.data.indexOf(f.domain),G=null!=D.dataSrc&&0===D.dataSrc.indexOf(f.domain);F?d(f,c,D.data,A):G&&d(f,c,D.dataSrc,A)}for(l=0;l<g.length;l++){var H=g[l],I={};try{I.src=H.getAttribute("src"),I.dataSrc=H.getAttribute(J.vars.dataAttr),I.rendered=H.getAttribute("data-holder-rendered")}catch(E){}var K=null!=I.src,L=null!=I.dataSrc&&0===I.dataSrc.indexOf(f.domain),M=null!=I.rendered&&"true"==I.rendered;K?0===I.src.indexOf(f.domain)?d(f,c,I.src,H):L&&(M?d(f,c,I.dataSrc,H):!function(a,b,c,e,f){z.imageExists(a,function(a){a||d(b,c,e,f)})}(I.src,f,c,I.dataSrc,H)):L&&d(f,c,I.dataSrc,H)}return this}},J={settings:{domain:"holder.js",images:"img",objects:"object",bgnodes:"body .holderjs",stylenodes:"head link.holderjs",stylesheets:[],themes:{gray:{background:"#EEEEEE",foreground:"#AAAAAA"},social:{background:"#3a5a97",foreground:"#FFFFFF"},industrial:{background:"#434A52",foreground:"#C2F200"},sky:{background:"#0D8FDB",foreground:"#FFFFFF"},vine:{background:"#39DBAC",foreground:"#1E292C"},lava:{background:"#F8591A",foreground:"#1C2846"}}},defaults:{size:10,units:"pt",scale:1/16},flags:{dimensions:{regex:/^(\d+)x(\d+)$/,output:function(a){var b=this.regex.exec(a);return{width:+b[1],height:+b[2]}}},fluid:{regex:/^([0-9]+%?)x([0-9]+%?)$/,output:function(a){var b=this.regex.exec(a);return{width:b[1],height:b[2]}}},colors:{regex:/(?:#|\^)([0-9a-f]{3,})\:(?:#|\^)([0-9a-f]{3,})/i,output:function(a){var b=this.regex.exec(a);return{foreground:"#"+b[2],background:"#"+b[1]}}},text:{regex:/text\:(.*)/,output:function(a){return this.regex.exec(a)[1].replace("\\/","/")}},font:{regex:/font\:(.*)/,output:function(a){return this.regex.exec(a)[1]}},auto:{regex:/^auto$/},textmode:{regex:/textmode\:(.*)/,output:function(a){return this.regex.exec(a)[1]}},random:{regex:/^random$/},size:{regex:/size\:(\d+)/,output:function(a){return this.regex.exec(a)[1]}}}},K=function(){var a=null,b=null,c=null;return function(d){var e=d.root;if(J.setup.supportsSVG){var f=!1,g=function(a){return document.createTextNode(a)};(null==a||a.parentNode!==document.body)&&(f=!0),a=s(a,e.properties.width,e.properties.height),a.style.display="block",f&&(b=q("text",E),c=g(null),r(b,{x:0}),b.appendChild(c),a.appendChild(b),document.body.appendChild(a),a.style.visibility="hidden",a.style.position="absolute",a.style.top="-100%",a.style.left="-100%");var h=e.children.holderTextGroup,i=h.properties;r(b,{y:i.font.size,style:z.cssProps({"font-weight":i.font.weight,"font-size":i.font.size+i.font.units,"font-family":i.font.family})}),c.nodeValue=i.text;var j=b.getBBox(),k=Math.ceil(j.width/(e.properties.width*J.setup.lineWrapRatio)),l=i.text.split(" "),m=i.text.match(/\\n/g);k+=null==m?0:m.length,c.nodeValue=i.text.replace(/[ ]+/g,"");var n=b.getComputedTextLength(),o=j.width-n,p=Math.round(o/Math.max(1,l.length-1)),t=[];if(k>1){c.nodeValue="";for(var u=0;u<l.length;u++)if(0!==l[u].length){c.nodeValue=z.decodeHtmlEntity(l[u]);var v=b.getBBox();t.push({text:l[u],width:v.width})}}return a.style.display="none",{spaceWidth:p,lineCount:k,boundingBox:j,words:t}}return!1}}(),L=function(){var a=q("canvas"),b=null;return function(c){null==b&&(b=a.getContext("2d"));var d=c.root;a.width=J.dpr(d.properties.width),a.height=J.dpr(d.properties.height),b.textBaseline="middle",b.fillStyle=d.children.holderBg.properties.fill,b.fillRect(0,0,J.dpr(d.children.holderBg.width),J.dpr(d.children.holderBg.height));{var e=d.children.holderTextGroup;e.properties}b.font=e.properties.font.weight+" "+J.dpr(e.properties.font.size)+e.properties.font.units+" "+e.properties.font.family+", monospace",b.fillStyle=e.properties.fill;for(var f in e.children){var g=e.children[f];for(var h in g.children){var i=g.children[h],j=J.dpr(e.x+g.x+i.x),k=J.dpr(e.y+g.y+i.y+e.properties.leading/2);b.fillText(i.properties.text,j,k)}}return a.toDataURL("image/png")}}(),M=function(){if(b.XMLSerializer){var a=u(),c=s(null,0,0),d=q("rect",E);return c.appendChild(d),function(b,e){var f=b.root;s(c,f.properties.width,f.properties.height);for(var g=c.querySelectorAll("g"),h=0;h<g.length;h++)g[h].parentNode.removeChild(g[h]);var i=e.holderSettings.flags.holderURL,j="holder_"+(Number(new Date)+32768+(0|32768*Math.random())).toString(16),k=q("g",E),l=f.children.holderTextGroup,m=l.properties,n=q("g",E),o=l.textPositionData,p="#"+j+" text { "+z.cssProps({fill:m.fill,"font-weight":m.font.weight,"font-family":m.font.family+", monospace","font-size":m.font.size+m.font.units})+" } ",u=a.createComment("\nSource URL: "+i+H),v=a.createCDATASection(p),w=c.querySelector("style");r(k,{id:j}),c.insertBefore(u,c.firstChild),w.appendChild(v),k.appendChild(d),k.appendChild(n),c.appendChild(k),r(d,{width:f.children.holderBg.width,height:f.children.holderBg.height,fill:f.children.holderBg.properties.fill}),l.y+=.8*o.boundingBox.height;for(var x in l.children){var y=l.children[x];for(var A in y.children){var B=y.children[A],C=l.x+y.x+B.x,D=l.y+y.y+B.y,F=q("text",E),G=document.createTextNode(null);r(F,{x:C,y:D}),G.nodeValue=B.properties.text,F.appendChild(G),n.appendChild(F)}}var I=N(t(c,e.engineSettings),"background"===e.mode);return I}}}(),N=function(){var a="data:image/svg+xml;charset=UTF-8,",b="data:image/svg+xml;charset=UTF-8;base64,";return function(c,d){return d?b+btoa(unescape(encodeURIComponent(c))):a+encodeURIComponent(c)}}();for(var O in J.flags)J.flags.hasOwnProperty(O)&&(J.flags[O].match=function(a){return a.match(this.regex)});J.setup={renderer:"html",debounce:100,ratio:1,supportsCanvas:!1,supportsSVG:!1,lineWrapRatio:.9,renderers:["html","canvas","svg"]},J.dpr=function(a){return a*J.setup.ratio},J.vars={preempted:!1,resizableImages:[],invisibleImages:{},invisibleId:0,visibilityCheckStarted:!1,debounceTimer:null,cache:{},dataAttr:"data-src"},function(){var a=1,c=1,d=q("canvas"),e=null;d.getContext&&-1!=d.toDataURL("image/png").indexOf("data:image/png")&&(J.setup.renderer="canvas",e=d.getContext("2d"),J.setup.supportsCanvas=!0),J.setup.supportsCanvas&&(a=b.devicePixelRatio||1,c=e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),J.setup.ratio=a/c,document.createElementNS&&document.createElementNS(E,"svg").createSVGRect&&(J.setup.renderer="svg",J.setup.supportsSVG=!0)}(),o(),x&&x(function(){J.vars.preempted||I.run(),b.addEventListener?(b.addEventListener("resize",w,!1),b.addEventListener("orientationchange",w,!1)):b.attachEvent("onresize",w),"object"==typeof b.Turbolinks&&b.document.addEventListener("page:change",function(){I.run()})}),a.exports=I}).call(b,function(){return this}())},function(a){function b(a){function b(a){if(!v){if(!g.body)return e(b);for(v=!0;a=w.shift();)e(a)}}function c(a){(t||a.type===i||g[m]===l)&&(d(),b())}function d(){t?(g[s](q,c,j),a[s](i,c,j)):(g[o](r,c),a[o](k,c))}function e(a,b){setTimeout(a,+b>=0?b:1)}function f(a){v?e(a):w.push(a)}null==document.readyState&&document.addEventListener&&(document.addEventListener("DOMContentLoaded",function y(){document.removeEventListener("DOMContentLoaded",y,!1),document.readyState="complete"},!1),document.readyState="loading");var g=a.document,h=g.documentElement,i="load",j=!1,k="on"+i,l="complete",m="readyState",n="attachEvent",o="detachEvent",p="addEventListener",q="DOMContentLoaded",r="onreadystatechange",s="removeEventListener",t=p in g,u=j,v=j,w=[];if(g[m]===l)e(b);else if(t)g[p](q,c,j),a[p](i,c,j);else{g[n](r,c),a[n](k,c);try{u=null==a.frameElement&&h}catch(x){}u&&u.doScroll&&!function z(){if(!v){try{u.doScroll("left")}catch(a){return e(z,50)}d(),b()}}()}return f.version="1.4.0",f.isReady=function(){return v},f}a.exports="undefined"!=typeof window&&b(window)},function(a,b,c){var d=c(5),e=function(a){function b(a,b){for(var c in b)a[c]=b[c];return a}var c=1,e=d.defclass({constructor:function(a){c++,this.parent=null,this.children={},this.id=c,this.name="n"+c,null!=a&&(this.name=a),this.x=0,this.y=0,this.z=0,this.width=0,this.height=0},resize:function(a,b){null!=a&&(this.width=a),null!=b&&(this.height=b)},moveTo:function(a,b,c){this.x=null!=a?a:this.x,this.y=null!=b?b:this.y,this.z=null!=c?c:this.z},add:function(a){var b=a.name;if(null!=this.children[b])throw"SceneGraph: child with that name already exists: "+b;this.children[b]=a,a.parent=this}}),f=d(e,function(b){this.constructor=function(){b.constructor.call(this,"root"),this.properties=a}}),g=d(e,function(a){function c(c,d){if(a.constructor.call(this,c),this.properties={fill:"#000"},null!=d)b(this.properties,d);else if(null!=c&&"string"!=typeof c)throw"SceneGraph: invalid node name"}this.Group=d.extend(this,{constructor:c,type:"group"}),this.Rect=d.extend(this,{constructor:c,type:"rect"}),this.Text=d.extend(this,{constructor:function(a){c.call(this),this.properties.text=a},type:"text"})}),h=new f;return this.Shape=g,this.root=h,this};a.exports=e},function(a,b){(function(a){b.extend=function(a,b){var c={};for(var d in a)a.hasOwnProperty(d)&&(c[d]=a[d]);if(null!=b)for(var e in b)b.hasOwnProperty(e)&&(c[e]=b[e]);return c},b.cssProps=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c+":"+a[c]);return b.join(";")},b.encodeHtmlEntity=function(a){for(var b=[],c=0,d=a.length-1;d>=0;d--)c=a.charCodeAt(d),b.unshift(c>128?["&#",c,";"].join(""):a[d]);return b.join("")},b.getNodeArray=function(b){var c=null;return"string"==typeof b?c=document.querySelectorAll(b):a.NodeList&&b instanceof a.NodeList?c=b:a.Node&&b instanceof a.Node?c=[b]:a.HTMLCollection&&b instanceof a.HTMLCollection?c=b:b instanceof Array?c=b:null===b&&(c=[]),c},b.imageExists=function(a,b){var c=new Image;c.onerror=function(){b.call(this,!1)},c.onload=function(){b.call(this,!0)},c.src=a},b.decodeHtmlEntity=function(a){return a.replace(/&#(\d+);/g,function(a,b){return String.fromCharCode(b)})},b.dimensionCheck=function(a){var b={height:a.clientHeight,width:a.clientWidth};return b.height&&b.width?b:!1},b.truthy=function(a){return"string"==typeof a?"true"===a||"yes"===a||"1"===a||"on"===a||"✓"===a:!!a}}).call(b,function(){return this}())},function(a,b,c){var d=encodeURIComponent,e=decodeURIComponent,f=c(7),g=c(6),h=/(\w+)\[(\d+)\]/,i=/\w+\.\w+/;b.parse=function(a){if("string"!=typeof a)return{};if(a=f(a),""===a)return{};"?"===a.charAt(0)&&(a=a.slice(1));for(var b={},c=a.split("&"),d=0;d<c.length;d++){var g,j,k,l=c[d].split("="),m=e(l[0]);if(g=h.exec(m))b[g[1]]=b[g[1]]||[],b[g[1]][g[2]]=e(l[1]);else if(g=i.test(m)){for(g=m.split("."),j=b;g.length;)if(k=g.shift(),k.length){if(j[k]){if(j[k]&&"object"!=typeof j[k])break}else j[k]={};g.length||(j[k]=e(l[1])),j=j[k]}}else b[l[0]]=null==l[1]?"":e(l[1])}return b},b.stringify=function(a){if(!a)return"";var b=[];for(var c in a){var e=a[c];if("array"!=g(e))b.push(d(c)+"="+d(a[c]));else for(var f=0;f<e.length;++f)b.push(d(c+"["+f+"]")+"="+d(e[f]))}return b.join("&")}},function(a){var b=function(){},c=Array.prototype.slice,d=function(a,d){var e=b.prototype="function"==typeof a?a.prototype:a,f=new b,g=d.apply(f,c.call(arguments,2).concat(e));if("object"==typeof g)for(var h in g)f[h]=g[h];if(!f.hasOwnProperty("constructor"))return f;var i=f.constructor;return i.prototype=f,i};d.defclass=function(a){var b=a.constructor;return b.prototype=a,b},d.extend=function(a,b){return d(a,function(a){return this.uber=a,b})},a.exports=d},function(a){var b=Object.prototype.toString;a.exports=function(a){switch(b.call(a)){case"[object Date]":return"date";case"[object RegExp]":return"regexp";case"[object Arguments]":return"arguments";case"[object Array]":return"array";case"[object Error]":return"error"}return null===a?"null":void 0===a?"undefined":a!==a?"nan":a&&1===a.nodeType?"element":(a=a.valueOf?a.valueOf():Object.prototype.valueOf.apply(a),typeof a)}},function(a,b){function c(a){return a.replace(/^\s*|\s*$/g,"")}b=a.exports=c,b.left=function(a){return a.replace(/^\s*/,"")},b.right=function(a){return a.replace(/\s*$/,"")}}])}),function(a,b){b&&(Holder=a.Holder)}(this,Meteor&&Package);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: holder_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.1
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nihad Abbasov