FooGallery – Image Gallery WordPress Plugin - Version 1.9.47

Version Description

Please update in order to for FooGallery to work in WP 5.5+!

Download this release

Release Info

Developer bradvin
Plugin Icon 128x128 FooGallery – Image Gallery WordPress Plugin
Version 1.9.47
Comparing to
See all releases

Code changes from version 1.9.37 to 1.9.47

Files changed (39) hide show
  1. README.txt +34 -19
  2. css/admin-foogallery-gallery-piles.css +93 -0
  3. extensions/albums/admin/class-columns.php +1 -1
  4. extensions/albums/admin/class-metaboxes.php +10 -6
  5. extensions/albums/album-stack.php +69 -60
  6. extensions/albums/class-albums-extension.php +7 -1
  7. extensions/albums/css/admin-foogallery-album.css +3 -110
  8. extensions/albums/functions.php +20 -10
  9. extensions/albums/js/admin-foogallery-album.js +1 -1
  10. extensions/default-templates/default/js/admin-gallery-default.js +1 -1
  11. extensions/default-templates/image-viewer/class-image-viewer-gallery-template.php +5 -1
  12. extensions/default-templates/image-viewer/js/admin-gallery-image-viewer.js +1 -1
  13. extensions/default-templates/shared/css/foogallery.css +267 -0
  14. extensions/default-templates/shared/css/foogallery.min.css +1 -1
  15. extensions/default-templates/shared/js/foogallery.js +1092 -506
  16. extensions/default-templates/shared/js/foogallery.min.js +5 -5
  17. extensions/default-templates/thumbnail/js/admin-gallery-thumbnail.js +1 -1
  18. foogallery.php +2 -2
  19. freemius/assets/css/admin/account.css +1 -1
  20. freemius/languages/freemius.pot +2524 -2524
  21. freemius/start.php +529 -529
  22. freemius/templates/forms/affiliation.php +508 -508
  23. includes/WPThumb/wpthumb.php +1 -1
  24. includes/admin/class-admin.php +21 -1
  25. includes/admin/class-columns.php +1 -1
  26. includes/admin/class-gallery-editor.php +19 -112
  27. includes/admin/class-settings.php +13 -2
  28. includes/admin/view-help.php +1 -1
  29. includes/class-foogallery-common-fields.php +1 -1
  30. includes/class-foogallery-datasource-media_library.php +23 -6
  31. includes/class-thumbnail-dimensions.php +10 -0
  32. includes/compatibility/class-foobox-compatibility.php +70 -0
  33. includes/foopluginbase/js/admin-settings.js +1 -1
  34. includes/render-functions.php +10 -0
  35. js/admin-foogallery.js +3 -3
  36. js/admin-page-foogallery-extensions.js +1 -1
  37. js/admin-page-foogallery-settings.js +7 -7
  38. js/admin-uploader.js +1 -1
  39. js/foogallery.admin.min.js +1 -1
README.txt CHANGED
@@ -1,18 +1,18 @@
1
- === Best Image Gallery & Responsive Photo Gallery - FooGallery ===
2
  Contributors: bradvin, steveush, fooplugins
3
- Donate link: http://fooplugins.com
4
- Tags: gallery, image gallery, photo gallery, responsive gallery, wordpress gallery plugin, best gallery plugin, albums, media gallery, video gallery, lightbox
5
  Requires at least: 3.9
6
- Tested up to: 5.5
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
  FooGallery is a powerful, responsive photo gallery plugin. Stunning gallery layouts with advanced settings for complete customization and control.
12
 
13
  == Description ==
14
 
15
- = Best Gallery Plugin =
16
 
17
  Make gallery management in WordPress great again! With FooGallery you can easily add a stunning photo gallery to your website in minutes.
18
 
@@ -24,7 +24,7 @@ FooGallery was built to be highly configurable and extendable for developers or
24
 
25
  That is why we think FooGallery is the best gallery plugin. After using it, we hope you will agree.
26
 
27
- [Visit the FooGallery Wordpress Gallery Plugin Homepage](http://fooplugins.com/foogallery)
28
 
29
  = WordPress Gallery Plugin Features =
30
 
@@ -71,7 +71,7 @@ The following free features make FooGallery the **best gallery plugin** on the m
71
  * Import video from Youtube, Vimeo and others
72
  * Self-hosted videos
73
  * Filtered image gallery using Media Tags or Categories - [demo](https://fooplugins.com/foogallery/wordpress-filtered-gallery/)
74
- * Multi-level filtering for galleries
75
  * Media tags and media category management for attachments
76
  * PRO image and media lightbox built in! [demo](https://fooplugins.com/foogallery/foogallery-pro-lightbox/)
77
  * Dynamic Galleries (load images from other sources):
@@ -80,7 +80,6 @@ The following free features make FooGallery the **best gallery plugin** on the m
80
  * Load all attachments with Media Tags
81
  * Load all attachments with Media Categories
82
  * Load from a folder in Real Media Library
83
- * Load images from Instagram
84
  * Load featured images from a post/page/custom post type
85
  * 11 beautiful hover effect presets - [demo](https://fooplugins.com/foogallery/hover-presets/)
86
  * 12 CSS thumbnail filters (Instagram) - [demo](https://fooplugins.com/foogallery/thumbnail-filters/)
@@ -227,6 +226,32 @@ Please update in order to for FooGallery to work in WP 5.5+!
227
 
228
  == Changelog ==
229
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  = 1.9.37 =
231
  * Date Updated : 2020-10-29
232
  * Update : Ensure Gallery Items and Settings metaboxes are always visible when editing a gallery
@@ -239,7 +264,6 @@ Please update in order to for FooGallery to work in WP 5.5+!
239
  * Date Updated : 2020-10-12
240
  * Fix : Fix for thumbnail generation not working when upload folder is not HTTPS
241
 
242
-
243
  = 1.9.34 =
244
  * Date Updated : 2020-08-30
245
  * Fix : Fix for incorrect captions in some scenarios
@@ -250,7 +274,6 @@ Please update in order to for FooGallery to work in WP 5.5+!
250
  * Date Updated : 2020-08-07
251
  * Fix : IMPORTANT fix for WP 5.5 compatibility when editing galleries (gallery preview button was not showing)
252
 
253
-
254
  = 1.9.30 =
255
  * Date Updated : 2020-08-03
256
  * Fix : IMPORTANT fix for WP 5.5 compatibility when editing galleries (gallery template selector was not showing)
@@ -258,28 +281,24 @@ Please update in order to for FooGallery to work in WP 5.5+!
258
  * Update : improved lightbox messages when no lightboxes are installed
259
  * Update : Freemius SDK 2.4.0.1
260
 
261
-
262
  = 1.9.28 =
263
  * Date Updated : 2020-07-18
264
  * Fix : Fix for some installs showing thumbnail generation error
265
  * Update : better mobile support for admin settings tabs
266
  * Update : FooGallery client side 1.4.16
267
 
268
-
269
  = 1.9.26 =
270
  * Date Updated : 2020-06-29
271
  * Fix : Fix for All-In-One album hidden items still clickable
272
  * Fix : Fix for fatal error on some versions of PHP
273
  * Update : FooGallery client side 1.4.15
274
 
275
-
276
  = 1.9.25 =
277
  * Date Updated : 2020-06-04
278
  * Fix : Fixed bug to prevent infinite loop with ResizeObserver in some themes
279
  * Fix : Fixed possible text-domain issue
280
  * Update : FooGallery client side 1.4.13
281
 
282
-
283
  = 1.9.24 =
284
  * Date Updated : 2020-05-04
285
  * Fix : Fixed bug where thumbs were not loading on mobile in Justified and Portfolio galleries
@@ -301,7 +320,6 @@ Please update in order to for FooGallery to work in WP 5.5+!
301
  * Update : Freemius SDK 2.3.2
302
  * Update : FooGallery client side 1.4.11
303
 
304
-
305
  = 1.9.11 =
306
  * Date Updated : 2020-03-29
307
  * Fix : Fix for Simple Portfolio template not saving "None" for captions.
@@ -310,7 +328,6 @@ Please update in order to for FooGallery to work in WP 5.5+!
310
  * Fix : Updated RankMath compatibility to work with pre PHP 5.4
311
  * New : Added filter "foogallery_build_dynamic_gallery" for dynamic gallery creation
312
  * New : Added WPML config file for better translations. (Also improves Polylang compatibility.)
313
-
314
  * Update : FooGallery client side 1.4.6 (including multiple bug fixes)
315
 
316
  = 1.9.8 =
@@ -332,7 +349,6 @@ Please update in order to for FooGallery to work in WP 5.5+!
332
  = 1.8.18 =
333
  * Date Updated : 2019-10-23
334
  * New : Elementor compatibility - gallery previews in Elementor editor work, and added a FooGallery widget to the Elementor editor
335
-
336
  * Fix : Images in Yoast SEO sitemaps pull correctly for all types of gallery embedding
337
  * Fix : Lazy-load issues on certain browsers (reverted back to old logic)
338
  * Fix : Updated WPThumb so that images with querystrings in the URL will work
@@ -341,7 +357,6 @@ Please update in order to for FooGallery to work in WP 5.5+!
341
  = 1.8.14 =
342
 
343
  * New : Added setting to move "Add Media" button to front of attachment listing (Advanced tab in FooGallery Settings)
344
-
345
  * Fix : Lazy-load issues with Gutenberg Editor
346
  * Fix : Simple portfolio layout issue with certain themes
347
  * Update : FooGallery client side 1.3.4
1
+ === Image Gallery & Responsive Photo Gallery - FooGallery ===
2
  Contributors: bradvin, steveush, fooplugins
3
+ Donate link: https://fooplugins.com
4
+ Tags: best gallery plugin, gallery, image gallery, photo gallery, wordpress gallery plugin, responsive gallery, albums, media gallery, video gallery, lightbox
5
  Requires at least: 3.9
6
+ Tested up to: 5.6
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
+ License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
 
11
  FooGallery is a powerful, responsive photo gallery plugin. Stunning gallery layouts with advanced settings for complete customization and control.
12
 
13
  == Description ==
14
 
15
+ = WordPress Gallery Plugin =
16
 
17
  Make gallery management in WordPress great again! With FooGallery you can easily add a stunning photo gallery to your website in minutes.
18
 
24
 
25
  That is why we think FooGallery is the best gallery plugin. After using it, we hope you will agree.
26
 
27
+ [Visit the FooGallery Wordpress Gallery Plugin Homepage](https://fooplugins.com/foogallery/)
28
 
29
  = WordPress Gallery Plugin Features =
30
 
71
  * Import video from Youtube, Vimeo and others
72
  * Self-hosted videos
73
  * Filtered image gallery using Media Tags or Categories - [demo](https://fooplugins.com/foogallery/wordpress-filtered-gallery/)
74
+ * Multi-level filtering for galleries
75
  * Media tags and media category management for attachments
76
  * PRO image and media lightbox built in! [demo](https://fooplugins.com/foogallery/foogallery-pro-lightbox/)
77
  * Dynamic Galleries (load images from other sources):
80
  * Load all attachments with Media Tags
81
  * Load all attachments with Media Categories
82
  * Load from a folder in Real Media Library
 
83
  * Load featured images from a post/page/custom post type
84
  * 11 beautiful hover effect presets - [demo](https://fooplugins.com/foogallery/hover-presets/)
85
  * 12 CSS thumbnail filters (Instagram) - [demo](https://fooplugins.com/foogallery/thumbnail-filters/)
226
 
227
  == Changelog ==
228
 
229
+ = 1.9.44 =
230
+ * Date Updated : 2020-12-06
231
+ * New : Allow thumb width and height to be overridden with shortcode arguments override_width and override_height
232
+ * Fix : fixed caption bugs where FooBox was not picking up custom/override captions
233
+ * Fix : removed use of deprecated functions in jQuery for WP 5.6
234
+ * Fix : removed localStorage checks, so that browser does not say that cookies are in use
235
+ * Update : FooGallery client side 1.4.24
236
+ * Update : Frontend gallery initialization now uses custom ready event by default, to avoid jQuery errors
237
+
238
+
239
+ = 1.9.40 =
240
+ * Date Updated : 2020-11-29
241
+ * Fix : rewrite of All-in-one Stack album fixing many bugs
242
+ * Fix : fixed some styling issues with album edit page and gallery select modal
243
+ * New : Added setting 'Force Hide Trial Notice' to never show the trail upsell message again
244
+ * Update : FooGallery client side 1.4.22
245
+
246
+ = 1.9.39 =
247
+ * Date Updated : 2020-11-24
248
+ * Fix : Allow gallery thumb order to be overridden when using foogallery_attachment_get_posts_args filter
249
+
250
+ = 1.9.38 =
251
+ * Date Updated : 2020-11-02
252
+ * Fix : Fixed PHP warning within thumbnail generation code when deleting attachments
253
+ * New : Added function to render an album : foogallery_render_album
254
+
255
  = 1.9.37 =
256
  * Date Updated : 2020-10-29
257
  * Update : Ensure Gallery Items and Settings metaboxes are always visible when editing a gallery
264
  * Date Updated : 2020-10-12
265
  * Fix : Fix for thumbnail generation not working when upload folder is not HTTPS
266
 
 
267
  = 1.9.34 =
268
  * Date Updated : 2020-08-30
269
  * Fix : Fix for incorrect captions in some scenarios
274
  * Date Updated : 2020-08-07
275
  * Fix : IMPORTANT fix for WP 5.5 compatibility when editing galleries (gallery preview button was not showing)
276
 
 
277
  = 1.9.30 =
278
  * Date Updated : 2020-08-03
279
  * Fix : IMPORTANT fix for WP 5.5 compatibility when editing galleries (gallery template selector was not showing)
281
  * Update : improved lightbox messages when no lightboxes are installed
282
  * Update : Freemius SDK 2.4.0.1
283
 
 
284
  = 1.9.28 =
285
  * Date Updated : 2020-07-18
286
  * Fix : Fix for some installs showing thumbnail generation error
287
  * Update : better mobile support for admin settings tabs
288
  * Update : FooGallery client side 1.4.16
289
 
 
290
  = 1.9.26 =
291
  * Date Updated : 2020-06-29
292
  * Fix : Fix for All-In-One album hidden items still clickable
293
  * Fix : Fix for fatal error on some versions of PHP
294
  * Update : FooGallery client side 1.4.15
295
 
 
296
  = 1.9.25 =
297
  * Date Updated : 2020-06-04
298
  * Fix : Fixed bug to prevent infinite loop with ResizeObserver in some themes
299
  * Fix : Fixed possible text-domain issue
300
  * Update : FooGallery client side 1.4.13
301
 
 
302
  = 1.9.24 =
303
  * Date Updated : 2020-05-04
304
  * Fix : Fixed bug where thumbs were not loading on mobile in Justified and Portfolio galleries
320
  * Update : Freemius SDK 2.3.2
321
  * Update : FooGallery client side 1.4.11
322
 
 
323
  = 1.9.11 =
324
  * Date Updated : 2020-03-29
325
  * Fix : Fix for Simple Portfolio template not saving "None" for captions.
328
  * Fix : Updated RankMath compatibility to work with pre PHP 5.4
329
  * New : Added filter "foogallery_build_dynamic_gallery" for dynamic gallery creation
330
  * New : Added WPML config file for better translations. (Also improves Polylang compatibility.)
 
331
  * Update : FooGallery client side 1.4.6 (including multiple bug fixes)
332
 
333
  = 1.9.8 =
349
  = 1.8.18 =
350
  * Date Updated : 2019-10-23
351
  * New : Elementor compatibility - gallery previews in Elementor editor work, and added a FooGallery widget to the Elementor editor
 
352
  * Fix : Images in Yoast SEO sitemaps pull correctly for all types of gallery embedding
353
  * Fix : Lazy-load issues on certain browsers (reverted back to old logic)
354
  * Fix : Updated WPThumb so that images with querystrings in the URL will work
357
  = 1.8.14 =
358
 
359
  * New : Added setting to move "Add Media" button to front of attachment listing (Advanced tab in FooGallery Settings)
 
360
  * Fix : Lazy-load issues with Gutenberg Editor
361
  * Fix : Simple portfolio layout issue with certain themes
362
  * Update : FooGallery client side 1.3.4
css/admin-foogallery-gallery-piles.css ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .foogallery-pile {
2
+ position: relative;
3
+ z-index: 10;
4
+ float: left;
5
+ margin: 10px 15px 15px 10px !important;
6
+ }
7
+
8
+ /* Image styles */
9
+ .foogallery-pile .foogallery-gallery-select {
10
+ width: 150px;
11
+ height: 150px;
12
+ position: relative;
13
+ box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.05);
14
+ background: #eee;
15
+ vertical-align: bottom;
16
+ border: 8px solid #fff;
17
+ overflow: hidden;
18
+ cursor: pointer;
19
+ }
20
+
21
+ /* Stacks creted by the use of generated content */
22
+ .foogallery-pile:before, .foogallery-pile:after {
23
+ content: "";
24
+ width: 100%;
25
+ height: 100%;
26
+ position: absolute;
27
+ border: 8px solid #fff;
28
+ left: 0;
29
+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
30
+ -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
31
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
32
+ -webkit-box-sizing: border-box;
33
+ -moz-box-sizing: border-box;
34
+ box-sizing: border-box;
35
+ }
36
+ /* 1st element in stack (behind image) */
37
+ .foogallery-pile:before {
38
+ top: -3px; z-index: -10;
39
+ -webkit-transform: rotate(2deg);
40
+ -moz-transform: rotate(2deg);
41
+ transform: rotate(2deg);
42
+ }
43
+ /* 2nd element in stack (behind image) */
44
+ .foogallery-pile:after {
45
+ top: -2px; z-index: -20;
46
+ -webkit-transform: rotate(-2deg);
47
+ -moz-transform: rotate(-2deg);
48
+ transform: rotate(-2deg);
49
+ }
50
+
51
+ .foogallery-pile img {
52
+ width: 150px;
53
+ }
54
+
55
+ .foogallery-pile h3 {
56
+ background: #fff;
57
+ position: absolute;
58
+ display: block;
59
+ bottom: 0px;
60
+ padding: 5px;
61
+ width: 100%;
62
+ box-sizing: border-box;
63
+ margin: 0;
64
+ opacity: 0.8;
65
+ }
66
+
67
+ .foogallery-pile h3 span {
68
+ display: block;
69
+ font-size: 0.6em;
70
+ }
71
+
72
+ .foogallery-gallery-select.selected {
73
+ border-color: #1E8CBE;
74
+ }
75
+
76
+ .foogallery-gallery-select.selected::before {
77
+ content: "\f147" !important;
78
+ display: inline-block !important;
79
+ font: normal 60px/70px 'dashicons';
80
+ position: absolute;
81
+ color: #FFF;
82
+ top: 40%;
83
+ left: 50%;
84
+ margin-left: -30px;
85
+ margin-top: -30px;
86
+ -webkit-font-smoothing: antialiased;
87
+ background: #1E8CBE;
88
+ border-radius: 50%;
89
+ width: 60px;
90
+ height: 60px;
91
+ z-index: 4;
92
+ padding-top:0 !important;
93
+ }
extensions/albums/admin/class-columns.php CHANGED
@@ -51,7 +51,7 @@ if ( ! class_exists( 'FooGallery_Albums_Admin_Columns' ) ) {
51
  if ( $this->include_clipboard_script ) { ?>
52
  <script>
53
  jQuery(function($) {
54
- $('.foogallery-shortcode').click( function () {
55
  try {
56
  //select the contents
57
  this.select();
51
  if ( $this->include_clipboard_script ) { ?>
52
  <script>
53
  jQuery(function($) {
54
+ $('.foogallery-shortcode').on('click', function () {
55
  try {
56
  //select the contents
57
  this.select();
extensions/albums/admin/class-metaboxes.php CHANGED
@@ -206,19 +206,21 @@ if ( ! class_exists( 'FooGallery_Admin_Album_MetaBoxes' ) ) {
206
  $title = $gallery->safe_name();
207
  ?>
208
  <li class="foogallery-pile">
209
- <div class="foogallery-gallery-select attachment-preview landscape<?php echo $selected; ?>" data-foogallery-id="<?php echo $gallery->ID; ?>">
210
- <div class="thumbnail" style="display: table;">
211
  <div style="display: table-cell; vertical-align: middle; text-align: center;">
212
  <img src="<?php echo $img_src; ?>"/>
213
- <h3><?php echo esc_html( $title ); ?>
214
- <span><?php echo $images; ?></span>
215
- </h3>
 
216
  </div>
217
  </div>
218
  <a class="info foogallery-album-info" href="#"
219
  title="<?php _e( 'Edit Album Info', 'foogallery' ); ?>"
220
  data-gallery-title="<?php echo $title; ?>"
221
- data-gallery-id="<?php echo $gallery->ID; ?>"><span class="dashicons dashicons-info"></span></a>
 
222
  </div>
223
  </li>
224
  <?php } ?>
@@ -381,6 +383,8 @@ if ( ! class_exists( 'FooGallery_Admin_Album_MetaBoxes' ) ) {
381
  //include album selection css
382
  $url = FOOGALLERY_ALBUM_URL . 'css/admin-foogallery-album.css';
383
  wp_enqueue_style( 'admin-foogallery-album', $url, array(), FOOGALLERY_VERSION );
 
 
384
 
385
  //spectrum needed for the colorpicker field
386
  $url = FOOGALLERY_URL . 'lib/spectrum/spectrum.js';
206
  $title = $gallery->safe_name();
207
  ?>
208
  <li class="foogallery-pile">
209
+ <div class="foogallery-gallery-select landscape<?php echo $selected; ?>" data-foogallery-id="<?php echo $gallery->ID; ?>">
210
+ <div style="display: table;">
211
  <div style="display: table-cell; vertical-align: middle; text-align: center;">
212
  <img src="<?php echo $img_src; ?>"/>
213
+ <h3>
214
+ <?php echo esc_html( $title ); ?>
215
+ <span><?php echo $images; ?></span>
216
+ </h3>
217
  </div>
218
  </div>
219
  <a class="info foogallery-album-info" href="#"
220
  title="<?php _e( 'Edit Album Info', 'foogallery' ); ?>"
221
  data-gallery-title="<?php echo $title; ?>"
222
+ data-gallery-id="<?php echo $gallery->ID; ?>"><span class="dashicons dashicons-info"></span>
223
+ </a>
224
  </div>
225
  </li>
226
  <?php } ?>
383
  //include album selection css
384
  $url = FOOGALLERY_ALBUM_URL . 'css/admin-foogallery-album.css';
385
  wp_enqueue_style( 'admin-foogallery-album', $url, array(), FOOGALLERY_VERSION );
386
+ $url = FOOGALLERY_URL . 'css/admin-foogallery-gallery-piles.css';
387
+ wp_enqueue_style( 'admin-foogallery-gallery-piles', $url, array(), FOOGALLERY_VERSION );
388
 
389
  //spectrum needed for the colorpicker field
390
  $url = FOOGALLERY_URL . 'lib/spectrum/spectrum.js';
extensions/albums/album-stack.php CHANGED
@@ -5,77 +5,86 @@
5
  global $current_foogallery_album;
6
  global $current_foogallery_album_arguments;
7
  global $current_foogallery;
 
 
8
  $args = foogallery_album_template_setting( 'thumbnail_dimensions', array() );
 
9
  $lightbox = foogallery_album_template_setting( 'lightbox', 'unknown' );
 
 
 
10
  $random_angle = foogallery_album_template_setting( 'random_angle', 'false' );
11
  $gutter = foogallery_album_template_setting( 'gutter', '40' );
12
- $delay = foogallery_album_template_setting( 'delay', '0' );
13
  $pile_angles = foogallery_album_template_setting( 'pile_angles', '2' );
14
- if ( !function_exists( 'foogallery_album_all_in_one_stack_render_gallery_attachment' ) ) {
15
- function foogallery_album_all_in_one_stack_render_gallery_attachment( $gallery, $attachment, $args, $lightbox ) {
16
- echo '<li data-pile="' . esc_attr( $gallery->name ) . '">';
17
- $args['link_attributes']['rel'] = 'lightbox[' . $gallery->ID . ']';
18
- $args['link_attributes']['class'] = apply_filters( 'foogallery_album_stack_link_class_name', $lightbox );
19
- echo foogallery_attachment_html_anchor_opening( $attachment, $args );
20
- if ( $attachment->caption ) {
21
- echo '<span class="tp-info"><span>' . wp_filter_nohtml_kses( $attachment->caption ) . '</span></span>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  }
23
- echo foogallery_attachment_html_image( $attachment, $args );
24
  echo '</a>';
25
  echo '</li>';
26
  }
27
  }
28
  ?>
29
- <div id="foogallery-album-<?php echo $current_foogallery_album->ID; ?>" class="foogallery-container foogallery-stack-album">
30
- <div class="topbar">
31
- <span id="foogallery-stack-album-back-<?php echo $current_foogallery_album->ID; ?>" class="back">&larr;</span>
32
- <h2><?php echo $current_foogallery_album->name; ?></h2><h3 id="foogallery-stack-album-gallery-<?php echo $current_foogallery_album->ID; ?>"></h3>
33
- </div>
34
- <ul id="foogallery-stack-album-<?php echo $current_foogallery_album->ID; ?>" class="tp-grid">
35
- <?php
36
- foreach ( $current_foogallery_album->galleries() as $gallery ) {
37
- $current_foogallery = $gallery;
38
- $featured_attachment = $gallery->featured_attachment();
39
- //render the featured attachment first
40
- foogallery_album_all_in_one_stack_render_gallery_attachment( $gallery, $featured_attachment, $args, $lightbox );
 
 
41
 
42
- foreach ( $gallery->attachments() as $attachment ) {
43
- if ( $featured_attachment->ID !== $attachment->ID ) {
44
- //render all but the featured attachment
45
- foogallery_album_all_in_one_stack_render_gallery_attachment( $gallery, $attachment, $args, $lightbox );
46
- }
47
- }
48
- }
49
- ?>
50
- </ul>
 
51
  </div>
52
- <script type="text/javascript">
53
- jQuery(function($) {
54
-
55
- var $grid = $( '#foogallery-stack-album-<?php echo $current_foogallery_album->ID; ?>' ),
56
- $name = $( '#foogallery-stack-album-gallery-<?php echo $current_foogallery_album->ID; ?>' ),
57
- $close = $( '#foogallery-stack-album-back-<?php echo $current_foogallery_album->ID; ?>' ),
58
- $loader = $( '<div class="loader"><i></i><i></i><i></i><i></i><i></i><i></i></div>' ).insertBefore( $grid ),
59
- stapel = $grid.stapel( {
60
- delay : <?php echo $delay; ?>,
61
- randomAngle : <?php echo $random_angle; ?>,
62
- gutter : <?php echo $gutter; ?>,
63
- pileAngles : <?php echo $pile_angles; ?>,
64
- onLoad : function() {
65
- $loader.remove();
66
- },
67
- onBeforeOpen : function( pileName ) {
68
- $name.html( pileName );
69
- },
70
- onAfterOpen : function( pileName ) {
71
- $close.show();
72
- }
73
- } );
74
 
75
- $close.on( 'click', function() {
76
- $close.hide();
77
- $name.empty();
78
- stapel.closePile();
79
- } );
80
- } );
81
- </script>
5
  global $current_foogallery_album;
6
  global $current_foogallery_album_arguments;
7
  global $current_foogallery;
8
+
9
+
10
  $args = foogallery_album_template_setting( 'thumbnail_dimensions', array() );
11
+ $args['crop'] = true;
12
  $lightbox = foogallery_album_template_setting( 'lightbox', 'unknown' );
13
+ if ( $lightbox === 'foogallery' ) {
14
+ $lightbox = 'unknown';
15
+ }
16
  $random_angle = foogallery_album_template_setting( 'random_angle', 'false' );
17
  $gutter = foogallery_album_template_setting( 'gutter', '40' );
 
18
  $pile_angles = foogallery_album_template_setting( 'pile_angles', '2' );
19
+
20
+ $data_options = array(
21
+ 'itemWidth' => intval( $args['width'] ),
22
+ 'itemHeight' => intval( $args['height'] ),
23
+ 'gutter' => intval( $gutter ),
24
+ 'angleStep' => intval( $pile_angles ),
25
+ 'randomAngle' => 'true' === $random_angle
26
+ );
27
+
28
+ if ( defined( 'JSON_UNESCAPED_UNICODE' ) ) {
29
+ $data_options = json_encode( $data_options, JSON_UNESCAPED_UNICODE );
30
+ } else {
31
+ $data_options = json_encode( $data_options );
32
+ }
33
+
34
+ if ( !function_exists( 'foogallery_album_all_in_one_stack_render_gallery_attachment2' ) ) {
35
+ function foogallery_album_all_in_one_stack_render_gallery_attachment2( $gallery, $attachment, $args ) {
36
+ echo '<li class="fg-pile-item">';
37
+ $args['link_attributes']['class'] = apply_filters( 'foogallery_album_stack_link_class_name', 'fg-pile-item-thumb' );
38
+
39
+ $anchor_html = foogallery_attachment_html_anchor_opening( $attachment, $args );
40
+ $anchor_html = str_replace( 'fg-thumb', '', $anchor_html );
41
+ echo $anchor_html;
42
+
43
+ $image_html = foogallery_attachment_html_image( $attachment, $args );
44
+ $image_html = str_replace( 'fg-image', 'fg-pile-item-image', $image_html );
45
+ echo $image_html;
46
+
47
+ $captions = foogallery_build_attachment_html_caption( $attachment, $args );
48
+ if ( $captions !== false ) {
49
+ echo '<span class="fg-pile-item-caption">';
50
+ if ( array_key_exists( 'title', $captions ) ) {
51
+ echo '<span class="fg-pile-item-title">' . $captions['title'] . '</span>';
52
+ }
53
+ if ( array_key_exists( 'desc', $captions ) ) {
54
+ echo '<span class="fg-pile-item-desc">' . $captions['desc'] . '</span>';
55
+ }
56
+ echo '</span>';
57
  }
58
+
59
  echo '</a>';
60
  echo '</li>';
61
  }
62
  }
63
  ?>
64
+ <div id="foogallery-album-<?php echo $current_foogallery_album->ID; ?>" class="foogallery-container foogallery-stack-album" data-foogallery="<?php echo esc_attr( $data_options ); ?>">
65
+ <div class="fg-header">
66
+ <h2 class="fg-header-title"><?php echo $current_foogallery_album->name; ?></h2>
67
+ <span class="fg-header-back">&larr;</span>
68
+ <h3 class="fg-header-active"></h3>
69
+ </div>
70
+ <div class="fg-piles">
71
+ <?php
72
+ foreach ( $current_foogallery_album->galleries() as $gallery ) {
73
+ ?><ul class="fg-pile <?php echo $lightbox; ?>" data-title="<?php echo esc_attr( $gallery->name ); ?>"><?php
74
+ $current_foogallery = $gallery;
75
+ $featured_attachment = $gallery->featured_attachment();
76
+ //render the featured attachment first
77
+ foogallery_album_all_in_one_stack_render_gallery_attachment2( $gallery, $featured_attachment, $args, $lightbox );
78
 
79
+ foreach ( $gallery->attachments() as $attachment ) {
80
+ if ( $featured_attachment->ID !== $attachment->ID ) {
81
+ //render all but the featured attachment
82
+ foogallery_album_all_in_one_stack_render_gallery_attachment2( $gallery, $attachment, $args, $lightbox );
83
+ }
84
+ }
85
+ ?></ul><?php
86
+ }
87
+ ?>
88
+ </div>
89
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
 
 
 
 
 
 
 
 
extensions/albums/class-albums-extension.php CHANGED
@@ -32,10 +32,16 @@ if ( ! class_exists( 'FooGallery_Albums_Extension' ) ) {
32
  add_filter( 'foogallery_album_templates_files', array( $this, 'register_myself' ) );
33
  add_filter( 'foogallery_defaults', array( $this, 'apply_album_defaults' ) );
34
  add_action( 'foogallery_extension_activated-albums', array( $this, 'flush_rewrite_rules' ) );
35
- add_filter( 'foogallery_alter_album_template_field', array( $this, 'alter_gallery_template_field' ), 10, 2 );
36
  add_filter( 'foogallery_albums_supports_video-stack', '__return_true' );
37
 
38
  add_filter( 'fooboxshare_use_permalink', array( $this, 'check_for_albums_for_fooboxshare' ) );
 
 
 
 
 
 
 
39
  }
40
 
41
  function check_for_albums_for_fooboxshare( $default ) {
32
  add_filter( 'foogallery_album_templates_files', array( $this, 'register_myself' ) );
33
  add_filter( 'foogallery_defaults', array( $this, 'apply_album_defaults' ) );
34
  add_action( 'foogallery_extension_activated-albums', array( $this, 'flush_rewrite_rules' ) );
 
35
  add_filter( 'foogallery_albums_supports_video-stack', '__return_true' );
36
 
37
  add_filter( 'fooboxshare_use_permalink', array( $this, 'check_for_albums_for_fooboxshare' ) );
38
+
39
+ add_action( 'foogallery_located_album_template-stack', array( $this, 'load_stack_assets' ) );
40
+ }
41
+
42
+ function load_stack_assets( $current_foogallery_album ) {
43
+ foogallery_enqueue_core_gallery_template_script();
44
+ foogallery_enqueue_core_gallery_template_style();
45
  }
46
 
47
  function check_for_albums_for_fooboxshare( $default ) {
extensions/albums/css/admin-foogallery-album.css CHANGED
@@ -1,103 +1,3 @@
1
- .foogallery-pile {
2
- position: relative;
3
- z-index: 10;
4
- float: left;
5
- margin: 10px 15px 15px 10px !important;
6
- }
7
- /* Image styles */
8
- .foogallery-pile .foogallery-gallery-select {
9
- max-width: 100%;
10
- vertical-align: bottom;
11
- border: 8px solid #fff;
12
- -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
13
- -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
14
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
15
- overflow: hidden;
16
- }
17
-
18
- /* Stacks creted by the use of generated content */
19
- .foogallery-pile:before, .foogallery-pile:after {
20
- content: "";
21
- width: 100%;
22
- height: 100%;
23
- position: absolute;
24
- border: 8px solid #fff;
25
- left: 0;
26
- -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
27
- -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
28
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
29
- -webkit-box-sizing: border-box;
30
- -moz-box-sizing: border-box;
31
- box-sizing: border-box;
32
- }
33
- /* 1st element in stack (behind image) */
34
- .foogallery-pile:before {
35
- top: -3px; z-index: -10;
36
- -webkit-transform: rotate(2deg);
37
- -moz-transform: rotate(2deg);
38
- transform: rotate(2deg);
39
- }
40
- /* 2nd element in stack (behind image) */
41
- .foogallery-pile:after {
42
- top: -2px; z-index: -20;
43
- -webkit-transform: rotate(-2deg);
44
- -moz-transform: rotate(-2deg);
45
- transform: rotate(-2deg);
46
- }
47
-
48
- .foogallery-pile img {
49
- height: 100%;
50
- }
51
-
52
- .foogallery-pile h3 {
53
- background: #fff;
54
- position: absolute;
55
- display: block;
56
- bottom: 0px;
57
- padding: 5px;
58
- width: 100%;
59
- box-sizing: border-box;
60
- margin: 0;
61
- opacity: 0.8;
62
- }
63
-
64
- .foogallery-pile h3 span {
65
- display: block;
66
- font-size: 0.6em;
67
- }
68
-
69
- .foogallery-gallery-select.selected {
70
- border-color: #1E8CBE;
71
- }
72
-
73
- .foogallery-gallery-select.selected::before {
74
- content: "\f147" !important;
75
- display: inline-block !important;
76
- font: normal 60px/70px 'dashicons';
77
- position: absolute;
78
- color: #FFF;
79
- top: 40%;
80
- left: 50%;
81
- margin-left: -30px;
82
- margin-top: -30px;
83
- -webkit-font-smoothing: antialiased;
84
- background: #1E8CBE;
85
- border-radius: 50%;
86
- width: 60px;
87
- height: 60px;
88
- z-index: 4;
89
- padding-top:0 !important;
90
- }
91
-
92
- .attachment-preview {
93
- position: relative;
94
- width: 150px;
95
- height: 150px;
96
- -webkit-box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.05);
97
- box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.05);
98
- background: #EEE;
99
- cursor: pointer;
100
- }
101
 
102
  .foogallery-shortcode {
103
  text-align: center;
@@ -146,10 +46,6 @@
146
  display: none;
147
  }
148
 
149
- .foogallery-album-gallery-list .attachment-preview:before {
150
- padding-top:0 !important;
151
- }
152
-
153
  .foogallery_template_field td {
154
  padding-bottom: 20px;
155
  }
@@ -254,7 +150,7 @@
254
  box-shadow: 1px 1px 1px 1px rgba(0,0,0,.1);
255
  }
256
 
257
- .foogallery-album-gallery-list .attachment-preview a.info {
258
  display: none;
259
  position: absolute;
260
  padding: 0;
@@ -263,16 +159,13 @@
263
  text-align: center;
264
  text-decoration: none;
265
  background-color: #444;
266
- border-top-right-radius: 50%;
267
- border-top-left-radius: 50%;
268
- border-bottom-right-radius: 50%;
269
- border-bottom-left-radius: 50%;
270
  color: #fff;
271
  top: 5px;
272
  left: 5px;
273
  }
274
 
275
- .foogallery-album-gallery-list .attachment-preview:hover a.info {
276
  display: block;
277
  }
278
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
 
2
  .foogallery-shortcode {
3
  text-align: center;
46
  display: none;
47
  }
48
 
 
 
 
 
49
  .foogallery_template_field td {
50
  padding-bottom: 20px;
51
  }
150
  box-shadow: 1px 1px 1px 1px rgba(0,0,0,.1);
151
  }
152
 
153
+ .foogallery-album-gallery-list a.info {
154
  display: none;
155
  position: absolute;
156
  padding: 0;
159
  text-align: center;
160
  text-decoration: none;
161
  background-color: #444;
162
+ border-radius: 50%;
 
 
 
163
  color: #fff;
164
  top: 5px;
165
  left: 5px;
166
  }
167
 
168
+ .foogallery-album-gallery-list .foogallery-gallery-select:hover a.info {
169
  display: block;
170
  }
171
 
extensions/albums/functions.php CHANGED
@@ -150,7 +150,7 @@ function foogallery_album_templates() {
150
  'title' => __( 'Thumbnail Size', 'foogallery' ),
151
  'desc' => __( 'Choose the size of your image stack thumbnails.', 'foogallery' ),
152
  'section' => __( 'Thumbnail Settings', 'foogallery' ),
153
- 'type' => 'thumb_size',
154
  'default' => array(
155
  'width' => get_option( 'thumbnail_size_w' ),
156
  'height' => get_option( 'thumbnail_size_h' ),
@@ -180,15 +180,6 @@ function foogallery_album_templates() {
180
  'default' => 50
181
  ),
182
 
183
- array(
184
- 'id' => 'delay',
185
- 'title' => __( 'Expand Delay', 'foogallery' ),
186
- 'section' => __( 'Thumbnail Settings', 'foogallery' ),
187
- 'desc' => __( 'The delay between expanding each image on a image stack.', 'foogallery' ),
188
- 'type' => 'number',
189
- 'default' => 0
190
- ),
191
-
192
  array(
193
  'id' => 'pile_angles',
194
  'title' => __( 'Image Stack Angles', 'foogallery' ),
@@ -378,4 +369,23 @@ function foogallery_album_uninstall() {
378
  }
379
  }
380
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
381
  }
150
  'title' => __( 'Thumbnail Size', 'foogallery' ),
151
  'desc' => __( 'Choose the size of your image stack thumbnails.', 'foogallery' ),
152
  'section' => __( 'Thumbnail Settings', 'foogallery' ),
153
+ 'type' => 'thumb_size_no_crop',
154
  'default' => array(
155
  'width' => get_option( 'thumbnail_size_w' ),
156
  'height' => get_option( 'thumbnail_size_h' ),
180
  'default' => 50
181
  ),
182
 
 
 
 
 
 
 
 
 
 
183
  array(
184
  'id' => 'pile_angles',
185
  'title' => __( 'Image Stack Angles', 'foogallery' ),
369
  }
370
  }
371
  }
372
+ }
373
+
374
+ /**
375
+ * Render a foogallery album
376
+ *
377
+ * @param $album_id int The id of the foogallery album you want to render
378
+ * @param array $args
379
+ */
380
+ if (! function_exists( 'foogallery_render_album') ) {
381
+ function foogallery_render_album( $album_id, $args = array() ) {
382
+ //create new instance of template engine
383
+ $engine = new FooGallery_Album_Template_Loader();
384
+
385
+ $shortcode_args = wp_parse_args( $args, array(
386
+ 'id' => $album_id
387
+ ) );
388
+
389
+ $engine->render_template( $shortcode_args );
390
+ }
391
  }
extensions/albums/js/admin-foogallery-album.js CHANGED
@@ -66,7 +66,7 @@
66
  };
67
 
68
  FOOGALLERYALBUM.initAlbumInfoButtons = function() {
69
- $('.foogallery-album-gallery-list .attachment-preview').on('click', 'a.info', function(e) {
70
 
71
  e.preventDefault();
72
 
66
  };
67
 
68
  FOOGALLERYALBUM.initAlbumInfoButtons = function() {
69
+ $('.foogallery-album-gallery-list').on('click', 'a.info', function(e) {
70
 
71
  e.preventDefault();
72
 
extensions/default-templates/default/js/admin-gallery-default.js CHANGED
@@ -73,7 +73,7 @@
73
  FOOGALLERY_DEF_TEMPLATE.showHideCaptionContent();
74
  });
75
 
76
- $('.foogallery-thumbnail-preview').click(function(e) {
77
  e.preventDefault();
78
  });
79
 
73
  FOOGALLERY_DEF_TEMPLATE.showHideCaptionContent();
74
  });
75
 
76
+ $('.foogallery-thumbnail-preview').on('click', function(e) {
77
  e.preventDefault();
78
  });
79
 
extensions/default-templates/image-viewer/class-image-viewer-gallery-template.php CHANGED
@@ -288,7 +288,11 @@ if ( !class_exists( 'FooGallery_Image_Viewer_Gallery_Template' ) ) {
288
  * @return array
289
  */
290
  function build_gallery_template_arguments( $args ) {
291
- $args = foogallery_gallery_template_setting( 'thumbnail_size', 'thumbnail' );
 
 
 
 
292
  if ( !array_key_exists( 'crop', $args ) ) {
293
  $args['crop'] = '1'; //we now force thumbs to be cropped by default
294
  }
288
  * @return array
289
  */
290
  function build_gallery_template_arguments( $args ) {
291
+ $args = foogallery_gallery_template_setting( 'thumbnail_size', array(
292
+ 'width' => 640,
293
+ 'height' => 360,
294
+ 'crop' => true
295
+ ) );
296
  if ( !array_key_exists( 'crop', $args ) ) {
297
  $args['crop'] = '1'; //we now force thumbs to be cropped by default
298
  }
extensions/default-templates/image-viewer/js/admin-gallery-image-viewer.js CHANGED
@@ -111,7 +111,7 @@
111
  IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideRows();
112
  });
113
 
114
- $('.foogallery-image-viewer-preview').click(function(e) {
115
  e.preventDefault();
116
  });
117
  };
111
  IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideRows();
112
  });
113
 
114
+ $('.foogallery-image-viewer-preview').on('click', function(e) {
115
  e.preventDefault();
116
  });
117
  };
extensions/default-templates/shared/css/foogallery.css CHANGED
@@ -2576,4 +2576,271 @@
2576
  }
2577
  .foogallery.fg-thumbnail .fg-st-hidden {
2578
  display: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2579
  }
2576
  }
2577
  .foogallery.fg-thumbnail .fg-st-hidden {
2578
  display: none;
2579
+ }
2580
+ .foogallery-stack-album {
2581
+ text-align: center;
2582
+ overflow: hidden;
2583
+ font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
2584
+ font-size: 13px;
2585
+ font-weight: 400;
2586
+ line-height: 1.3;
2587
+ }
2588
+ .foogallery-stack-album,
2589
+ .foogallery-stack-album * {
2590
+ box-sizing: border-box;
2591
+ }
2592
+
2593
+ .foogallery-stack-album.fg-align-left {
2594
+ text-align: left;
2595
+ }
2596
+ .foogallery-stack-album.fg-align-center {
2597
+ text-align: center;
2598
+ }
2599
+ .foogallery-stack-album.fg-align-right {
2600
+ text-align: right;
2601
+ }
2602
+
2603
+ .foogallery-stack-album.fg-disable-transitions,
2604
+ .foogallery-stack-album.fg-disable-transitions * {
2605
+ transition: none !important;
2606
+ }
2607
+
2608
+ .fg-header {
2609
+ display: flex;
2610
+ flex-wrap: nowrap;
2611
+ justify-content: space-between;
2612
+ align-items: center;
2613
+ position: relative;
2614
+ padding: 0;
2615
+ margin: 0;
2616
+ border-top: solid 1px #aaa;
2617
+ border-bottom: solid 1px #aaa;
2618
+ }
2619
+
2620
+ .fg-header-title {
2621
+ display: block;
2622
+ margin: 0;
2623
+ padding: 0 20px;
2624
+ width: 100%;
2625
+ text-align: left;
2626
+ }
2627
+
2628
+ .fg-header-active {
2629
+ display: block;
2630
+ margin: 0;
2631
+ padding: 0 20px;
2632
+ visibility: hidden;
2633
+ opacity: 0;
2634
+ width: 100%;
2635
+ text-align: right;
2636
+ transition-property: opacity, visibility;
2637
+ transition-duration: .3s;
2638
+ transition-timing-function: ease-in-out;
2639
+ }
2640
+
2641
+ .fg-header-back {
2642
+ display: block;
2643
+ padding: 0;
2644
+ margin: 5px;
2645
+ visibility: hidden;
2646
+ opacity: 0;
2647
+ min-width: 40px;
2648
+ width: 40px;
2649
+ height: 40px;
2650
+ border-radius: 50%;
2651
+ text-align: center;
2652
+ line-height: 38px;
2653
+ color: #999;
2654
+ background: #ddd;
2655
+ background: rgba(200,200,200,0.5);
2656
+ cursor: pointer;
2657
+ -webkit-touch-callout: none;
2658
+ -webkit-user-select: none;
2659
+ -moz-user-select: none;
2660
+ -ms-user-select: none;
2661
+ user-select: none;
2662
+ transition-property: opacity, visibility;
2663
+ transition-duration: .3s;
2664
+ transition-timing-function: ease-in-out;
2665
+ }
2666
+
2667
+ .fg-has-active .fg-header-back,
2668
+ .fg-has-active .fg-header-active {
2669
+ visibility: visible;
2670
+ opacity: 1;
2671
+ }
2672
+
2673
+
2674
+ .fg-piles {
2675
+ display: inline-block;
2676
+ position: relative;
2677
+ transition-property: width, height;
2678
+ transition-duration: .3s;
2679
+ transition-timing-function: ease-in-out;
2680
+ }
2681
+
2682
+ .fg-pile {
2683
+ display: block;
2684
+ position: absolute;
2685
+ top: 0;
2686
+ left: 0;
2687
+ list-style: none;
2688
+ padding: 0;
2689
+ margin: 0;
2690
+ visibility: visible;
2691
+ opacity: 1;
2692
+ transition-property: opacity, visibility, top, left, width, height;
2693
+ transition-duration: .3s;
2694
+ transition-timing-function: ease-in-out;
2695
+ }
2696
+
2697
+ .fg-pile.fg-hidden {
2698
+ visibility: hidden;
2699
+ opacity: 0;
2700
+ }
2701
+
2702
+ .fg-pile-item {
2703
+ display: block;
2704
+ position: absolute;
2705
+ top: 25px;
2706
+ left: 25px;
2707
+ visibility: visible;
2708
+ opacity: 1;
2709
+ cursor: pointer;
2710
+ border: 10px solid #fff;
2711
+ background-color: #FFF;
2712
+ box-shadow: 0 1px 4px rgba(0,0,0,0.2);
2713
+ transition-property: opacity, visibility, top, left, transform;
2714
+ transition-duration: .3s;
2715
+ transition-timing-function: ease-in-out;
2716
+ z-index: 1;
2717
+ transform: rotate(0deg);
2718
+ }
2719
+
2720
+ .fg-expanded .fg-pile-item {
2721
+ z-index: 2;
2722
+ transform: rotate(0deg) !important;
2723
+ }
2724
+ .fg-pile-item.fg-has-cover {
2725
+ z-index: 10;
2726
+ transform: rotate(0deg) !important;
2727
+ }
2728
+
2729
+ .fg-pile-item:nth-child(2) {
2730
+ z-index: 9;
2731
+ }
2732
+ .fg-pile-item:nth-child(3) {
2733
+ z-index: 8;
2734
+ }
2735
+ .fg-pile-item:nth-child(4) {
2736
+ z-index: 7;
2737
+ }
2738
+ .fg-pile-item:nth-child(1n+5) {
2739
+ visibility: hidden;
2740
+ opacity: 0;
2741
+ }
2742
+ .fg-expanded .fg-pile-item:nth-child(1n+4) {
2743
+ visibility: visible;
2744
+ opacity: 1;
2745
+ }
2746
+
2747
+ .fg-pile-item-thumb {
2748
+ display: block;
2749
+ }
2750
+
2751
+ .fg-pile-item-image {
2752
+ display: block;
2753
+ }
2754
+
2755
+ .fg-pile-item-caption {
2756
+ display: flex;
2757
+ justify-content: center;
2758
+ flex-direction: column;
2759
+ position: absolute;
2760
+ top: 0;
2761
+ left: 0;
2762
+ bottom: 0;
2763
+ right: 0;
2764
+ width: 100%;
2765
+ height: 100%;
2766
+ margin: 0;
2767
+ padding: 10px;
2768
+ background-color: rgba(68, 68, 68, 0.5);
2769
+ color: #FFFFFF;
2770
+ text-align: center;
2771
+ visibility: hidden;
2772
+ opacity: 0;
2773
+ transition-property: opacity, visibility;
2774
+ transition-duration: .3s;
2775
+ transition-timing-function: ease-in-out;
2776
+ }
2777
+ .fg-pile-item-title {
2778
+ display: block;
2779
+ width: 100%;
2780
+ padding: 0 0 10px;
2781
+ }
2782
+ .fg-pile-item-desc {
2783
+ display: block;
2784
+ width: 100%;
2785
+ max-height: 100%;
2786
+ border-top: solid 1px currentColor;
2787
+ padding: 10px 0 0;
2788
+ overflow: hidden;
2789
+ }
2790
+
2791
+ .fg-pile-item-thumb:hover .fg-pile-item-caption {
2792
+ visibility: visible;
2793
+ opacity: 1;
2794
+ }
2795
+
2796
+ .fg-pile-cover {
2797
+ display: flex;
2798
+ justify-content: left;
2799
+ align-items: center;
2800
+ position: absolute;
2801
+ top: 0;
2802
+ left: 0;
2803
+ bottom: 0;
2804
+ right: 0;
2805
+ width: 100%;
2806
+ height: 100%;
2807
+ visibility: visible;
2808
+ opacity: 1;
2809
+ cursor: pointer;
2810
+ -webkit-touch-callout: none;
2811
+ -webkit-user-select: none;
2812
+ -moz-user-select: none;
2813
+ -ms-user-select: none;
2814
+ user-select: none;
2815
+ transition-property: opacity, visibility;
2816
+ transition-duration: .3s;
2817
+ transition-timing-function: ease-in-out;
2818
+ }
2819
+
2820
+ .fg-expanded .fg-pile-cover {
2821
+ visibility: hidden;
2822
+ opacity: 0;
2823
+ pointer-events: none;
2824
+ }
2825
+
2826
+ .fg-pile-cover-content {
2827
+ display: flex;
2828
+ position: relative;
2829
+ background: #fff;
2830
+ color: #333;
2831
+ width: 75%;
2832
+ font-weight: 700;
2833
+ box-shadow: 1px 1px 1px rgba(0,0,0,0.1), 5px 0 5px -3px rgba(0,0,0,0.4), inset 0 0 5px rgba(0,0,0,0.04);
2834
+ }
2835
+
2836
+ .fg-pile-cover-title {
2837
+ text-align: center;
2838
+ padding: 10px;
2839
+ width: 100%;
2840
+ }
2841
+ .fg-pile-cover-count {
2842
+ color: #aaa;
2843
+ padding: 10px 5px;
2844
+ background: #F7F7F7;
2845
+ height: 100%;
2846
  }
extensions/default-templates/shared/css/foogallery.min.css CHANGED
@@ -1 +1 @@
1
- .foogallery,.foogallery *{box-sizing:border-box}.foogallery{display:block;z-index:1;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;position:relative;line-height:0;font-size:0;width:100%;max-width:100%}.foogallery .fg-item{display:inline-block;position:relative;background-color:transparent;z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.foogallery .fg-item-inner{display:block;position:relative;visibility:hidden;overflow:hidden;opacity:0;z-index:3;margin:0;border:solid 0 transparent}.foogallery .fg-item.fg-error:before{content:"";display:block;position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);width:32px;height:32px;background-image:url(../img/icons.svg#image);background-color:transparent;background-repeat:no-repeat;background-position:center center;background-size:32px 32px}.foogallery .fg-item.fg-loaded{z-index:4}.foogallery .fg-loaded .fg-item-inner{visibility:visible;opacity:1;z-index:5}.foogallery .fg-error .fg-item-inner{pointer-events:none;cursor:default}.foogallery .fg-thumb{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:4;box-shadow:none}.foogallery .fg-thumb:focus,.foogallery .fg-thumb:hover{border:none;outline:0;text-decoration:none;box-shadow:none}.foogallery .fg-image-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:8;visibility:hidden;opacity:0}.foogallery .fg-image-wrap{display:block;position:relative}.foogallery .fg-image{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:5;max-width:none;height:auto;margin:0}.foogallery .fg-loaded .fg-thumb{z-index:6}.foogallery .fg-loaded .fg-image{z-index:7}.foogallery.fg-light .fg-item-inner{background-color:#fff;color:#333;border-color:#fff}.foogallery.fg-dark .fg-item-inner{background-color:#333;color:#fff;border-color:#333}.foogallery.fg-light .fg-item.fg-error,.foogallery.fg-light .fg-item.fg-idle,.foogallery.fg-light .fg-item.fg-loading{background-color:#eee;box-shadow:inset 0 0 0 1px #ddd}.foogallery.fg-dark .fg-item.fg-error,.foogallery.fg-dark .fg-item.fg-idle,.foogallery.fg-dark .fg-item.fg-loading{background-color:#444;box-shadow:inset 0 0 0 1px #333}.foogallery .fg-caption{background-color:rgba(0,0,0,.6);color:#fff}.foogallery .fg-caption a{color:#fff;border-bottom:1px solid #fff}.foogallery.fg-light-overlays .fg-caption{background-color:rgba(255,255,255,.8);color:#333}.foogallery.fg-light-overlays .fg-caption a{color:#333;border-bottom-color:#333}.foogallery.fg-transparent-overlays .fg-caption{background-color:transparent;color:#fff}.foogallery.fg-transparent-overlays .fg-caption a{color:#fff;border-bottom-color:#fff}.foogallery .fg-image-overlay{background-color:rgba(0,0,0,.6);color:#fff}.foogallery.fg-light-overlays .fg-image-overlay{background-color:rgba(255,255,255,.8);color:#333}.foogallery.fg-transparent-overlays .fg-image-overlay{background-color:transparent;color:#fff}.fg-exif-light .fg-item.fg-item-exif .fg-image-wrap:after{background-color:#fff;color:#333}.fg-exif-dark .fg-item.fg-item-exif .fg-image-wrap:after{background-color:#333;color:#fff}.fg-exif-rounded .fg-item.fg-item-exif .fg-image-wrap:after{border-radius:3px}.fg-exif-bottom-left .fg-item.fg-item-exif .fg-image-wrap:after,.fg-exif-bottom-right .fg-item.fg-item-exif .fg-image-wrap:after,.fg-exif-top-left .fg-item.fg-item-exif .fg-image-wrap:after,.fg-exif-top-right .fg-item.fg-item-exif .fg-image-wrap:after{display:inline-block;position:absolute;content:'EXIF';font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:11px;line-height:10px;padding:3px 4px;z-index:7}.fg-exif-bottom-right .fg-item.fg-item-exif .fg-image-wrap:after{bottom:5px;right:5px}.fg-exif-bottom-left .fg-item.fg-item-exif .fg-image-wrap:after{bottom:5px;left:5px}.fg-exif-top-right .fg-item.fg-item-exif .fg-image-wrap:after{top:5px;right:5px}.fg-exif-top-left .fg-item.fg-item-exif .fg-image-wrap:after{top:5px;left:5px}.foogallery.fg-border-thin .fg-item-inner{border-width:4px}.foogallery.fg-border-medium .fg-item-inner{border-width:10px}.foogallery.fg-border-thick .fg-item-inner{border-width:16px}.foogallery.fg-light.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-dark.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-light.fg-shadow-small .fg-item-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-light.fg-shadow-medium .fg-item-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-light.fg-shadow-large .fg-item-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-shadow-inset-small .fg-thumb:after{display:block;content:"";position:absolute;top:0;left:0;right:0;bottom:0;z-index:7}.foogallery.fg-dark.fg-shadow-inset-small .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-small .fg-thumb:after{box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-medium .fg-thumb:after{box-shadow:inset 0 1px 10px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-large .fg-thumb:after{box-shadow:inset 0 1px 16px 0 rgba(0,0,0,.3)}.foogallery.fg-round-full.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-small .fg-thumb:after{border-radius:50%}.foogallery.fg-round-small .fg-item,.foogallery.fg-round-small .fg-item-inner{border-radius:5px}.foogallery.fg-round-medium .fg-item,.foogallery.fg-round-medium .fg-item-inner{border-radius:10px}.foogallery.fg-round-large .fg-item,.foogallery.fg-round-large .fg-item-inner{border-radius:15px}.foogallery.fg-round-full .fg-item,.foogallery.fg-round-full .fg-item-inner{border-radius:50%}.foogallery .fg-loader{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);width:1em;height:1em;font-size:5px;visibility:hidden;opacity:0}.foogallery .fg-loading .fg-loader{visibility:visible;opacity:1}.fg-loading-default .fg-loader{border-radius:50%;text-indent:-9999em;box-shadow:0 -2.6em 0 0 rgba(130,130,130,1),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.5),-1.8em -1.8em 0 0 rgba(130,130,130,.7);-webkit-animation:loading-default 1.1s infinite steps(8,start);animation:loading-default 1.1s infinite steps(8,start)}@-webkit-keyframes loading-default{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes loading-default{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.fg-loading-bars .fg-loader,.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{background:rgba(130,130,130,1);-webkit-animation:loading-bars 1s infinite ease-in-out;animation:loading-bars 1s infinite ease-in-out;width:1em;height:4em}.fg-loading-bars .fg-loader{color:rgba(130,130,130,1);text-indent:-9999em;font-size:4px;-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{position:absolute;top:0;content:''}.fg-loading-bars .fg-loader:before{left:-1.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-bars .fg-loader:after{left:1.5em}@-webkit-keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}@keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}.fg-loading-trail .fg-loader{color:#828282;font-size:20px;text-indent:-9999em;overflow:hidden;border-radius:50%;-webkit-animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease;animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease}@-webkit-keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@-webkit-keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.fg-loading-pulse .fg-loader,.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{border-radius:50%;width:2.5em;height:2.5em;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation:loading-pulse 1.8s infinite ease-in-out;animation:loading-pulse 1.8s infinite ease-in-out}.fg-loading-pulse .fg-loader{color:#828282;font-size:4px;text-indent:-9999em;transform:translateX(-50%) translateY(-150%);-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{content:'';position:absolute;top:0}.fg-loading-pulse .fg-loader:before{left:-3.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-pulse .fg-loader:after{left:3.5em}@-webkit-keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}@keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}.fg-loading-dots .fg-loader{color:#828282;font-size:5px;border-radius:50%;text-indent:-9999em;-webkit-animation:loading-dots 1.3s infinite linear;animation:loading-dots 1.3s infinite linear}@-webkit-keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}@keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}.fg-loading-partial .fg-loader,.fg-loading-partial .fg-loader:after{border-radius:50%;width:10em;height:10em}.fg-loading-partial .fg-loader{font-size:4px;text-indent:-9999em;border-top:1.1em solid rgba(130,130,130,.2);border-right:1.1em solid rgba(130,130,130,.2);border-bottom:1.1em solid rgba(130,130,130,.2);border-left:1.1em solid #828282;-webkit-animation:loading-partial 1.1s infinite linear;animation:loading-partial 1.1s infinite linear}@-webkit-keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.foogallery.fg-loaded-drop .fg-item,.foogallery.fg-loaded-fade-in .fg-item,.foogallery.fg-loaded-flip .fg-item,.foogallery.fg-loaded-fly .fg-item,.foogallery.fg-loaded-scale-up .fg-item,.foogallery.fg-loaded-slide-down .fg-item,.foogallery.fg-loaded-slide-left .fg-item,.foogallery.fg-loaded-slide-right .fg-item,.foogallery.fg-loaded-slide-up .fg-item,.foogallery.fg-loaded-swing-down .fg-item{transition-timing-function:ease;transition-duration:650ms;transition-property:background-color,transform}.foogallery.fg-loaded-drop .fg-item-inner,.foogallery.fg-loaded-fade-in .fg-item-inner,.foogallery.fg-loaded-flip .fg-item-inner,.foogallery.fg-loaded-fly .fg-item-inner,.foogallery.fg-loaded-scale-up .fg-item-inner,.foogallery.fg-loaded-slide-down .fg-item-inner,.foogallery.fg-loaded-slide-left .fg-item-inner,.foogallery.fg-loaded-slide-right .fg-item-inner,.foogallery.fg-loaded-slide-up .fg-item-inner,.foogallery.fg-loaded-swing-down .fg-item-inner{transition-timing-function:ease;transition-duration:650ms}.foogallery.fg-loaded-drop .fg-item.fg-loaded,.foogallery.fg-loaded-flip .fg-item.fg-loaded,.foogallery.fg-loaded-fly .fg-item.fg-loaded,.foogallery.fg-loaded-swing-down .fg-item.fg-loaded{perspective:1300px}.foogallery.fg-loaded-fade-in .fg-item-inner{transition-property:visibility,opacity}.foogallery .fg-caption{visibility:hidden;opacity:0;position:absolute;z-index:8;width:100%;max-height:100%;overflow:hidden;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:13px;font-weight:400;line-height:1.3;border:none;text-align:center;cursor:pointer;margin:0}.foogallery .fg-caption a{text-decoration:none}.foogallery .fg-caption a:hover{border-bottom:none}.foogallery .fg-caption-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:16px;font-weight:400;padding:5px}.foogallery .fg-caption-desc{padding:5px}.foogallery .fg-caption-title+.fg-caption-desc{padding-top:0}.foogallery.fg-caption-always .fg-item .fg-caption .fg-caption-inner:before{display:none}.foogallery.fg-caption-always .fg-item.fg-loaded .fg-caption{left:0;bottom:0;transition-timing-function:ease;transition-duration:.3s;transition-property:visibility,opacity;visibility:visible;opacity:1;text-align:left}.foogallery.fg-caption-hover .fg-caption .fg-caption-inner{width:100%;max-height:100%;position:absolute;top:50%;left:0;transform:translateY(-50%)}.foogallery.fg-caption-hover .fg-item.fg-loaded .fg-image-overlay{display:none}.foogallery .fg-image-overlay:before{content:"";display:block;position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);width:32px;height:32px;background-size:32px 32px;background-position:center center;background-repeat:no-repeat}.foogallery .fg-caption-inner:before{content:"";display:none;position:relative;width:32px;height:32px;margin:10px 0 5px 0;background-size:32px 32px;vertical-align:middle;background-position:center center;background-repeat:no-repeat}.foogallery.fg-hover-circle-plus:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-external:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-eye:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-plus:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-tint:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-zoom2:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-zoom3:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-zoom:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-video-1:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-video-2:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-video-3:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-video-4:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-video-default:not(.fg-preset) .fg-caption-inner:before{display:inline-block}.foogallery.fg-hover-circle-plus:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-external:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-eye:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-plus:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-tint:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-zoom2:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-zoom3:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-zoom:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-1:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-2:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-3:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-4:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-default:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-video-sticky .fg-type-video.fg-loaded .fg-item-inner .fg-image-overlay{background-color:transparent;visibility:visible;opacity:1;display:block}.foogallery.fg-video-sticky .fg-type-video .fg-caption-inner:before{display:none}.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom-light)}.foogallery.fg-light-overlays.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-zoom .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom-dark)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom2-light)}.foogallery.fg-light-overlays.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-zoom2 .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom2-dark)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom3-light)}.foogallery.fg-light-overlays.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-zoom3 .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom3-dark)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-image-overlay:before{background-image:url(../img/icons.svg#plus-light)}.foogallery.fg-light-overlays.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-plus .fg-image-overlay:before{background-image:url(../img/icons.svg#plus-dark)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-image-overlay:before{background-image:url(../img/icons.svg#circle-plus-light)}.foogallery.fg-light-overlays.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-circle-plus .fg-image-overlay:before{background-image:url(../img/icons.svg#circle-plus-dark)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-image-overlay:before{background-image:url(../img/icons.svg#eye-light)}.foogallery.fg-light-overlays.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-eye .fg-image-overlay:before{background-image:url(../img/icons.svg#eye-dark)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-image-overlay:before{background-image:url(../img/icons.svg#external-light)}.foogallery.fg-light-overlays.fg-hover-external .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-external .fg-image-overlay:before{background-image:url(../img/icons.svg#external-dark)}.foogallery.fg-video-default .fg-type-video .fg-caption-inner:before,.foogallery.fg-video-default .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-default-light)}.foogallery.fg-light-overlays.fg-video-default .fg-type-video .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-video-default .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-default-dark)}.foogallery.fg-video-1 .fg-type-video .fg-caption-inner:before,.foogallery.fg-video-1 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-1-light)}.foogallery.fg-light-overlays.fg-video-1 .fg-type-video .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-video-1 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-1-dark)}.foogallery.fg-video-2 .fg-type-video .fg-caption-inner:before,.foogallery.fg-video-2 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-2-light)}.foogallery.fg-light-overlays.fg-video-2 .fg-type-video .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-video-2 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-2-dark)}.foogallery.fg-video-3 .fg-type-video .fg-caption-inner:before,.foogallery.fg-video-3 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-3-light)}.foogallery.fg-light-overlays.fg-video-3 .fg-type-video .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-video-3 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-3-dark)}.foogallery.fg-video-4 .fg-type-video .fg-caption-inner:before,.foogallery.fg-video-4 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-4-light)}.foogallery.fg-light-overlays.fg-video-4 .fg-type-video .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-video-4 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-4-dark)}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-caption-hover.fg-hover-fade .fg-caption,.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-caption-hover.fg-hover-instant .fg-caption,.foogallery.fg-caption-hover.fg-hover-push .fg-caption,.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-down .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-caption,.foogallery.fg-hover-colorize .fg-image,.foogallery.fg-hover-colorize .fg-image-overlay,.foogallery.fg-hover-fade .fg-image-overlay,.foogallery.fg-hover-grayscale .fg-image,.foogallery.fg-hover-grayscale .fg-image-overlay,.foogallery.fg-hover-instant .fg-image-overlay,.foogallery.fg-hover-push .fg-thumb,.foogallery.fg-hover-scale .fg-image-overlay,.foogallery.fg-hover-scale .fg-item,.foogallery.fg-hover-slide-down .fg-image-overlay,.foogallery.fg-hover-slide-left .fg-image-overlay,.foogallery.fg-hover-slide-right .fg-image-overlay,.foogallery.fg-hover-slide-up .fg-image-overlay,.foogallery.fg-hover-zoomed .fg-image{transition-timing-function:ease;transition-duration:.3s;backface-visibility:hidden}.foogallery.fg-hover-colorize .fg-image{filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'saturate\' values=\'0\'/></filter></svg>#grayscale");filter:gray;-webkit-filter:grayscale(100%);-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-image{-webkit-filter:none;filter:none}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-hover-colorize .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-colorize .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-hover-grayscale .fg-image{-webkit-filter:none;filter:none;-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-image{-webkit-filter:grayscale(1);-webkit-filter:grayscale(100%);filter:grayscale(100%);filter:gray;opacity:1}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-hover-grayscale .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:none}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-image-overlay{display:block;left:0;top:0;bottom:0;transform:translateX(100%);visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-thumb{transition-property:transform}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-caption{transform:translateY(0)}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb,.foogallery.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb{transform:translateX(-100%)}.foogallery.fg-hover-scale .fg-item{transition-property:transform;z-index:4}.foogallery.fg-hover-scale .fg-item:hover{transform:scale(1.048);z-index:10}.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-hover-scale .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-scale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-scale .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-hover-zoomed .fg-image{transition-property:transform;z-index:4}.foogallery.fg-hover-zoomed .fg-item:hover .fg-image{transform:scale(1.15)}.foogallery.fg-hover-zoomed .fg-image-wrap{overflow:hidden}.foogallery.fg-caption-hover.fg-hover-zoomed .fg-caption,.foogallery.fg-hover-zoomed .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-zoomed .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-zoomed .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-image-overlay,.foogallery.fg-hover-slide-left .fg-loaded .fg-image-overlay,.foogallery.fg-hover-slide-right .fg-loaded .fg-image-overlay,.foogallery.fg-hover-slide-up .fg-loaded .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:transform,background-color,opacity,visibility;visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-image-overlay{transform:translateY(0) translateX(0)}.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-up .fg-loaded .fg-image-overlay{transform:translateY(100%)}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-image-overlay{transform:translateY(-100%)}.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-hover-slide-left .fg-loaded .fg-image-overlay{transform:translateX(100%)}.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-hover-slide-right .fg-loaded .fg-image-overlay{transform:translateX(-100%)}.fg-paging-container,.fg-paging-container *,.fg-paging-container :after,.fg-paging-container :before{box-sizing:border-box}.fg-paging-container{display:block;padding:15px;text-align:center;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fg-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.fg-paging-container .fg-dot-item,.fg-paging-container .fg-dots{display:inline-block;margin:0;padding:0;outline:0;list-style:none}.fg-paging-container .fg-dot-item .fg-dot-link{display:inline-block;margin:3px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;background-image:none;text-decoration:none;border:1px solid transparent;position:relative;border-radius:50%;padding:0;font-size:0;outline:0;color:transparent;box-shadow:none}.fg-paging-container .fg-dot-item .fg-dot-link:before{content:"";background-color:transparent;border:1px solid transparent;display:block;border-radius:50%;width:9px;height:9px;padding:0;margin:2px}.fg-paging-container .fg-dot-item .fg-dot-link:active,.fg-paging-container .fg-dot-item .fg-dot-link:focus,.fg-paging-container .fg-dot-item .fg-dot-link:hover{text-decoration:none;box-shadow:none;outline:0}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container .fg-dot-item.fg-selected .fg-dot-link{cursor:not-allowed;pointer-events:none}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link{cursor:not-allowed;pointer-events:none;outline:0}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link{background-color:#eee;border-color:#9d9d9d}.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link{border-color:#888}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#666;border-color:#888}.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#eee;border-color:#9d9d9d;opacity:.5}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link{background-color:#666;border-color:#333}.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link{border-color:#444}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#333;border-color:#444}.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#666;border-color:#333;opacity:.5}.fg-default:after{content:'';display:block;clear:both}.fg-default .fg-item,.fg-default .fg-item-inner,.fg-default .fg-thumb{display:inline-block;vertical-align:top;max-width:100%}.fg-default .fg-image{border-radius:0;display:block;max-width:100%;height:auto;margin:0;padding:0}.fg-default .fg-image{vertical-align:top}.fg-default.fg-left{text-align:left}.fg-default.fg-center{text-align:center}.fg-default.fg-right{text-align:right}.fg-default.fg-gutter-5{padding-left:5px;margin-bottom:-5px}.fg-default.fg-gutter-5 .fg-item{margin-right:5px;margin-bottom:5px}.fg-default.fg-gutter-10{padding-left:10px;margin-bottom:-10px}.fg-default.fg-gutter-10 .fg-item{margin-right:10px;margin-bottom:10px}.fg-default.fg-gutter-15{padding-left:15px;margin-bottom:-15px}.fg-default.fg-gutter-15 .fg-item{margin-right:15px;margin-bottom:15px}.fg-default.fg-gutter-20{padding-left:20px;margin-bottom:-20px}.fg-default.fg-gutter-20 .fg-item{margin-right:20px;margin-bottom:20px}.fg-default.fg-gutter-25{padding-left:25px;margin-bottom:-25px}.fg-default.fg-gutter-25 .fg-item{margin-right:25px;margin-bottom:25px}.fg-masonry *{box-sizing:border-box}.foogallery.fg-masonry.fg-center{margin:0 auto}.fg-masonry .fg-thumb{display:block}.fg-masonry.fg-masonry-fixed .fg-thumb{display:inline-block}.fg-masonry.fg-masonry-fixed .fg-image{max-width:100%}.fg-masonry .fg-column-width{display:inline-block;visibility:hidden;height:0;border:solid 0 transparent}.fg-masonry.fg-masonry-2col .fg-image,.fg-masonry.fg-masonry-3col .fg-image,.fg-masonry.fg-masonry-4col .fg-image,.fg-masonry.fg-masonry-5col .fg-image{width:100%;height:auto;max-width:100%}.fg-masonry .fg-item{line-height:0;font-size:0}.fg-masonry.fg-masonry-fixed .fg-column-width,.fg-masonry.fg-masonry-fixed .fg-item{max-width:100%}.fg-masonry.fg-masonry-2col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-2col .fg-column-width{width:49%}.fg-masonry.fg-masonry-2col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-3col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-3col .fg-column-width{width:32%}.fg-masonry.fg-masonry-3col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-4col .fg-item{margin-bottom:1%;width:24%}.fg-masonry.fg-masonry-4col .fg-column-width{width:24%}.fg-masonry.fg-masonry-4col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item{margin-bottom:0;width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width{width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item{margin-bottom:3%;width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width{width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:19%}.fg-masonry.fg-masonry-5col .fg-column-width{width:19%}.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}@media screen and (max-width:720px){.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:32%}.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:480px){.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:49%}.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:320px){.fg-masonry.fg-masonry-2col .fg-item,.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:100%}.fg-masonry.fg-masonry-2col .fg-column-width,.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col .fg-gutter-width,.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:0}}.foogallery.fg-border-thin .fg-column-width{border-width:4px}.foogallery.fg-border-medium .fg-column-width{border-width:10px}.foogallery.fg-border-thick .fg-column-width{border-width:16px}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption{visibility:visible;opacity:1;font-size:13px;position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;text-transform:none;transform:none;transition:none;background-color:transparent;border-style:solid;border-color:transparent}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner:hover .fg-caption{transform:none;transition:none}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner{display:block;position:relative;max-height:none;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;border:none;transform:none;transition:none}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner:before{display:none}.foogallery.fg-masonry.fg-captions-bottom.fg-caption-hover .fg-item-inner .fg-image-overlay{display:block}.foogallery.fg-masonry.fg-captions-bottom.fg-caption-always .fg-item-inner:hover .fg-caption{visibility:visible;opacity:1}.fg-masonry.fg-captions-bottom .fg-caption-desc,.fg-masonry.fg-captions-bottom .fg-caption-title{text-align:left}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption,.fg-masonry.fg-captions-bottom.fg-light .fg-caption{color:#828282}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a,.fg-masonry.fg-captions-bottom.fg-light .fg-caption a{color:#828282;border-bottom:1px solid #828282}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a:hover,.fg-masonry.fg-captions-bottom.fg-light .fg-caption a:hover{border-bottom:none}.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title,.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a{color:#222}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title,.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a{color:#fff}.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a{border-bottom:1px solid #222}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a{border-bottom:1px solid #fff}.fg-masonry.fg-captions-bottom .fg-caption{border-width:10px}.fg-masonry.fg-captions-bottom .fg-caption-title+.fg-caption-desc{margin-top:4px}.fg-masonry.fg-captions-bottom.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.fg-masonry.fg-captions-bottom.fg-border-medium .fg-caption{border-width:10px 0 0 0}.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption{border-width:16px 0 0 0}.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-masonry.fg-transparent .fg-item-inner{background-color:transparent;color:#333;border-color:transparent}.fg-masonry.fg-transparent .fg-caption{color:#7f7f7f}.fg-masonry.fg-transparent.fg-captions-bottom .fg-caption{border-width:0;border-top-width:10px;border-bottom-width:10px}.fg-masonry.fg-transparent .fg-caption a{color:#7f7f7f;border-bottom:1px solid #7f7f7f}.fg-masonry.fg-transparent .fg-caption a:hover{border-bottom:none}.fg-masonry.fg-transparent .fg-caption-title,.fg-masonry.fg-transparent .fg-caption-title a{color:#333}.fg-masonry.fg-transparent .fg-caption-title a{border-bottom:1px solid #333}.fg-masonry.fg-transparent.fg-round-full .fg-item,.fg-masonry.fg-transparent.fg-round-full .fg-item-inner{border-radius:15px}.fg-masonry.fg-transparent.fg-round-full .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-full .fg-image-wrap,.fg-masonry.fg-transparent.fg-round-full.fg-shadow-inset-large .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-full.fg-shadow-inset-small .fg-thumb:after{border-radius:50%;overflow:hidden}.fg-masonry.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap,.fg-masonry.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap,.fg-masonry.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{overflow:hidden}.fg-masonry.fg-transparent.fg-round-small.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-small.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-small.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:5px}.fg-masonry.fg-transparent.fg-round-medium.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-medium.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-medium.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:10px}.fg-masonry.fg-transparent.fg-round-large.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-large.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-large.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:15px}.fg-masonry.fg-transparent.fg-shadow-inset-small .fg-thumb:after{box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.3)}.fg-masonry.fg-transparent.fg-shadow-inset-medium .fg-thumb:after{box-shadow:inset 0 1px 10px 0 rgba(0,0,0,.3)}.fg-masonry.fg-transparent.fg-shadow-inset-large .fg-thumb:after{box-shadow:inset 0 1px 16px 0 rgba(0,0,0,.3)}.fg-masonry.fg-transparent.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px rgba(128,128,128,.5)}.fg-masonry.fg-transparent.fg-shadow-small .fg-item-inner{box-shadow:0 1px 4px 0 rgba(128,128,128,.5)}.fg-masonry.fg-transparent.fg-shadow-medium .fg-item-inner{box-shadow:0 1px 10px 0 rgba(128,128,128,.5)}.fg-masonry.fg-transparent.fg-shadow-large .fg-item-inner{box-shadow:0 1px 16px 0 rgba(128,128,128,.5)}.fg-justified{box-sizing:border-box;position:relative}.foogallery.fg-justified .fg-image,.foogallery.fg-justified .fg-item,.foogallery.fg-justified .fg-item-inner,.foogallery.fg-justified .fg-thumb{box-sizing:border-box;display:block;margin:0;padding:0}.fg-justified .fg-item{visibility:visible;position:absolute}.fg-justified .fg-item-inner{position:relative;width:100%;height:100%}.fg-justified .fg-thumb{position:relative;overflow:hidden}.fg-justified .fg-image{z-index:1}.fg-justified .fg-item.fg-positioned .fg-image-wrap,.fg-justified .fg-item.fg-positioned .fg-thumb{width:100%;height:100%}.fg-justified .fg-item.fg-positioned .fg-image{width:100%;height:auto;min-height:100%;top:50%;transform:translateY(-50%)}.fg-justified.fg-hover-zoomed .fg-item.fg-positioned:hover .fg-image{transform:translateY(-50%) scale(1.15)}.fg-simple_portfolio{display:flex;flex-wrap:wrap;justify-content:center;align-items:stretch;align-content:center}.fg-simple_portfolio .fg-item{position:relative;flex:1;margin:10px;min-width:250px;max-width:250px}.fg-simple_portfolio .fg-item-inner{display:flex;flex-direction:column;margin:0;height:100%}.fg-simple_portfolio.fg-captions-top .fg-item-inner{flex-direction:column-reverse}.fg-simple_portfolio .fg-image{height:auto;width:100%}.fg-simple_portfolio .fg-thumb{min-width:auto;min-height:auto}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption{visibility:visible;opacity:1;font-size:13px;position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;width:100%;height:100%;text-transform:none;transform:none;transition:none;background-color:transparent;border-style:solid;border-color:transparent}.foogallery.fg-simple_portfolio .fg-item-inner:hover .fg-caption{transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner{display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;border:none;transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner:before{display:none}.foogallery.fg-simple_portfolio.fg-caption-hover .fg-item-inner .fg-image-overlay{display:block}.foogallery.fg-simple_portfolio.fg-caption-always .fg-item-inner:hover .fg-caption{visibility:visible;opacity:1}.fg-simple_portfolio .fg-caption-title{text-align:left}.fg-simple_portfolio .fg-caption-desc{text-align:left}.fg-simple_portfolio.fg-dark .fg-caption,.fg-simple_portfolio.fg-light .fg-caption{color:#828282}.fg-simple_portfolio.fg-dark .fg-caption a,.fg-simple_portfolio.fg-light .fg-caption a{color:#828282;border-bottom:1px solid #828282}.fg-simple_portfolio.fg-dark .fg-caption a:hover,.fg-simple_portfolio.fg-light .fg-caption a:hover{border-bottom:none}.fg-simple_portfolio.fg-light .fg-caption-title,.fg-simple_portfolio.fg-light .fg-caption-title a{color:#222}.fg-simple_portfolio.fg-dark .fg-caption-title,.fg-simple_portfolio.fg-dark .fg-caption-title a{color:#fff}.fg-simple_portfolio.fg-light .fg-caption-title a{border-bottom:1px solid #222}.fg-simple_portfolio.fg-dark .fg-caption-title a{border-bottom:1px solid #fff}.fg-simple_portfolio .fg-caption{border-width:0}.fg-simple_portfolio .fg-caption-title+.fg-caption-desc{margin-top:4px}.fg-simple_portfolio.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.fg-simple_portfolio.fg-captions-top.fg-border-thin .fg-caption{border-width:4px 4px 10px 4px}.fg-simple_portfolio.fg-border-medium .fg-caption{border-width:10px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.fg-simple_portfolio.fg-border-thick .fg-caption{border-width:16px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 16px 0}.fg-simple_portfolio.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-simple_portfolio.fg-transparent .fg-item-inner{background-color:transparent;color:#333;border-color:transparent}.fg-simple_portfolio.fg-transparent .fg-caption{color:#7f7f7f}.fg-simple_portfolio.fg-transparent .fg-caption a{color:#7f7f7f;border-bottom:1px solid #7f7f7f}.fg-simple_portfolio.fg-transparent .fg-caption a:hover{border-bottom:none}.fg-simple_portfolio.fg-transparent .fg-caption-title,.fg-simple_portfolio.fg-transparent .fg-caption-title a{color:#333}.fg-simple_portfolio.fg-transparent .fg-caption-title a{border-bottom:1px solid #333}.fg-simple_portfolio.fg-transparent.fg-round-full .fg-item,.fg-simple_portfolio.fg-transparent.fg-round-full .fg-item-inner{border-radius:15px}.fg-simple_portfolio.fg-transparent.fg-round-full .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-full .fg-image-wrap,.fg-simple_portfolio.fg-transparent.fg-round-full.fg-shadow-inset-large .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-full.fg-shadow-inset-small .fg-thumb:after{border-radius:50%;overflow:hidden}.fg-simple_portfolio.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap,.fg-simple_portfolio.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap,.fg-simple_portfolio.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{overflow:hidden}.fg-simple_portfolio.fg-transparent.fg-round-small.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-small.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-small.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:5px}.fg-simple_portfolio.fg-transparent.fg-round-medium.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-medium.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-medium.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:10px}.fg-simple_portfolio.fg-transparent.fg-round-large.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-large.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-large.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:15px}.fg-simple_portfolio.fg-transparent.fg-shadow-inset-small .fg-thumb:after{box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.3)}.fg-simple_portfolio.fg-transparent.fg-shadow-inset-medium .fg-thumb:after{box-shadow:inset 0 1px 10px 0 rgba(0,0,0,.3)}.fg-simple_portfolio.fg-transparent.fg-shadow-inset-large .fg-thumb:after{box-shadow:inset 0 1px 16px 0 rgba(0,0,0,.3)}.fg-simple_portfolio.fg-transparent.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px rgba(128,128,128,.5)}.fg-simple_portfolio.fg-transparent.fg-shadow-small .fg-item-inner{box-shadow:0 1px 4px 0 rgba(128,128,128,.5)}.fg-simple_portfolio.fg-transparent.fg-shadow-medium .fg-item-inner{box-shadow:0 1px 10px 0 rgba(128,128,128,.5)}.fg-simple_portfolio.fg-transparent.fg-shadow-large .fg-item-inner{box-shadow:0 1px 16px 0 rgba(128,128,128,.5)}.foogallery.fg-preset.fg-polaroid .fg-item{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .35s,background-color .65s}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n+1){-webkit-transform:rotate(3deg);transform:rotate(3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n){-webkit-transform:rotate(-3deg);transform:rotate(-3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(3n){-webkit-transform:rotate(1deg);transform:rotate(1deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(5n){-webkit-transform:rotate(-2deg);transform:rotate(-2deg)}.foogallery.fg-preset.fg-polaroid .fg-item:hover{-webkit-transform:rotate(0);transform:rotate(0)}.foogallery.fg-preset.fg-polaroid .fg-caption{position:relative;width:auto;font-family:"Segoe Print Regular",-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.foogallery.fg-preset.fg-polaroid .fg-caption-inner,.foogallery.fg-preset.fg-polaroid .fg-caption-title{position:relative;width:auto}.foogallery.fg-preset.fg-polaroid .fg-caption-title{text-align:center}.foogallery.fg-preset.fg-polaroid .fg-caption-desc{display:none}.foogallery.fg-light.fg-preset.fg-polaroid .fg-caption-title,.foogallery.fg-preset.fg-polaroid .fg-caption-title{color:#333}.foogallery.fg-dark.fg-preset.fg-polaroid .fg-caption-title{color:#fff}.foogallery.fg-preset.fg-polaroid .fg-caption{border-style:solid;border-color:transparent;border-width:10px}.foogallery.fg-preset.fg-polaroid .fg-caption-title+.fg-caption-desc{margin-top:4px}.foogallery.fg-preset.fg-polaroid.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thin .fg-caption{border-width:4px 4px 10px 4px}.foogallery.fg-preset.fg-polaroid.fg-border-medium .fg-caption{border-width:10px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption{border-width:16px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 16px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-image-viewer{display:block;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif}.fg-image-viewer.fg-left{text-align:left}.fg-image-viewer.fg-center{text-align:center}.fg-image-viewer.fg-right{text-align:right}.fiv-inner{position:relative;display:inline-block;max-width:100%;overflow:hidden;z-index:6}.fiv-inner .fiv-inner-container{position:relative;overflow:hidden;max-width:100%;border-style:solid;border-width:0;border-bottom-width:4px;z-index:5}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:active,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:hover,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:visited{position:relative;display:block;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item{position:absolute;visibility:visible;opacity:1;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item:first-of-type{position:relative}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb img{display:block;max-width:100%;height:auto;border:none;outline:0;text-decoration:none}.fg-image-viewer .fiv-inner .fiv-ctrls{display:block;text-align:center;font-size:14px;border-style:solid;line-height:34px}.fg-image-viewer .fiv-inner .fiv-ctrls:after{content:'';display:block;clear:both}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count{display:inline-block;font-weight:400;margin:0}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:none;min-width:80px;position:relative;overflow:hidden;transition:background-color .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{display:block;position:absolute;font-size:24px;line-height:30px;top:0;left:0;width:100%;transform:translateY(0);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover:before{transform:translateY(-100%)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev span{display:block;width:100%;transform:translateY(100%);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover span{transform:translateY(0)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{float:left}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{content:'\2190'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next{float:right}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before{content:'\2192'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count span{margin:0 4px}/*!* Theme - Default (Light) *!*//*!* Theme - Dark *!*/.foogallery.fg-image-viewer.fg-caption-always .fg-item-inner .fg-caption{padding:0;border:none;background:#000;background:-moz-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:-webkit-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:linear-gradient(to right,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%)}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-desc{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title+.fg-caption-desc{padding:0 10px 10px 10px}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-light .fiv-inner .fiv-inner-container{background-color:#fff;color:#333;border-color:#fff}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#f2f2f2}.fg-image-viewer.fg-light .fiv-next,.fg-image-viewer.fg-light .fiv-prev{box-shadow:inset 0 0 0 1px #ddd}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-dark .fiv-inner .fiv-inner-container{background-color:#333;color:#fff;border-color:#333}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#444}.fg-image-viewer.fg-dark .fiv-next,.fg-image-viewer.fg-dark .fiv-prev{box-shadow:inset 0 0 0 1px #222}.foogallery.fg-image-viewer.fg-border-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin .fg-item-inner{border-width:0}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-inner-container{border-width:4px}.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-inner-container{border-width:10px}.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-inner-container{border-width:16px}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-ctrls{border-top-width:1px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-round-small .fiv-inner{border-radius:5px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-round-medium .fiv-inner{border-radius:10px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-round-large .fiv-inner{border-radius:15px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-full .fiv-inner,.foogallery.fg-image-viewer.fg-round-full .fiv-next,.foogallery.fg-image-viewer.fg-round-full .fiv-prev{border-radius:50%}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fg-item-inner{box-shadow:none}.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fiv-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fiv-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fiv-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-thumbnail,.foogallery.fg-thumbnail.fg-center{text-align:center}.foogallery.fg-thumbnail.fg-left{text-align:left}.foogallery.fg-thumbnail.fg-right{text-align:right}.foogallery.fg-thumbnail.fg-float-left{float:left;width:auto}.foogallery.fg-thumbnail.fg-float-right{float:right;width:auto}.foogallery.fg-thumbnail .fg-item{display:inline-block;vertical-align:top;max-width:100%}.foogallery.fg-thumbnail .fg-image{max-width:100%}.foogallery.fg-thumbnail .fg-st-hidden{display:none}
1
+ .foogallery,.foogallery *{box-sizing:border-box}.foogallery{display:block;z-index:1;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;position:relative;line-height:0;font-size:0;width:100%;max-width:100%}.foogallery .fg-item{display:inline-block;position:relative;background-color:transparent;z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.foogallery .fg-item-inner{display:block;position:relative;visibility:hidden;overflow:hidden;opacity:0;z-index:3;margin:0;border:solid 0 transparent}.foogallery .fg-item.fg-error:before{content:"";display:block;position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);width:32px;height:32px;background-image:url(../img/icons.svg#image);background-color:transparent;background-repeat:no-repeat;background-position:center center;background-size:32px 32px}.foogallery .fg-item.fg-loaded{z-index:4}.foogallery .fg-loaded .fg-item-inner{visibility:visible;opacity:1;z-index:5}.foogallery .fg-error .fg-item-inner{pointer-events:none;cursor:default}.foogallery .fg-thumb{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:4;box-shadow:none}.foogallery .fg-thumb:focus,.foogallery .fg-thumb:hover{border:none;outline:0;text-decoration:none;box-shadow:none}.foogallery .fg-image-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:8;visibility:hidden;opacity:0}.foogallery .fg-image-wrap{display:block;position:relative}.foogallery .fg-image{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:5;max-width:none;height:auto;margin:0}.foogallery .fg-loaded .fg-thumb{z-index:6}.foogallery .fg-loaded .fg-image{z-index:7}.foogallery.fg-light .fg-item-inner{background-color:#fff;color:#333;border-color:#fff}.foogallery.fg-dark .fg-item-inner{background-color:#333;color:#fff;border-color:#333}.foogallery.fg-light .fg-item.fg-error,.foogallery.fg-light .fg-item.fg-idle,.foogallery.fg-light .fg-item.fg-loading{background-color:#eee;box-shadow:inset 0 0 0 1px #ddd}.foogallery.fg-dark .fg-item.fg-error,.foogallery.fg-dark .fg-item.fg-idle,.foogallery.fg-dark .fg-item.fg-loading{background-color:#444;box-shadow:inset 0 0 0 1px #333}.foogallery .fg-caption{background-color:rgba(0,0,0,.6);color:#fff}.foogallery .fg-caption a{color:#fff;border-bottom:1px solid #fff}.foogallery.fg-light-overlays .fg-caption{background-color:rgba(255,255,255,.8);color:#333}.foogallery.fg-light-overlays .fg-caption a{color:#333;border-bottom-color:#333}.foogallery.fg-transparent-overlays .fg-caption{background-color:transparent;color:#fff}.foogallery.fg-transparent-overlays .fg-caption a{color:#fff;border-bottom-color:#fff}.foogallery .fg-image-overlay{background-color:rgba(0,0,0,.6);color:#fff}.foogallery.fg-light-overlays .fg-image-overlay{background-color:rgba(255,255,255,.8);color:#333}.foogallery.fg-transparent-overlays .fg-image-overlay{background-color:transparent;color:#fff}.fg-exif-light .fg-item.fg-item-exif .fg-image-wrap:after{background-color:#fff;color:#333}.fg-exif-dark .fg-item.fg-item-exif .fg-image-wrap:after{background-color:#333;color:#fff}.fg-exif-rounded .fg-item.fg-item-exif .fg-image-wrap:after{border-radius:3px}.fg-exif-bottom-left .fg-item.fg-item-exif .fg-image-wrap:after,.fg-exif-bottom-right .fg-item.fg-item-exif .fg-image-wrap:after,.fg-exif-top-left .fg-item.fg-item-exif .fg-image-wrap:after,.fg-exif-top-right .fg-item.fg-item-exif .fg-image-wrap:after{display:inline-block;position:absolute;content:'EXIF';font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:11px;line-height:10px;padding:3px 4px;z-index:7}.fg-exif-bottom-right .fg-item.fg-item-exif .fg-image-wrap:after{bottom:5px;right:5px}.fg-exif-bottom-left .fg-item.fg-item-exif .fg-image-wrap:after{bottom:5px;left:5px}.fg-exif-top-right .fg-item.fg-item-exif .fg-image-wrap:after{top:5px;right:5px}.fg-exif-top-left .fg-item.fg-item-exif .fg-image-wrap:after{top:5px;left:5px}.foogallery.fg-border-thin .fg-item-inner{border-width:4px}.foogallery.fg-border-medium .fg-item-inner{border-width:10px}.foogallery.fg-border-thick .fg-item-inner{border-width:16px}.foogallery.fg-light.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-dark.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-light.fg-shadow-small .fg-item-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-light.fg-shadow-medium .fg-item-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-light.fg-shadow-large .fg-item-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-shadow-inset-small .fg-thumb:after{display:block;content:"";position:absolute;top:0;left:0;right:0;bottom:0;z-index:7}.foogallery.fg-dark.fg-shadow-inset-small .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-small .fg-thumb:after{box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-medium .fg-thumb:after{box-shadow:inset 0 1px 10px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-large .fg-thumb:after{box-shadow:inset 0 1px 16px 0 rgba(0,0,0,.3)}.foogallery.fg-round-full.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-small .fg-thumb:after{border-radius:50%}.foogallery.fg-round-small .fg-item,.foogallery.fg-round-small .fg-item-inner{border-radius:5px}.foogallery.fg-round-medium .fg-item,.foogallery.fg-round-medium .fg-item-inner{border-radius:10px}.foogallery.fg-round-large .fg-item,.foogallery.fg-round-large .fg-item-inner{border-radius:15px}.foogallery.fg-round-full .fg-item,.foogallery.fg-round-full .fg-item-inner{border-radius:50%}.foogallery .fg-loader{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);width:1em;height:1em;font-size:5px;visibility:hidden;opacity:0}.foogallery .fg-loading .fg-loader{visibility:visible;opacity:1}.fg-loading-default .fg-loader{border-radius:50%;text-indent:-9999em;box-shadow:0 -2.6em 0 0 rgba(130,130,130,1),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.5),-1.8em -1.8em 0 0 rgba(130,130,130,.7);-webkit-animation:loading-default 1.1s infinite steps(8,start);animation:loading-default 1.1s infinite steps(8,start)}@-webkit-keyframes loading-default{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes loading-default{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.fg-loading-bars .fg-loader,.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{background:rgba(130,130,130,1);-webkit-animation:loading-bars 1s infinite ease-in-out;animation:loading-bars 1s infinite ease-in-out;width:1em;height:4em}.fg-loading-bars .fg-loader{color:rgba(130,130,130,1);text-indent:-9999em;font-size:4px;-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{position:absolute;top:0;content:''}.fg-loading-bars .fg-loader:before{left:-1.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-bars .fg-loader:after{left:1.5em}@-webkit-keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}@keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}.fg-loading-trail .fg-loader{color:#828282;font-size:20px;text-indent:-9999em;overflow:hidden;border-radius:50%;-webkit-animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease;animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease}@-webkit-keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@-webkit-keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.fg-loading-pulse .fg-loader,.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{border-radius:50%;width:2.5em;height:2.5em;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation:loading-pulse 1.8s infinite ease-in-out;animation:loading-pulse 1.8s infinite ease-in-out}.fg-loading-pulse .fg-loader{color:#828282;font-size:4px;text-indent:-9999em;transform:translateX(-50%) translateY(-150%);-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{content:'';position:absolute;top:0}.fg-loading-pulse .fg-loader:before{left:-3.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-pulse .fg-loader:after{left:3.5em}@-webkit-keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}@keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}.fg-loading-dots .fg-loader{color:#828282;font-size:5px;border-radius:50%;text-indent:-9999em;-webkit-animation:loading-dots 1.3s infinite linear;animation:loading-dots 1.3s infinite linear}@-webkit-keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}@keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}.fg-loading-partial .fg-loader,.fg-loading-partial .fg-loader:after{border-radius:50%;width:10em;height:10em}.fg-loading-partial .fg-loader{font-size:4px;text-indent:-9999em;border-top:1.1em solid rgba(130,130,130,.2);border-right:1.1em solid rgba(130,130,130,.2);border-bottom:1.1em solid rgba(130,130,130,.2);border-left:1.1em solid #828282;-webkit-animation:loading-partial 1.1s infinite linear;animation:loading-partial 1.1s infinite linear}@-webkit-keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.foogallery.fg-loaded-drop .fg-item,.foogallery.fg-loaded-fade-in .fg-item,.foogallery.fg-loaded-flip .fg-item,.foogallery.fg-loaded-fly .fg-item,.foogallery.fg-loaded-scale-up .fg-item,.foogallery.fg-loaded-slide-down .fg-item,.foogallery.fg-loaded-slide-left .fg-item,.foogallery.fg-loaded-slide-right .fg-item,.foogallery.fg-loaded-slide-up .fg-item,.foogallery.fg-loaded-swing-down .fg-item{transition-timing-function:ease;transition-duration:650ms;transition-property:background-color,transform}.foogallery.fg-loaded-drop .fg-item-inner,.foogallery.fg-loaded-fade-in .fg-item-inner,.foogallery.fg-loaded-flip .fg-item-inner,.foogallery.fg-loaded-fly .fg-item-inner,.foogallery.fg-loaded-scale-up .fg-item-inner,.foogallery.fg-loaded-slide-down .fg-item-inner,.foogallery.fg-loaded-slide-left .fg-item-inner,.foogallery.fg-loaded-slide-right .fg-item-inner,.foogallery.fg-loaded-slide-up .fg-item-inner,.foogallery.fg-loaded-swing-down .fg-item-inner{transition-timing-function:ease;transition-duration:650ms}.foogallery.fg-loaded-drop .fg-item.fg-loaded,.foogallery.fg-loaded-flip .fg-item.fg-loaded,.foogallery.fg-loaded-fly .fg-item.fg-loaded,.foogallery.fg-loaded-swing-down .fg-item.fg-loaded{perspective:1300px}.foogallery.fg-loaded-fade-in .fg-item-inner{transition-property:visibility,opacity}.foogallery .fg-caption{visibility:hidden;opacity:0;position:absolute;z-index:8;width:100%;max-height:100%;overflow:hidden;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:13px;font-weight:400;line-height:1.3;border:none;text-align:center;cursor:pointer;margin:0}.foogallery .fg-caption a{text-decoration:none}.foogallery .fg-caption a:hover{border-bottom:none}.foogallery .fg-caption-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:16px;font-weight:400;padding:5px}.foogallery .fg-caption-desc{padding:5px}.foogallery .fg-caption-title+.fg-caption-desc{padding-top:0}.foogallery.fg-caption-always .fg-item .fg-caption .fg-caption-inner:before{display:none}.foogallery.fg-caption-always .fg-item.fg-loaded .fg-caption{left:0;bottom:0;transition-timing-function:ease;transition-duration:.3s;transition-property:visibility,opacity;visibility:visible;opacity:1;text-align:left}.foogallery.fg-caption-hover .fg-caption .fg-caption-inner{width:100%;max-height:100%;position:absolute;top:50%;left:0;transform:translateY(-50%)}.foogallery.fg-caption-hover .fg-item.fg-loaded .fg-image-overlay{display:none}.foogallery .fg-image-overlay:before{content:"";display:block;position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);width:32px;height:32px;background-size:32px 32px;background-position:center center;background-repeat:no-repeat}.foogallery .fg-caption-inner:before{content:"";display:none;position:relative;width:32px;height:32px;margin:10px 0 5px 0;background-size:32px 32px;vertical-align:middle;background-position:center center;background-repeat:no-repeat}.foogallery.fg-hover-circle-plus:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-external:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-eye:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-plus:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-tint:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-zoom2:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-zoom3:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-hover-zoom:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-video-1:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-video-2:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-video-3:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-video-4:not(.fg-preset) .fg-caption-inner:before,.foogallery.fg-video-default:not(.fg-preset) .fg-caption-inner:before{display:inline-block}.foogallery.fg-hover-circle-plus:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-external:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-eye:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-plus:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-tint:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-zoom2:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-zoom3:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-zoom:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-1:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-2:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-3:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-4:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-default:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-video-sticky .fg-type-video.fg-loaded .fg-item-inner .fg-image-overlay{background-color:transparent;visibility:visible;opacity:1;display:block}.foogallery.fg-video-sticky .fg-type-video .fg-caption-inner:before{display:none}.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom-light)}.foogallery.fg-light-overlays.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-zoom .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom-dark)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom2-light)}.foogallery.fg-light-overlays.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-zoom2 .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom2-dark)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom3-light)}.foogallery.fg-light-overlays.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-zoom3 .fg-image-overlay:before{background-image:url(../img/icons.svg#zoom3-dark)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-image-overlay:before{background-image:url(../img/icons.svg#plus-light)}.foogallery.fg-light-overlays.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-plus .fg-image-overlay:before{background-image:url(../img/icons.svg#plus-dark)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-image-overlay:before{background-image:url(../img/icons.svg#circle-plus-light)}.foogallery.fg-light-overlays.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-circle-plus .fg-image-overlay:before{background-image:url(../img/icons.svg#circle-plus-dark)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-image-overlay:before{background-image:url(../img/icons.svg#eye-light)}.foogallery.fg-light-overlays.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-eye .fg-image-overlay:before{background-image:url(../img/icons.svg#eye-dark)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-image-overlay:before{background-image:url(../img/icons.svg#external-light)}.foogallery.fg-light-overlays.fg-hover-external .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-hover-external .fg-image-overlay:before{background-image:url(../img/icons.svg#external-dark)}.foogallery.fg-video-default .fg-type-video .fg-caption-inner:before,.foogallery.fg-video-default .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-default-light)}.foogallery.fg-light-overlays.fg-video-default .fg-type-video .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-video-default .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-default-dark)}.foogallery.fg-video-1 .fg-type-video .fg-caption-inner:before,.foogallery.fg-video-1 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-1-light)}.foogallery.fg-light-overlays.fg-video-1 .fg-type-video .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-video-1 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-1-dark)}.foogallery.fg-video-2 .fg-type-video .fg-caption-inner:before,.foogallery.fg-video-2 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-2-light)}.foogallery.fg-light-overlays.fg-video-2 .fg-type-video .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-video-2 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-2-dark)}.foogallery.fg-video-3 .fg-type-video .fg-caption-inner:before,.foogallery.fg-video-3 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-3-light)}.foogallery.fg-light-overlays.fg-video-3 .fg-type-video .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-video-3 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-3-dark)}.foogallery.fg-video-4 .fg-type-video .fg-caption-inner:before,.foogallery.fg-video-4 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-4-light)}.foogallery.fg-light-overlays.fg-video-4 .fg-type-video .fg-caption-inner:before,.foogallery.fg-light-overlays.fg-video-4 .fg-type-video .fg-image-overlay:before{background-image:url(../img/icons.svg#video-4-dark)}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-caption-hover.fg-hover-fade .fg-caption,.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-caption-hover.fg-hover-instant .fg-caption,.foogallery.fg-caption-hover.fg-hover-push .fg-caption,.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-down .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-caption,.foogallery.fg-hover-colorize .fg-image,.foogallery.fg-hover-colorize .fg-image-overlay,.foogallery.fg-hover-fade .fg-image-overlay,.foogallery.fg-hover-grayscale .fg-image,.foogallery.fg-hover-grayscale .fg-image-overlay,.foogallery.fg-hover-instant .fg-image-overlay,.foogallery.fg-hover-push .fg-thumb,.foogallery.fg-hover-scale .fg-image-overlay,.foogallery.fg-hover-scale .fg-item,.foogallery.fg-hover-slide-down .fg-image-overlay,.foogallery.fg-hover-slide-left .fg-image-overlay,.foogallery.fg-hover-slide-right .fg-image-overlay,.foogallery.fg-hover-slide-up .fg-image-overlay,.foogallery.fg-hover-zoomed .fg-image{transition-timing-function:ease;transition-duration:.3s;backface-visibility:hidden}.foogallery.fg-hover-colorize .fg-image{filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'saturate\' values=\'0\'/></filter></svg>#grayscale");filter:gray;-webkit-filter:grayscale(100%);-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-image{-webkit-filter:none;filter:none}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-hover-colorize .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-colorize .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-hover-grayscale .fg-image{-webkit-filter:none;filter:none;-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-image{-webkit-filter:grayscale(1);-webkit-filter:grayscale(100%);filter:grayscale(100%);filter:gray;opacity:1}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-hover-grayscale .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:none}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-image-overlay{display:block;left:0;top:0;bottom:0;transform:translateX(100%);visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-thumb{transition-property:transform}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-caption{transform:translateY(0)}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb,.foogallery.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb{transform:translateX(-100%)}.foogallery.fg-hover-scale .fg-item{transition-property:transform;z-index:4}.foogallery.fg-hover-scale .fg-item:hover{transform:scale(1.048);z-index:10}.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-hover-scale .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-scale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-scale .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-hover-zoomed .fg-image{transition-property:transform;z-index:4}.foogallery.fg-hover-zoomed .fg-item:hover .fg-image{transform:scale(1.15)}.foogallery.fg-hover-zoomed .fg-image-wrap{overflow:hidden}.foogallery.fg-caption-hover.fg-hover-zoomed .fg-caption,.foogallery.fg-hover-zoomed .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-zoomed .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-zoomed .fg-item-inner:hover .fg-image-overlay{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-image-overlay,.foogallery.fg-hover-slide-left .fg-loaded .fg-image-overlay,.foogallery.fg-hover-slide-right .fg-loaded .fg-image-overlay,.foogallery.fg-hover-slide-up .fg-loaded .fg-image-overlay{display:block;left:0;top:0;bottom:0;transition-property:transform,background-color,opacity,visibility;visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-image-overlay{transform:translateY(0) translateX(0)}.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-up .fg-loaded .fg-image-overlay{transform:translateY(100%)}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-image-overlay{transform:translateY(-100%)}.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-hover-slide-left .fg-loaded .fg-image-overlay{transform:translateX(100%)}.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-hover-slide-right .fg-loaded .fg-image-overlay{transform:translateX(-100%)}.fg-paging-container,.fg-paging-container *,.fg-paging-container :after,.fg-paging-container :before{box-sizing:border-box}.fg-paging-container{display:block;padding:15px;text-align:center;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fg-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.fg-paging-container .fg-dot-item,.fg-paging-container .fg-dots{display:inline-block;margin:0;padding:0;outline:0;list-style:none}.fg-paging-container .fg-dot-item .fg-dot-link{display:inline-block;margin:3px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;background-image:none;text-decoration:none;border:1px solid transparent;position:relative;border-radius:50%;padding:0;font-size:0;outline:0;color:transparent;box-shadow:none}.fg-paging-container .fg-dot-item .fg-dot-link:before{content:"";background-color:transparent;border:1px solid transparent;display:block;border-radius:50%;width:9px;height:9px;padding:0;margin:2px}.fg-paging-container .fg-dot-item .fg-dot-link:active,.fg-paging-container .fg-dot-item .fg-dot-link:focus,.fg-paging-container .fg-dot-item .fg-dot-link:hover{text-decoration:none;box-shadow:none;outline:0}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container .fg-dot-item.fg-selected .fg-dot-link{cursor:not-allowed;pointer-events:none}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link{cursor:not-allowed;pointer-events:none;outline:0}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link{background-color:#eee;border-color:#9d9d9d}.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link{border-color:#888}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#666;border-color:#888}.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#eee;border-color:#9d9d9d;opacity:.5}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link{background-color:#666;border-color:#333}.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link{border-color:#444}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#333;border-color:#444}.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#666;border-color:#333;opacity:.5}.fg-default:after{content:'';display:block;clear:both}.fg-default .fg-item,.fg-default .fg-item-inner,.fg-default .fg-thumb{display:inline-block;vertical-align:top;max-width:100%}.fg-default .fg-image{border-radius:0;display:block;max-width:100%;height:auto;margin:0;padding:0}.fg-default .fg-image{vertical-align:top}.fg-default.fg-left{text-align:left}.fg-default.fg-center{text-align:center}.fg-default.fg-right{text-align:right}.fg-default.fg-gutter-5{padding-left:5px;margin-bottom:-5px}.fg-default.fg-gutter-5 .fg-item{margin-right:5px;margin-bottom:5px}.fg-default.fg-gutter-10{padding-left:10px;margin-bottom:-10px}.fg-default.fg-gutter-10 .fg-item{margin-right:10px;margin-bottom:10px}.fg-default.fg-gutter-15{padding-left:15px;margin-bottom:-15px}.fg-default.fg-gutter-15 .fg-item{margin-right:15px;margin-bottom:15px}.fg-default.fg-gutter-20{padding-left:20px;margin-bottom:-20px}.fg-default.fg-gutter-20 .fg-item{margin-right:20px;margin-bottom:20px}.fg-default.fg-gutter-25{padding-left:25px;margin-bottom:-25px}.fg-default.fg-gutter-25 .fg-item{margin-right:25px;margin-bottom:25px}.fg-masonry *{box-sizing:border-box}.foogallery.fg-masonry.fg-center{margin:0 auto}.fg-masonry .fg-thumb{display:block}.fg-masonry.fg-masonry-fixed .fg-thumb{display:inline-block}.fg-masonry.fg-masonry-fixed .fg-image{max-width:100%}.fg-masonry .fg-column-width{display:inline-block;visibility:hidden;height:0;border:solid 0 transparent}.fg-masonry.fg-masonry-2col .fg-image,.fg-masonry.fg-masonry-3col .fg-image,.fg-masonry.fg-masonry-4col .fg-image,.fg-masonry.fg-masonry-5col .fg-image{width:100%;height:auto;max-width:100%}.fg-masonry .fg-item{line-height:0;font-size:0}.fg-masonry.fg-masonry-fixed .fg-column-width,.fg-masonry.fg-masonry-fixed .fg-item{max-width:100%}.fg-masonry.fg-masonry-2col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-2col .fg-column-width{width:49%}.fg-masonry.fg-masonry-2col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-3col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-3col .fg-column-width{width:32%}.fg-masonry.fg-masonry-3col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-4col .fg-item{margin-bottom:1%;width:24%}.fg-masonry.fg-masonry-4col .fg-column-width{width:24%}.fg-masonry.fg-masonry-4col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item{margin-bottom:0;width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width{width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item{margin-bottom:3%;width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width{width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:19%}.fg-masonry.fg-masonry-5col .fg-column-width{width:19%}.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}@media screen and (max-width:720px){.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:32%}.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:480px){.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:49%}.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:320px){.fg-masonry.fg-masonry-2col .fg-item,.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:100%}.fg-masonry.fg-masonry-2col .fg-column-width,.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col .fg-gutter-width,.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:0}}.foogallery.fg-border-thin .fg-column-width{border-width:4px}.foogallery.fg-border-medium .fg-column-width{border-width:10px}.foogallery.fg-border-thick .fg-column-width{border-width:16px}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption{visibility:visible;opacity:1;font-size:13px;position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;text-transform:none;transform:none;transition:none;background-color:transparent;border-style:solid;border-color:transparent}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner:hover .fg-caption{transform:none;transition:none}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner{display:block;position:relative;max-height:none;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;border:none;transform:none;transition:none}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner:before{display:none}.foogallery.fg-masonry.fg-captions-bottom.fg-caption-hover .fg-item-inner .fg-image-overlay{display:block}.foogallery.fg-masonry.fg-captions-bottom.fg-caption-always .fg-item-inner:hover .fg-caption{visibility:visible;opacity:1}.fg-masonry.fg-captions-bottom .fg-caption-desc,.fg-masonry.fg-captions-bottom .fg-caption-title{text-align:left}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption,.fg-masonry.fg-captions-bottom.fg-light .fg-caption{color:#828282}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a,.fg-masonry.fg-captions-bottom.fg-light .fg-caption a{color:#828282;border-bottom:1px solid #828282}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a:hover,.fg-masonry.fg-captions-bottom.fg-light .fg-caption a:hover{border-bottom:none}.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title,.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a{color:#222}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title,.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a{color:#fff}.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a{border-bottom:1px solid #222}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a{border-bottom:1px solid #fff}.fg-masonry.fg-captions-bottom .fg-caption{border-width:10px}.fg-masonry.fg-captions-bottom .fg-caption-title+.fg-caption-desc{margin-top:4px}.fg-masonry.fg-captions-bottom.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.fg-masonry.fg-captions-bottom.fg-border-medium .fg-caption{border-width:10px 0 0 0}.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption{border-width:16px 0 0 0}.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-masonry.fg-transparent .fg-item-inner{background-color:transparent;color:#333;border-color:transparent}.fg-masonry.fg-transparent .fg-caption{color:#7f7f7f}.fg-masonry.fg-transparent.fg-captions-bottom .fg-caption{border-width:0;border-top-width:10px;border-bottom-width:10px}.fg-masonry.fg-transparent .fg-caption a{color:#7f7f7f;border-bottom:1px solid #7f7f7f}.fg-masonry.fg-transparent .fg-caption a:hover{border-bottom:none}.fg-masonry.fg-transparent .fg-caption-title,.fg-masonry.fg-transparent .fg-caption-title a{color:#333}.fg-masonry.fg-transparent .fg-caption-title a{border-bottom:1px solid #333}.fg-masonry.fg-transparent.fg-round-full .fg-item,.fg-masonry.fg-transparent.fg-round-full .fg-item-inner{border-radius:15px}.fg-masonry.fg-transparent.fg-round-full .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-full .fg-image-wrap,.fg-masonry.fg-transparent.fg-round-full.fg-shadow-inset-large .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-full.fg-shadow-inset-small .fg-thumb:after{border-radius:50%;overflow:hidden}.fg-masonry.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap,.fg-masonry.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap,.fg-masonry.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{overflow:hidden}.fg-masonry.fg-transparent.fg-round-small.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-small.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-small.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:5px}.fg-masonry.fg-transparent.fg-round-medium.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-medium.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-medium.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:10px}.fg-masonry.fg-transparent.fg-round-large.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-large.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-large.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-masonry.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-masonry.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:15px}.fg-masonry.fg-transparent.fg-shadow-inset-small .fg-thumb:after{box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.3)}.fg-masonry.fg-transparent.fg-shadow-inset-medium .fg-thumb:after{box-shadow:inset 0 1px 10px 0 rgba(0,0,0,.3)}.fg-masonry.fg-transparent.fg-shadow-inset-large .fg-thumb:after{box-shadow:inset 0 1px 16px 0 rgba(0,0,0,.3)}.fg-masonry.fg-transparent.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px rgba(128,128,128,.5)}.fg-masonry.fg-transparent.fg-shadow-small .fg-item-inner{box-shadow:0 1px 4px 0 rgba(128,128,128,.5)}.fg-masonry.fg-transparent.fg-shadow-medium .fg-item-inner{box-shadow:0 1px 10px 0 rgba(128,128,128,.5)}.fg-masonry.fg-transparent.fg-shadow-large .fg-item-inner{box-shadow:0 1px 16px 0 rgba(128,128,128,.5)}.fg-justified{box-sizing:border-box;position:relative}.foogallery.fg-justified .fg-image,.foogallery.fg-justified .fg-item,.foogallery.fg-justified .fg-item-inner,.foogallery.fg-justified .fg-thumb{box-sizing:border-box;display:block;margin:0;padding:0}.fg-justified .fg-item{visibility:visible;position:absolute}.fg-justified .fg-item-inner{position:relative;width:100%;height:100%}.fg-justified .fg-thumb{position:relative;overflow:hidden}.fg-justified .fg-image{z-index:1}.fg-justified .fg-item.fg-positioned .fg-image-wrap,.fg-justified .fg-item.fg-positioned .fg-thumb{width:100%;height:100%}.fg-justified .fg-item.fg-positioned .fg-image{width:100%;height:auto;min-height:100%;top:50%;transform:translateY(-50%)}.fg-justified.fg-hover-zoomed .fg-item.fg-positioned:hover .fg-image{transform:translateY(-50%) scale(1.15)}.fg-simple_portfolio{display:flex;flex-wrap:wrap;justify-content:center;align-items:stretch;align-content:center}.fg-simple_portfolio .fg-item{position:relative;flex:1;margin:10px;min-width:250px;max-width:250px}.fg-simple_portfolio .fg-item-inner{display:flex;flex-direction:column;margin:0;height:100%}.fg-simple_portfolio.fg-captions-top .fg-item-inner{flex-direction:column-reverse}.fg-simple_portfolio .fg-image{height:auto;width:100%}.fg-simple_portfolio .fg-thumb{min-width:auto;min-height:auto}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption{visibility:visible;opacity:1;font-size:13px;position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;width:100%;height:100%;text-transform:none;transform:none;transition:none;background-color:transparent;border-style:solid;border-color:transparent}.foogallery.fg-simple_portfolio .fg-item-inner:hover .fg-caption{transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner{display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;border:none;transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner:before{display:none}.foogallery.fg-simple_portfolio.fg-caption-hover .fg-item-inner .fg-image-overlay{display:block}.foogallery.fg-simple_portfolio.fg-caption-always .fg-item-inner:hover .fg-caption{visibility:visible;opacity:1}.fg-simple_portfolio .fg-caption-title{text-align:left}.fg-simple_portfolio .fg-caption-desc{text-align:left}.fg-simple_portfolio.fg-dark .fg-caption,.fg-simple_portfolio.fg-light .fg-caption{color:#828282}.fg-simple_portfolio.fg-dark .fg-caption a,.fg-simple_portfolio.fg-light .fg-caption a{color:#828282;border-bottom:1px solid #828282}.fg-simple_portfolio.fg-dark .fg-caption a:hover,.fg-simple_portfolio.fg-light .fg-caption a:hover{border-bottom:none}.fg-simple_portfolio.fg-light .fg-caption-title,.fg-simple_portfolio.fg-light .fg-caption-title a{color:#222}.fg-simple_portfolio.fg-dark .fg-caption-title,.fg-simple_portfolio.fg-dark .fg-caption-title a{color:#fff}.fg-simple_portfolio.fg-light .fg-caption-title a{border-bottom:1px solid #222}.fg-simple_portfolio.fg-dark .fg-caption-title a{border-bottom:1px solid #fff}.fg-simple_portfolio .fg-caption{border-width:0}.fg-simple_portfolio .fg-caption-title+.fg-caption-desc{margin-top:4px}.fg-simple_portfolio.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.fg-simple_portfolio.fg-captions-top.fg-border-thin .fg-caption{border-width:4px 4px 10px 4px}.fg-simple_portfolio.fg-border-medium .fg-caption{border-width:10px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.fg-simple_portfolio.fg-border-thick .fg-caption{border-width:16px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 16px 0}.fg-simple_portfolio.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-simple_portfolio.fg-transparent .fg-item-inner{background-color:transparent;color:#333;border-color:transparent}.fg-simple_portfolio.fg-transparent .fg-caption{color:#7f7f7f}.fg-simple_portfolio.fg-transparent .fg-caption a{color:#7f7f7f;border-bottom:1px solid #7f7f7f}.fg-simple_portfolio.fg-transparent .fg-caption a:hover{border-bottom:none}.fg-simple_portfolio.fg-transparent .fg-caption-title,.fg-simple_portfolio.fg-transparent .fg-caption-title a{color:#333}.fg-simple_portfolio.fg-transparent .fg-caption-title a{border-bottom:1px solid #333}.fg-simple_portfolio.fg-transparent.fg-round-full .fg-item,.fg-simple_portfolio.fg-transparent.fg-round-full .fg-item-inner{border-radius:15px}.fg-simple_portfolio.fg-transparent.fg-round-full .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-full .fg-image-wrap,.fg-simple_portfolio.fg-transparent.fg-round-full.fg-shadow-inset-large .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-full.fg-shadow-inset-small .fg-thumb:after{border-radius:50%;overflow:hidden}.fg-simple_portfolio.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap,.fg-simple_portfolio.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap,.fg-simple_portfolio.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{overflow:hidden}.fg-simple_portfolio.fg-transparent.fg-round-small.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-small.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-small.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:5px}.fg-simple_portfolio.fg-transparent.fg-round-medium.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-medium.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-medium.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:10px}.fg-simple_portfolio.fg-transparent.fg-round-large.fg-shadow-inset-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-large.fg-shadow-inset-medium:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-large.fg-shadow-inset-small:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-thumb:after,.fg-simple_portfolio.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-overlay,.fg-simple_portfolio.fg-transparent.fg-round-large:not(.fg-shadow-outline):not(.fg-shadow-small):not(.fg-shadow-medium):not(.fg-shadow-large) .fg-image-wrap{border-radius:15px}.fg-simple_portfolio.fg-transparent.fg-shadow-inset-small .fg-thumb:after{box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.3)}.fg-simple_portfolio.fg-transparent.fg-shadow-inset-medium .fg-thumb:after{box-shadow:inset 0 1px 10px 0 rgba(0,0,0,.3)}.fg-simple_portfolio.fg-transparent.fg-shadow-inset-large .fg-thumb:after{box-shadow:inset 0 1px 16px 0 rgba(0,0,0,.3)}.fg-simple_portfolio.fg-transparent.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px rgba(128,128,128,.5)}.fg-simple_portfolio.fg-transparent.fg-shadow-small .fg-item-inner{box-shadow:0 1px 4px 0 rgba(128,128,128,.5)}.fg-simple_portfolio.fg-transparent.fg-shadow-medium .fg-item-inner{box-shadow:0 1px 10px 0 rgba(128,128,128,.5)}.fg-simple_portfolio.fg-transparent.fg-shadow-large .fg-item-inner{box-shadow:0 1px 16px 0 rgba(128,128,128,.5)}.foogallery.fg-preset.fg-polaroid .fg-item{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .35s,background-color .65s}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n+1){-webkit-transform:rotate(3deg);transform:rotate(3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n){-webkit-transform:rotate(-3deg);transform:rotate(-3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(3n){-webkit-transform:rotate(1deg);transform:rotate(1deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(5n){-webkit-transform:rotate(-2deg);transform:rotate(-2deg)}.foogallery.fg-preset.fg-polaroid .fg-item:hover{-webkit-transform:rotate(0);transform:rotate(0)}.foogallery.fg-preset.fg-polaroid .fg-caption{position:relative;width:auto;font-family:"Segoe Print Regular",-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.foogallery.fg-preset.fg-polaroid .fg-caption-inner,.foogallery.fg-preset.fg-polaroid .fg-caption-title{position:relative;width:auto}.foogallery.fg-preset.fg-polaroid .fg-caption-title{text-align:center}.foogallery.fg-preset.fg-polaroid .fg-caption-desc{display:none}.foogallery.fg-light.fg-preset.fg-polaroid .fg-caption-title,.foogallery.fg-preset.fg-polaroid .fg-caption-title{color:#333}.foogallery.fg-dark.fg-preset.fg-polaroid .fg-caption-title{color:#fff}.foogallery.fg-preset.fg-polaroid .fg-caption{border-style:solid;border-color:transparent;border-width:10px}.foogallery.fg-preset.fg-polaroid .fg-caption-title+.fg-caption-desc{margin-top:4px}.foogallery.fg-preset.fg-polaroid.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thin .fg-caption{border-width:4px 4px 10px 4px}.foogallery.fg-preset.fg-polaroid.fg-border-medium .fg-caption{border-width:10px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption{border-width:16px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 16px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-image-viewer{display:block;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif}.fg-image-viewer.fg-left{text-align:left}.fg-image-viewer.fg-center{text-align:center}.fg-image-viewer.fg-right{text-align:right}.fiv-inner{position:relative;display:inline-block;max-width:100%;overflow:hidden;z-index:6}.fiv-inner .fiv-inner-container{position:relative;overflow:hidden;max-width:100%;border-style:solid;border-width:0;border-bottom-width:4px;z-index:5}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:active,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:hover,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:visited{position:relative;display:block;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item{position:absolute;visibility:visible;opacity:1;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item:first-of-type{position:relative}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb img{display:block;max-width:100%;height:auto;border:none;outline:0;text-decoration:none}.fg-image-viewer .fiv-inner .fiv-ctrls{display:block;text-align:center;font-size:14px;border-style:solid;line-height:34px}.fg-image-viewer .fiv-inner .fiv-ctrls:after{content:'';display:block;clear:both}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count{display:inline-block;font-weight:400;margin:0}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:none;min-width:80px;position:relative;overflow:hidden;transition:background-color .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{display:block;position:absolute;font-size:24px;line-height:30px;top:0;left:0;width:100%;transform:translateY(0);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover:before{transform:translateY(-100%)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev span{display:block;width:100%;transform:translateY(100%);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover span{transform:translateY(0)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{float:left}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{content:'\2190'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next{float:right}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before{content:'\2192'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count span{margin:0 4px}/*!* Theme - Default (Light) *!*//*!* Theme - Dark *!*/.foogallery.fg-image-viewer.fg-caption-always .fg-item-inner .fg-caption{padding:0;border:none;background:#000;background:-moz-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:-webkit-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:linear-gradient(to right,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%)}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-desc{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title+.fg-caption-desc{padding:0 10px 10px 10px}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-light .fiv-inner .fiv-inner-container{background-color:#fff;color:#333;border-color:#fff}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#f2f2f2}.fg-image-viewer.fg-light .fiv-next,.fg-image-viewer.fg-light .fiv-prev{box-shadow:inset 0 0 0 1px #ddd}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-dark .fiv-inner .fiv-inner-container{background-color:#333;color:#fff;border-color:#333}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#444}.fg-image-viewer.fg-dark .fiv-next,.fg-image-viewer.fg-dark .fiv-prev{box-shadow:inset 0 0 0 1px #222}.foogallery.fg-image-viewer.fg-border-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin .fg-item-inner{border-width:0}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-inner-container{border-width:4px}.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-inner-container{border-width:10px}.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-inner-container{border-width:16px}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-ctrls{border-top-width:1px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-round-small .fiv-inner{border-radius:5px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-round-medium .fiv-inner{border-radius:10px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-round-large .fiv-inner{border-radius:15px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-full .fiv-inner,.foogallery.fg-image-viewer.fg-round-full .fiv-next,.foogallery.fg-image-viewer.fg-round-full .fiv-prev{border-radius:50%}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fg-item-inner{box-shadow:none}.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fiv-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fiv-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fiv-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-thumbnail,.foogallery.fg-thumbnail.fg-center{text-align:center}.foogallery.fg-thumbnail.fg-left{text-align:left}.foogallery.fg-thumbnail.fg-right{text-align:right}.foogallery.fg-thumbnail.fg-float-left{float:left;width:auto}.foogallery.fg-thumbnail.fg-float-right{float:right;width:auto}.foogallery.fg-thumbnail .fg-item{display:inline-block;vertical-align:top;max-width:100%}.foogallery.fg-thumbnail .fg-image{max-width:100%}.foogallery.fg-thumbnail .fg-st-hidden{display:none}.foogallery-stack-album{text-align:center;overflow:hidden;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:13px;font-weight:400;line-height:1.3}.foogallery-stack-album,.foogallery-stack-album *{box-sizing:border-box}.foogallery-stack-album.fg-align-left{text-align:left}.foogallery-stack-album.fg-align-center{text-align:center}.foogallery-stack-album.fg-align-right{text-align:right}.foogallery-stack-album.fg-disable-transitions,.foogallery-stack-album.fg-disable-transitions *{transition:none!important}.fg-header{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;position:relative;padding:0;margin:0;border-top:solid 1px #aaa;border-bottom:solid 1px #aaa}.fg-header-title{display:block;margin:0;padding:0 20px;width:100%;text-align:left}.fg-header-active{display:block;margin:0;padding:0 20px;visibility:hidden;opacity:0;width:100%;text-align:right;transition-property:opacity,visibility;transition-duration:.3s;transition-timing-function:ease-in-out}.fg-header-back{display:block;padding:0;margin:5px;visibility:hidden;opacity:0;min-width:40px;width:40px;height:40px;border-radius:50%;text-align:center;line-height:38px;color:#999;background:#ddd;background:rgba(200,200,200,.5);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition-property:opacity,visibility;transition-duration:.3s;transition-timing-function:ease-in-out}.fg-has-active .fg-header-active,.fg-has-active .fg-header-back{visibility:visible;opacity:1}.fg-piles{display:inline-block;position:relative;transition-property:width,height;transition-duration:.3s;transition-timing-function:ease-in-out}.fg-pile{display:block;position:absolute;top:0;left:0;list-style:none;padding:0;margin:0;visibility:visible;opacity:1;transition-property:opacity,visibility,top,left,width,height;transition-duration:.3s;transition-timing-function:ease-in-out}.fg-pile.fg-hidden{visibility:hidden;opacity:0}.fg-pile-item{display:block;position:absolute;top:25px;left:25px;visibility:visible;opacity:1;cursor:pointer;border:10px solid #fff;background-color:#fff;box-shadow:0 1px 4px rgba(0,0,0,.2);transition-property:opacity,visibility,top,left,transform;transition-duration:.3s;transition-timing-function:ease-in-out;z-index:1;transform:rotate(0)}.fg-expanded .fg-pile-item{z-index:2;transform:rotate(0)!important}.fg-pile-item.fg-has-cover{z-index:10;transform:rotate(0)!important}.fg-pile-item:nth-child(2){z-index:9}.fg-pile-item:nth-child(3){z-index:8}.fg-pile-item:nth-child(4){z-index:7}.fg-pile-item:nth-child(1n+5){visibility:hidden;opacity:0}.fg-expanded .fg-pile-item:nth-child(1n+4){visibility:visible;opacity:1}.fg-pile-item-thumb{display:block}.fg-pile-item-image{display:block}.fg-pile-item-caption{display:flex;justify-content:center;flex-direction:column;position:absolute;top:0;left:0;bottom:0;right:0;width:100%;height:100%;margin:0;padding:10px;background-color:rgba(68,68,68,.5);color:#fff;text-align:center;visibility:hidden;opacity:0;transition-property:opacity,visibility;transition-duration:.3s;transition-timing-function:ease-in-out}.fg-pile-item-title{display:block;width:100%;padding:0 0 10px}.fg-pile-item-desc{display:block;width:100%;max-height:100%;border-top:solid 1px currentColor;padding:10px 0 0;overflow:hidden}.fg-pile-item-thumb:hover .fg-pile-item-caption{visibility:visible;opacity:1}.fg-pile-cover{display:flex;justify-content:left;align-items:center;position:absolute;top:0;left:0;bottom:0;right:0;width:100%;height:100%;visibility:visible;opacity:1;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition-property:opacity,visibility;transition-duration:.3s;transition-timing-function:ease-in-out}.fg-expanded .fg-pile-cover{visibility:hidden;opacity:0;pointer-events:none}.fg-pile-cover-content{display:flex;position:relative;background:#fff;color:#333;width:75%;font-weight:700;box-shadow:1px 1px 1px rgba(0,0,0,.1),5px 0 5px -3px rgba(0,0,0,.4),inset 0 0 5px rgba(0,0,0,.04)}.fg-pile-cover-title{text-align:center;padding:10px;width:100%}.fg-pile-cover-count{color:#aaa;padding:10px 5px;background:#f7f7f7;height:100%}
extensions/default-templates/shared/js/foogallery.js CHANGED
@@ -1737,13 +1737,13 @@
1737
  );
1738
  /*!
1739
  * FooGallery.utils - Contains common utility methods and classes used in our plugins.
1740
- * @version 0.1.8
1741
  * @link https://github.com/steveush/foo-utils#readme
1742
  * @copyright Steve Usher 2020
1743
  * @license Released under the GPL-3.0 license.
1744
  */
1745
  /**
1746
- * @file This creates the global FooGallery.utils namespace ensuring it only registers itself if the namespace doesn't already exist or if the current version is lower than this one.
1747
  */
1748
  (function ($) {
1749
 
@@ -1752,112 +1752,6 @@
1752
  return;
1753
  }
1754
 
1755
- /**
1756
- * @summary This namespace contains common utility methods and code shared between our plugins.
1757
- * @namespace FooGallery.utils
1758
- * @description This namespace relies on jQuery being included in the page prior to it being loaded.
1759
- */
1760
- var utils = {
1761
- /**
1762
- * @summary A reference to the jQuery object the library is registered with.
1763
- * @memberof FooGallery.utils
1764
- * @name $
1765
- * @type {jQuery}
1766
- * @description This is used internally for all jQuery operations to help work around issues where multiple jQuery libraries have been included in a single page.
1767
- * @example {@caption The following shows the issue when multiple jQuery's are included in a single page.}{@lang html}
1768
- * <script src="jquery-1.12.4.js"></script>
1769
- * <script src="my-plugin.js"></script>
1770
- * <script src="jquery-2.2.4.js"></script>
1771
- * <script>
1772
- * jQuery(function($){
1773
- * $(".selector").myPlugin(); // => This would throw a TypeError: $(...).myPlugin is not a function
1774
- * });
1775
- * </script>
1776
- * @example {@caption The reason the above throws an error is that the `$.fn.myPlugin` function is registered to the first instance of jQuery in the page however the instance used to create the ready callback and actually try to execute `$(...).myPlugin()` is the second. To resolve this issue ideally you would remove the second instance of jQuery however you can use the `FooGallery.utils.$` member to ensure you are always working with the instance of jQuery the library was registered with.}{@lang html}
1777
- * <script src="jquery-1.12.4.js"></script>
1778
- * <script src="my-plugin.js"></script>
1779
- * <script src="jquery-2.2.4.js"></script>
1780
- * <script>
1781
- * FooGallery.utils.$(function($){
1782
- * $(".selector").myPlugin(); // => It works!
1783
- * });
1784
- * </script>
1785
- */
1786
- $: $,
1787
- /**
1788
- * @summary The version of this library.
1789
- * @memberof FooGallery.utils
1790
- * @name version
1791
- * @type {string}
1792
- */
1793
- version: '0.1.8'
1794
- };
1795
-
1796
- /**
1797
- * @summary Compares two version numbers.
1798
- * @memberof FooGallery.utils
1799
- * @function versionCompare
1800
- * @param {string} version1 - The first version to use in the comparison.
1801
- * @param {string} version2 - The second version to compare to the first.
1802
- * @returns {number} `0` if the version are equal.
1803
- * `-1` if `version1` is less than `version2`.
1804
- * `1` if `version1` is greater than `version2`.
1805
- * `NaN` if either of the supplied versions do not conform to MAJOR.MINOR.PATCH format.
1806
- * @description This method will compare two version numbers that conform to the basic MAJOR.MINOR.PATCH format returning the result as a simple number. This method will handle short version string comparisons e.g. `1.0` versus `1.0.1`.
1807
- * @example {@caption The following shows the results of comparing various version strings.}
1808
- * console.log( FooGallery.utils.versionCompare( "0", "0" ) ); // => 0
1809
- * console.log( FooGallery.utils.versionCompare( "0.0", "0" ) ); // => 0
1810
- * console.log( FooGallery.utils.versionCompare( "0.0", "0.0.0" ) ); // => 0
1811
- * console.log( FooGallery.utils.versionCompare( "0.1", "0.0.0" ) ); // => 1
1812
- * console.log( FooGallery.utils.versionCompare( "0.1", "0.0.1" ) ); // => 1
1813
- * console.log( FooGallery.utils.versionCompare( "1", "0.1" ) ); // => 1
1814
- * console.log( FooGallery.utils.versionCompare( "1.10", "1.9" ) ); // => 1
1815
- * console.log( FooGallery.utils.versionCompare( "1.9", "1.10" ) ); // => -1
1816
- * console.log( FooGallery.utils.versionCompare( "1", "1.1" ) ); // => -1
1817
- * console.log( FooGallery.utils.versionCompare( "1.0.9", "1.1" ) ); // => -1
1818
- * @example {@caption If either of the supplied version strings does not match the MAJOR.MINOR.PATCH format then `NaN` is returned.}
1819
- * console.log( FooGallery.utils.versionCompare( "not-a-version", "1.1" ) ); // => NaN
1820
- * console.log( FooGallery.utils.versionCompare( "1.1", "not-a-version" ) ); // => NaN
1821
- * console.log( FooGallery.utils.versionCompare( "not-a-version", "not-a-version" ) ); // => NaN
1822
- */
1823
- utils.versionCompare = function(version1, version2){
1824
- // if either of the versions do not match the expected format return NaN
1825
- if (!(/[\d.]/.test(version1) && /[\d.]/.test(version2))) return NaN;
1826
-
1827
- /**
1828
- * @summary Splits and parses the given version string into a numeric array.
1829
- * @param {string} version - The version string to split and parse.
1830
- * @returns {Array.<number>}
1831
- * @ignore
1832
- */
1833
- function split(version){
1834
- var parts = version.split('.'), result = [];
1835
- for(var i = 0, len = parts.length; i < len; i++){
1836
- result[i] = parseInt(parts[i]);
1837
- if (isNaN(result[i])) result[i] = 0;
1838
- }
1839
- return result;
1840
- }
1841
-
1842
- // get the base numeric arrays for each version
1843
- var v1parts = split(version1),
1844
- v2parts = split(version2);
1845
-
1846
- // ensure both arrays are the same length by padding the shorter with 0
1847
- while (v1parts.length < v2parts.length) v1parts.push(0);
1848
- while (v2parts.length < v1parts.length) v2parts.push(0);
1849
-
1850
- // perform the actual comparison
1851
- for (var i = 0; i < v1parts.length; ++i) {
1852
- if (v2parts.length === i) return 1;
1853
- if (v1parts[i] === v2parts[i]) continue;
1854
- if (v1parts[i] > v2parts[i]) return 1;
1855
- else return -1;
1856
- }
1857
- if (v1parts.length !== v2parts.length) return -1;
1858
- return 0;
1859
- };
1860
-
1861
  function __exists(){
1862
  try {
1863
  return !!window.FooGallery.utils; // does the namespace already exist?
@@ -1866,19 +1760,48 @@
1866
  }
1867
  }
1868
 
1869
- if (__exists()){
1870
- // if it already exists always log a warning as there may be version conflicts as the following code always ensures the latest version is loaded
1871
- if (utils.versionCompare(utils.version, window.FooGallery.utils.version) > 0){
1872
- // if it exists but it's an old version replace it
1873
- console.warn("An older version of FooGallery.utils (" + window.FooGallery.utils.version + ") already exists in the page, version " + utils.version + " will override it.");
1874
- window.FooGallery.utils = utils;
1875
- } else {
1876
- // otherwise its a newer version so do nothing
1877
- console.warn("A newer version of FooGallery.utils (" + window.FooGallery.utils.version + ") already exists in the page, version " + utils.version + " will not register itself.");
1878
- }
1879
- } else {
1880
- // if it doesn't exist register it
1881
- window.FooGallery.utils = utils;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1882
  }
1883
 
1884
  // at this point there will always be a FooGallery.utils namespace registered to the global scope.
@@ -1886,18 +1809,18 @@
1886
  })(jQuery);
1887
  (function ($, _){
1888
  // only register methods if this version is the current version
1889
- if (_.version !== '0.1.8') return;
1890
 
1891
  /**
1892
  * @summary Contains common type checking utility methods.
1893
- * @memberof FooGallery.utils
1894
  * @namespace is
1895
  */
1896
  _.is = {};
1897
 
1898
  /**
1899
  * @summary Checks if the `value` is an array.
1900
- * @memberof FooGallery.utils.is
1901
  * @function array
1902
  * @param {*} value - The value to check.
1903
  * @returns {boolean} `true` if the supplied `value` is an array.
@@ -1916,7 +1839,7 @@
1916
 
1917
  /**
1918
  * @summary Checks if the `value` is a boolean.
1919
- * @memberof FooGallery.utils.is
1920
  * @function boolean
1921
  * @param {*} value - The value to check.
1922
  * @returns {boolean} `true` if the supplied `value` is a boolean.
@@ -1937,7 +1860,7 @@
1937
 
1938
  /**
1939
  * @summary Checks if the `value` is an element.
1940
- * @memberof FooGallery.utils.is
1941
  * @function element
1942
  * @param {*} value - The value to check.
1943
  * @returns {boolean} `true` if the supplied `value` is an element.
@@ -1960,7 +1883,7 @@
1960
 
1961
  /**
1962
  * @summary Checks if the `value` is empty.
1963
- * @memberof FooGallery.utils.is
1964
  * @function empty
1965
  * @param {*} value - The value to check.
1966
  * @returns {boolean} `true` if the supplied `value` is empty.
@@ -2013,7 +1936,7 @@
2013
 
2014
  /**
2015
  * @summary Checks if the `value` is an error.
2016
- * @memberof FooGallery.utils.is
2017
  * @function error
2018
  * @param {*} value - The value to check.
2019
  * @returns {boolean} `true` if the supplied `value` is an error.
@@ -2038,7 +1961,7 @@
2038
 
2039
  /**
2040
  * @summary Checks if the `value` is a function.
2041
- * @memberof FooGallery.utils.is
2042
  * @function fn
2043
  * @param {*} value - The value to check.
2044
  * @returns {boolean} `true` if the supplied `value` is a function.
@@ -2059,7 +1982,7 @@
2059
 
2060
  /**
2061
  * @summary Checks if the `value` is a hash.
2062
- * @memberof FooGallery.utils.is
2063
  * @function hash
2064
  * @param {*} value - The value to check.
2065
  * @returns {boolean} `true` if the supplied `value` is a hash.
@@ -2080,7 +2003,7 @@
2080
 
2081
  /**
2082
  * @summary Checks if the `value` is a jQuery object.
2083
- * @memberof FooGallery.utils.is
2084
  * @function jq
2085
  * @param {*} value - The value to check.
2086
  * @returns {boolean} `true` if the supplied `value` is a jQuery object.
@@ -2104,7 +2027,7 @@
2104
 
2105
  /**
2106
  * @summary Checks if the `value` is a number.
2107
- * @memberof FooGallery.utils.is
2108
  * @function number
2109
  * @param {*} value - The value to check.
2110
  * @returns {boolean}
@@ -2123,7 +2046,7 @@
2123
 
2124
  /**
2125
  * @summary Checks if the `value` is an object.
2126
- * @memberof FooGallery.utils.is
2127
  * @function object
2128
  * @param {*} value - The value to check.
2129
  * @returns {boolean} `true` if the supplied `value` is an object.
@@ -2146,7 +2069,7 @@
2146
 
2147
  /**
2148
  * @summary Checks if the `value` is a promise.
2149
- * @memberof FooGallery.utils.is
2150
  * @function promise
2151
  * @param {*} value - The object to check.
2152
  * @returns {boolean} `true` if the supplied `value` is an object.
@@ -2172,7 +2095,7 @@
2172
 
2173
  /**
2174
  * @summary Checks if the `value` is a valid CSS length.
2175
- * @memberof FooGallery.utils.is
2176
  * @function size
2177
  * @param {*} value - The value to check.
2178
  * @returns {boolean} `true` if the `value` is a number or CSS length.
@@ -2197,7 +2120,7 @@
2197
 
2198
  /**
2199
  * @summary Checks if the `value` is a string.
2200
- * @memberof FooGallery.utils.is
2201
  * @function string
2202
  * @param {*} value - The value to check.
2203
  * @returns {boolean} `true` if the `value` is a string.
@@ -2216,7 +2139,7 @@
2216
 
2217
  /**
2218
  * @summary Checks if the `value` is `undefined`.
2219
- * @memberof FooGallery.utils.is
2220
  * @function undef
2221
  * @param {*} value - The value to check is undefined.
2222
  * @returns {boolean} `true` if the supplied `value` is `undefined`.
@@ -2240,10 +2163,10 @@
2240
  );
2241
  (function($, _, _is){
2242
  // only register methods if this version is the current version
2243
- if (_.version !== '0.1.8') return;
2244
 
2245
  /**
2246
- * @memberof FooGallery.utils
2247
  * @namespace fn
2248
  * @summary Contains common function utility methods.
2249
  */
@@ -2253,7 +2176,7 @@
2253
 
2254
  /**
2255
  * @summary The regular expression to test if a function uses the `this._super` method applied by the {@link FooGallery.utils.fn.add} method.
2256
- * @memberof FooGallery.utils.fn
2257
  * @name CONTAINS_SUPER
2258
  * @type {RegExp}
2259
  * @default /\b_super\b/
@@ -2281,7 +2204,7 @@
2281
 
2282
  /**
2283
  * @summary Adds or overrides the given method `name` on the `proto` using the supplied `fn`.
2284
- * @memberof FooGallery.utils.fn
2285
  * @function addOrOverride
2286
  * @param {Object} proto - The prototype to add the method to.
2287
  * @param {string} name - The name of the method to add, if this already exists the original will be exposed within the scope of the supplied `fn` as `this._super`.
@@ -2347,11 +2270,11 @@
2347
 
2348
  /**
2349
  * @summary Use the `Function.prototype.apply` method on a class constructor using the `new` keyword.
2350
- * @memberof FooGallery.utils.fn
2351
  * @function apply
2352
  * @param {Object} klass - The class to create.
2353
  * @param {Array} [args=[]] - The arguments to pass to the constructor.
2354
- * @returns {function} The new instance of the `klass` created with the supplied `args`.
2355
  * @description When using the default `Function.prototype.apply` you can't use it on class constructors requiring the `new` keyword, this method allows us to do that.
2356
  * @example {@run true}
2357
  * // alias the FooGallery.utils.fn namespace
@@ -2375,15 +2298,14 @@
2375
  return klass.apply(this, args);
2376
  }
2377
  Class.prototype = klass.prototype;
2378
- //noinspection JSValidateTypes
2379
  return new Class();
2380
  };
2381
 
2382
  /**
2383
  * @summary Converts the default `arguments` object into a proper array.
2384
- * @memberof FooGallery.utils.fn
2385
  * @function arg2arr
2386
- * @param {Arguments} args - The arguments object to create an array from.
2387
  * @returns {Array}
2388
  * @description This method is simply a replacement for calling `Array.prototype.slice.call()` to create an array from an `arguments` object.
2389
  * @example {@run true}
@@ -2405,7 +2327,7 @@
2405
 
2406
  /**
2407
  * @summary Debounces the `fn` by the supplied `time`.
2408
- * @memberof FooGallery.utils.fn
2409
  * @function debounce
2410
  * @param {function} fn - The function to debounce.
2411
  * @param {number} time - The time in milliseconds to delay execution.
@@ -2425,7 +2347,7 @@
2425
 
2426
  /**
2427
  * @summary Throttles the `fn` by the supplied `time`.
2428
- * @memberof FooGallery.utils.fn
2429
  * @function throttle
2430
  * @param {function} fn - The function to throttle.
2431
  * @param {number} time - The time in milliseconds to delay execution.
@@ -2453,7 +2375,7 @@
2453
 
2454
  /**
2455
  * @summary Checks the given `value` and ensures a function is returned.
2456
- * @memberof FooGallery.utils.fn
2457
  * @function check
2458
  * @param {?Object} thisArg=window - The `this` keyword within the returned function, if the supplied value is not an object this defaults to the `window`.
2459
  * @param {*} value - The value to check, if not a function or the name of one then the `def` value is automatically returned.
@@ -2525,7 +2447,7 @@
2525
 
2526
  /**
2527
  * @summary Fetches a function given its `name`.
2528
- * @memberof FooGallery.utils.fn
2529
  * @function fetch
2530
  * @param {string} name - The name of the function to fetch. This can be a `.` notated name.
2531
  * @param {Object} [ctx=window] - The context to retrieve the function from, defaults to the `window` object.
@@ -2566,7 +2488,7 @@
2566
 
2567
  /**
2568
  * @summary Enqueues methods using the given `name` from all supplied `objects` and executes each in order with the given arguments.
2569
- * @memberof FooGallery.utils.fn
2570
  * @function enqueue
2571
  * @param {Array.<Object>} objects - The objects to call the method on.
2572
  * @param {string} name - The name of the method to execute.
@@ -2754,7 +2676,7 @@
2754
 
2755
  /**
2756
  * @summary Waits for the outcome of all promises regardless of failure and resolves supplying the results of just those that succeeded.
2757
- * @memberof FooGallery.utils.fn
2758
  * @function when
2759
  * @param {Promise[]} promises - The array of promises to wait for.
2760
  * @returns {Promise}
@@ -2762,20 +2684,25 @@
2762
  _.fn.when = function(promises){
2763
  if (!_is.array(promises) || _is.empty(promises)) return $.when();
2764
  var d = $.Deferred(), results = [], remaining = promises.length;
 
 
 
 
2765
  for(var i = 0; i < promises.length; i++){
2766
- promises[i].then(function(res){
2767
- results.push(res); // on success, add to results
2768
- }).always(function(){
2769
- remaining--; // always mark as finished
2770
- if(!remaining) d.resolve(results);
2771
- })
 
2772
  }
2773
  return d.promise(); // return a promise on the remaining values
2774
  };
2775
 
2776
  /**
2777
  * @summary Return a promise rejected using the supplied args.
2778
- * @memberof FooGallery.utils.fn
2779
  * @function rejectWith
2780
  * @param {*} [arg1] - The first argument to reject the promise with.
2781
  * @param {...*} [argN] - Any additional arguments to reject the promise with.
@@ -2788,7 +2715,7 @@
2788
 
2789
  /**
2790
  * @summary Return a promise resolved using the supplied args.
2791
- * @memberof FooGallery.utils.fn
2792
  * @function resolveWith
2793
  * @param {*} [arg1] - The first argument to resolve the promise with.
2794
  * @param {...*} [argN] - Any additional arguments to resolve the promise with.
@@ -2801,7 +2728,7 @@
2801
 
2802
  /**
2803
  * @summary A resolved promise object.
2804
- * @memberof FooGallery.utils.fn
2805
  * @name resolved
2806
  * @type {Promise}
2807
  */
@@ -2809,8 +2736,8 @@
2809
 
2810
  /**
2811
  * @summary A rejected promise object.
2812
- * @memberof FooGallery.utils.fn
2813
- * @name resolved
2814
  * @type {Promise}
2815
  */
2816
  _.fn.rejected = $.Deferred().reject().promise();
@@ -2823,11 +2750,11 @@
2823
  );
2824
  (function(_, _is){
2825
  // only register methods if this version is the current version
2826
- if (_.version !== '0.1.8') return;
2827
 
2828
  /**
2829
  * @summary Contains common url utility methods.
2830
- * @memberof FooGallery.utils
2831
  * @namespace url
2832
  */
2833
  _.url = {};
@@ -2837,7 +2764,7 @@
2837
 
2838
  /**
2839
  * @summary Parses the supplied url into an object containing it's component parts.
2840
- * @memberof FooGallery.utils.url
2841
  * @function parts
2842
  * @param {string} url - The url to parse.
2843
  * @returns {FooGallery.utils.url~Parts}
@@ -2862,7 +2789,7 @@
2862
 
2863
  /**
2864
  * @summary Given a <code>url</code> that could be relative or full this ensures a full url is returned.
2865
- * @memberof FooGallery.utils.url
2866
  * @function full
2867
  * @param {string} url - The url to ensure is full.
2868
  * @returns {?string} `null` if the given `path` is not a string or empty.
@@ -2886,7 +2813,7 @@
2886
 
2887
  /**
2888
  * @summary Gets or sets a parameter in the given <code>search</code> string.
2889
- * @memberof FooGallery.utils.url
2890
  * @function param
2891
  * @param {string} search - The search string to use (usually `location.search`).
2892
  * @param {string} key - The key of the parameter.
@@ -2962,18 +2889,18 @@
2962
  );
2963
  (function (_, _is, _fn) {
2964
  // only register methods if this version is the current version
2965
- if (_.version !== '0.1.8') return;
2966
 
2967
  /**
2968
  * @summary Contains common string utility methods.
2969
- * @memberof FooGallery.utils
2970
  * @namespace str
2971
  */
2972
  _.str = {};
2973
 
2974
  /**
2975
  * @summary Converts the given `target` to camel case.
2976
- * @memberof FooGallery.utils.str
2977
  * @function camel
2978
  * @param {string} target - The string to camel case.
2979
  * @returns {string}
@@ -2999,7 +2926,7 @@
2999
 
3000
  /**
3001
  * @summary Converts the given `target` to kebab case. Non-alphanumeric characters are converted to `-`.
3002
- * @memberof FooGallery.utils.str
3003
  * @function kebab
3004
  * @param {string} target - The string to kebab case.
3005
  * @returns {string}
@@ -3025,7 +2952,7 @@
3025
 
3026
  /**
3027
  * @summary Checks if the `target` contains the given `substr`.
3028
- * @memberof FooGallery.utils.str
3029
  * @function contains
3030
  * @param {string} target - The string to check.
3031
  * @param {string} substr - The string to check for.
@@ -3052,7 +2979,7 @@
3052
 
3053
  /**
3054
  * @summary Checks if the `target` contains the given `word`.
3055
- * @memberof FooGallery.utils.str
3056
  * @function containsWord
3057
  * @param {string} target - The string to check.
3058
  * @param {string} word - The word to check for.
@@ -3083,7 +3010,7 @@
3083
 
3084
  /**
3085
  * @summary Checks if the `target` ends with the given `substr`.
3086
- * @memberof FooGallery.utils.str
3087
  * @function endsWith
3088
  * @param {string} target - The string to check.
3089
  * @param {string} substr - The substr to check for.
@@ -3103,7 +3030,7 @@
3103
 
3104
  /**
3105
  * @summary Escapes the `target` for use in a regular expression.
3106
- * @memberof FooGallery.utils.str
3107
  * @function escapeRegExp
3108
  * @param {string} target - The string to escape.
3109
  * @returns {string}
@@ -3116,7 +3043,7 @@
3116
 
3117
  /**
3118
  * @summary Generates a 32 bit FNV-1a hash from the given `target`.
3119
- * @memberof FooGallery.utils.str
3120
  * @function fnv1a
3121
  * @param {string} target - The string to generate a hash from.
3122
  * @returns {?number} `null` if the `target` is not a string or empty otherwise a 32 bit FNV-1a hash.
@@ -3140,7 +3067,7 @@
3140
 
3141
  /**
3142
  * @summary Returns the remainder of the `target` split on the first index of the given `substr`.
3143
- * @memberof FooGallery.utils.str
3144
  * @function from
3145
  * @param {string} target - The string to split.
3146
  * @param {string} substr - The substring to split on.
@@ -3157,13 +3084,12 @@
3157
  * console.log( _str.from( target, "nonexistent" ) ); // => null
3158
  */
3159
  _.str.from = function (target, substr) {
3160
- if (!_is.string(target) || _is.empty(target) || !_is.string(substr) || _is.empty(substr)) return null;
3161
  return _.str.contains(target, substr) ? target.substring(target.indexOf(substr) + substr.length) : null;
3162
  };
3163
 
3164
  /**
3165
  * @summary Joins any number of strings using the given `separator`.
3166
- * @memberof FooGallery.utils.str
3167
  * @function join
3168
  * @param {string} separator - The separator to use to join the strings.
3169
  * @param {string} part - The first string to join.
@@ -3201,7 +3127,7 @@
3201
 
3202
  /**
3203
  * @summary Checks if the `target` starts with the given `substr`.
3204
- * @memberof FooGallery.utils.str
3205
  * @function startsWith
3206
  * @param {string} target - The string to check.
3207
  * @param {string} substr - The substr to check for.
@@ -3221,7 +3147,7 @@
3221
 
3222
  /**
3223
  * @summary Returns the first part of the `target` split on the first index of the given `substr`.
3224
- * @memberof FooGallery.utils.str
3225
  * @function until
3226
  * @param {string} target - The string to split.
3227
  * @param {string} substr - The substring to split on.
@@ -3238,13 +3164,12 @@
3238
  * console.log( _str.until( target, "nonexistent" ) ); // => "To be, or not to be, that is the question."
3239
  */
3240
  _.str.until = function (target, substr) {
3241
- if (_is.empty(target) || _is.empty(substr)) return target;
3242
  return _.str.contains(target, substr) ? target.substring(0, target.indexOf(substr)) : target;
3243
  };
3244
 
3245
  /**
3246
  * @summary A basic string formatter that can use both index and name based placeholders but handles only string or number replacements.
3247
- * @memberof FooGallery.utils.str
3248
  * @function format
3249
  * @param {string} target - The format string containing any placeholders to replace.
3250
  * @param {string|number|Object|Array} arg1 - The first value to format the target with. If an object is supplied it's properties are used to match named placeholders. If an array, string or number is supplied it's values are used to match any index placeholders.
@@ -3285,12 +3210,13 @@
3285
  _.str.format = function (target, arg1, argN){
3286
  var args = _fn.arg2arr(arguments);
3287
  target = args.shift(); // remove the target from the args
3288
- if (_is.empty(target) || _is.empty(args)) return target;
3289
- if (args.length === 1 && (_is.array(args[0]) || _is.object(args[0]))){
3290
- args = args[0];
3291
- }
3292
- for (var arg in args){
3293
- target = target.replace(new RegExp("\\{" + arg + "\\}", "gi"), args[arg]);
 
3294
  }
3295
  return target;
3296
  };
@@ -3303,11 +3229,11 @@
3303
  );
3304
  (function($, _, _is, _fn, _str){
3305
  // only register methods if this version is the current version
3306
- if (_.version !== '0.1.8') return;
3307
 
3308
  /**
3309
  * @summary Contains common object utility methods.
3310
- * @memberof FooGallery.utils
3311
  * @namespace obj
3312
  */
3313
  _.obj = {};
@@ -3316,10 +3242,10 @@
3316
  var Obj = function () {};
3317
  /**
3318
  * @summary Creates a new object with the specified prototype.
3319
- * @memberof FooGallery.utils.obj
3320
  * @function create
3321
- * @param {object} proto - The object which should be the prototype of the newly-created object.
3322
- * @returns {object} A new object with the specified prototype.
3323
  * @description This is a basic implementation of the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create|Object.create} method.
3324
  */
3325
  _.obj.create = function (proto) {
@@ -3333,7 +3259,7 @@
3333
 
3334
  /**
3335
  * @summary Merge the contents of two or more objects together into the first `target` object.
3336
- * @memberof FooGallery.utils.obj
3337
  * @function extend
3338
  * @param {Object} target - The object to merge properties into.
3339
  * @param {Object} object - An object containing properties to merge.
@@ -3368,7 +3294,7 @@
3368
 
3369
  /**
3370
  * @summary Merge the contents of two objects together into the first `target` object.
3371
- * @memberof FooGallery.utils.obj
3372
  * @function merge
3373
  * @param {Object} target - The object to merge properties into.
3374
  * @param {Object} object - The object containing properties to merge.
@@ -3405,7 +3331,7 @@
3405
 
3406
  /**
3407
  * @summary Merge the validated properties of the `object` into the `target` using the optional `mappings`.
3408
- * @memberof FooGallery.utils.obj
3409
  * @function mergeValid
3410
  * @param {Object} target - The object to merge properties into.
3411
  * @param {FooGallery.utils.obj~Validators} validators - An object containing validators for the `target` object properties.
@@ -3479,7 +3405,7 @@
3479
 
3480
  /**
3481
  * @summary Get or set a property value given its `name`.
3482
- * @memberof FooGallery.utils.obj
3483
  * @function prop
3484
  * @param {Object} object - The object to inspect for the property.
3485
  * @param {string} name - The name of the property to fetch. This can be a `.` notated name.
@@ -3558,7 +3484,7 @@
3558
 
3559
  /**
3560
  * @summary An object used by the {@link FooGallery.utils.obj.mergeValid|mergeValid} method to map new values onto the `target` object.
3561
- * @typedef {Object.<string,string>|Object.<string,Array.<string>>} FooGallery.utils.obj~Mappings
3562
  * @description The mappings object is a single level object. If you want to map a property from/to a child object on either the source or target objects you must supply the name using `.` notation as seen in the below example with the `"name.first"` to `"Name.Short"` mapping.
3563
  * @example {@caption The basic structure of a mappings object is the below.}
3564
  * {
@@ -3635,7 +3561,7 @@
3635
  );
3636
  (function($, _, _is){
3637
  // only register methods if this version is the current version
3638
- if (_.version !== '0.1.8') return;
3639
 
3640
  // any methods that have dependencies but don't fall into a specific subset or namespace can be added here
3641
 
@@ -3649,7 +3575,7 @@
3649
 
3650
  /**
3651
  * @summary Waits for the DOM to be accessible and then executes the supplied callback.
3652
- * @memberof FooGallery.utils
3653
  * @function ready
3654
  * @param {FooGallery.utils~readyCallback} callback - The function to execute once the DOM is accessible.
3655
  * @example {@caption This method can be used as a replacement for the jQuery ready callback to avoid an error in another script stopping our scripts from running.}
@@ -3666,12 +3592,165 @@
3666
  else document.addEventListener('DOMContentLoaded', onready, false);
3667
  };
3668
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3669
  // A variable to hold the last number used to generate an ID in the current page.
3670
  var uniqueId = 0;
3671
 
3672
  /**
3673
  * @summary Generate and apply a unique id for the given `$element`.
3674
- * @memberof FooGallery.utils
3675
  * @function uniqueId
3676
  * @param {jQuery} $element - The jQuery element object to retrieve an id from or generate an id for.
3677
  * @param {string} [prefix="uid-"] - A prefix to append to the start of any generated ids.
@@ -3704,7 +3783,7 @@
3704
 
3705
  /**
3706
  * @summary Remove the id from the given `$element` if it was set using the {@link FooGallery.utils.uniqueId|uniqueId} method.
3707
- * @memberof FooGallery.utils
3708
  * @function removeUniqueId
3709
  * @param {jQuery} $element - The jQuery element object to remove a generated id from.
3710
  * @example {@run true}
@@ -3728,7 +3807,7 @@
3728
 
3729
  /**
3730
  * @summary Convert CSS class names into CSS selectors.
3731
- * @memberof FooGallery.utils
3732
  * @function selectify
3733
  * @param {(string|string[]|object)} classes - A space delimited string of CSS class names or an array of them with each item being included in the selector using the OR (`,`) syntax as a separator. If an object is supplied the result will be an object with the same property names but the values converted to selectors.
3734
  * @returns {(object|string)}
@@ -3769,7 +3848,7 @@
3769
 
3770
  /**
3771
  * @summary Parses the supplied `src` and `srcset` values and returns the best matching URL for the supplied render size.
3772
- * @memberof FooGallery.utils
3773
  * @function src
3774
  * @param {string} src - The default src for the image.
3775
  * @param {string} srcset - The srcset containing additional image sizes.
@@ -3878,7 +3957,7 @@
3878
 
3879
  /**
3880
  * @summary Get the scroll parent for the supplied element optionally filtering by axis.
3881
- * @memberof FooGallery.utils
3882
  * @function scrollParent
3883
  * @param {(string|Element|jQuery)} element - The selector, element or jQuery element to find the scroll parent of.
3884
  * @param {string} [axis="xy"] - The axis to check. By default this method will check both the X and Y axis.
@@ -3916,17 +3995,17 @@
3916
  );
3917
  (function($, _, _is){
3918
  // only register methods if this version is the current version
3919
- if (_.version !== '0.1.8') return;
3920
 
3921
  /**
3922
  * @summary Contains common utility methods and members for the CSS animation property.
3923
- * @memberof FooGallery.utils
3924
  * @namespace animation
3925
  */
3926
  _.animation = {};
3927
 
3928
  function raf(callback){
3929
- return setTimeout(callback, 1);
3930
  }
3931
 
3932
  function caf(requestID){
@@ -3935,7 +4014,7 @@
3935
 
3936
  /**
3937
  * @summary A cross browser wrapper for the `requestAnimationFrame` method.
3938
- * @memberof FooGallery.utils.animation
3939
  * @function requestFrame
3940
  * @param {function} callback - The function to call when it's time to update your animation for the next repaint.
3941
  * @return {number} - The request id that uniquely identifies the entry in the callback list.
@@ -3944,7 +4023,7 @@
3944
 
3945
  /**
3946
  * @summary A cross browser wrapper for the `cancelAnimationFrame` method.
3947
- * @memberof FooGallery.utils.animation
3948
  * @function cancelFrame
3949
  * @param {number} requestID - The ID value returned by the call to {@link FooGallery.utils.animation.requestFrame|requestFrame} that requested the callback.
3950
  */
@@ -3955,7 +4034,7 @@
3955
 
3956
  /**
3957
  * @summary Whether or not animations are supported by the current browser.
3958
- * @memberof FooGallery.utils.animation
3959
  * @name supported
3960
  * @type {boolean}
3961
  */
@@ -3978,7 +4057,7 @@
3978
 
3979
  /**
3980
  * @summary The `animationend` event name for the current browser.
3981
- * @memberof FooGallery.utils.animation
3982
  * @name end
3983
  * @type {string}
3984
  * @description Depending on the browser this returns one of the following values:
@@ -4011,7 +4090,7 @@
4011
 
4012
  /**
4013
  * @summary Gets the `animation-duration` value for the supplied jQuery element.
4014
- * @memberof FooGallery.utils.animation
4015
  * @function duration
4016
  * @param {jQuery} $element - The jQuery element to retrieve the duration from.
4017
  * @param {number} [def=0] - The default value to return if no duration is set.
@@ -4022,23 +4101,27 @@
4022
  if (!_is.jq($element)) return def;
4023
  // we can use jQuery.css() method to retrieve the value cross browser
4024
  var duration = $element.css('animation-duration');
4025
- if (/^([\d.]*)+?(ms|s)$/i.test(duration)){
4026
- // if we have a valid time value
4027
- var match = duration.match(/^([\d.]*)+?(ms|s)$/i),
4028
- value = parseFloat(match[1]),
4029
- unit = match[2].toLowerCase();
4030
- if (unit === 's'){
4031
- // convert seconds to milliseconds
4032
- value = value * 1000;
4033
- }
4034
- return value;
 
 
 
 
4035
  }
4036
  return def;
4037
  };
4038
 
4039
  /**
4040
  * @summary Gets the `animation-iteration-count` value for the supplied jQuery element.
4041
- * @memberof FooGallery.utils.animation
4042
  * @function iterations
4043
  * @param {jQuery} $element - The jQuery element to retrieve the duration from.
4044
  * @param {number} [def=1] - The default value to return if no iteration count is set.
@@ -4049,8 +4132,15 @@
4049
  if (!_is.jq($element)) return def;
4050
  // we can use jQuery.css() method to retrieve the value cross browser
4051
  var iterations = $element.css('animation-iteration-count');
4052
- if (/^(\d+|infinite)$/i.test(iterations)){
4053
- return iterations === "infinite" ? Infinity : parseInt(iterations);
 
 
 
 
 
 
 
4054
  }
4055
  return def;
4056
  };
@@ -4064,7 +4154,7 @@
4064
 
4065
  /**
4066
  * @summary Start a animation by toggling the supplied `className` on the `$element`.
4067
- * @memberof FooGallery.utils.animation
4068
  * @function start
4069
  * @param {jQuery} $element - The jQuery element to start the animation on.
4070
  * @param {(string|FooGallery.utils.animation~startCallback)} classNameOrFunc - One or more class names (separated by spaces) to be toggled or a function that performs the required actions to start the animation.
@@ -4142,11 +4232,11 @@
4142
  );
4143
  (function($, _, _is, _animation){
4144
  // only register methods if this version is the current version
4145
- if (_.version !== '0.1.8') return;
4146
 
4147
  /**
4148
  * @summary Contains common utility methods and members for the CSS transition property.
4149
- * @memberof FooGallery.utils
4150
  * @namespace transition
4151
  */
4152
  _.transition = {};
@@ -4156,7 +4246,7 @@
4156
 
4157
  /**
4158
  * @summary Whether or not transitions are supported by the current browser.
4159
- * @memberof FooGallery.utils.transition
4160
  * @name supported
4161
  * @type {boolean}
4162
  */
@@ -4179,7 +4269,7 @@
4179
 
4180
  /**
4181
  * @summary The `transitionend` event name for the current browser.
4182
- * @memberof FooGallery.utils.transition
4183
  * @name end
4184
  * @type {string}
4185
  * @description Depending on the browser this returns one of the following values:
@@ -4212,7 +4302,7 @@
4212
 
4213
  /**
4214
  * @summary Gets the `transition-duration` value for the supplied jQuery element.
4215
- * @memberof FooGallery.utils.transition
4216
  * @function duration
4217
  * @param {jQuery} $element - The jQuery element to retrieve the duration from.
4218
  * @param {number} [def=0] - The default value to return if no duration is set.
@@ -4223,16 +4313,20 @@
4223
  if (!_is.jq($element)) return def;
4224
  // we can use jQuery.css() method to retrieve the value cross browser
4225
  var duration = $element.css('transition-duration');
4226
- if (/^([\d.]*)+?(ms|s)$/i.test(duration)){
4227
- // if we have a valid time value
4228
- var match = duration.match(/^([\d.]*)+?(ms|s)$/i),
4229
- value = parseFloat(match[1]),
4230
- unit = match[2].toLowerCase();
4231
- if (unit === 's'){
4232
- // convert seconds to milliseconds
4233
- value = value * 1000;
4234
- }
4235
- return value;
 
 
 
 
4236
  }
4237
  return def;
4238
  };
@@ -4246,7 +4340,7 @@
4246
 
4247
  /**
4248
  * @summary Start a transition by toggling the supplied `className` on the `$element`.
4249
- * @memberof FooGallery.utils.transition
4250
  * @function start
4251
  * @param {jQuery} $element - The jQuery element to start the transition on.
4252
  * @param {(string|FooGallery.utils.transition~startCallback)} classNameOrFunc - One or more class names (separated by spaces) to be toggled or a function that performs the required actions to start the transition.
@@ -4316,11 +4410,12 @@
4316
  );
4317
  (function ($, _, _is, _obj, _fn) {
4318
  // only register methods if this version is the current version
4319
- if (_.version !== '0.1.8') return;
4320
 
4321
  /**
4322
  * @summary A base class providing some helper methods for prototypal inheritance.
4323
- * @constructs FooGallery.utils.Class
 
4324
  * @description This is a base class for making prototypal inheritance simpler to work with. It provides an easy way to inherit from another class and exposes a `_super` method within the scope of any overriding methods that allows a simple way to execute the overridden function.
4325
  *
4326
  * Have a look at the {@link FooGallery.utils.Class.extend|extend} and {@link FooGallery.utils.Class.override|override} method examples to see some basic usage.
@@ -4340,15 +4435,16 @@
4340
  * @ignore
4341
  * @summary The original function when within the scope of an overriding method.
4342
  * @memberof FooGallery.utils.Class#
4343
- * @name _super
4344
- * @type {?function}
 
4345
  * @description This is only available within the scope of an overriding method if it was created using the {@link FooGallery.utils.Class.extend|extend}, {@link FooGallery.utils.Class.override|override} or {@link FooGallery.utils.fn.addOrOverride} methods.
4346
  * @see {@link FooGallery.utils.fn.addOrOverride} to see an example of how this property is used.
4347
  */
4348
 
4349
  /**
4350
  * @summary Creates a new class that inherits from this one which in turn allows itself to be extended.
4351
- * @memberof FooGallery.utils.Class
4352
  * @function extend
4353
  * @param {Object} [definition] - An object containing any methods to implement/override.
4354
  * @returns {function} A new class that inherits from the base class.
@@ -4411,12 +4507,14 @@
4411
  Class.prototype.constructor = _is.fn(proto.__ctor__) ? proto.__ctor__ : Class;
4412
  Class.extend = _.Class.extend;
4413
  Class.override = _.Class.override;
 
 
4414
  return Class;
4415
  };
4416
 
4417
  /**
4418
  * @summary Overrides a single method on this class.
4419
- * @memberof FooGallery.utils.Class
4420
  * @function override
4421
  * @param {string} name - The name of the function to override.
4422
  * @param {function} fn - The new function to override with, the `_super` method will be made available within this function.
@@ -4445,6 +4543,33 @@
4445
  _fn.addOrOverride(this.prototype, name, fn);
4446
  };
4447
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4448
  })(
4449
  // dependencies
4450
  FooGallery.utils.$,
@@ -4455,34 +4580,43 @@
4455
  );
4456
  (function (_, _is, _str) {
4457
  // only register methods if this version is the current version
4458
- if (_.version !== '0.1.8') return;
4459
 
4460
- _.Event = _.Class.extend(/** @lends FooGallery.utils.Event */{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4461
  /**
4462
- * @summary A base event class providing just a type and defaultPrevented properties.
4463
  * @constructs
4464
- * @param {string} type - The type for this event.
4465
- * @description This is a very basic event class that is used internally by the {@link FooGallery.utils.EventClass#trigger} method when the first parameter supplied is simply the event name.
4466
- *
4467
- * To trigger your own custom event you will need to inherit from this class and then supply the instantiated event object as the first parameter to the {@link FooGallery.utils.EventClass#trigger} method.
4468
- * @example {@caption The following shows how to use this class to create a custom event.}
4469
- * var MyEvent = FooGallery.utils.Event.extend({
4470
- * construct: function(type, customProp){
4471
- * this._super(type);
4472
- * this.myCustomProp = customProp;
4473
- * }
4474
- * });
4475
- *
4476
- * // to use the class you would then instantiate it and pass it as the first argument to a FooGallery.utils.EventClass's trigger method
4477
- * var eventClass = ...; // any class inheriting from FooGallery.utils.EventClass
4478
- * var event = new MyEvent( "my-event-type", true );
4479
- * eventClass.trigger(event);
4480
- */
4481
  construct: function(type){
4482
  if (_is.empty(type))
4483
  throw new SyntaxError('FooGallery.utils.Event objects must be supplied a `type`.');
4484
 
4485
- var namespaced = _str.contains(type, ".");
4486
  /**
4487
  * @summary The type of event.
4488
  * @memberof FooGallery.utils.Event#
@@ -4490,7 +4624,7 @@
4490
  * @type {string}
4491
  * @readonly
4492
  */
4493
- this.type = namespaced ? _str.until(type, ".") : type;
4494
  /**
4495
  * @summary The namespace of the event.
4496
  * @memberof FooGallery.utils.Event#
@@ -4498,7 +4632,7 @@
4498
  * @type {string}
4499
  * @readonly
4500
  */
4501
- this.namespace = namespaced ? _str.from(type, ".") : null;
4502
  /**
4503
  * @summary Whether the default action should be taken or not.
4504
  * @memberof FooGallery.utils.Event#
@@ -4506,15 +4640,14 @@
4506
  * @type {boolean}
4507
  * @readonly
4508
  */
4509
- this.defaultPrevented = false;
4510
  /**
4511
- * @summary The {@link FooGallery.utils.EventClass} that triggered this event.
4512
  * @memberof FooGallery.utils.Event#
4513
  * @name target
4514
  * @type {FooGallery.utils.EventClass}
4515
- * @readonly
4516
  */
4517
- this.target = null;
4518
  },
4519
  /**
4520
  * @summary Informs the class that raised this event that its default action should not be taken.
@@ -4535,21 +4668,58 @@
4535
  }
4536
  });
4537
 
4538
- _.EventClass = _.Class.extend(/** @lends FooGallery.utils.EventClass */{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4539
  /**
4540
- * @summary A base class that implements a basic events interface.
4541
  * @constructs
4542
- * @description This is a very basic events implementation that provides just enough to cover most needs.
4543
- */
4544
  construct: function(){
4545
  /**
4546
- * @summary The object used internally to register event handlers.
 
 
 
 
 
 
 
 
 
 
 
 
 
4547
  * @memberof FooGallery.utils.EventClass#
4548
- * @name __handlers
4549
- * @type {Object}
4550
- * @private
4551
  */
4552
- this.__handlers = {};
4553
  },
4554
  /**
4555
  * @summary Destroy the current instance releasing used resources.
@@ -4557,131 +4727,151 @@
4557
  * @function destroy
4558
  */
4559
  destroy: function(){
4560
- this.__handlers = {};
4561
  },
4562
  /**
4563
- * @summary Attach multiple event handler functions for one or more events to the class.
4564
  * @memberof FooGallery.utils.EventClass#
4565
  * @function on
4566
- * @param {object} events - An object containing an event name to handler mapping.
4567
- * @param {*} [thisArg] - The value of `this` within the `handler` function. Defaults to the `EventClass` raising the event.
4568
  * @returns {this}
4569
  *//**
4570
- * @summary Attach an event handler function for one or more events to the class.
4571
  * @memberof FooGallery.utils.EventClass#
4572
  * @function on
4573
  * @param {string} events - One or more space-separated event types.
4574
- * @param {function} handler - A function to execute when the event is triggered.
4575
- * @param {*} [thisArg] - The value of `this` within the `handler` function. Defaults to the `EventClass` raising the event.
4576
  * @returns {this}
4577
  */
4578
- on: function(events, handler, thisArg){
4579
  var self = this;
4580
  if (_is.object(events)){
4581
- thisArg = _is.undef(handler) ? this : handler;
4582
  Object.keys(events).forEach(function(key){
4583
- key.split(" ").forEach(function(type){
4584
- self.__on(type, events[key], thisArg);
4585
- });
 
 
4586
  });
4587
- } else if (_is.string(events) && _is.fn(handler)) {
4588
- thisArg = _is.undef(thisArg) ? this : thisArg;
4589
  events.split(" ").forEach(function(type){
4590
- self.__on(type, handler, thisArg);
4591
  });
4592
  }
4593
 
4594
  return self;
4595
  },
4596
- __on: function(event, handler, thisArg){
4597
- var self = this,
4598
- namespaced = _str.contains(event, "."),
4599
- type = namespaced ? _str.until(event, ".") : event,
4600
- namespace = namespaced ? _str.from(event, ".") : null;
 
 
 
 
 
 
4601
 
4602
- if (!_is.array(self.__handlers[type])){
4603
- self.__handlers[type] = [];
 
 
 
4604
  }
4605
- var exists = self.__handlers[type].some(function(h){
4606
- return h.namespace === namespace && h.fn === handler && h.thisArg === thisArg;
4607
  });
4608
  if (!exists){
4609
- self.__handlers[type].push({
4610
- namespace: namespace,
4611
- fn: handler,
4612
  thisArg: thisArg
4613
  });
 
4614
  }
 
4615
  },
4616
  /**
4617
- * @summary Remove multiple event handler functions for one or more events from the class.
4618
  * @memberof FooGallery.utils.EventClass#
4619
  * @function off
4620
- * @param {object} events - An object containing an event name to handler mapping.
4621
- * @param {*} [thisArg] - The value of `this` within the `handler` function. Defaults to the `EventClass` raising the event.
4622
  * @returns {this}
4623
  *//**
4624
- * @summary Remove an event handler function for one or more events from the class.
4625
  * @memberof FooGallery.utils.EventClass#
4626
  * @function off
4627
  * @param {string} events - One or more space-separated event types.
4628
- * @param {function} handler - The handler to remove.
4629
- * @param {*} [thisArg] - The value of `this` within the `handler` function.
4630
  * @returns {this}
4631
  */
4632
- off: function(events, handler, thisArg){
4633
  var self = this;
4634
  if (_is.object(events)){
4635
- thisArg = _is.undef(handler) ? this : handler;
4636
  Object.keys(events).forEach(function(key){
4637
  key.split(" ").forEach(function(type){
4638
- self.__off(type, _is.fn(events[key]) ? events[key] : null, thisArg);
4639
  });
4640
  });
4641
  } else if (_is.string(events)) {
4642
- handler = _is.fn(handler) ? handler : null;
4643
- thisArg = _is.undef(thisArg) ? this : thisArg;
4644
  events.split(" ").forEach(function(type){
4645
- self.__off(type, handler, thisArg);
4646
  });
4647
  }
4648
 
4649
  return self;
4650
  },
4651
- __off: function(event, handler, thisArg){
4652
- var self = this,
4653
- type = _str.until(event, ".") || null,
4654
- namespace = _str.from(event, ".") || null,
4655
- types = [];
4656
-
4657
- if (!_is.empty(type)){
4658
- types.push(type);
4659
- } else if (!_is.empty(namespace)){
4660
- types.push.apply(types, Object.keys(self.__handlers));
 
 
 
 
 
 
 
 
 
4661
  }
4662
 
4663
  types.forEach(function(type){
4664
- if (!_is.array(self.__handlers[type])) return;
4665
- self.__handlers[type] = self.__handlers[type].filter(function (h) {
4666
- if (handler != null){
4667
- return !(h.namespace === namespace && h.fn === handler && h.thisArg === thisArg);
4668
  }
4669
- if (namespace != null){
4670
- return h.namespace !== namespace;
4671
  }
4672
  return false;
4673
  });
4674
- if (self.__handlers[type].length === 0){
4675
- delete self.__handlers[type];
4676
  }
4677
  });
 
4678
  },
4679
  /**
4680
  * @summary Trigger an event on the current class.
4681
  * @memberof FooGallery.utils.EventClass#
4682
  * @function trigger
4683
  * @param {(string|FooGallery.utils.Event)} event - Either a space-separated string of event types or a custom event object to raise.
4684
- * @param {Array} [args] - An array of additional arguments to supply to the handlers after the event object.
4685
  * @returns {(FooGallery.utils.Event|FooGallery.utils.Event[]|null)} Returns the {@link FooGallery.utils.Event|event object} of the triggered event. If more than one event was triggered an array of {@link FooGallery.utils.Event|event objects} is returned. If no `event` was supplied or triggered `null` is returned.
4686
  */
4687
  trigger: function(event, args){
@@ -4689,23 +4879,39 @@
4689
  var self = this, result = [];
4690
  if (event instanceof _.Event){
4691
  result.push(event);
4692
- self.__trigger(event, args);
4693
  } else if (_is.string(event)) {
4694
  event.split(" ").forEach(function(type){
4695
- var index = result.push(new _.Event(type)) - 1;
4696
- self.__trigger(result[index], args);
 
4697
  });
4698
  }
4699
  return _is.empty(result) ? null : (result.length === 1 ? result[0] : result);
4700
  },
4701
- __trigger: function(event, args){
 
 
 
 
 
 
 
 
4702
  var self = this;
4703
- event.target = self;
4704
- if (!_is.array(self.__handlers[event.type])) return;
4705
- self.__handlers[event.type].forEach(function (h) {
4706
- if (event.namespace != null && h.namespace !== event.namespace) return;
4707
- h.fn.apply(h.thisArg, [event].concat(args));
4708
- });
 
 
 
 
 
 
 
4709
  }
4710
  });
4711
 
@@ -4717,23 +4923,64 @@
4717
  );
4718
  (function($, _, _is){
4719
  // only register methods if this version is the current version
4720
- if (_.version !== '0.1.8') return;
4721
 
4722
- _.Bounds = _.Class.extend(/** @lends FooGallery.utils.Bounds */{
 
 
 
 
 
 
 
 
4723
  /**
4724
- * @summary A simple bounding rectangle class.
4725
  * @constructs
4726
- * @augments FooGallery.utils.Class
4727
- * @borrows FooGallery.utils.Class.extend as extend
4728
- * @borrows FooGallery.utils.Class.override as override
4729
- */
4730
  construct: function(){
4731
  var self = this;
 
 
 
 
 
 
4732
  self.top = 0;
 
 
 
 
 
 
4733
  self.right = 0;
 
 
 
 
 
 
4734
  self.bottom = 0;
 
 
 
 
 
 
4735
  self.left = 0;
 
 
 
 
 
 
4736
  self.width = 0;
 
 
 
 
 
 
4737
  self.height = 0;
4738
  },
4739
  /**
@@ -4771,7 +5018,7 @@
4771
  var __$window;
4772
  /**
4773
  * @summary Gets the bounding rectangle of the current viewport.
4774
- * @memberof FooGallery.utils
4775
  * @function getViewportBounds
4776
  * @param {number} [inflate] - An amount to inflate the bounds by. A positive number will expand the bounds outside of the visible viewport while a negative one would shrink it.
4777
  * @returns {FooGallery.utils.Bounds}
@@ -4791,7 +5038,7 @@
4791
 
4792
  /**
4793
  * @summary Get the bounding rectangle for the supplied element.
4794
- * @memberof FooGallery.utils
4795
  * @function getElementBounds
4796
  * @param {(jQuery|HTMLElement|string)} element - The jQuery wrapper around the element, the element itself, or a CSS selector to retrieve the element with.
4797
  * @returns {FooGallery.utils.Bounds}
@@ -4818,13 +5065,19 @@
4818
  );
4819
  (function($, _, _is, _fn, _obj){
4820
  // only register methods if this version is the current version
4821
- if (_.version !== '0.1.8') return;
4822
 
 
 
 
 
 
 
4823
  _.Timer = _.EventClass.extend(/** @lends FooGallery.utils.Timer */{
4824
  /**
4825
- * @summary A simple timer that triggers events.
4826
  * @constructs
4827
- * @param {number} [interval=1000] - The internal tick interval of the timer.
4828
  */
4829
  construct: function(interval){
4830
  this._super();
@@ -5112,23 +5365,36 @@
5112
 
5113
  (function($, _, _is, _fn){
5114
  // only register methods if this version is the current version
5115
- if (_.version !== '0.1.8') return;
5116
 
5117
- _.Factory = _.Class.extend(/** @lends FooGallery.utils.Factory */{
 
 
 
 
 
 
 
 
 
5118
  /**
5119
- * @summary A factory for classes allowing them to be registered and created using a friendly name.
5120
  * @constructs
5121
- * @description This class allows other classes to register themselves for use at a later time. Depending on how you intend to use the registered classes you can also specify a load and execution order through the `priority` parameter of the {@link FooGallery.utils.Factory#register|register} method.
5122
- * @augments FooGallery.utils.Class
5123
- * @borrows FooGallery.utils.Class.extend as extend
5124
- * @borrows FooGallery.utils.Class.override as override
5125
- */
5126
  construct: function(){
 
 
 
 
 
 
 
 
5127
  /**
5128
  * @summary An object containing all registered classes.
5129
  * @memberof FooGallery.utils.Factory#
5130
  * @name registered
5131
- * @type {Object.<string, Object>}
5132
  * @readonly
5133
  * @example {@caption The following shows the structure of this object. The `<name>` placeholders would be the name the class was registered with.}
5134
  * {
@@ -5173,7 +5439,7 @@
5173
  * @summary Creates new instances of all registered classes using there registered priority and the supplied arguments.
5174
  * @memberof FooGallery.utils.Factory#
5175
  * @function load
5176
- * @param {Object.<string, function>} overrides - An object containing classes to override any matching registered classes with, if no overrides are required you can pass `false` or `null`.
5177
  * @param {*} arg1 - The first argument to supply when creating new instances of all registered classes.
5178
  * @param {...*} [argN] - Any number of additional arguments to supply when creating new instances of all registered classes.
5179
  * @returns {Array.<Object>} An array containing new instances of all registered classes.
@@ -5433,126 +5699,28 @@
5433
  FooGallery.utils.is,
5434
  FooGallery.utils.fn
5435
  );
5436
- (function(_, _fn, _str){
5437
- // only register methods if this version is the current version
5438
- if (_.version !== '0.1.8') return;
5439
-
5440
- // this is done to handle Content Security in Chrome and other browsers blocking access to the localStorage object under certain configurations.
5441
- // see: https://www.chromium.org/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document
5442
- var localAvailable = false;
5443
- try { localAvailable = !!window.localStorage; }
5444
- catch (err){ localAvailable = false; }
5445
-
5446
- _.Debugger = _.Class.extend(/** @lends FooGallery.utils.Debugger */{
5447
- /**
5448
- * @summary A debug utility class that can be enabled across sessions using the given `key` by storing its state in `localStorage`.
5449
- * @constructs
5450
- * @param {string} key - The key to use to store the debug state in `localStorage`.
5451
- * @description This class allows you to write additional debug info to the console within your code which by default is not actually output. You can then enable the debugger and it will start to output the results to the console.
5452
- *
5453
- * This most useful feature of this is the ability to store the debug state across page sessions by using `localStorage`. This allows you enable the debugger and then refresh the page to view any debugger output that occurs on page load.
5454
- */
5455
- construct: function(key){
5456
- /**
5457
- * @summary The key used to store the debug state in `localStorage`.
5458
- * @memberof FooGallery.utils.Debugger#
5459
- * @name key
5460
- * @type {string}
5461
- */
5462
- this.key = key;
5463
- /**
5464
- * @summary Whether or not the debugger is currently enabled.
5465
- * @memberof FooGallery.utils.Debugger#
5466
- * @name enabled
5467
- * @type {boolean}
5468
- * @readonly
5469
- * @description The value for this property is synced with the current state stored in `localStorage` and should never set from outside of this class.
5470
- */
5471
- this.enabled = localAvailable ? !!localStorage.getItem(this.key) : false;
5472
- },
5473
- /**
5474
- * @summary Enable the debugger causing additional info to be logged to the console.
5475
- * @memberof FooGallery.utils.Debugger#
5476
- * @function enable
5477
- * @example
5478
- * var d = new FooGallery.utils.Debugger( "FOO_DEBUG" );
5479
- * d.log( "Never logged" );
5480
- * d.enabled();
5481
- * d.log( "I am logged!" );
5482
- */
5483
- enable: function(){
5484
- if (!localAvailable) return;
5485
- this.enabled = true;
5486
- localStorage.setItem(this.key, this.enabled);
5487
- },
5488
- /**
5489
- * @summary Disable the debugger stopping additional info being logged to the console.
5490
- * @memberof FooGallery.utils.Debugger#
5491
- * @function disable
5492
- * @example
5493
- * var d = new FooGallery.utils.Debugger( "FOO_DEBUG" );
5494
- * d.log( "Never logged" );
5495
- * d.enabled();
5496
- * d.log( "I am logged!" );
5497
- * d.disable();
5498
- * d.log( "Never logged" );
5499
- */
5500
- disable: function(){
5501
- if (!localAvailable) return;
5502
- this.enabled = false;
5503
- localStorage.removeItem(this.key);
5504
- },
5505
- /**
5506
- * @summary Logs the supplied message and additional arguments to the console when enabled.
5507
- * @memberof FooGallery.utils.Debugger#
5508
- * @function log
5509
- * @param {string} message - The message to log to the console.
5510
- * @param {*} [argN] - Any number of additional arguments to supply after the message.
5511
- * @description This method basically wraps the `console.log` method and simply checks the enabled state of the debugger before passing along any supplied arguments.
5512
- */
5513
- log: function(message, argN){
5514
- if (!this.enabled) return;
5515
- console.log.apply(console, _fn.arg2arr(arguments));
5516
- },
5517
- /**
5518
- * @summary Logs the formatted message and additional arguments to the console when enabled.
5519
- * @memberof FooGallery.utils.Debugger#
5520
- * @function logf
5521
- * @param {string} message - The message containing named `replacements` to log to the console.
5522
- * @param {Object.<string, *>} replacements - An object containing key value pairs used to perform a named format on the `message`.
5523
- * @param {*} [argN] - Any number of additional arguments to supply after the message.
5524
- * @see {@link FooGallery.utils.str.format} for more information on supplying the replacements object.
5525
- */
5526
- logf: function(message, replacements, argN){
5527
- if (!this.enabled) return;
5528
- var args = _fn.arg2arr(arguments);
5529
- message = args.shift();
5530
- replacements = args.shift();
5531
- args.unshift(_str.format(message, replacements));
5532
- this.log.apply(this, args);
5533
- }
5534
- });
5535
-
5536
- })(
5537
- // dependencies
5538
- FooGallery.utils,
5539
- FooGallery.utils.fn,
5540
- FooGallery.utils.str
5541
- );
5542
  (function($, _, _fn){
5543
  // only register methods if this version is the current version
5544
- if (_.version !== '0.1.8') return;
5545
 
 
 
 
 
 
 
 
 
5546
  _.FullscreenAPI = _.EventClass.extend(/** @lends FooGallery.utils.FullscreenAPI */{
5547
  /**
5548
- * @summary A wrapper around the fullscreen API to ensure cross browser compatibility.
5549
  * @constructs
5550
  */
5551
  construct: function(){
5552
  this._super();
5553
  /**
5554
  * @summary An object containing a single browsers various methods and events needed for this wrapper.
5555
- * @typedef {Object} FooGallery.utils.FullscreenAPI~BrowserAPI
5556
  * @property {string} enabled
5557
  * @property {string} element
5558
  * @property {string} request
@@ -5562,11 +5730,16 @@
5562
  * @property {string} events.error
5563
  */
5564
 
 
 
 
 
 
5565
  /**
5566
  * @summary Contains the various browser specific method and event names.
5567
  * @memberof FooGallery.utils.FullscreenAPI#
5568
  * @name apis
5569
- * @type {{w3: BrowserAPI, ms: BrowserAPI, moz: BrowserAPI, webkit: BrowserAPI}}
5570
  */
5571
  this.apis = {
5572
  w3: {
@@ -5614,7 +5787,7 @@
5614
  * @summary The current browsers specific method and event names.
5615
  * @memberof FooGallery.utils.FullscreenAPI#
5616
  * @name api
5617
- * @type {?BrowserAPI}
5618
  */
5619
  this.api = this.getAPI();
5620
  /**
@@ -5640,7 +5813,7 @@
5640
  * @summary Fetches the correct API for the current browser.
5641
  * @memberof FooGallery.utils.FullscreenAPI#
5642
  * @function getAPI
5643
- * @return {?BrowserAPI} If the fullscreen API is not supported `null` is returned.
5644
  */
5645
  getAPI: function(){
5646
  for (var vendor in this.apis) {
@@ -5770,14 +5943,6 @@
5770
  }
5771
  });
5772
 
5773
- /**
5774
- * @summary A cross browser wrapper for the fullscreen API.
5775
- * @memberof FooGallery.utils
5776
- * @name fullscreen
5777
- * @type {FooGallery.utils.FullscreenAPI}
5778
- */
5779
- _.fullscreen = new _.FullscreenAPI();
5780
-
5781
  })(
5782
  FooGallery.utils.$,
5783
  FooGallery.utils,
@@ -5785,8 +5950,6 @@
5785
  );
5786
  (function ($, _, _utils, _is, _fn) {
5787
 
5788
- _.debug = new _utils.Debugger("__FooGallery__");
5789
-
5790
  /**
5791
  * @summary The url of an empty 1x1 pixel image used as the default value for the `placeholder` and `error` {@link FooGallery.defaults|options}.
5792
  * @memberof FooGallery
@@ -6175,10 +6338,10 @@
6175
  event.preventDefault();
6176
  } else if (_is.hash(self.opt.allowPageScroll)){
6177
  var dir = self.getDirection(self.startPoint, self.endPoint);
6178
- if (!self.opt.allowPageScroll.x && $.inArray(dir, ['NE','E','SE','NW','W','SW']) !== -1){
6179
  event.preventDefault();
6180
  }
6181
- if (!self.opt.allowPageScroll.y && $.inArray(dir, ['NW','N','NE','SW','S','SE']) !== -1){
6182
  event.preventDefault();
6183
  }
6184
  }
@@ -7220,7 +7383,6 @@
7220
  var e = self.trigger(name, args);
7221
  if (e.defaultPrevented) event.preventDefault();
7222
  self.$el.trigger(event, args);
7223
- _.debug.logf("{id}|{name}:", {id: self.id, name: name}, args);
7224
  if (_is.fn(self[listener])) {
7225
  args.unshift(event); // add event
7226
  self[listener].apply(self.$el.get(0), args);
@@ -7519,7 +7681,7 @@
7519
  FooGallery.utils,
7520
  FooGallery.utils.is
7521
  );
7522
- (function($, _, _is, _str, _obj){
7523
 
7524
  _.State = _.Component.extend(/** @lends FooGallery.State */{
7525
  /**
@@ -7631,7 +7793,7 @@
7631
  * @returns {boolean}
7632
  */
7633
  isPushOrReplace: function(value){
7634
- return $.inArray(value, ["push","replace"]) !== -1;
7635
  },
7636
  /**
7637
  * @summary Check if the current url contains state for this template.
@@ -7883,6 +8045,7 @@
7883
  })(
7884
  FooGallery.$,
7885
  FooGallery,
 
7886
  FooGallery.utils.is,
7887
  FooGallery.utils.str,
7888
  FooGallery.utils.obj
@@ -10039,7 +10202,7 @@
10039
  find: function (item) {
10040
  var self = this;
10041
  for (var i = 0, l = self._arr.length; i < l; i++) {
10042
- if ($.inArray(item, self._arr[i]) !== -1) {
10043
  return i + 1;
10044
  }
10045
  }
@@ -10047,7 +10210,7 @@
10047
  },
10048
  contains: function (pageNumber, item) {
10049
  var items = this.get(pageNumber);
10050
- return $.inArray(item, items) !== -1;
10051
  },
10052
  first: function () {
10053
  this.goto(1);
@@ -11334,6 +11497,429 @@
11334
  FooGallery,
11335
  FooGallery.utils.obj
11336
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11337
  (function ($, _, _utils, _obj, _is) {
11338
 
11339
  _.triggerPostLoad = function (e, tmpl, current, prev, isFilter) {
1737
  );
1738
  /*!
1739
  * FooGallery.utils - Contains common utility methods and classes used in our plugins.
1740
+ * @version 0.2.2
1741
  * @link https://github.com/steveush/foo-utils#readme
1742
  * @copyright Steve Usher 2020
1743
  * @license Released under the GPL-3.0 license.
1744
  */
1745
  /**
1746
+ * @file This creates the global FooGallery.utils namespace
1747
  */
1748
  (function ($) {
1749
 
1752
  return;
1753
  }
1754
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1755
  function __exists(){
1756
  try {
1757
  return !!window.FooGallery.utils; // does the namespace already exist?
1760
  }
1761
  }
1762
 
1763
+ if (!__exists()){
1764
+ /**
1765
+ * @summary This namespace contains common utility methods and code shared between our plugins.
1766
+ * @global
1767
+ * @namespace FooGallery.utils
1768
+ * @description This namespace relies on jQuery being included in the page prior to it being loaded.
1769
+ */
1770
+ window.FooGallery.utils = {
1771
+ /**
1772
+ * @summary A reference to the jQuery object the library is registered with.
1773
+ * @memberof FooGallery.utils.
1774
+ * @name $
1775
+ * @type {jQuery}
1776
+ * @description This is used internally for all jQuery operations to help work around issues where multiple jQuery libraries have been included in a single page.
1777
+ * @example {@caption The following shows the issue when multiple jQuery's are included in a single page.}{@lang html}
1778
+ * <script src="jquery-1.12.4.js"></script>
1779
+ * <script src="my-plugin.js"></script>
1780
+ * <script src="jquery-2.2.4.js"></script>
1781
+ * <script>
1782
+ * jQuery(function($){
1783
+ * $(".selector").myPlugin(); // => This would throw a TypeError: $(...).myPlugin is not a function
1784
+ * });
1785
+ * </script>
1786
+ * @example {@caption The reason the above throws an error is that the `$.fn.myPlugin` function is registered to the first instance of jQuery in the page however the instance used to create the ready callback and actually try to execute `$(...).myPlugin()` is the second. To resolve this issue ideally you would remove the second instance of jQuery however you can use the `FooGallery.utils.$` member to ensure you are always working with the instance of jQuery the library was registered with.}{@lang html}
1787
+ * <script src="jquery-1.12.4.js"></script>
1788
+ * <script src="my-plugin.js"></script>
1789
+ * <script src="jquery-2.2.4.js"></script>
1790
+ * <script>
1791
+ * FooGallery.utils.$(function($){
1792
+ * $(".selector").myPlugin(); // => It works!
1793
+ * });
1794
+ * </script>
1795
+ */
1796
+ $: $,
1797
+ /**
1798
+ * @summary The version of this library.
1799
+ * @memberof FooGallery.utils.
1800
+ * @name version
1801
+ * @type {string}
1802
+ */
1803
+ version: '0.2.2'
1804
+ };
1805
  }
1806
 
1807
  // at this point there will always be a FooGallery.utils namespace registered to the global scope.
1809
  })(jQuery);
1810
  (function ($, _){
1811
  // only register methods if this version is the current version
1812
+ if (_.version !== '0.2.2') return;
1813
 
1814
  /**
1815
  * @summary Contains common type checking utility methods.
1816
+ * @memberof FooGallery.utils.
1817
  * @namespace is
1818
  */
1819
  _.is = {};
1820
 
1821
  /**
1822
  * @summary Checks if the `value` is an array.
1823
+ * @memberof FooGallery.utils.is.
1824
  * @function array
1825
  * @param {*} value - The value to check.
1826
  * @returns {boolean} `true` if the supplied `value` is an array.
1839
 
1840
  /**
1841
  * @summary Checks if the `value` is a boolean.
1842
+ * @memberof FooGallery.utils.is.
1843
  * @function boolean
1844
  * @param {*} value - The value to check.
1845
  * @returns {boolean} `true` if the supplied `value` is a boolean.
1860
 
1861
  /**
1862
  * @summary Checks if the `value` is an element.
1863
+ * @memberof FooGallery.utils.is.
1864
  * @function element
1865
  * @param {*} value - The value to check.
1866
  * @returns {boolean} `true` if the supplied `value` is an element.
1883
 
1884
  /**
1885
  * @summary Checks if the `value` is empty.
1886
+ * @memberof FooGallery.utils.is.
1887
  * @function empty
1888
  * @param {*} value - The value to check.
1889
  * @returns {boolean} `true` if the supplied `value` is empty.
1936
 
1937
  /**
1938
  * @summary Checks if the `value` is an error.
1939
+ * @memberof FooGallery.utils.is.
1940
  * @function error
1941
  * @param {*} value - The value to check.
1942
  * @returns {boolean} `true` if the supplied `value` is an error.
1961
 
1962
  /**
1963
  * @summary Checks if the `value` is a function.
1964
+ * @memberof FooGallery.utils.is.
1965
  * @function fn
1966
  * @param {*} value - The value to check.
1967
  * @returns {boolean} `true` if the supplied `value` is a function.
1982
 
1983
  /**
1984
  * @summary Checks if the `value` is a hash.
1985
+ * @memberof FooGallery.utils.is.
1986
  * @function hash
1987
  * @param {*} value - The value to check.
1988
  * @returns {boolean} `true` if the supplied `value` is a hash.
2003
 
2004
  /**
2005
  * @summary Checks if the `value` is a jQuery object.
2006
+ * @memberof FooGallery.utils.is.
2007
  * @function jq
2008
  * @param {*} value - The value to check.
2009
  * @returns {boolean} `true` if the supplied `value` is a jQuery object.
2027
 
2028
  /**
2029
  * @summary Checks if the `value` is a number.
2030
+ * @memberof FooGallery.utils.is.
2031
  * @function number
2032
  * @param {*} value - The value to check.
2033
  * @returns {boolean}
2046
 
2047
  /**
2048
  * @summary Checks if the `value` is an object.
2049
+ * @memberof FooGallery.utils.is.
2050
  * @function object
2051
  * @param {*} value - The value to check.
2052
  * @returns {boolean} `true` if the supplied `value` is an object.
2069
 
2070
  /**
2071
  * @summary Checks if the `value` is a promise.
2072
+ * @memberof FooGallery.utils.is.
2073
  * @function promise
2074
  * @param {*} value - The object to check.
2075
  * @returns {boolean} `true` if the supplied `value` is an object.
2095
 
2096
  /**
2097
  * @summary Checks if the `value` is a valid CSS length.
2098
+ * @memberof FooGallery.utils.is.
2099
  * @function size
2100
  * @param {*} value - The value to check.
2101
  * @returns {boolean} `true` if the `value` is a number or CSS length.
2120
 
2121
  /**
2122
  * @summary Checks if the `value` is a string.
2123
+ * @memberof FooGallery.utils.is.
2124
  * @function string
2125
  * @param {*} value - The value to check.
2126
  * @returns {boolean} `true` if the `value` is a string.
2139
 
2140
  /**
2141
  * @summary Checks if the `value` is `undefined`.
2142
+ * @memberof FooGallery.utils.is.
2143
  * @function undef
2144
  * @param {*} value - The value to check is undefined.
2145
  * @returns {boolean} `true` if the supplied `value` is `undefined`.
2163
  );
2164
  (function($, _, _is){
2165
  // only register methods if this version is the current version
2166
+ if (_.version !== '0.2.2') return;
2167
 
2168
  /**
2169
+ * @memberof FooGallery.utils.
2170
  * @namespace fn
2171
  * @summary Contains common function utility methods.
2172
  */
2176
 
2177
  /**
2178
  * @summary The regular expression to test if a function uses the `this._super` method applied by the {@link FooGallery.utils.fn.add} method.
2179
+ * @memberof FooGallery.utils.fn.
2180
  * @name CONTAINS_SUPER
2181
  * @type {RegExp}
2182
  * @default /\b_super\b/
2204
 
2205
  /**
2206
  * @summary Adds or overrides the given method `name` on the `proto` using the supplied `fn`.
2207
+ * @memberof FooGallery.utils.fn.
2208
  * @function addOrOverride
2209
  * @param {Object} proto - The prototype to add the method to.
2210
  * @param {string} name - The name of the method to add, if this already exists the original will be exposed within the scope of the supplied `fn` as `this._super`.
2270
 
2271
  /**
2272
  * @summary Use the `Function.prototype.apply` method on a class constructor using the `new` keyword.
2273
+ * @memberof FooGallery.utils.fn.
2274
  * @function apply
2275
  * @param {Object} klass - The class to create.
2276
  * @param {Array} [args=[]] - The arguments to pass to the constructor.
2277
+ * @returns {Object} The new instance of the `klass` created with the supplied `args`.
2278
  * @description When using the default `Function.prototype.apply` you can't use it on class constructors requiring the `new` keyword, this method allows us to do that.
2279
  * @example {@run true}
2280
  * // alias the FooGallery.utils.fn namespace
2298
  return klass.apply(this, args);
2299
  }
2300
  Class.prototype = klass.prototype;
 
2301
  return new Class();
2302
  };
2303
 
2304
  /**
2305
  * @summary Converts the default `arguments` object into a proper array.
2306
+ * @memberof FooGallery.utils.fn.
2307
  * @function arg2arr
2308
+ * @param {IArguments} args - The arguments object to create an array from.
2309
  * @returns {Array}
2310
  * @description This method is simply a replacement for calling `Array.prototype.slice.call()` to create an array from an `arguments` object.
2311
  * @example {@run true}
2327
 
2328
  /**
2329
  * @summary Debounces the `fn` by the supplied `time`.
2330
+ * @memberof FooGallery.utils.fn.
2331
  * @function debounce
2332
  * @param {function} fn - The function to debounce.
2333
  * @param {number} time - The time in milliseconds to delay execution.
2347
 
2348
  /**
2349
  * @summary Throttles the `fn` by the supplied `time`.
2350
+ * @memberof FooGallery.utils.fn.
2351
  * @function throttle
2352
  * @param {function} fn - The function to throttle.
2353
  * @param {number} time - The time in milliseconds to delay execution.
2375
 
2376
  /**
2377
  * @summary Checks the given `value` and ensures a function is returned.
2378
+ * @memberof FooGallery.utils.fn.
2379
  * @function check
2380
  * @param {?Object} thisArg=window - The `this` keyword within the returned function, if the supplied value is not an object this defaults to the `window`.
2381
  * @param {*} value - The value to check, if not a function or the name of one then the `def` value is automatically returned.
2447
 
2448
  /**
2449
  * @summary Fetches a function given its `name`.
2450
+ * @memberof FooGallery.utils.fn.
2451
  * @function fetch
2452
  * @param {string} name - The name of the function to fetch. This can be a `.` notated name.
2453
  * @param {Object} [ctx=window] - The context to retrieve the function from, defaults to the `window` object.
2488
 
2489
  /**
2490
  * @summary Enqueues methods using the given `name` from all supplied `objects` and executes each in order with the given arguments.
2491
+ * @memberof FooGallery.utils.fn.
2492
  * @function enqueue
2493
  * @param {Array.<Object>} objects - The objects to call the method on.
2494
  * @param {string} name - The name of the method to execute.
2676
 
2677
  /**
2678
  * @summary Waits for the outcome of all promises regardless of failure and resolves supplying the results of just those that succeeded.
2679
+ * @memberof FooGallery.utils.fn.
2680
  * @function when
2681
  * @param {Promise[]} promises - The array of promises to wait for.
2682
  * @returns {Promise}
2684
  _.fn.when = function(promises){
2685
  if (!_is.array(promises) || _is.empty(promises)) return $.when();
2686
  var d = $.Deferred(), results = [], remaining = promises.length;
2687
+ function reduceRemaining(){
2688
+ remaining--; // always mark as finished
2689
+ if(!remaining) d.resolve(results);
2690
+ }
2691
  for(var i = 0; i < promises.length; i++){
2692
+ if (_is.promise(promises[i])){
2693
+ promises[i].then(function(res){
2694
+ results.push(res); // on success, add to results
2695
+ }).always(reduceRemaining);
2696
+ } else {
2697
+ reduceRemaining();
2698
+ }
2699
  }
2700
  return d.promise(); // return a promise on the remaining values
2701
  };
2702
 
2703
  /**
2704
  * @summary Return a promise rejected using the supplied args.
2705
+ * @memberof FooGallery.utils.fn.
2706
  * @function rejectWith
2707
  * @param {*} [arg1] - The first argument to reject the promise with.
2708
  * @param {...*} [argN] - Any additional arguments to reject the promise with.
2715
 
2716
  /**
2717
  * @summary Return a promise resolved using the supplied args.
2718
+ * @memberof FooGallery.utils.fn.
2719
  * @function resolveWith
2720
  * @param {*} [arg1] - The first argument to resolve the promise with.
2721
  * @param {...*} [argN] - Any additional arguments to resolve the promise with.
2728
 
2729
  /**
2730
  * @summary A resolved promise object.
2731
+ * @memberof FooGallery.utils.fn.
2732
  * @name resolved
2733
  * @type {Promise}
2734
  */
2736
 
2737
  /**
2738
  * @summary A rejected promise object.
2739
+ * @memberof FooGallery.utils.fn.
2740
+ * @name rejected
2741
  * @type {Promise}
2742
  */
2743
  _.fn.rejected = $.Deferred().reject().promise();
2750
  );
2751
  (function(_, _is){
2752
  // only register methods if this version is the current version
2753
+ if (_.version !== '0.2.2') return;
2754
 
2755
  /**
2756
  * @summary Contains common url utility methods.
2757
+ * @memberof FooGallery.utils.
2758
  * @namespace url
2759
  */
2760
  _.url = {};
2764
 
2765
  /**
2766
  * @summary Parses the supplied url into an object containing it's component parts.
2767
+ * @memberof FooGallery.utils.url.
2768
  * @function parts
2769
  * @param {string} url - The url to parse.
2770
  * @returns {FooGallery.utils.url~Parts}
2789
 
2790
  /**
2791
  * @summary Given a <code>url</code> that could be relative or full this ensures a full url is returned.
2792
+ * @memberof FooGallery.utils.url.
2793
  * @function full
2794
  * @param {string} url - The url to ensure is full.
2795
  * @returns {?string} `null` if the given `path` is not a string or empty.
2813
 
2814
  /**
2815
  * @summary Gets or sets a parameter in the given <code>search</code> string.
2816
+ * @memberof FooGallery.utils.url.
2817
  * @function param
2818
  * @param {string} search - The search string to use (usually `location.search`).
2819
  * @param {string} key - The key of the parameter.
2889
  );
2890
  (function (_, _is, _fn) {
2891
  // only register methods if this version is the current version
2892
+ if (_.version !== '0.2.2') return;
2893
 
2894
  /**
2895
  * @summary Contains common string utility methods.
2896
+ * @memberof FooGallery.utils.
2897
  * @namespace str
2898
  */
2899
  _.str = {};
2900
 
2901
  /**
2902
  * @summary Converts the given `target` to camel case.
2903
+ * @memberof FooGallery.utils.str.
2904
  * @function camel
2905
  * @param {string} target - The string to camel case.
2906
  * @returns {string}
2926
 
2927
  /**
2928
  * @summary Converts the given `target` to kebab case. Non-alphanumeric characters are converted to `-`.
2929
+ * @memberof FooGallery.utils.str.
2930
  * @function kebab
2931
  * @param {string} target - The string to kebab case.
2932
  * @returns {string}
2952
 
2953
  /**
2954
  * @summary Checks if the `target` contains the given `substr`.
2955
+ * @memberof FooGallery.utils.str.
2956
  * @function contains
2957
  * @param {string} target - The string to check.
2958
  * @param {string} substr - The string to check for.
2979
 
2980
  /**
2981
  * @summary Checks if the `target` contains the given `word`.
2982
+ * @memberof FooGallery.utils.str.
2983
  * @function containsWord
2984
  * @param {string} target - The string to check.
2985
  * @param {string} word - The word to check for.
3010
 
3011
  /**
3012
  * @summary Checks if the `target` ends with the given `substr`.
3013
+ * @memberof FooGallery.utils.str.
3014
  * @function endsWith
3015
  * @param {string} target - The string to check.
3016
  * @param {string} substr - The substr to check for.
3030
 
3031
  /**
3032
  * @summary Escapes the `target` for use in a regular expression.
3033
+ * @memberof FooGallery.utils.str.
3034
  * @function escapeRegExp
3035
  * @param {string} target - The string to escape.
3036
  * @returns {string}
3043
 
3044
  /**
3045
  * @summary Generates a 32 bit FNV-1a hash from the given `target`.
3046
+ * @memberof FooGallery.utils.str.
3047
  * @function fnv1a
3048
  * @param {string} target - The string to generate a hash from.
3049
  * @returns {?number} `null` if the `target` is not a string or empty otherwise a 32 bit FNV-1a hash.
3067
 
3068
  /**
3069
  * @summary Returns the remainder of the `target` split on the first index of the given `substr`.
3070
+ * @memberof FooGallery.utils.str.
3071
  * @function from
3072
  * @param {string} target - The string to split.
3073
  * @param {string} substr - The substring to split on.
3084
  * console.log( _str.from( target, "nonexistent" ) ); // => null
3085
  */
3086
  _.str.from = function (target, substr) {
 
3087
  return _.str.contains(target, substr) ? target.substring(target.indexOf(substr) + substr.length) : null;
3088
  };
3089
 
3090
  /**
3091
  * @summary Joins any number of strings using the given `separator`.
3092
+ * @memberof FooGallery.utils.str.
3093
  * @function join
3094
  * @param {string} separator - The separator to use to join the strings.
3095
  * @param {string} part - The first string to join.
3127
 
3128
  /**
3129
  * @summary Checks if the `target` starts with the given `substr`.
3130
+ * @memberof FooGallery.utils.str.
3131
  * @function startsWith
3132
  * @param {string} target - The string to check.
3133
  * @param {string} substr - The substr to check for.
3147
 
3148
  /**
3149
  * @summary Returns the first part of the `target` split on the first index of the given `substr`.
3150
+ * @memberof FooGallery.utils.str.
3151
  * @function until
3152
  * @param {string} target - The string to split.
3153
  * @param {string} substr - The substring to split on.
3164
  * console.log( _str.until( target, "nonexistent" ) ); // => "To be, or not to be, that is the question."
3165
  */
3166
  _.str.until = function (target, substr) {
 
3167
  return _.str.contains(target, substr) ? target.substring(0, target.indexOf(substr)) : target;
3168
  };
3169
 
3170
  /**
3171
  * @summary A basic string formatter that can use both index and name based placeholders but handles only string or number replacements.
3172
+ * @memberof FooGallery.utils.str.
3173
  * @function format
3174
  * @param {string} target - The format string containing any placeholders to replace.
3175
  * @param {string|number|Object|Array} arg1 - The first value to format the target with. If an object is supplied it's properties are used to match named placeholders. If an array, string or number is supplied it's values are used to match any index placeholders.
3210
  _.str.format = function (target, arg1, argN){
3211
  var args = _fn.arg2arr(arguments);
3212
  target = args.shift(); // remove the target from the args
3213
+ if (_is.string(target) && args.length > 0){
3214
+ if (args.length === 1 && (_is.array(args[0]) || _is.object(args[0]))){
3215
+ args = args[0];
3216
+ }
3217
+ _.each(args, function(value, placeholder){
3218
+ target = target.replace(new RegExp("\\{" + placeholder + "\\}", "gi"), value + "");
3219
+ });
3220
  }
3221
  return target;
3222
  };
3229
  );
3230
  (function($, _, _is, _fn, _str){
3231
  // only register methods if this version is the current version
3232
+ if (_.version !== '0.2.2') return;
3233
 
3234
  /**
3235
  * @summary Contains common object utility methods.
3236
+ * @memberof FooGallery.utils.
3237
  * @namespace obj
3238
  */
3239
  _.obj = {};
3242
  var Obj = function () {};
3243
  /**
3244
  * @summary Creates a new object with the specified prototype.
3245
+ * @memberof FooGallery.utils.obj.
3246
  * @function create
3247
+ * @param {Object} proto - The object which should be the prototype of the newly-created object.
3248
+ * @returns {Object} A new object with the specified prototype.
3249
  * @description This is a basic implementation of the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create|Object.create} method.
3250
  */
3251
  _.obj.create = function (proto) {
3259
 
3260
  /**
3261
  * @summary Merge the contents of two or more objects together into the first `target` object.
3262
+ * @memberof FooGallery.utils.obj.
3263
  * @function extend
3264
  * @param {Object} target - The object to merge properties into.
3265
  * @param {Object} object - An object containing properties to merge.
3294
 
3295
  /**
3296
  * @summary Merge the contents of two objects together into the first `target` object.
3297
+ * @memberof FooGallery.utils.obj.
3298
  * @function merge
3299
  * @param {Object} target - The object to merge properties into.
3300
  * @param {Object} object - The object containing properties to merge.
3331
 
3332
  /**
3333
  * @summary Merge the validated properties of the `object` into the `target` using the optional `mappings`.
3334
+ * @memberof FooGallery.utils.obj.
3335
  * @function mergeValid
3336
  * @param {Object} target - The object to merge properties into.
3337
  * @param {FooGallery.utils.obj~Validators} validators - An object containing validators for the `target` object properties.
3405
 
3406
  /**
3407
  * @summary Get or set a property value given its `name`.
3408
+ * @memberof FooGallery.utils.obj.
3409
  * @function prop
3410
  * @param {Object} object - The object to inspect for the property.
3411
  * @param {string} name - The name of the property to fetch. This can be a `.` notated name.
3484
 
3485
  /**
3486
  * @summary An object used by the {@link FooGallery.utils.obj.mergeValid|mergeValid} method to map new values onto the `target` object.
3487
+ * @typedef {Object.<string,(string|Array.<string>)>} FooGallery.utils.obj~Mappings
3488
  * @description The mappings object is a single level object. If you want to map a property from/to a child object on either the source or target objects you must supply the name using `.` notation as seen in the below example with the `"name.first"` to `"Name.Short"` mapping.
3489
  * @example {@caption The basic structure of a mappings object is the below.}
3490
  * {
3561
  );
3562
  (function($, _, _is){
3563
  // only register methods if this version is the current version
3564
+ if (_.version !== '0.2.2') return;
3565
 
3566
  // any methods that have dependencies but don't fall into a specific subset or namespace can be added here
3567
 
3575
 
3576
  /**
3577
  * @summary Waits for the DOM to be accessible and then executes the supplied callback.
3578
+ * @memberof FooGallery.utils.
3579
  * @function ready
3580
  * @param {FooGallery.utils~readyCallback} callback - The function to execute once the DOM is accessible.
3581
  * @example {@caption This method can be used as a replacement for the jQuery ready callback to avoid an error in another script stopping our scripts from running.}
3592
  else document.addEventListener('DOMContentLoaded', onready, false);
3593
  };
3594
 
3595
+ /**
3596
+ * @summary Executed once for each array index or object property until it returns a truthy value.
3597
+ * @callback FooGallery.utils~findCallback
3598
+ * @param {*} value - The current value being iterated over. This could be either an element in an array or the value of an object property.
3599
+ * @param {(number|string)} [key] - The array index or property name of the `value`.
3600
+ * @param {(Object|Array)} [object] - The array or object currently being searched.
3601
+ * @returns {boolean} A truthy value.
3602
+ */
3603
+
3604
+ /**
3605
+ * @summary Returns the value of the first element or property in the provided target that satisfies the provided test function.
3606
+ * @memberof FooGallery.utils.
3607
+ * @function find
3608
+ * @param {(Object|Array)} target - The object or array to search.
3609
+ * @param {FooGallery.utils~findCallback} callback - A function to execute for each value in the target.
3610
+ * @param {*} [thisArg] - The `this` value within the `callback`.
3611
+ * @returns {*} The value of the first element or property in the provided target that satisfies the provided test function. Otherwise, `undefined` is returned.
3612
+ */
3613
+ _.find = function(target, callback, thisArg){
3614
+ if (!_is.fn(callback)) return;
3615
+ thisArg = _is.undef(thisArg) ? callback : thisArg;
3616
+ var i, l;
3617
+ if (_is.array(target)){
3618
+ for (i = 0, l = target.length; i < l; i++){
3619
+ if (callback.call(thisArg, target[i], i, target)){
3620
+ return target[i];
3621
+ }
3622
+ }
3623
+ } else if (_is.object(target)){
3624
+ var keys = Object.keys(target);
3625
+ for (i = 0, l = keys.length; i < l; i++){
3626
+ if (callback.call(thisArg, target[keys[i]], keys[i], target)){
3627
+ return target[keys[i]];
3628
+ }
3629
+ }
3630
+ }
3631
+ };
3632
+
3633
+ /**
3634
+ * @summary Executed once for each array index or object property.
3635
+ * @callback FooGallery.utils~eachCallback
3636
+ * @param {*} value - The current value being iterated over. This could be either an element in an array or the value of an object property.
3637
+ * @param {(number|string)} [key] - The array index or property name of the `value`.
3638
+ * @param {(Object|Array)} [object] - The array or object currently being searched.
3639
+ * @returns {(boolean|void)} Return `false` to break out of the loop, all other values are ignored.
3640
+ */
3641
+
3642
+ /**
3643
+ * @summary Iterate over all indexes or properties of the provided target executing the provided callback once per value.
3644
+ * @memberof FooGallery.utils.
3645
+ * @function each
3646
+ * @param {(Object|Array)} object - The object or array to search.
3647
+ * @param {FooGallery.utils~eachCallback} callback - A function to execute for each value in the target.
3648
+ * @param {*} [thisArg] - The `this` value within the `callback`.
3649
+ */
3650
+ _.each = function(object, callback, thisArg){
3651
+ if (!_is.fn(callback)) return;
3652
+ thisArg = _is.undef(thisArg) ? callback : thisArg;
3653
+ var i, l, result;
3654
+ if (_is.array(object)){
3655
+ for (i = 0, l = object.length; i < l; i++){
3656
+ result = callback.call(thisArg, object[i], i, object);
3657
+ if (result === false) break;
3658
+ }
3659
+ } else if (_is.object(object)){
3660
+ var keys = Object.keys(object);
3661
+ for (i = 0, l = keys.length; i < l; i++){
3662
+ result = callback.call(thisArg, object[keys[i]], keys[i], object);
3663
+ if (result === false) break;
3664
+ }
3665
+ }
3666
+ };
3667
+
3668
+ /**
3669
+ * @summary Checks if a value exists within an array.
3670
+ * @memberof FooGallery.utils.
3671
+ * @function inArray
3672
+ * @param {*} needle - The value to search for.
3673
+ * @param {[]} haystack - The array to search within.
3674
+ * @returns {number} Returns the index of the value if found otherwise -1.
3675
+ */
3676
+ _.inArray = function(needle, haystack){
3677
+ if (_is.array(haystack)){
3678
+ return haystack.indexOf(needle);
3679
+ }
3680
+ return -1;
3681
+ };
3682
+
3683
+ /**
3684
+ * @summary Compares two version numbers.
3685
+ * @memberof FooGallery.utils.
3686
+ * @function versionCompare
3687
+ * @param {string} version1 - The first version to use in the comparison.
3688
+ * @param {string} version2 - The second version to compare to the first.
3689
+ * @returns {number} `0` if the version are equal.
3690
+ * `-1` if `version1` is less than `version2`.
3691
+ * `1` if `version1` is greater than `version2`.
3692
+ * `NaN` if either of the supplied versions do not conform to MAJOR.MINOR.PATCH format.
3693
+ * @description This method will compare two version numbers that conform to the basic MAJOR.MINOR.PATCH format returning the result as a simple number. This method will handle short version string comparisons e.g. `1.0` versus `1.0.1`.
3694
+ * @example {@caption The following shows the results of comparing various version strings.}
3695
+ * console.log( FooGallery.utils.versionCompare( "0", "0" ) ); // => 0
3696
+ * console.log( FooGallery.utils.versionCompare( "0.0", "0" ) ); // => 0
3697
+ * console.log( FooGallery.utils.versionCompare( "0.0", "0.0.0" ) ); // => 0
3698
+ * console.log( FooGallery.utils.versionCompare( "0.1", "0.0.0" ) ); // => 1
3699
+ * console.log( FooGallery.utils.versionCompare( "0.1", "0.0.1" ) ); // => 1
3700
+ * console.log( FooGallery.utils.versionCompare( "1", "0.1" ) ); // => 1
3701
+ * console.log( FooGallery.utils.versionCompare( "1.10", "1.9" ) ); // => 1
3702
+ * console.log( FooGallery.utils.versionCompare( "1.9", "1.10" ) ); // => -1
3703
+ * console.log( FooGallery.utils.versionCompare( "1", "1.1" ) ); // => -1
3704
+ * console.log( FooGallery.utils.versionCompare( "1.0.9", "1.1" ) ); // => -1
3705
+ * @example {@caption If either of the supplied version strings does not match the MAJOR.MINOR.PATCH format then `NaN` is returned.}
3706
+ * console.log( FooGallery.utils.versionCompare( "not-a-version", "1.1" ) ); // => NaN
3707
+ * console.log( FooGallery.utils.versionCompare( "1.1", "not-a-version" ) ); // => NaN
3708
+ * console.log( FooGallery.utils.versionCompare( "not-a-version", "not-a-version" ) ); // => NaN
3709
+ */
3710
+ _.versionCompare = function(version1, version2){
3711
+ // if either of the versions do not match the expected format return NaN
3712
+ if (!(/[\d.]/.test(version1) && /[\d.]/.test(version2))) return NaN;
3713
+
3714
+ /**
3715
+ * @summary Splits and parses the given version string into a numeric array.
3716
+ * @param {string} version - The version string to split and parse.
3717
+ * @returns {Array.<number>}
3718
+ * @ignore
3719
+ */
3720
+ function split(version){
3721
+ var parts = version.split('.'), result = [];
3722
+ for(var i = 0, len = parts.length; i < len; i++){
3723
+ result[i] = parseInt(parts[i]);
3724
+ if (isNaN(result[i])) result[i] = 0;
3725
+ }
3726
+ return result;
3727
+ }
3728
+
3729
+ // get the base numeric arrays for each version
3730
+ var v1parts = split(version1),
3731
+ v2parts = split(version2);
3732
+
3733
+ // ensure both arrays are the same length by padding the shorter with 0
3734
+ while (v1parts.length < v2parts.length) v1parts.push(0);
3735
+ while (v2parts.length < v1parts.length) v2parts.push(0);
3736
+
3737
+ // perform the actual comparison
3738
+ for (var i = 0; i < v1parts.length; ++i) {
3739
+ if (v2parts.length === i) return 1;
3740
+ if (v1parts[i] === v2parts[i]) continue;
3741
+ if (v1parts[i] > v2parts[i]) return 1;
3742
+ else return -1;
3743
+ }
3744
+ if (v1parts.length !== v2parts.length) return -1;
3745
+ return 0;
3746
+ };
3747
+
3748
  // A variable to hold the last number used to generate an ID in the current page.
3749
  var uniqueId = 0;
3750
 
3751
  /**
3752
  * @summary Generate and apply a unique id for the given `$element`.
3753
+ * @memberof FooGallery.utils.
3754
  * @function uniqueId
3755
  * @param {jQuery} $element - The jQuery element object to retrieve an id from or generate an id for.
3756
  * @param {string} [prefix="uid-"] - A prefix to append to the start of any generated ids.
3783
 
3784
  /**
3785
  * @summary Remove the id from the given `$element` if it was set using the {@link FooGallery.utils.uniqueId|uniqueId} method.
3786
+ * @memberof FooGallery.utils.
3787
  * @function removeUniqueId
3788
  * @param {jQuery} $element - The jQuery element object to remove a generated id from.
3789
  * @example {@run true}
3807
 
3808
  /**
3809
  * @summary Convert CSS class names into CSS selectors.
3810
+ * @memberof FooGallery.utils.
3811
  * @function selectify
3812
  * @param {(string|string[]|object)} classes - A space delimited string of CSS class names or an array of them with each item being included in the selector using the OR (`,`) syntax as a separator. If an object is supplied the result will be an object with the same property names but the values converted to selectors.
3813
  * @returns {(object|string)}
3848
 
3849
  /**
3850
  * @summary Parses the supplied `src` and `srcset` values and returns the best matching URL for the supplied render size.
3851
+ * @memberof FooGallery.utils.
3852
  * @function src
3853
  * @param {string} src - The default src for the image.
3854
  * @param {string} srcset - The srcset containing additional image sizes.
3957
 
3958
  /**
3959
  * @summary Get the scroll parent for the supplied element optionally filtering by axis.
3960
+ * @memberof FooGallery.utils.
3961
  * @function scrollParent
3962
  * @param {(string|Element|jQuery)} element - The selector, element or jQuery element to find the scroll parent of.
3963
  * @param {string} [axis="xy"] - The axis to check. By default this method will check both the X and Y axis.
3995
  );
3996
  (function($, _, _is){
3997
  // only register methods if this version is the current version
3998
+ if (_.version !== '0.2.2') return;
3999
 
4000
  /**
4001
  * @summary Contains common utility methods and members for the CSS animation property.
4002
+ * @memberof FooGallery.utils.
4003
  * @namespace animation
4004
  */
4005
  _.animation = {};
4006
 
4007
  function raf(callback){
4008
+ return setTimeout(callback, 1000/60);
4009
  }
4010
 
4011
  function caf(requestID){
4014
 
4015
  /**
4016
  * @summary A cross browser wrapper for the `requestAnimationFrame` method.
4017
+ * @memberof FooGallery.utils.animation.
4018
  * @function requestFrame
4019
  * @param {function} callback - The function to call when it's time to update your animation for the next repaint.
4020
  * @return {number} - The request id that uniquely identifies the entry in the callback list.
4023
 
4024
  /**
4025
  * @summary A cross browser wrapper for the `cancelAnimationFrame` method.
4026
+ * @memberof FooGallery.utils.animation.
4027
  * @function cancelFrame
4028
  * @param {number} requestID - The ID value returned by the call to {@link FooGallery.utils.animation.requestFrame|requestFrame} that requested the callback.
4029
  */
4034
 
4035
  /**
4036
  * @summary Whether or not animations are supported by the current browser.
4037
+ * @memberof FooGallery.utils.animation.
4038
  * @name supported
4039
  * @type {boolean}
4040
  */
4057
 
4058
  /**
4059
  * @summary The `animationend` event name for the current browser.
4060
+ * @memberof FooGallery.utils.animation.
4061
  * @name end
4062
  * @type {string}
4063
  * @description Depending on the browser this returns one of the following values:
4090
 
4091
  /**
4092
  * @summary Gets the `animation-duration` value for the supplied jQuery element.
4093
+ * @memberof FooGallery.utils.animation.
4094
  * @function duration
4095
  * @param {jQuery} $element - The jQuery element to retrieve the duration from.
4096
  * @param {number} [def=0] - The default value to return if no duration is set.
4101
  if (!_is.jq($element)) return def;
4102
  // we can use jQuery.css() method to retrieve the value cross browser
4103
  var duration = $element.css('animation-duration');
4104
+ if (/^([\d.]*)+?(ms|s)/i.test(duration)){
4105
+ // if we have a valid duration value split it into it's components
4106
+ var parts = duration.split(","), max = 0;
4107
+ parts.forEach(function(part){
4108
+ var match = part.match(/^\s*?([\d.]*)+?(ms|s)\s*?$/i),
4109
+ value = parseFloat(match[1]),
4110
+ unit = match[2].toLowerCase();
4111
+ if (unit === 's'){
4112
+ // convert seconds to milliseconds
4113
+ value = value * 1000;
4114
+ }
4115
+ if (value > max) max = value;
4116
+ });
4117
+ return max;
4118
  }
4119
  return def;
4120
  };
4121
 
4122
  /**
4123
  * @summary Gets the `animation-iteration-count` value for the supplied jQuery element.
4124
+ * @memberof FooGallery.utils.animation.
4125
  * @function iterations
4126
  * @param {jQuery} $element - The jQuery element to retrieve the duration from.
4127
  * @param {number} [def=1] - The default value to return if no iteration count is set.
4132
  if (!_is.jq($element)) return def;
4133
  // we can use jQuery.css() method to retrieve the value cross browser
4134
  var iterations = $element.css('animation-iteration-count');
4135
+ if (/^(([\d.]+)|infinite)/i.test(iterations)){
4136
+ // if we have a valid iterations value split it into it's components
4137
+ var parts = iterations.split(","), max = 0;
4138
+ parts.forEach(function(part){
4139
+ var value = parseFloat(part);
4140
+ if (isNaN(value)) value = Infinity;
4141
+ if (value > max) max = value;
4142
+ });
4143
+ return max;
4144
  }
4145
  return def;
4146
  };
4154
 
4155
  /**
4156
  * @summary Start a animation by toggling the supplied `className` on the `$element`.
4157
+ * @memberof FooGallery.utils.animation.
4158
  * @function start
4159
  * @param {jQuery} $element - The jQuery element to start the animation on.
4160
  * @param {(string|FooGallery.utils.animation~startCallback)} classNameOrFunc - One or more class names (separated by spaces) to be toggled or a function that performs the required actions to start the animation.
4232
  );
4233
  (function($, _, _is, _animation){
4234
  // only register methods if this version is the current version
4235
+ if (_.version !== '0.2.2') return;
4236
 
4237
  /**
4238
  * @summary Contains common utility methods and members for the CSS transition property.
4239
+ * @memberof FooGallery.utils.
4240
  * @namespace transition
4241
  */
4242
  _.transition = {};
4246
 
4247
  /**
4248
  * @summary Whether or not transitions are supported by the current browser.
4249
+ * @memberof FooGallery.utils.transition.
4250
  * @name supported
4251
  * @type {boolean}
4252
  */
4269
 
4270
  /**
4271
  * @summary The `transitionend` event name for the current browser.
4272
+ * @memberof FooGallery.utils.transition.
4273
  * @name end
4274
  * @type {string}
4275
  * @description Depending on the browser this returns one of the following values:
4302
 
4303
  /**
4304
  * @summary Gets the `transition-duration` value for the supplied jQuery element.
4305
+ * @memberof FooGallery.utils.transition.
4306
  * @function duration
4307
  * @param {jQuery} $element - The jQuery element to retrieve the duration from.
4308
  * @param {number} [def=0] - The default value to return if no duration is set.
4313
  if (!_is.jq($element)) return def;
4314
  // we can use jQuery.css() method to retrieve the value cross browser
4315
  var duration = $element.css('transition-duration');
4316
+ if (/^([\d.]*)+?(ms|s)/i.test(duration)){
4317
+ // if we have a valid duration value split it into it's components
4318
+ var parts = duration.split(","), max = 0;
4319
+ parts.forEach(function(part){
4320
+ var match = part.match(/^\s*?([\d.]*)+?(ms|s)\s*?$/i),
4321
+ value = parseFloat(match[1]),
4322
+ unit = match[2].toLowerCase();
4323
+ if (unit === 's'){
4324
+ // convert seconds to milliseconds
4325
+ value = value * 1000;
4326
+ }
4327
+ if (value > max) max = value;
4328
+ });
4329
+ return max;
4330
  }
4331
  return def;
4332
  };
4340
 
4341
  /**
4342
  * @summary Start a transition by toggling the supplied `className` on the `$element`.
4343
+ * @memberof FooGallery.utils.transition.
4344
  * @function start
4345
  * @param {jQuery} $element - The jQuery element to start the transition on.
4346
  * @param {(string|FooGallery.utils.transition~startCallback)} classNameOrFunc - One or more class names (separated by spaces) to be toggled or a function that performs the required actions to start the transition.
4410
  );
4411
  (function ($, _, _is, _obj, _fn) {
4412
  // only register methods if this version is the current version
4413
+ if (_.version !== '0.2.2') return;
4414
 
4415
  /**
4416
  * @summary A base class providing some helper methods for prototypal inheritance.
4417
+ * @memberof FooGallery.utils.
4418
+ * @constructs Class
4419
  * @description This is a base class for making prototypal inheritance simpler to work with. It provides an easy way to inherit from another class and exposes a `_super` method within the scope of any overriding methods that allows a simple way to execute the overridden function.
4420
  *
4421
  * Have a look at the {@link FooGallery.utils.Class.extend|extend} and {@link FooGallery.utils.Class.override|override} method examples to see some basic usage.
4435
  * @ignore
4436
  * @summary The original function when within the scope of an overriding method.
4437
  * @memberof FooGallery.utils.Class#
4438
+ * @function _super
4439
+ * @param {...*} [argN] - The same arguments as the base method.
4440
+ * @returns {*} The result of the base method.
4441
  * @description This is only available within the scope of an overriding method if it was created using the {@link FooGallery.utils.Class.extend|extend}, {@link FooGallery.utils.Class.override|override} or {@link FooGallery.utils.fn.addOrOverride} methods.
4442
  * @see {@link FooGallery.utils.fn.addOrOverride} to see an example of how this property is used.
4443
  */
4444
 
4445
  /**
4446
  * @summary Creates a new class that inherits from this one which in turn allows itself to be extended.
4447
+ * @memberof FooGallery.utils.Class.
4448
  * @function extend
4449
  * @param {Object} [definition] - An object containing any methods to implement/override.
4450
  * @returns {function} A new class that inherits from the base class.
4507
  Class.prototype.constructor = _is.fn(proto.__ctor__) ? proto.__ctor__ : Class;
4508
  Class.extend = _.Class.extend;
4509
  Class.override = _.Class.override;
4510
+ Class.bases = _.Class.bases;
4511
+ Class.__base__ = this;
4512
  return Class;
4513
  };
4514
 
4515
  /**
4516
  * @summary Overrides a single method on this class.
4517
+ * @memberof FooGallery.utils.Class.
4518
  * @function override
4519
  * @param {string} name - The name of the function to override.
4520
  * @param {function} fn - The new function to override with, the `_super` method will be made available within this function.
4543
  _fn.addOrOverride(this.prototype, name, fn);
4544
  };
4545
 
4546
+ /**
4547
+ * @summary The base class for this class.
4548
+ * @memberof FooGallery.utils.Class.
4549
+ * @name __base__
4550
+ * @type {?FooGallery.utils.Class}
4551
+ * @private
4552
+ */
4553
+ _.Class.__base__ = null;
4554
+
4555
+ /**
4556
+ * @summary Get an array of all base classes for this class.
4557
+ * @memberof FooGallery.utils.Class.
4558
+ * @function bases
4559
+ * @returns {FooGallery.utils.Class[]}
4560
+ */
4561
+ _.Class.bases = function(){
4562
+ function _get(klass, result){
4563
+ if (!_is.array(result)) result = [];
4564
+ if (_is.fn(klass) && klass.__base__ !== null){
4565
+ result.unshift(klass.__base__);
4566
+ return _get(klass.__base__, result);
4567
+ }
4568
+ return result;
4569
+ }
4570
+ var initial = [];
4571
+ return _get(this, initial);
4572
+ };
4573
  })(
4574
  // dependencies
4575
  FooGallery.utils.$,
4580
  );
4581
  (function (_, _is, _str) {
4582
  // only register methods if this version is the current version
4583
+ if (_.version !== '0.2.2') return;
4584
 
4585
+ /**
4586
+ * @summary A base event class providing just a type and defaultPrevented properties.
4587
+ * @memberof FooGallery.utils.
4588
+ * @class Event
4589
+ * @param {string} type - The type for this event.
4590
+ * @augments FooGallery.utils.Class
4591
+ * @borrows FooGallery.utils.Class.extend as extend
4592
+ * @borrows FooGallery.utils.Class.override as override
4593
+ * @description This is a very basic event class that is used internally by the {@link FooGallery.utils.EventClass#trigger} method when the first parameter supplied is simply the event name.
4594
+ *
4595
+ * To trigger your own custom event you will need to inherit from this class and then supply the instantiated event object as the first parameter to the {@link FooGallery.utils.EventClass#trigger} method.
4596
+ * @example {@caption The following shows how to use this class to create a custom event.}
4597
+ * var MyEvent = FooGallery.utils.Event.extend({
4598
+ * construct: function(type, customProp){
4599
+ * this._super(type);
4600
+ * this.myCustomProp = customProp;
4601
+ * }
4602
+ * });
4603
+ *
4604
+ * // to use the class you would then instantiate it and pass it as the first argument to a FooGallery.utils.EventClass's trigger method
4605
+ * var eventClass = ...; // any class inheriting from FooGallery.utils.EventClass
4606
+ * var event = new MyEvent( "my-event-type", true );
4607
+ * eventClass.trigger(event);
4608
+ */
4609
+ _.Event = _.Class.extend(/** @lends FooGallery.utils.Event.prototype */{
4610
  /**
4611
+ * @ignore
4612
  * @constructs
4613
+ * @param {string} type
4614
+ **/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4615
  construct: function(type){
4616
  if (_is.empty(type))
4617
  throw new SyntaxError('FooGallery.utils.Event objects must be supplied a `type`.');
4618
 
4619
+ var self = this, parsed = _.Event.parse(type);
4620
  /**
4621
  * @summary The type of event.
4622
  * @memberof FooGallery.utils.Event#
4624
  * @type {string}
4625
  * @readonly
4626
  */
4627
+ self.type = parsed.type;
4628
  /**
4629
  * @summary The namespace of the event.
4630
  * @memberof FooGallery.utils.Event#
4632
  * @type {string}
4633
  * @readonly
4634
  */
4635
+ self.namespace = parsed.namespace;
4636
  /**
4637
  * @summary Whether the default action should be taken or not.
4638
  * @memberof FooGallery.utils.Event#
4640
  * @type {boolean}
4641
  * @readonly
4642
  */
4643
+ self.defaultPrevented = false;
4644
  /**
4645
+ * @summary The original {@link FooGallery.utils.EventClass} that triggered this event.
4646
  * @memberof FooGallery.utils.Event#
4647
  * @name target
4648
  * @type {FooGallery.utils.EventClass}
 
4649
  */
4650
+ self.target = null;
4651
  },
4652
  /**
4653
  * @summary Informs the class that raised this event that its default action should not be taken.
4668
  }
4669
  });
4670
 
4671
+ /**
4672
+ * @summary Parse the provided event string into a type and namespace.
4673
+ * @memberof FooGallery.utils.Event.
4674
+ * @function parse
4675
+ * @param {string} event - The event to parse.
4676
+ * @returns {{namespaced: boolean, type: string, namespace: string}} Returns an object containing the type and namespace for the event.
4677
+ */
4678
+ _.Event.parse = function(event){
4679
+ event = _is.string(event) && !_is.empty(event) ? event : null;
4680
+ var namespaced = _str.contains(event, ".");
4681
+ return {
4682
+ namespaced: namespaced,
4683
+ type: namespaced ? _str.startsWith(event, ".") ? null : _str.until(event, ".") : event,
4684
+ namespace: namespaced ? _str.from(event, ".") : null
4685
+ };
4686
+ };
4687
+
4688
+ /**
4689
+ * @summary A base class that implements a basic events interface.
4690
+ * @memberof FooGallery.utils.
4691
+ * @class EventClass
4692
+ * @augments FooGallery.utils.Class
4693
+ * @borrows FooGallery.utils.Class.extend as extend
4694
+ * @borrows FooGallery.utils.Class.override as override
4695
+ * @description This is a very basic events implementation that provides just enough to cover most needs.
4696
+ */
4697
+ _.EventClass = _.Class.extend(/** @lends FooGallery.utils.EventClass.prototype */{
4698
  /**
4699
+ * @ignore
4700
  * @constructs
4701
+ **/
 
4702
  construct: function(){
4703
  /**
4704
+ * @summary An object containing all the required info to execute a listener.
4705
+ * @typedef {Object} FooGallery.utils.EventClass~RegisteredListener
4706
+ * @property {string} namespace - The namespace for the listener.
4707
+ * @property {function} fn - The callback function for the listener.
4708
+ * @property {*} thisArg - The `this` value to execute the callback with.
4709
+ */
4710
+
4711
+ /**
4712
+ * @summary An object containing a mapping of events to listeners.
4713
+ * @typedef {Object.<string, Array<FooGallery.utils.EventClass~RegisteredListener>>} FooGallery.utils.EventClass~RegisteredEvents
4714
+ */
4715
+
4716
+ /**
4717
+ * @summary The object used to register event handlers.
4718
  * @memberof FooGallery.utils.EventClass#
4719
+ * @name events
4720
+ * @type {FooGallery.utils.EventClass~RegisteredEvents}
 
4721
  */
4722
+ this.events = {};
4723
  },
4724
  /**
4725
  * @summary Destroy the current instance releasing used resources.
4727
  * @function destroy
4728
  */
4729
  destroy: function(){
4730
+ this.events = {};
4731
  },
4732
  /**
4733
+ * @summary Attach multiple event listeners to the class.
4734
  * @memberof FooGallery.utils.EventClass#
4735
  * @function on
4736
+ * @param {Object.<string, function>} events - An object containing event types to listener mappings.
4737
+ * @param {*} [thisArg] - The value of `this` within the listeners. Defaults to the class raising the event.
4738
  * @returns {this}
4739
  *//**
4740
+ * @summary Attach an event listener for one or more events to the class.
4741
  * @memberof FooGallery.utils.EventClass#
4742
  * @function on
4743
  * @param {string} events - One or more space-separated event types.
4744
+ * @param {function} listener - A function to execute when the event is triggered.
4745
+ * @param {*} [thisArg] - The value of `this` within the `listener`. Defaults to the class raising the event.
4746
  * @returns {this}
4747
  */
4748
+ on: function(events, listener, thisArg){
4749
  var self = this;
4750
  if (_is.object(events)){
4751
+ thisArg = listener;
4752
  Object.keys(events).forEach(function(key){
4753
+ if (_is.fn(events[key])){
4754
+ key.split(" ").forEach(function(type){
4755
+ self.addListener(type, events[key], thisArg);
4756
+ });
4757
+ }
4758
  });
4759
+ } else if (_is.string(events) && _is.fn(listener)) {
 
4760
  events.split(" ").forEach(function(type){
4761
+ self.addListener(type, listener, thisArg);
4762
  });
4763
  }
4764
 
4765
  return self;
4766
  },
4767
+ /**
4768
+ * @summary Adds a single event listener to the current class.
4769
+ * @memberof FooGallery.utils.EventClass#
4770
+ * @function addListener
4771
+ * @param {string} event - The event type, this can not contain any whitespace.
4772
+ * @param {function} listener - A function to execute when the event is triggered.
4773
+ * @param {*} [thisArg] - The value of `this` within the `listener`. Defaults to the class raising the event.
4774
+ * @returns {boolean} Returns `true` if added.
4775
+ */
4776
+ addListener: function(event, listener, thisArg){
4777
+ if (!_is.string(event) || /\s/.test(event) || !_is.fn(listener)) return false;
4778
 
4779
+ var self = this, parsed = _.Event.parse(event);
4780
+ thisArg = _is.undef(thisArg) ? self : thisArg;
4781
+
4782
+ if (!_is.array(self.events[parsed.type])){
4783
+ self.events[parsed.type] = [];
4784
  }
4785
+ var exists = self.events[parsed.type].some(function(h){
4786
+ return h.namespace === parsed.namespace && h.fn === listener && h.thisArg === thisArg;
4787
  });
4788
  if (!exists){
4789
+ self.events[parsed.type].push({
4790
+ namespace: parsed.namespace,
4791
+ fn: listener,
4792
  thisArg: thisArg
4793
  });
4794
+ return true;
4795
  }
4796
+ return false;
4797
  },
4798
  /**
4799
+ * @summary Remove multiple event listeners from the class.
4800
  * @memberof FooGallery.utils.EventClass#
4801
  * @function off
4802
+ * @param {Object.<string, function>} events - An object containing event types to listener mappings.
4803
+ * @param {*} [thisArg] - The value of `this` within the `listener` function. Defaults to the class raising the event.
4804
  * @returns {this}
4805
  *//**
4806
+ * @summary Remove an event listener from the class.
4807
  * @memberof FooGallery.utils.EventClass#
4808
  * @function off
4809
  * @param {string} events - One or more space-separated event types.
4810
+ * @param {function} listener - A function to execute when the event is triggered.
4811
+ * @param {*} [thisArg] - The value of `this` within the `listener`. Defaults to the class raising the event.
4812
  * @returns {this}
4813
  */
4814
+ off: function(events, listener, thisArg){
4815
  var self = this;
4816
  if (_is.object(events)){
4817
+ thisArg = listener;
4818
  Object.keys(events).forEach(function(key){
4819
  key.split(" ").forEach(function(type){
4820
+ self.removeListener(type, events[key], thisArg);
4821
  });
4822
  });
4823
  } else if (_is.string(events)) {
 
 
4824
  events.split(" ").forEach(function(type){
4825
+ self.removeListener(type, listener, thisArg);
4826
  });
4827
  }
4828
 
4829
  return self;
4830
  },
4831
+ /**
4832
+ * @summary Removes a single event listener from the current class.
4833
+ * @memberof FooGallery.utils.EventClass#
4834
+ * @function removeListener
4835
+ * @param {string} event - The event type, this can not contain any whitespace.
4836
+ * @param {function} [listener] - The listener registered to the event type.
4837
+ * @param {*} [thisArg] - The value of `this` registered for the `listener`. Defaults to the class raising the event.
4838
+ * @returns {boolean} Returns `true` if removed.
4839
+ */
4840
+ removeListener: function(event, listener, thisArg){
4841
+ if (!_is.string(event) || /\s/.test(event)) return false;
4842
+
4843
+ var self = this, parsed = _.Event.parse(event), types = [];
4844
+ thisArg = _is.undef(thisArg) ? self : thisArg;
4845
+
4846
+ if (!_is.empty(parsed.type)){
4847
+ types.push(parsed.type);
4848
+ } else if (!_is.empty(parsed.namespace)){
4849
+ types.push.apply(types, Object.keys(self.events));
4850
  }
4851
 
4852
  types.forEach(function(type){
4853
+ if (!_is.array(self.events[type])) return;
4854
+ self.events[type] = self.events[type].filter(function (h) {
4855
+ if (listener != null){
4856
+ return !(h.namespace === parsed.namespace && h.fn === listener && h.thisArg === thisArg);
4857
  }
4858
+ if (parsed.namespace != null){
4859
+ return h.namespace !== parsed.namespace;
4860
  }
4861
  return false;
4862
  });
4863
+ if (self.events[type].length === 0){
4864
+ delete self.events[type];
4865
  }
4866
  });
4867
+ return true;
4868
  },
4869
  /**
4870
  * @summary Trigger an event on the current class.
4871
  * @memberof FooGallery.utils.EventClass#
4872
  * @function trigger
4873
  * @param {(string|FooGallery.utils.Event)} event - Either a space-separated string of event types or a custom event object to raise.
4874
+ * @param {Array} [args] - An array of additional arguments to supply to the listeners after the event object.
4875
  * @returns {(FooGallery.utils.Event|FooGallery.utils.Event[]|null)} Returns the {@link FooGallery.utils.Event|event object} of the triggered event. If more than one event was triggered an array of {@link FooGallery.utils.Event|event objects} is returned. If no `event` was supplied or triggered `null` is returned.
4876
  */
4877
  trigger: function(event, args){
4879
  var self = this, result = [];
4880
  if (event instanceof _.Event){
4881
  result.push(event);
4882
+ self.emit(event, args);
4883
  } else if (_is.string(event)) {
4884
  event.split(" ").forEach(function(type){
4885
+ var e = new _.Event(type);
4886
+ result.push(e)
4887
+ self.emit(e, args);
4888
  });
4889
  }
4890
  return _is.empty(result) ? null : (result.length === 1 ? result[0] : result);
4891
  },
4892
+ /**
4893
+ * @summary Emits the supplied event on the current class.
4894
+ * @memberof FooGallery.utils.EventClass#
4895
+ * @function emit
4896
+ * @param {FooGallery.utils.Event} event - The event object to emit.
4897
+ * @param {Array} [args] - An array of additional arguments to supply to the listener after the event object.
4898
+ */
4899
+ emit: function(event, args){
4900
+ if (!(event instanceof FooGallery.utils.Event)) return;
4901
  var self = this;
4902
+ args = _is.array(args) ? args : [];
4903
+ if (event.target === null) event.target = self;
4904
+ if (_is.array(self.events[event.type])) {
4905
+ self.events[event.type].forEach(function (h) {
4906
+ if (event.namespace != null && h.namespace !== event.namespace) return;
4907
+ h.fn.apply(h.thisArg, [event].concat(args));
4908
+ });
4909
+ }
4910
+ if (_is.array(self.events["__all__"])){
4911
+ self.events["__all__"].forEach(function (h) {
4912
+ h.fn.apply(h.thisArg, [event].concat(args));
4913
+ });
4914
+ }
4915
  }
4916
  });
4917
 
4923
  );
4924
  (function($, _, _is){
4925
  // only register methods if this version is the current version
4926
+ if (_.version !== '0.2.2') return;
4927
 
4928
+ /**
4929
+ * @summary A simple bounding rectangle class.
4930
+ * @memberof FooGallery.utils.
4931
+ * @class Bounds
4932
+ * @augments FooGallery.utils.Class
4933
+ * @borrows FooGallery.utils.Class.extend as extend
4934
+ * @borrows FooGallery.utils.Class.override as override
4935
+ */
4936
+ _.Bounds = _.Class.extend(/** @lends FooGallery.utils.Bounds.prototype */{
4937
  /**
4938
+ * @ignore
4939
  * @constructs
4940
+ **/
 
 
 
4941
  construct: function(){
4942
  var self = this;
4943
+ /**
4944
+ * @summary The top position.
4945
+ * @memberof FooGallery.utils.Bounds#
4946
+ * @name top
4947
+ * @type {number}
4948
+ */
4949
  self.top = 0;
4950
+ /**
4951
+ * @summary The right position.
4952
+ * @memberof FooGallery.utils.Bounds#
4953
+ * @name right
4954
+ * @type {number}
4955
+ */
4956
  self.right = 0;
4957
+ /**
4958
+ * @summary The bottom position.
4959
+ * @memberof FooGallery.utils.Bounds#
4960
+ * @name bottom
4961
+ * @type {number}
4962
+ */
4963
  self.bottom = 0;
4964
+ /**
4965
+ * @summary The left position.
4966
+ * @memberof FooGallery.utils.Bounds#
4967
+ * @name left
4968
+ * @type {number}
4969
+ */
4970
  self.left = 0;
4971
+ /**
4972
+ * @summary The width of the rectangle described by the position properties.
4973
+ * @memberof FooGallery.utils.Bounds#
4974
+ * @name width
4975
+ * @type {number}
4976
+ */
4977
  self.width = 0;
4978
+ /**
4979
+ * @summary The height of the rectangle described by the position properties.
4980
+ * @memberof FooGallery.utils.Bounds#
4981
+ * @name height
4982
+ * @type {number}
4983
+ */
4984
  self.height = 0;
4985
  },
4986
  /**
5018
  var __$window;
5019
  /**
5020
  * @summary Gets the bounding rectangle of the current viewport.
5021
+ * @memberof FooGallery.utils.
5022
  * @function getViewportBounds
5023
  * @param {number} [inflate] - An amount to inflate the bounds by. A positive number will expand the bounds outside of the visible viewport while a negative one would shrink it.
5024
  * @returns {FooGallery.utils.Bounds}
5038
 
5039
  /**
5040
  * @summary Get the bounding rectangle for the supplied element.
5041
+ * @memberof FooGallery.utils.
5042
  * @function getElementBounds
5043
  * @param {(jQuery|HTMLElement|string)} element - The jQuery wrapper around the element, the element itself, or a CSS selector to retrieve the element with.
5044
  * @returns {FooGallery.utils.Bounds}
5065
  );
5066
  (function($, _, _is, _fn, _obj){
5067
  // only register methods if this version is the current version
5068
+ if (_.version !== '0.2.2') return;
5069
 
5070
+ /**
5071
+ * @summary A simple timer that triggers events.
5072
+ * @memberof FooGallery.utils.
5073
+ * @class Timer
5074
+ * @param {number} [interval=1000] - The internal tick interval of the timer.
5075
+ */
5076
  _.Timer = _.EventClass.extend(/** @lends FooGallery.utils.Timer */{
5077
  /**
5078
+ * @ignore
5079
  * @constructs
5080
+ * @param {number} [interval=1000]
5081
  */
5082
  construct: function(interval){
5083
  this._super();
5365
 
5366
  (function($, _, _is, _fn){
5367
  // only register methods if this version is the current version
5368
+ if (_.version !== '0.2.2') return;
5369
 
5370
+ /**
5371
+ * @summary A factory for classes allowing them to be registered and created using a friendly name.
5372
+ * @memberof FooGallery.utils.
5373
+ * @class Factory
5374
+ * @description This class allows other classes to register themselves for use at a later time. Depending on how you intend to use the registered classes you can also specify a load and execution order through the `priority` parameter of the {@link FooGallery.utils.Factory#register|register} method.
5375
+ * @augments FooGallery.utils.Class
5376
+ * @borrows FooGallery.utils.Class.extend as extend
5377
+ * @borrows FooGallery.utils.Class.override as override
5378
+ */
5379
+ _.Factory = _.Class.extend(/** @lends FooGallery.utils.Factory.prototype */{
5380
  /**
5381
+ * @ignore
5382
  * @constructs
5383
+ **/
 
 
 
 
5384
  construct: function(){
5385
+ /**
5386
+ * @summary An object containing all the required info to create a new instance of a registered class.
5387
+ * @typedef {Object} FooGallery.utils.Factory~RegisteredClass
5388
+ * @property {string} name - The friendly name of the registered class.
5389
+ * @property {function} klass - The constructor for the registered class.
5390
+ * @property {number} priority - The priority for the registered class.
5391
+ */
5392
+
5393
  /**
5394
  * @summary An object containing all registered classes.
5395
  * @memberof FooGallery.utils.Factory#
5396
  * @name registered
5397
+ * @type {Object.<string, FooGallery.utils.Factory~RegisteredClass>}
5398
  * @readonly
5399
  * @example {@caption The following shows the structure of this object. The `<name>` placeholders would be the name the class was registered with.}
5400
  * {
5439
  * @summary Creates new instances of all registered classes using there registered priority and the supplied arguments.
5440
  * @memberof FooGallery.utils.Factory#
5441
  * @function load
5442
+ * @param {Object.<string, (function|string)>} overrides - An object containing classes to override any matching registered classes with, if no overrides are required you can pass `false` or `null`.
5443
  * @param {*} arg1 - The first argument to supply when creating new instances of all registered classes.
5444
  * @param {...*} [argN] - Any number of additional arguments to supply when creating new instances of all registered classes.
5445
  * @returns {Array.<Object>} An array containing new instances of all registered classes.
5699
  FooGallery.utils.is,
5700
  FooGallery.utils.fn
5701
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5702
  (function($, _, _fn){
5703
  // only register methods if this version is the current version
5704
+ if (_.version !== '0.2.2') return;
5705
 
5706
+ /**
5707
+ * @summary A wrapper around the fullscreen API to ensure cross browser compatibility.
5708
+ * @memberof FooGallery.utils.
5709
+ * @class FullscreenAPI
5710
+ * @augments FooGallery.utils.EventClass
5711
+ * @borrows FooGallery.utils.EventClass.extend as extend
5712
+ * @borrows FooGallery.utils.EventClass.override as override
5713
+ */
5714
  _.FullscreenAPI = _.EventClass.extend(/** @lends FooGallery.utils.FullscreenAPI */{
5715
  /**
5716
+ * @ignore
5717
  * @constructs
5718
  */
5719
  construct: function(){
5720
  this._super();
5721
  /**
5722
  * @summary An object containing a single browsers various methods and events needed for this wrapper.
5723
+ * @typedef {?Object} FooGallery.utils.FullscreenAPI~BrowserAPI
5724
  * @property {string} enabled
5725
  * @property {string} element
5726
  * @property {string} request
5730
  * @property {string} events.error
5731
  */
5732
 
5733
+ /**
5734
+ * @summary An object containing the supported fullscreen browser API's.
5735
+ * @typedef {Object.<string, FooGallery.utils.FullscreenAPI~BrowserAPI>} FooGallery.utils.FullscreenAPI~SupportedBrowsers
5736
+ */
5737
+
5738
  /**
5739
  * @summary Contains the various browser specific method and event names.
5740
  * @memberof FooGallery.utils.FullscreenAPI#
5741
  * @name apis
5742
+ * @type {FooGallery.utils.FullscreenAPI~SupportedBrowsers}
5743
  */
5744
  this.apis = {
5745
  w3: {
5787
  * @summary The current browsers specific method and event names.
5788
  * @memberof FooGallery.utils.FullscreenAPI#
5789
  * @name api
5790
+ * @type {FooGallery.utils.FullscreenAPI~BrowserAPI}
5791
  */
5792
  this.api = this.getAPI();
5793
  /**
5813
  * @summary Fetches the correct API for the current browser.
5814
  * @memberof FooGallery.utils.FullscreenAPI#
5815
  * @function getAPI
5816
+ * @return {?FooGallery.utils.FullscreenAPI~BrowserAPI} Returns `null` if the fullscreen API is not supported.
5817
  */
5818
  getAPI: function(){
5819
  for (var vendor in this.apis) {
5943
  }
5944
  });
5945
 
 
 
 
 
 
 
 
 
5946
  })(
5947
  FooGallery.utils.$,
5948
  FooGallery.utils,
5950
  );
5951
  (function ($, _, _utils, _is, _fn) {
5952
 
 
 
5953
  /**
5954
  * @summary The url of an empty 1x1 pixel image used as the default value for the `placeholder` and `error` {@link FooGallery.defaults|options}.
5955
  * @memberof FooGallery
6338
  event.preventDefault();
6339
  } else if (_is.hash(self.opt.allowPageScroll)){
6340
  var dir = self.getDirection(self.startPoint, self.endPoint);
6341
+ if (!self.opt.allowPageScroll.x && _utils.inArray(dir, ['NE','E','SE','NW','W','SW']) !== -1){
6342
  event.preventDefault();
6343
  }
6344
+ if (!self.opt.allowPageScroll.y && _utils.inArray(dir, ['NW','N','NE','SW','S','SE']) !== -1){
6345
  event.preventDefault();
6346
  }
6347
  }
7383
  var e = self.trigger(name, args);
7384
  if (e.defaultPrevented) event.preventDefault();
7385
  self.$el.trigger(event, args);
 
7386
  if (_is.fn(self[listener])) {
7387
  args.unshift(event); // add event
7388
  self[listener].apply(self.$el.get(0), args);
7681
  FooGallery.utils,
7682
  FooGallery.utils.is
7683
  );
7684
+ (function($, _, _utils, _is, _str, _obj){
7685
 
7686
  _.State = _.Component.extend(/** @lends FooGallery.State */{
7687
  /**
7793
  * @returns {boolean}
7794
  */
7795
  isPushOrReplace: function(value){
7796
+ return _utils.inArray(value, ["push","replace"]) !== -1;
7797
  },
7798
  /**
7799
  * @summary Check if the current url contains state for this template.
8045
  })(
8046
  FooGallery.$,
8047
  FooGallery,
8048
+ FooGallery.utils,
8049
  FooGallery.utils.is,
8050
  FooGallery.utils.str,
8051
  FooGallery.utils.obj
10202
  find: function (item) {
10203
  var self = this;
10204
  for (var i = 0, l = self._arr.length; i < l; i++) {
10205
+ if (_utils.inArray(item, self._arr[i]) !== -1) {
10206
  return i + 1;
10207
  }
10208
  }
10210
  },
10211
  contains: function (pageNumber, item) {
10212
  var items = this.get(pageNumber);
10213
+ return _utils.inArray(item, items) !== -1;
10214
  },
10215
  first: function () {
10216
  this.goto(1);
11497
  FooGallery,
11498
  FooGallery.utils.obj
11499
  );
11500
+ (function($, _, _utils, _is, _obj, _t){
11501
+
11502
+ _.StackAlbum = _utils.Class.extend({
11503
+ construct: function(element, options){
11504
+ var self = this;
11505
+ self.$el = _is.jq(element) ? element : $(element);
11506
+ self.el = self.$el.get(0);
11507
+ self.opt = _obj.extend({}, _.StackAlbum.defaults, options, self.$el.data('foogallery'));
11508
+ self.$back = self.$el.find('.fg-header-back');
11509
+ self.$active = self.$el.find('.fg-header-active');
11510
+ self.$piles = self.$el.find('.fg-piles');
11511
+ self.piles = self.$piles.find('.fg-pile').map(function(i, el){
11512
+ return new _.StackAlbum.Pile(self, el, { index: i });
11513
+ }).get();
11514
+ self.ignoreResize = false;
11515
+ self.robserver = new ResizeObserver(function () {
11516
+ if (!self.ignoreResize && self.$el.is(":visible")) self.layout(true);
11517
+ });
11518
+ },
11519
+ init: function(){
11520
+ var self = this;
11521
+ self.piles.forEach(function(pile){
11522
+ pile.init();
11523
+ });
11524
+ self.$back.on('click.foogallery', {self: self}, self.onBackClick);
11525
+ self.robserver.observe(self.el);
11526
+ },
11527
+ destroy: function(){
11528
+ var self = this;
11529
+ self.robserver.disconnect();
11530
+ self.$back.off('.foogallery');
11531
+ self.piles.forEach(function(pile){
11532
+ pile.destroy();
11533
+ });
11534
+ },
11535
+ getLayoutInfo: function(){
11536
+ var self = this,
11537
+ space = self.opt.gutter + (self.opt.border*2);
11538
+ return {
11539
+ maxWidth: self.$el.width(),
11540
+ space: space,
11541
+ halfSpace: space/2,
11542
+ itemWidth: self.opt.itemWidth,
11543
+ itemHeight: self.opt.itemHeight,
11544
+ itemOuterWidth: self.opt.itemWidth + (self.opt.border*2),
11545
+ itemOuterHeight: self.opt.itemHeight + (self.opt.border*2),
11546
+ blockWidth: self.opt.itemWidth + space,
11547
+ blockHeight: self.opt.itemHeight + space,
11548
+ border: self.opt.border,
11549
+ doubleBorder: self.opt.border*2,
11550
+ gutter: self.opt.gutter,
11551
+ halfGutter: self.opt.gutter/2
11552
+ };
11553
+ },
11554
+ layout: function(immediate){
11555
+ var self = this, size;
11556
+ if (immediate){
11557
+ self.$el.addClass('fg-disable-transitions');
11558
+ self.$el.prop('offsetWidth');
11559
+ }
11560
+ if (self.hasActive){
11561
+ size = self.activePile.layout();
11562
+ self.activePile.setPosition(0, 0, size.width, size.height);
11563
+ self.$piles.css({width: size.width + 'px', height: size.height + 'px'});
11564
+ } else {
11565
+ size = self.layoutPiles();
11566
+ self.$piles.css({width: size.width + 'px', height: size.height + 'px'});
11567
+ }
11568
+ if (immediate){
11569
+ self.$el.removeClass('fg-disable-transitions');
11570
+ }
11571
+ },
11572
+ layoutPiles: function(callback){
11573
+ var self = this,
11574
+ info = self.getLayoutInfo(),
11575
+ rowWidth = 0, rowCount = 1, width = 0;
11576
+
11577
+ callback = _is.fn(callback) ? callback : function(){};
11578
+
11579
+ self.piles.forEach(function(pile){
11580
+ var left = rowWidth;
11581
+ rowWidth += info.blockWidth;
11582
+ if (rowWidth > info.maxWidth){
11583
+ left = 0;
11584
+ rowWidth = info.blockWidth;
11585
+ rowCount++;
11586
+ }
11587
+ var top = info.blockHeight * (rowCount - 1);
11588
+ callback(pile, top, left, info.blockWidth, info.blockHeight);
11589
+ pile.setPosition(top, left, info.blockWidth, info.blockHeight);
11590
+ // keep track of the max calculated width
11591
+ if (rowWidth > width) width = rowWidth;
11592
+ });
11593
+ return {
11594
+ width: width,
11595
+ height: info.blockHeight * rowCount
11596
+ };
11597
+ },
11598
+ setActive: function(pile){
11599
+ var self = this,
11600
+ previous = self.activePile,
11601
+ hadActive = previous instanceof _.StackAlbum.Pile,
11602
+ size;
11603
+
11604
+ pile = pile instanceof _.StackAlbum.Pile ? pile : null;
11605
+
11606
+ self.activePile = pile;
11607
+ self.hasActive = pile !== null;
11608
+
11609
+ if (hadActive){
11610
+ previous.collapse();
11611
+ }
11612
+
11613
+ self.ignoreResize = true;
11614
+ if (self.hasActive){
11615
+ self.piles.forEach(function(p){
11616
+ if (p === pile) return;
11617
+ p.hide(self.activePile);
11618
+ });
11619
+ size = self.activePile.expand();
11620
+ self.$active.text(pile.title);
11621
+ self.$el.addClass('fg-has-active');
11622
+ } else {
11623
+ size = self.layoutPiles(function(p){
11624
+ p.show();
11625
+ });
11626
+ self.$el.removeClass('fg-has-active');
11627
+ }
11628
+ _t.start(self.$piles, function($el){
11629
+ $el.css({width: size.width + 'px', height: size.height + 'px'});
11630
+ }, false, 350).then(function(){
11631
+ self.ignoreResize = false;
11632
+ });
11633
+ },
11634
+ onBackClick: function(e){
11635
+ e.preventDefault();
11636
+ e.stopPropagation();
11637
+ e.data.self.setActive(null);
11638
+ }
11639
+ });
11640
+
11641
+ _.StackAlbum.defaults = {
11642
+ gutter: 50,
11643
+ itemWidth: 150,
11644
+ itemHeight: 150,
11645
+ border: 10,
11646
+ angleStep: 1,
11647
+ randomAngle: false
11648
+ };
11649
+
11650
+ })(
11651
+ FooGallery.$,
11652
+ FooGallery,
11653
+ FooGallery.utils,
11654
+ FooGallery.utils.is,
11655
+ FooGallery.utils.obj,
11656
+ FooGallery.utils.transition
11657
+ );
11658
+ (function($, _, _utils, _is, _obj){
11659
+
11660
+ _.StackAlbum.Pile = _utils.Class.extend({
11661
+ construct: function(album, element, options){
11662
+ var self = this;
11663
+ self.album = album;
11664
+ self.$el = _is.jq(element) ? element : $(element);
11665
+ self.opt = _obj.extend({}, _.StackAlbum.Pile.defaults, options, self.$el.data());
11666
+ self.title = self.opt.title;
11667
+ self.items = self.$el.find('.fg-pile-item').map(function(i, el){
11668
+ return new _.StackAlbum.Item(self, el, { index: i });
11669
+ }).get();
11670
+ self.$cover = $('<div/>', {'class': 'fg-pile-cover'}).append(
11671
+ $('<div/>', {'class': 'fg-pile-cover-content'}).append(
11672
+ $('<span/>', {'class': 'fg-pile-cover-title', text: self.opt.title}),
11673
+ $('<span/>', {'class': 'fg-pile-cover-count', text: self.items.length})
11674
+ )
11675
+ );
11676
+ self.top = 0;
11677
+ self.left = 0;
11678
+ self.isExpanded = false;
11679
+ },
11680
+ init: function(){
11681
+ var self = this,
11682
+ opt = self.album.opt,
11683
+ availableAngles = self.getAngles(opt.angleStep),
11684
+ currentAngle = opt.randomAngle ? self.randomAngle(availableAngles) : opt.angleStep;
11685
+
11686
+ self.$cover.on('click.foogallery', {self: self}, self.onCoverClick);
11687
+ self.items.forEach(function(item, i){
11688
+ item.init();
11689
+ if (i > 3) return; // we only care about the first 4 items after init
11690
+
11691
+ if (i === 0){
11692
+ item.$el.addClass('fg-has-cover').append(self.$cover);
11693
+ item.load();
11694
+ } else {
11695
+ if (i % 2 === 0){
11696
+ item.setAngle(-currentAngle);
11697
+ } else {
11698
+ item.setAngle(currentAngle);
11699
+ }
11700
+ if (opt.randomAngle){
11701
+ currentAngle = self.randomAngle(availableAngles);
11702
+ } else {
11703
+ currentAngle += opt.angleStep;
11704
+ }
11705
+ }
11706
+ });
11707
+ },
11708
+ destroy: function(){
11709
+ var self = this;
11710
+ self.$cover.remove();
11711
+ self.items.forEach(function(item, i){
11712
+ if (i === 0) item.$el.removeClass('fg-has-cover');
11713
+ item.destroy();
11714
+ });
11715
+ },
11716
+ getAngles: function(step){
11717
+ var result = [], i = 1;
11718
+ for (; i <= 3; i++){
11719
+ result.push(i * step);
11720
+ }
11721
+ return result;
11722
+ },
11723
+ randomAngle: function(available){
11724
+ var min = 0, max = available.length,
11725
+ index = Math.floor(Math.random() * (max - min) + min),
11726
+ angle = available.splice(index, 1);
11727
+ return angle.length === 1 ? angle[0] : 0;
11728
+ },
11729
+ setPosition: function(top, left, itemWidth, itemHeight){
11730
+ var self = this;
11731
+ self.top = top;
11732
+ self.left = left;
11733
+ if (_is.number(itemWidth) && _is.number(itemHeight)){
11734
+ self.$el.css({top: top + 'px', left: left + 'px', width: itemWidth + 'px', height: itemHeight + 'px'});
11735
+ } else {
11736
+ self.$el.css({top: top + 'px', left: left + 'px'});
11737
+ }
11738
+ },
11739
+ layout: function(){
11740
+ var self = this,
11741
+ info = self.album.getLayoutInfo(),
11742
+ rowWidth = 0, rowCount = 1,
11743
+ isNew = false, width = 0;
11744
+
11745
+ self.items.forEach(function(item){
11746
+ rowWidth += info.halfGutter;
11747
+ if (rowWidth > info.maxWidth){
11748
+ rowWidth = info.halfGutter;
11749
+ rowCount++;
11750
+ isNew = true;
11751
+ }
11752
+ var left = rowWidth;
11753
+ rowWidth += info.itemOuterWidth + info.halfGutter;
11754
+ if (!isNew && rowWidth > info.maxWidth){
11755
+ left = info.halfGutter;
11756
+ rowWidth = info.blockWidth;
11757
+ rowCount++;
11758
+ }
11759
+ var top = (info.blockHeight * (rowCount - 1)) + info.halfGutter;
11760
+ isNew = false;
11761
+ item.setPosition(top, left, info.itemOuterWidth, info.itemOuterHeight);
11762
+ if (!item.isLoaded) item.load();
11763
+ // keep track of the max calculated width
11764
+ if (rowWidth > width) width = rowWidth;
11765
+ });
11766
+ return {
11767
+ width: width,
11768
+ height: info.blockHeight * rowCount
11769
+ };
11770
+ },
11771
+
11772
+ expand: function(){
11773
+ var self = this, size;
11774
+ self.$el.removeClass('fg-collapsed').addClass('fg-expanded');
11775
+ size = self.layout();
11776
+ self.setPosition(0, 0, size.width, size.height);
11777
+ self.isExpanded = true;
11778
+ return size;
11779
+ },
11780
+ collapse: function(){
11781
+ var self = this,
11782
+ info = self.album.getLayoutInfo();
11783
+ self.$el.removeClass('fg-expanded').addClass('fg-collapsed');
11784
+ self.items.forEach(function(item){
11785
+ item.setPosition(info.halfGutter, info.halfGutter, info.itemOuterWidth, info.itemOuterHeight);
11786
+ });
11787
+ var size = {
11788
+ width: info.blockWidth,
11789
+ height: info.blockHeight
11790
+ };
11791
+ self.setPosition(0, 0, size.width, size.height);
11792
+ self.isExpanded = false;
11793
+ return size;
11794
+ },
11795
+ show: function(){
11796
+ var self = this;
11797
+ self.$el.removeClass('fg-hidden fg-expanded fg-collapsed');
11798
+ },
11799
+ hide: function(behind){
11800
+ var self = this;
11801
+ if (behind instanceof _.StackAlbum.Pile){
11802
+ self.setPosition(behind.top, behind.left);
11803
+ }
11804
+ self.$el.addClass('fg-hidden');
11805
+ },
11806
+
11807
+ onCoverClick: function(e){
11808
+ e.preventDefault();
11809
+ e.stopPropagation();
11810
+ var self = e.data.self;
11811
+ self.album.setActive(self);
11812
+ }
11813
+ });
11814
+
11815
+ _.StackAlbum.Pile.defaults = {
11816
+ index: -1,
11817
+ title: null
11818
+ };
11819
+
11820
+ })(
11821
+ FooGallery.$,
11822
+ FooGallery,
11823
+ FooGallery.utils,
11824
+ FooGallery.utils.is,
11825
+ FooGallery.utils.obj
11826
+ );
11827
+ (function($, _, _utils, _is, _obj){
11828
+
11829
+ _.StackAlbum.Item = _utils.Class.extend({
11830
+ construct: function(pile, element, options){
11831
+ var self = this;
11832
+ self.$el = _is.jq(element) ? element : $(element);
11833
+ self.opt = _obj.extend({}, _.StackAlbum.Item.defaults, options, self.$el.data());
11834
+ self.$thumb = self.$el.find('.fg-pile-item-thumb');
11835
+ self.$image = self.$el.find('.fg-pile-item-image');
11836
+ self.isLoaded = false;
11837
+ self.isLoading = false;
11838
+ self._loading = null;
11839
+ },
11840
+ init: function(){
11841
+
11842
+ },
11843
+ destroy: function(){
11844
+
11845
+ },
11846
+ setAngle: function(angle){
11847
+ var self = this;
11848
+ self.$el.css({transform: 'rotate(' + angle + 'deg)'});
11849
+ },
11850
+ setPosition: function(top, left, itemWidth, itemHeight){
11851
+ var self = this;
11852
+ self.$el.css({top: top + 'px', left: left + 'px', width: itemWidth + 'px', height: itemHeight + 'px'});
11853
+ },
11854
+ load: function(){
11855
+ var self = this;
11856
+ if (_is.promise(self._loading)) return self._loading;
11857
+ return self._loading = $.Deferred(function(def){
11858
+ self.$el.addClass('fg-loading');
11859
+ self.isLoading = true;
11860
+ self.$image.on({
11861
+ 'load.foogallery': function(){
11862
+ self.$image.off('.foogallery');
11863
+ self.$el.removeClass('fg-loading');
11864
+ self.isLoading = false;
11865
+ self.isLoaded = true;
11866
+ def.resolve();
11867
+ },
11868
+ 'error.foogallery': function(){
11869
+ self.$image.off('.foogallery');
11870
+ self.$el.removeClass('fg-loading');
11871
+ self.isLoading = false;
11872
+ self.isLoaded = true;
11873
+ def.reject();
11874
+ }
11875
+ });
11876
+ self.$image.prop('src', self.$image.attr(self.opt.src));
11877
+ }).promise();
11878
+ }
11879
+ });
11880
+
11881
+ _.StackAlbum.Item.defaults = {
11882
+ index: -1,
11883
+ src: 'data-src-fg'
11884
+ };
11885
+
11886
+ })(
11887
+ FooGallery.$,
11888
+ FooGallery,
11889
+ FooGallery.utils,
11890
+ FooGallery.utils.is,
11891
+ FooGallery.utils.obj
11892
+ );
11893
+ (function ($, _, _utils) {
11894
+
11895
+ $.fn.foogalleryStackAlbum = function(options){
11896
+ return this.each(function(i, el){
11897
+ var $el = $(el), inst = $el.data('__FooGalleryAlbum__');
11898
+ if (inst instanceof _.StackAlbum) inst.destroy();
11899
+ inst = new _.StackAlbum($el);
11900
+ inst.init();
11901
+ $el.data('__FooGalleryAlbum__', inst);
11902
+ });
11903
+ };
11904
+
11905
+ _.loadStackAlbums = _.reloadStackAlbums = function(){
11906
+ // this automatically initializes all templates on page load
11907
+ $(function () {
11908
+ $('.foogallery-stack-album:not(.fg-ready)').foogalleryStackAlbum();
11909
+ });
11910
+
11911
+ _utils.ready(function () {
11912
+ $('.foogallery-stack-album.fg-ready').foogalleryStackAlbum();
11913
+ });
11914
+ };
11915
+
11916
+ _.loadStackAlbums();
11917
+
11918
+ })(
11919
+ FooGallery.$,
11920
+ FooGallery,
11921
+ FooGallery.utils
11922
+ );
11923
  (function ($, _, _utils, _obj, _is) {
11924
 
11925
  _.triggerPostLoad = function (e, tmpl, current, prev, isFilter) {
extensions/default-templates/shared/js/foogallery.min.js CHANGED
@@ -1,12 +1,12 @@
1
  /*
2
  * FooGallery - The Most Intuitive and Extensible Gallery Creation and Management Tool Ever Created for WordPress
3
- * @version 1.4.18
4
  * @link
5
  * @copyright Steven Usher & Brad Vincent 2015
6
  * @license Released under the GPLv3 license.
7
  */
8
 
9
- !function(){"use strict";function a(a){this.time=a.time,this.target=a.target,this.rootBounds=a.rootBounds,this.boundingClientRect=a.boundingClientRect,this.intersectionRect=a.intersectionRect||i(),this.isIntersecting=!!a.intersectionRect;var b=this.boundingClientRect,c=b.width*b.height,d=this.intersectionRect,e=d.width*d.height;this.intersectionRatio=c?Number((e/c).toFixed(4)):this.isIntersecting?1:0}function b(a,b){var c=b||{};if("function"!=typeof a)throw new Error("callback must be a function");if(c.root&&1!=c.root.nodeType)throw new Error("root must be an Element");this._checkForIntersections=d(this._checkForIntersections.bind(this),this.THROTTLE_TIMEOUT),this._callback=a,this._observationTargets=[],this._queuedEntries=[],this._rootMarginValues=this._parseRootMargin(c.rootMargin),this.thresholds=this._initThresholds(c.threshold),this.root=c.root||null,this.rootMargin=this._rootMarginValues.map(function(a){return a.value+a.unit}).join(" ")}function c(){return window.performance&&performance.now&&performance.now()}function d(a,b){var c=null;return function(){c||(c=setTimeout(function(){a(),c=null},b))}}function e(a,b,c,d){"function"==typeof a.addEventListener?a.addEventListener(b,c,d||!1):"function"==typeof a.attachEvent&&a.attachEvent("on"+b,c)}function f(a,b,c,d){"function"==typeof a.removeEventListener?a.removeEventListener(b,c,d||!1):"function"==typeof a.detatchEvent&&a.detatchEvent("on"+b,c)}function g(a,b){var c=Math.max(a.top,b.top),d=Math.min(a.bottom,b.bottom),e=Math.max(a.left,b.left),f=Math.min(a.right,b.right),g=f-e,h=d-c;return g>=0&&h>=0&&{top:c,bottom:d,left:e,right:f,width:g,height:h}}function h(a){var b;try{b=a.getBoundingClientRect()}catch(a){}return b?(b.width&&b.height||(b={top:b.top,right:b.right,bottom:b.bottom,left:b.left,width:b.right-b.left,height:b.bottom-b.top}),b):i()}function i(){return{top:0,bottom:0,left:0,right:0,width:0,height:0}}function j(a,b){for(var c=b;c;){if(c==a)return!0;c=k(c)}return!1}function k(a){var b=a.parentNode;return b&&11==b.nodeType&&b.host?b.host:b&&b.assignedSlot?b.assignedSlot.parentNode:b}if("object"==typeof window){if("IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)return void("isIntersecting"in window.IntersectionObserverEntry.prototype||Object.defineProperty(window.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}}));var l=window.document,m=[];b.prototype.THROTTLE_TIMEOUT=100,b.prototype.POLL_INTERVAL=null,b.prototype.USE_MUTATION_OBSERVER=!0,b.prototype.observe=function(a){if(!this._observationTargets.some(function(b){return b.element==a})){if(!a||1!=a.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:a,entry:null}),this._monitorIntersections(),this._checkForIntersections()}},b.prototype.unobserve=function(a){this._observationTargets=this._observationTargets.filter(function(b){return b.element!=a}),this._observationTargets.length||(this._unmonitorIntersections(),this._unregisterInstance())},b.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorIntersections(),this._unregisterInstance()},b.prototype.takeRecords=function(){var a=this._queuedEntries.slice();return this._queuedEntries=[],a},b.prototype._initThresholds=function(a){var b=a||[0];return Array.isArray(b)||(b=[b]),b.sort().filter(function(a,b,c){if("number"!=typeof a||isNaN(a)||a<0||a>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return a!==c[b-1]})},b.prototype._parseRootMargin=function(a){var b=a||"0px",c=b.split(/\s+/).map(function(a){var b=/^(-?\d*\.?\d+)(px|%)$/.exec(a);if(!b)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(b[1]),unit:b[2]}});return c[1]=c[1]||c[0],c[2]=c[2]||c[0],c[3]=c[3]||c[1],c},b.prototype._monitorIntersections=function(){this._monitoringIntersections||(this._monitoringIntersections=!0,this.POLL_INTERVAL?this._monitoringInterval=setInterval(this._checkForIntersections,this.POLL_INTERVAL):(e(window,"resize",this._checkForIntersections,!0),e(l,"scroll",this._checkForIntersections,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in window&&(this._domObserver=new MutationObserver(this._checkForIntersections),this._domObserver.observe(l,{attributes:!0,childList:!0,characterData:!0,subtree:!0}))))},b.prototype._unmonitorIntersections=function(){this._monitoringIntersections&&(this._monitoringIntersections=!1,clearInterval(this._monitoringInterval),this._monitoringInterval=null,f(window,"resize",this._checkForIntersections,!0),f(l,"scroll",this._checkForIntersections,!0),this._domObserver&&(this._domObserver.disconnect(),this._domObserver=null))},b.prototype._checkForIntersections=function(){var b=this._rootIsInDom(),d=b?this._getRootRect():i();this._observationTargets.forEach(function(e){var f=e.element,g=h(f),i=this._rootContainsTarget(f),j=e.entry,k=b&&i&&this._computeTargetAndRootIntersection(f,d),l=e.entry=new a({time:c(),target:f,boundingClientRect:g,rootBounds:d,intersectionRect:k});j?b&&i?this._hasCrossedThreshold(j,l)&&this._queuedEntries.push(l):j&&j.isIntersecting&&this._queuedEntries.push(l):this._queuedEntries.push(l)},this),this._queuedEntries.length&&this._callback(this.takeRecords(),this)},b.prototype._computeTargetAndRootIntersection=function(a,b){if("none"!=window.getComputedStyle(a).display){for(var c=h(a),d=c,e=k(a),f=!1;!f;){var i=null,j=1==e.nodeType?window.getComputedStyle(e):{};if("none"==j.display)return;if(e==this.root||e==l?(f=!0,i=b):e!=l.body&&e!=l.documentElement&&"visible"!=j.overflow&&(i=h(e)),i&&!(d=g(i,d)))break;e=k(e)}return d}},b.prototype._getRootRect=function(){var a;if(this.root)a=h(this.root);else{var b=l.documentElement,c=l.body;a={top:0,left:0,right:b.clientWidth||c.clientWidth,width:b.clientWidth||c.clientWidth,bottom:b.clientHeight||c.clientHeight,height:b.clientHeight||c.clientHeight}}return this._expandRectByRootMargin(a)},b.prototype._expandRectByRootMargin=function(a){var b=this._rootMarginValues.map(function(b,c){return"px"==b.unit?b.value:b.value*(c%2?a.width:a.height)/100}),c={top:a.top-b[0],right:a.right+b[1],bottom:a.bottom+b[2],left:a.left-b[3]};return c.width=c.right-c.left,c.height=c.bottom-c.top,c},b.prototype._hasCrossedThreshold=function(a,b){var c=a&&a.isIntersecting?a.intersectionRatio||0:-1,d=b.isIntersecting?b.intersectionRatio||0:-1;if(c!==d)for(var e=0;e<this.thresholds.length;e++){var f=this.thresholds[e];if(f==c||f==d||f<c!=f<d)return!0}},b.prototype._rootIsInDom=function(){return!this.root||j(l,this.root)},b.prototype._rootContainsTarget=function(a){return j(this.root||l,a)},b.prototype._registerInstance=function(){m.indexOf(this)<0&&m.push(this)},b.prototype._unregisterInstance=function(){var a=m.indexOf(this);-1!=a&&m.splice(a,1)},window.IntersectionObserver=b,window.IntersectionObserverEntry=a}}(),function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.ResizeObserver=b()}(this,function(){"use strict";function a(a,b){function c(){f&&(f=!1,a()),g&&e()}function d(){n(c)}function e(){var a=Date.now();if(f){if(a-h<o)return;g=!0}else f=!0,g=!1,setTimeout(d,b);h=a}var f=!1,g=!1,h=0;return e}function b(a){return parseFloat(a)||0}function c(a){for(var c=[],d=1;d<arguments.length;d++)c[d-1]=arguments[d];return c.reduce(function(c,d){return c+b(a["border-"+d+"-width"])},0)}function d(a){for(var c=["top","right","bottom","left"],d={},e=0,f=c;e<f.length;e++){var g=f[e],h=a["padding-"+g];d[g]=b(h)}return d}function e(a){var b=a.getBBox();return j(0,0,b.width,b.height)}function f(a){var e=a.clientWidth,f=a.clientHeight;if(!e&&!f)return v;var h=u(a).getComputedStyle(a),i=d(h),k=i.left+i.right,l=i.top+i.bottom,m=b(h.width),n=b(h.height);if("border-box"===h.boxSizing&&(Math.round(m+k)!==e&&(m-=c(h,"left","right")+k),Math.round(n+l)!==f&&(n-=c(h,"top","bottom")+l)),!g(a)){var o=Math.round(m+k)-e,p=Math.round(n+l)-f;1!==Math.abs(o)&&(m-=o),1!==Math.abs(p)&&(n-=p)}return j(i.left,i.top,m,n)}function g(a){return a===u(a).document.documentElement}function h(a){return l?w(a)?e(a):f(a):v}function i(a){var b=a.x,c=a.y,d=a.width,e=a.height,f="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,g=Object.create(f.prototype);return t(g,{x:b,y:c,width:d,height:e,top:c,right:b+d,bottom:e+c,left:b}),g}function j(a,b,c,d){return{x:a,y:b,width:c,height:d}}var k=function(){function a(a,b){var c=-1;return a.some(function(a,d){return a[0]===b&&(c=d,!0)}),c}return"undefined"!=typeof Map?Map:function(){function b(){this.__entries__=[]}return Object.defineProperty(b.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),b.prototype.get=function(b){var c=a(this.__entries__,b),d=this.__entries__[c];return d&&d[1]},b.prototype.set=function(b,c){var d=a(this.__entries__,b);~d?this.__entries__[d][1]=c:this.__entries__.push([b,c])},b.prototype.delete=function(b){var c=this.__entries__,d=a(c,b);~d&&c.splice(d,1)},b.prototype.has=function(b){return!!~a(this.__entries__,b)},b.prototype.clear=function(){this.__entries__.splice(0)},b.prototype.forEach=function(a,b){void 0===b&&(b=null);for(var c=0,d=this.__entries__;c<d.length;c++){var e=d[c];a.call(b,e[1],e[0])}},b}()}(),l="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,m=function(){return"undefined"!=typeof global&&global.Math===Math?global:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")()}(),n=function(){return"function"==typeof requestAnimationFrame?requestAnimationFrame.bind(m):function(a){return setTimeout(function(){return a(Date.now())},1e3/60)}}(),o=2,p=20,q=["top","right","bottom","left","width","height","size","weight"],r="undefined"!=typeof MutationObserver,s=function(){function b(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=a(this.refresh.bind(this),p)}return b.prototype.addObserver=function(a){~this.observers_.indexOf(a)||this.observers_.push(a),this.connected_||this.connect_()},b.prototype.removeObserver=function(a){var b=this.observers_,c=b.indexOf(a);~c&&b.splice(c,1),!b.length&&this.connected_&&this.disconnect_()},b.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},b.prototype.updateObservers_=function(){var a=this.observers_.filter(function(a){return a.gatherActive(),a.hasActive()});return a.forEach(function(a){return a.broadcastActive()}),a.length>0},b.prototype.connect_=function(){l&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),r?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},b.prototype.disconnect_=function(){l&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},b.prototype.onTransitionEnd_=function(a){var b=a.propertyName,c=void 0===b?"":b;q.some(function(a){return!!~c.indexOf(a)})&&this.refresh()},b.getInstance=function(){return this.instance_||(this.instance_=new b),this.instance_},b.instance_=null,b}(),t=function(a,b){for(var c=0,d=Object.keys(b);c<d.length;c++){var e=d[c];Object.defineProperty(a,e,{value:b[e],enumerable:!1,writable:!1,configurable:!0})}return a},u=function(a){return a&&a.ownerDocument&&a.ownerDocument.defaultView||m},v=j(0,0,0,0),w=function(){return"undefined"!=typeof SVGGraphicsElement?function(a){return a instanceof u(a).SVGGraphicsElement}:function(a){return a instanceof u(a).SVGElement&&"function"==typeof a.getBBox}}(),x=function(){function a(a){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=j(0,0,0,0),this.target=a}return a.prototype.isActive=function(){var a=h(this.target);return this.contentRect_=a,a.width!==this.broadcastWidth||a.height!==this.broadcastHeight},a.prototype.broadcastRect=function(){var a=this.contentRect_;return this.broadcastWidth=a.width,this.broadcastHeight=a.height,a},a}(),y=function(){function a(a,b){var c=i(b);t(this,{target:a,contentRect:c})}return a}(),z=function(){function a(a,b,c){if(this.activeObservations_=[],this.observations_=new k,"function"!=typeof a)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=a,this.controller_=b,this.callbackCtx_=c}return a.prototype.observe=function(a){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(a instanceof u(a).Element))throw new TypeError('parameter 1 is not of type "Element".');var b=this.observations_;b.has(a)||(b.set(a,new x(a)),this.controller_.addObserver(this),this.controller_.refresh())}},a.prototype.unobserve=function(a){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(a instanceof u(a).Element))throw new TypeError('parameter 1 is not of type "Element".');var b=this.observations_;b.has(a)&&(b.delete(a),b.size||this.controller_.removeObserver(this))}},a.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},a.prototype.gatherActive=function(){var a=this;this.clearActive(),this.observations_.forEach(function(b){b.isActive()&&a.activeObservations_.push(b)})},a.prototype.broadcastActive=function(){if(this.hasActive()){var a=this.callbackCtx_,b=this.activeObservations_.map(function(a){return new y(a.target,a.broadcastRect())});this.callback_.call(a,b,a),this.clearActive()}},a.prototype.clearActive=function(){this.activeObservations_.splice(0)},a.prototype.hasActive=function(){return this.activeObservations_.length>0},a}(),A="undefined"!=typeof WeakMap?new WeakMap:new k,B=function(){function a(b){if(!(this instanceof a))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var c=s.getInstance(),d=new z(b,c,this);A.set(this,d)}return a}();return["observe","unobserve","disconnect"].forEach(function(a){B.prototype[a]=function(){var b;return(b=A.get(this))[a].apply(b,arguments)}}),function(){return void 0!==m.ResizeObserver?m.ResizeObserver:B}()}),function(a,b){b.$=a}(jQuery,window.FooGallery=window.FooGallery||{}),function(a){if(!a)return void console.warn("jQuery must be included in the page prior to the FooGallery.utils library.");var b={$:a,version:"0.1.8"};b.versionCompare=function(a,b){function c(a){for(var b=a.split("."),c=[],d=0,e=b.length;d<e;d++)c[d]=parseInt(b[d]),isNaN(c[d])&&(c[d]=0);return c}if(!/[\d.]/.test(a)||!/[\d.]/.test(b))return NaN;for(var d=c(a),e=c(b);d.length<e.length;)d.push(0);for(;e.length<d.length;)e.push(0);for(var f=0;f<d.length;++f){if(e.length===f)return 1;if(d[f]!==e[f])return d[f]>e[f]?1:-1}return d.length!==e.length?-1:0},!function(){try{return!!window.FooGallery.utils}catch(a){return!1}}()?window.FooGallery.utils=b:b.versionCompare(b.version,window.FooGallery.utils.version)>0?(console.warn("An older version of FooGallery.utils ("+window.FooGallery.utils.version+") already exists in the page, version "+b.version+" will override it."),window.FooGallery.utils=b):console.warn("A newer version of FooGallery.utils ("+window.FooGallery.utils.version+") already exists in the page, version "+b.version+" will not register itself.")}(jQuery),function(a,b){"0.1.8"===b.version&&(b.is={},b.is.array=function(a){return"[object Array]"===Object.prototype.toString.call(a)},b.is.boolean=function(a){return"[object Boolean]"===Object.prototype.toString.call(a)},b.is.element=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:!!a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName},b.is.empty=function(a){if(b.is.undef(a)||null===a)return!0;if(b.is.number(a)&&0===a)return!0;if(b.is.boolean(a)&&!1===a)return!0;if(b.is.string(a)&&0===a.length)return!0;if(b.is.array(a)&&0===a.length)return!0;if(b.is.jq(a)&&0===a.length)return!0;if(b.is.hash(a)){for(var c in a)if(a.hasOwnProperty(c))return!1;return!0}return!1},b.is.error=function(a){return"[object Error]"===Object.prototype.toString.call(a)},b.is.fn=function(a){return a===window.alert||"[object Function]"===Object.prototype.toString.call(a)},b.is.hash=function(a){return b.is.object(a)&&a.constructor===Object&&!a.nodeType&&!a.setInterval},b.is.jq=function(c){return!b.is.undef(a)&&c instanceof a},b.is.number=function(a){return"[object Number]"===Object.prototype.toString.call(a)&&!isNaN(a)},b.is.object=function(a){return"[object Object]"===Object.prototype.toString.call(a)&&!b.is.undef(a)&&null!==a},b.is.promise=function(a){return b.is.object(a)&&b.is.fn(a.then)&&b.is.fn(a.promise)},b.is.size=function(a){return!!(b.is.string(a)&&!b.is.empty(a)||b.is.number(a))&&/^(auto|none|(?:[\d.]*)+?(?:%|px|mm|q|cm|in|pt|pc|em|ex|ch|rem|vh|vw|vmin|vmax)?)$/.test(a)},b.is.string=function(a){return"[object String]"===Object.prototype.toString.call(a)},b.is.undef=function(a){return void 0===a})}(FooGallery.utils.$,FooGallery.utils),function(a,b,c){if("0.1.8"===b.version){b.fn={};var d=Function.prototype.toString;b.fn.CONTAINS_SUPER=/xyz/.test(d.call(function(){xyz}))?/\b_super\b/:/.*/,b.fn.addOrOverride=function(a,e,f){if(c.object(a)&&c.string(e)&&!c.empty(e)&&c.fn(f)){var g=a[e],h=c.fn(g)&&b.fn.CONTAINS_SUPER.test(d.call(f));a[e]=h?function(a,b){return function(){var c=this._super;this._super=a;var d=b.apply(this,arguments);return this._super=c,d}}(g,f):f}},b.fn.apply=function(a,b){function d(){return a.apply(this,b)}return b=c.array(b)?b:[],d.prototype=a.prototype,new d},b.fn.arg2arr=function(a){return Array.prototype.slice.call(a)},b.fn.debounce=function(a,c){var d;return function(){var e=this,f=b.fn.arg2arr(arguments);clearTimeout(d),d=setTimeout(function(){a.apply(e,f)},c)}},b.fn.throttle=function(a,c){var d,e;return function(){var f=this,g=b.fn.arg2arr(arguments);d?(clearTimeout(e),e=setTimeout(function(){Date.now()-d>=c&&(a.apply(f,g),d=Date.now())},c-(Date.now()-d))):(a.apply(f,g),d=Date.now())}},b.fn.check=function(d,e,f,g){function h(a){return function(){return a.apply(d,arguments)}}return f=c.fn(f)?f:a.noop,d=c.object(d)?d:window,e=c.string(e)?b.fn.fetch(e,g):e,h(c.fn(e)?e:f)},b.fn.fetch=function(b,d){return!c.string(b)||c.empty(b)?null:(d=c.object(d)?d:window,a.each(b.split("."),function(a,b){if(!d[b])return!1;d=d[b]}),c.fn(d)?d:null)},b.fn.enqueue=function(d,e,f,g){function h(a,b){try{return n.push(a),b.apply(a,i)}catch(a){return j.reject(a,n),j}}var i=b.fn.arg2arr(arguments),j=a.Deferred(),k=a.Deferred(),l=k.promise(),m=[],n=[],o=!0;return d=i.shift(),e=i.shift(),a.each(d,function(a,d){c.fn(d[e])&&(l=l.then(function(){if(!o){var a=b.fn.arg2arr(arguments);m.push(a)}return o=!1,h(d,d[e])}))}),l.then(function(){if(!o){var a=b.fn.arg2arr(arguments);m.push(a)}o=!1,j.resolve(m)}),l.fail(function(){var a=b.fn.arg2arr(arguments);a.push(n),j.reject.apply(j,a)}),k.resolve(),j.promise()},b.fn.when=function(b){if(!c.array(b)||c.empty(b))return a.when();for(var d=a.Deferred(),e=[],f=b.length,g=0;g<b.length;g++)b[g].then(function(a){e.push(a)}).always(function(){--f||d.resolve(e)});return d.promise()},b.fn.rejectWith=function(c,d){var e=a.Deferred(),f=b.fn.arg2arr(arguments);return e.reject.apply(e,f).promise()},b.fn.resolveWith=function(c,d){var e=a.Deferred(),f=b.fn.arg2arr(arguments);return e.resolve.apply(e,f).promise()},b.fn.resolved=a.Deferred().resolve().promise(),b.fn.rejected=a.Deferred().reject().promise()}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is),function(a,b){if("0.1.8"===a.version){a.url={};var c=document.createElement("a");a.url.parts=function(a){c.href=a;var b=c.port?c.port:-1!==["http:","https:"].indexOf(c.protocol)?"https:"===c.protocol?"443":"80":"",d=c.hostname+(b?":"+b:""),e=c.origin?c.origin:c.protocol+"//"+d,f="/"===c.pathname.slice(0,1)?c.pathname:"/"+c.pathname;return{hash:c.hash,host:d,hostname:c.hostname,href:c.href,origin:e,pathname:f,port:b,protocol:c.protocol,search:c.search}},a.url.full=function(a){return!b.string(a)||b.empty(a)?null:(c.href=a,c.href)},a.url.param=function(a,c,d){if(!b.string(a)||!b.string(c)||b.empty(c))return a;var e,f,g,h;return b.undef(d)?(e=new RegExp("[?|&]"+c+"=([^&;]+?)(&|#|;|$)"),f=e.exec(a)||["",""],g=f[1].replace(/\+/g,"%20"),b.string(g)&&!b.empty(g)?decodeURIComponent(g):null):(b.empty(d)?(e=new RegExp("^([^#]*?)(([^#]*)&)?"+c+"(=[^&#]*)?(&|#|$)"),g=a.replace(e,"$1$3$5").replace(/^([^#]*)((\?)&|\?(#|$))/,"$1$3$4")):(e=new RegExp("([?&])"+c+"[^&]*"),h=c+"="+encodeURIComponent(d),(g=a.replace(e,"$1"+h))!==a||e.test(g)||(g+=(-1!==g.indexOf("?")?"&":"?")+h)),g)}}}(FooGallery.utils,FooGallery.utils.is),function(a,b,c){"0.1.8"===a.version&&(a.str={},a.str.camel=function(a){return b.empty(a)?a:a.toUpperCase()===a?a.toLowerCase():a.replace(/^([A-Z])|[-\s_]+(\w)/g,function(a,c,d){return b.string(d)?d.toUpperCase():c.toLowerCase()})},a.str.kebab=function(a){return b.empty(a)?a:a.match(/[A-Z]{2,}(?=[A-Z][a-z0-9]*|\b)|[A-Z]?[a-z0-9]*|[A-Z]|[0-9]+/g).filter(Boolean).map(function(a){return a.toLowerCase()}).join("-")},a.str.contains=function(a,c,d){return!(!b.string(a)||b.empty(a)||!b.string(c)||b.empty(c))&&(c.length<=a.length&&-1!==(d?a.toUpperCase().indexOf(c.toUpperCase()):a.indexOf(c)))},a.str.containsWord=function(a,c,d){if(!b.string(a)||b.empty(a)||!b.string(c)||b.empty(c)||a.length<c.length)return!1;for(var e=a.split(/\W/),f=0,g=e.length;f<g;f++)if(d?e[f].toUpperCase()===c.toUpperCase():e[f]===c)return!0;return!1},a.str.endsWith=function(a,c){return!b.string(a)||b.empty(a)||!b.string(c)||b.empty(c)?a===c:a.slice(a.length-c.length)===c},a.str.escapeRegExp=function(a){return b.empty(a)?a:a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},a.str.fnv1a=function(a){if(!b.string(a)||b.empty(a))return null;var c,d,e=2166136261;for(c=0,d=a.length;c<d;c++)e^=a.charCodeAt(c),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);return e>>>0},a.str.from=function(c,d){return!b.string(c)||b.empty(c)||!b.string(d)||b.empty(d)?null:a.str.contains(c,d)?c.substring(c.indexOf(d)+d.length):null},a.str.join=function(d,e,f){if(!b.string(d)||!b.string(e))return null;var g=c.arg2arr(arguments);d=g.shift();var h,i,j=g.shift();for(h=0,i=g.length;h<i;h++)e=g[h],b.empty(e)||(a.str.endsWith(j,d)&&(j=j.slice(0,j.length-d.length)),a.str.startsWith(e,d)&&(e=e.slice(d.length)),j+=d+e);return j},a.str.startsWith=function(a,c){return!b.empty(a)&&!b.empty(c)&&a.slice(0,c.length)===c},a.str.until=function(c,d){return b.empty(c)||b.empty(d)?c:a.str.contains(c,d)?c.substring(0,c.indexOf(d)):c},a.str.format=function(a,d,e){var f=c.arg2arr(arguments);if(a=f.shift(),b.empty(a)||b.empty(f))return a;1===f.length&&(b.array(f[0])||b.object(f[0]))&&(f=f[0]);for(var g in f)a=a.replace(new RegExp("\\{"+g+"\\}","gi"),f[g]);return a})}(FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn),function(a,b,c,d,e){if("0.1.8"===b.version){b.obj={};var f=function(){};b.obj.create=function(a){if(!c.object(a))throw TypeError("Argument must be an object");f.prototype=a;var b=new f;return f.prototype=null,b},b.obj.extend=function(e,f,g){e=c.object(e)?e:{};var h=d.arg2arr(arguments);return h.shift(),a.each(h,function(a,c){b.obj.merge(e,c)}),e},b.obj.merge=function(a,d){a=c.hash(a)?a:{},d=c.hash(d)?d:{};for(var e in d)d.hasOwnProperty(e)&&(c.hash(d[e])?(a[e]=c.hash(a[e])?a[e]:{},b.obj.merge(a[e],d[e])):c.array(d[e])?a[e]=d[e].slice():a[e]=d[e]);return a},b.obj.mergeValid=function(d,e,f,g){if(!c.hash(f)||!c.hash(e))return d;e=c.hash(e)?e:{},g=c.hash(g)?g:{};var h,i,j;for(h in e)e.hasOwnProperty(h)&&c.fn(e[h])&&(i=c.array(g[h])?g[h]:c.string(g[h])?[g[h]]:[h],a.each(i,function(a,g){if(j=b.obj.prop(f,g),!c.undef(j))return e[h](j)?(b.obj.prop(d,h,j),!1):void 0}));return d},b.obj.prop=function(b,d,f){if(c.object(b)&&!c.empty(d)){var g,h;if(c.undef(f))return e.contains(d,".")?(g=d.split("."),h=g.length-1,a.each(g,function(a,d){if(a===h)f=b[d];else{if(!c.hash(b[d]))return!1;b=b[d]}})):c.undef(b[d])||(f=b[d]),f;e.contains(d,".")?(g=d.split("."),h=g.length-1,a.each(g,function(a,d){a===h?b[d]=f:b=c.hash(b[d])?b[d]:b[d]={}})):c.undef(b[d])||(b[d]=f)}}}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.str),function(a,b,c){if("0.1.8"===b.version){b.ready=function(a){function c(){try{a.call(window,b.$)}catch(a){console.error(a)}}(Function("/*@cc_on return true@*/")()?"complete"===document.readyState:"loading"!==document.readyState)?c():document.addEventListener("DOMContentLoaded",c,!1)};var d=0;b.uniqueId=function(a,b){var e=a.attr("id");return c.empty(e)&&(b=c.string(b)&&!c.empty(b)?b:"uid-",e=b+ ++d,a.attr("id",e).data("__uniqueId__",!0)),e},b.removeUniqueId=function(a){a.data("__uniqueId__")&&a.removeAttr("id").removeData("__uniqueId__")},b.selectify=function(a){if(c.empty(a))return null;if(c.hash(a)){var d,e={};for(var f in a)a.hasOwnProperty(f)&&(d=b.selectify(a[f]))&&(e[f]=d);return e}return c.string(a)||c.array(a)?(c.string(a)&&(a=[a]),a.map(function(a){return c.string(a)?"."+a.split(/\s/g).join("."):null}).join(",")):null},b.src=function(a,b,d,e,f,g,h){if(!c.string(a))return null;if(!c.string(b))return a;var i=b.replace(/(\s[\d.]+[whx]),/g,"$1 @,@ ").split(" @,@ "),j=i.map(function(a){return{url:/^\s*(\S*)/.exec(a)[1],w:parseFloat((/\S\s+(\d+)w/.exec(a)||[0,1/0])[1]),h:parseFloat((/\S\s+(\d+)h/.exec(a)||[0,1/0])[1]),x:parseFloat((/\S\s+([\d.]+)x/.exec(a)||[0,1])[1])}});if(!j.length)return a;j.unshift({url:a,w:j[0].w!==1/0&&j[0].h===1/0?d:1/0,h:j[0].h!==1/0&&j[0].w===1/0?e:1/0,x:1});var k=c.number(h)?h:window.devicePixelRatio||1,l={w:f*k,h:g*k,x:k},m=["w","h","x"];return m.forEach(function(a){var b=Math.max.apply(null,j.map(function(b){return b[a]}));j=j.filter(function(c){return c[a]>=l[a]||c[a]===b})}),m.forEach(function(a){var b=Math.min.apply(null,j.map(function(b){return b[a]}));j=j.filter(function(c){return c[a]===b})}),j[0].url},b.scrollParent=function(b,d,e){b=c.jq(b)?b:a(b),d=c.string(d)&&/^(x|y|xy|yx)$/i.test(d)?d:"xy";var f=a(!!b.length&&b[0].ownerDocument||document);if(e=c.jq(e)?e:f,!b.length)return e;var g=b.css("position"),h="absolute"===g,i=/(auto|scroll)/i,j=/x/i,k=/y/i,l=b.parentsUntil(e).filter(function(b,c){var e=a(this);if(h&&"static"===e.css("position"))return!1;var f=k.test(d)&&c.scrollHeight>c.clientHeight&&i.test(e.css("overflow-y")),g=j.test(d)&&c.scrollWidth>c.clientWidth&&i.test(e.css("overflow-x"));return f||g}).eq(0);return l.is("html")&&(l=f),"fixed"!==g&&l.length?l:e}}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is),function(a,b,c){function d(a){return setTimeout(a,1)}function e(a){clearTimeout(a)}if("0.1.8"===b.version){b.animation={},b.animation.requestFrame=(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||d).bind(window),b.animation.cancelFrame=(window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame||e).bind(window);var f=document.createElement("div");b.animation.supported=function(a){var b=a.style;return c.string(b.animation)||c.string(b.WebkitAnimation)||c.string(b.MozAnimation)||c.string(b.msAnimation)||c.string(b.OAnimation)}(f),b.animation.end=function(a){var b=a.style;return c.string(b.animation)?"animationend":c.string(b.WebkitAnimation)?"webkitAnimationEnd":c.string(b.MozAnimation)?"animationend":c.string(b.msAnimation)?"msAnimationEnd":c.string(b.OAnimation)?"oAnimationEnd":null}(f),b.animation.duration=function(a,b){if(b=c.number(b)?b:0,!c.jq(a))return b;var d=a.css("animation-duration");if(/^([\d.]*)+?(ms|s)$/i.test(d)){var e=d.match(/^([\d.]*)+?(ms|s)$/i),f=parseFloat(e[1]);return"s"===e[2].toLowerCase()&&(f*=1e3),f}return b},b.animation.iterations=function(a,b){if(b=c.number(b)?b:1,!c.jq(a))return b;var d=a.css("animation-iteration-count");return/^(\d+|infinite)$/i.test(d)?"infinite"===d?1/0:parseInt(d):b},b.animation.start=function(d,e,f,g){var h=a.Deferred(),i=h.promise();if(d=d.first(),b.animation.supported){d.prop("offsetTop");var j=d.data("animation_safety");if(c.hash(j)&&c.number(j.timer)&&(clearTimeout(j.timer),d.removeData("animation_safety").off(b.animation.end+".utils"),j.deferred.reject()),!c.number(g)){var k=b.animation.iterations(d);if(k===1/0)return h.reject("No timeout supplied with an infinite animation."),i;g=b.animation.duration(d)*k+50}j={deferred:h,timer:setTimeout(function(){d.removeData("animation_safety").off(b.animation.end+".utils"),h.resolve()},g)},d.data("animation_safety",j),d.on(b.animation.end+".utils",function(a){d.is(a.target)&&(clearTimeout(j.timer),d.removeData("animation_safety").off(b.animation.end+".utils"),h.resolve())})}return b.animation.requestFrame(function(){c.fn(e)?e.apply(d.get(0),[d]):d.toggleClass(e,f),b.animation.supported||h.resolve()}),i}}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d){if("0.1.8"===b.version){b.transition={};var e=document.createElement("div");b.transition.supported=function(a){var b=a.style;return c.string(b.transition)||c.string(b.WebkitTransition)||c.string(b.MozTransition)||c.string(b.msTransition)||c.string(b.OTransition)}(e),b.transition.end=function(a){var b=a.style;return c.string(b.transition)?"transitionend":c.string(b.WebkitTransition)?"webkitTransitionEnd":c.string(b.MozTransition)?"transitionend":c.string(b.msTransition)?"msTransitionEnd":c.string(b.OTransition)?"oTransitionEnd":null}(e),b.transition.duration=function(a,b){if(b=c.number(b)?b:0,!c.jq(a))return b;var d=a.css("transition-duration");if(/^([\d.]*)+?(ms|s)$/i.test(d)){var e=d.match(/^([\d.]*)+?(ms|s)$/i),f=parseFloat(e[1]);return"s"===e[2].toLowerCase()&&(f*=1e3),f}return b},b.transition.start=function(e,f,g,h){var i=a.Deferred(),j=i.promise();if(e=e.first(),b.transition.supported){e.prop("offsetTop");var k=e.data("transition_safety");c.hash(k)&&c.number(k.timer)&&(clearTimeout(k.timer),e.removeData("transition_safety").off(b.transition.end+".utils"),k.deferred.reject()),h=c.number(h)?h:b.transition.duration(e)+50,k={deferred:i,timer:setTimeout(function(){e.removeData("transition_safety").off(b.transition.end+".utils"),i.resolve()},h)},e.data("transition_safety",k),e.on(b.transition.end+".utils",function(a){e.is(a.target)&&(clearTimeout(k.timer),e.removeData("transition_safety").off(b.transition.end+".utils"),i.resolve())})}return d.requestFrame(function(){c.fn(f)?f.apply(e.get(0),[e]):e.toggleClass(f,g),b.transition.supported||i.resolve()}),j}}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.animation),function(a,b,c,d,e){"0.1.8"===b.version&&(b.Class=function(){},b.Class.extend=function(a){function f(){if(!c.fn(this.construct))throw new SyntaxError('FooGallery.utils.Class objects must be constructed with the "new" keyword.');this.construct.apply(this,arguments)}a=c.hash(a)?a:{};var g=d.create(this.prototype);for(var h in a)a.hasOwnProperty(h)&&e.addOrOverride(g,h,a[h]);return g.construct=c.fn(g.construct)?g.construct:function(){},f.prototype=g,f.prototype.constructor=c.fn(g.__ctor__)?g.__ctor__:f,f.extend=b.Class.extend,f.override=b.Class.override,f},b.Class.override=function(a,b){e.addOrOverride(this.prototype,a,b)})}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.obj,FooGallery.utils.fn),function(a,b,c){"0.1.8"===a.version&&(a.Event=a.Class.extend({construct:function(a){
10
- if(b.empty(a))throw new SyntaxError("FooGallery.utils.Event objects must be supplied a `type`.");var d=c.contains(a,".");this.type=d?c.until(a,"."):a,this.namespace=d?c.from(a,"."):null,this.defaultPrevented=!1,this.target=null},preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return this.defaultPrevented}}),a.EventClass=a.Class.extend({construct:function(){this.__handlers={}},destroy:function(){this.__handlers={}},on:function(a,c,d){var e=this;return b.object(a)?(d=b.undef(c)?this:c,Object.keys(a).forEach(function(b){b.split(" ").forEach(function(c){e.__on(c,a[b],d)})})):b.string(a)&&b.fn(c)&&(d=b.undef(d)?this:d,a.split(" ").forEach(function(a){e.__on(a,c,d)})),e},__on:function(a,d,e){var f=this,g=c.contains(a,"."),h=g?c.until(a,"."):a,i=g?c.from(a,"."):null;b.array(f.__handlers[h])||(f.__handlers[h]=[]),f.__handlers[h].some(function(a){return a.namespace===i&&a.fn===d&&a.thisArg===e})||f.__handlers[h].push({namespace:i,fn:d,thisArg:e})},off:function(a,c,d){var e=this;return b.object(a)?(d=b.undef(c)?this:c,Object.keys(a).forEach(function(c){c.split(" ").forEach(function(f){e.__off(f,b.fn(a[c])?a[c]:null,d)})})):b.string(a)&&(c=b.fn(c)?c:null,d=b.undef(d)?this:d,a.split(" ").forEach(function(a){e.__off(a,c,d)})),e},__off:function(a,d,e){var f=this,g=c.until(a,".")||null,h=c.from(a,".")||null,i=[];b.empty(g)?b.empty(h)||i.push.apply(i,Object.keys(f.__handlers)):i.push(g),i.forEach(function(a){b.array(f.__handlers[a])&&(f.__handlers[a]=f.__handlers[a].filter(function(a){return null!=d?!(a.namespace===h&&a.fn===d&&a.thisArg===e):null!=h&&a.namespace!==h}),0===f.__handlers[a].length&&delete f.__handlers[a])})},trigger:function(c,d){d=b.array(d)?d:[];var e=this,f=[];return c instanceof a.Event?(f.push(c),e.__trigger(c,d)):b.string(c)&&c.split(" ").forEach(function(b){var c=f.push(new a.Event(b))-1;e.__trigger(f[c],d)}),b.empty(f)?null:1===f.length?f[0]:f},__trigger:function(a,c){var d=this;a.target=d,b.array(d.__handlers[a.type])&&d.__handlers[a.type].forEach(function(b){null!=a.namespace&&b.namespace!==a.namespace||b.fn.apply(b.thisArg,[a].concat(c))})}}))}(FooGallery.utils,FooGallery.utils.is,FooGallery.utils.str),function(a,b,c){if("0.1.8"===b.version){b.Bounds=b.Class.extend({construct:function(){var a=this;a.top=0,a.right=0,a.bottom=0,a.left=0,a.width=0,a.height=0},inflate:function(a){var b=this;return c.number(a)&&(b.top-=a,b.right+=a,b.bottom+=a,b.left-=a,b.width+=2*a,b.height+=2*a),b},intersects:function(a){var b=this;return b.left<=a.right&&a.left<=b.right&&b.top<=a.bottom&&a.top<=b.bottom}});var d;b.getViewportBounds=function(c){d||(d=a(window));var e=new b.Bounds;return e.top=d.scrollTop(),e.left=d.scrollLeft(),e.width=d.width(),e.height=d.height(),e.right=e.left+e.width,e.bottom=e.top+e.height,e.inflate(c),e},b.getElementBounds=function(d){c.jq(d)||(d=a(d));var e=new b.Bounds;if(0!==d.length){var f=d.offset();e.top=f.top,e.left=f.left,e.width=d.width(),e.height=d.height()}return e.right=e.left+e.width,e.bottom=e.top+e.height,e}}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d,e){"0.1.8"===b.version&&(b.Timer=b.EventClass.extend({construct:function(a){this._super(),this.interval=c.number(a)?a:1e3,this.isRunning=!1,this.isPaused=!1,this.canResume=!1,this.canRestart=!1,this.__timeout=null,this.__decrement=!1,this.__time=0,this.__remaining=0,this.__current=0,this.__finish=0,this.__restart=[]},__reset:function(){clearTimeout(this.__timeout),this.__timeout=null,this.__decrement=!1,this.__time=0,this.__remaining=0,this.__current=0,this.__finish=0,this.isRunning=!1,this.isPaused=!1,this.canResume=!1},__eventArgs:function(a){return[this.__current,this.__time,this.__decrement].concat(d.arg2arr(arguments))},__tick:function(){var a=this;a.trigger("tick",a.__eventArgs()),a.__current===a.__finish?(a.trigger("complete",a.__eventArgs()),a.__reset()):(a.__decrement?a.__current--:a.__current++,a.__remaining--,a.canResume=a.__remaining>0,a.__timeout=setTimeout(function(){a.__tick()},a.interval))},start:function(a,b){var d=this;d.isRunning||(b=!!c.boolean(b)&&b,d.__restart=[a,b],d.__decrement=b,d.__time=a,d.__remaining=a,d.__current=b?a:0,d.__finish=b?0:a,d.canRestart=!0,d.isRunning=!0,d.isPaused=!1,d.trigger("start",d.__eventArgs()),d.__tick())},countdown:function(a){this.start(a,!0)},countup:function(a){this.start(a,!1)},restart:function(){this.stop(),this.canRestart&&this.start.apply(this,this.__restart)},stop:function(){(this.isRunning||this.isPaused)&&(this.__reset(),this.trigger("stop",this.__eventArgs()))},pause:function(){var a=this;return null!=a.__timeout&&(clearTimeout(a.__timeout),a.__timeout=null),a.isRunning&&(a.isRunning=!1,a.isPaused=!0,a.trigger("pause",a.__eventArgs())),a.__remaining},resume:function(){var a=this;a.canResume&&(a.isRunning=!0,a.isPaused=!1,a.trigger("resume",a.__eventArgs()),a.__tick())},reset:function(){this.__reset(),this.trigger("reset",this.__eventArgs())}}))}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.obj),function(a,b,c,d){"0.1.8"===b.version&&(b.Factory=b.Class.extend({construct:function(){this.registered={}},contains:function(a){return!c.undef(this.registered[a])},load:function(b,e,f){var g,h,i=this,j=d.arg2arr(arguments),k=[],l=[];b=j.shift()||{};for(g in i.registered)if(i.registered.hasOwnProperty(g)){var m=i.registered[g];b.hasOwnProperty(g)&&(h=b[g],c.string(h)&&(h=d.fetch(b[g])),c.fn(h)&&(m={name:g,klass:h,priority:i.registered[g].priority})),k.push(m)}for(g in b)b.hasOwnProperty(g)&&!i.registered.hasOwnProperty(g)&&(h=b[g],c.string(h)&&(h=d.fetch(b[g])),c.fn(h)&&k.push({name:g,klass:h,priority:0}));return k.sort(function(a,b){return b.priority-a.priority}),a.each(k,function(a,b){c.fn(b.klass)&&l.push(d.apply(b.klass,j))}),l},make:function(a,b,e){var f,g=this,h=d.arg2arr(arguments);return a=h.shift(),f=g.registered[a],c.hash(f)&&c.fn(f.klass)?d.apply(f.klass,h):null},names:function(b){b=!!c.boolean(b)&&b;var d,e=[];if(b){var f=[];for(d in this.registered)this.registered.hasOwnProperty(d)&&f.push(this.registered[d]);f.sort(function(a,b){return b.priority-a.priority}),a.each(f,function(a,b){e.push(b.name)})}else for(d in this.registered)this.registered.hasOwnProperty(d)&&e.push(d);return e},register:function(a,b,d){if(!c.string(a)||c.empty(a)||!c.fn(b))return!1;d=c.number(d)?d:0;var e=this.registered[a];return this.registered[a]={name:a,klass:b,priority:c.undef(e)?d:e.priority},!0}}))}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn),function(a,b,c){if("0.1.8"===a.version){var d=!1;try{d=!!window.localStorage}catch(a){d=!1}a.Debugger=a.Class.extend({construct:function(a){this.key=a,this.enabled=!!d&&!!localStorage.getItem(this.key)},enable:function(){d&&(this.enabled=!0,localStorage.setItem(this.key,this.enabled))},disable:function(){d&&(this.enabled=!1,localStorage.removeItem(this.key))},log:function(a,c){this.enabled&&console.log.apply(console,b.arg2arr(arguments))},logf:function(a,d,e){if(this.enabled){var f=b.arg2arr(arguments);a=f.shift(),d=f.shift(),f.unshift(c.format(a,d)),this.log.apply(this,f)}}})}}(FooGallery.utils,FooGallery.utils.fn,FooGallery.utils.str),function(a,b,c){"0.1.8"===b.version&&(b.FullscreenAPI=b.EventClass.extend({construct:function(){this._super(),this.apis={w3:{enabled:"fullscreenEnabled",element:"fullscreenElement",request:"requestFullscreen",exit:"exitFullscreen",events:{change:"fullscreenchange",error:"fullscreenerror"}},webkit:{enabled:"webkitFullscreenEnabled",element:"webkitCurrentFullScreenElement",request:"webkitRequestFullscreen",exit:"webkitExitFullscreen",events:{change:"webkitfullscreenchange",error:"webkitfullscreenerror"}},moz:{enabled:"mozFullScreenEnabled",element:"mozFullScreenElement",request:"mozRequestFullScreen",exit:"mozCancelFullScreen",events:{change:"mozfullscreenchange",error:"mozfullscreenerror"}},ms:{enabled:"msFullscreenEnabled",element:"msFullscreenElement",request:"msRequestFullscreen",exit:"msExitFullscreen",events:{change:"MSFullscreenChange",error:"MSFullscreenError"}}},this.api=this.getAPI(),this.supported=null!=this.api,this.__listen()},destroy:function(){return this.__stopListening(),this._super()},getAPI:function(){for(var a in this.apis)if(this.apis.hasOwnProperty(a)&&this.apis[a].enabled in document)return this.apis[a];return null},element:function(){return this.supported?document[this.api.element]:null},request:function(b){if(this.supported&&b[this.api.request]){var d=b[this.api.request]();return d||a.Deferred(this.__resolver(this.api.request)).promise()}return c.rejected},exit:function(){if(this.supported&&this.element()){var b=document[this.api.exit]();return b||a.Deferred(this.__resolver(this.api.exit)).promise()}return c.rejected},toggle:function(a){return this.element()?this.exit():this.request(a)},__listen:function(){var b=this;b.supported&&a(document).on(b.api.events.change+".utils",function(){b.trigger("change")}).on(b.api.events.error+".utils",function(){b.trigger("error")})},__stopListening:function(){var b=this;b.supported&&a(document).off(b.api.events.change+".utils").off(b.api.events.error+".utils")},__resolver:function(b){var c=this;return function(d){function e(){d.resolve(),a(document).off(c.api.events.change,e).off(c.api.events.error,f)}function f(){d.reject(new TypeError),a(document).off(c.api.events.change,e).off(c.api.events.error,f)}if(b===c.api.exit&&c.element())return void setTimeout(function(){d.reject(new TypeError)},1);a(document).on(c.api.events.change,e).on(c.api.events.error,f)}}}),b.fullscreen=new b.FullscreenAPI)}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.fn),function(a,b,c,d,e){b.debug=new c.Debugger("__FooGallery__"),b.EMPTY_IMAGE="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",b.DATA_TEMPLATE="__FooGallery__",b.DATA_ITEM="__FooGalleryItem__",b.get=function(c){return a(c).data(b.DATA_TEMPLATE)},b.init=function(c,f){if(f=d.jq(f)?f:a(f),f.length>0){var g=f.data(b.DATA_TEMPLATE);if(g instanceof b.Template)return g.destroy(!0).then(function(){var a=b.template.make(c,f);return a instanceof b.Template?a.initialize():e.rejected})}var h=b.template.make(c,f);return h instanceof b.Template?h.initialize():e.rejected},b.initAll=function(c){return e.when(a(".foogallery").map(function(a,d){return b.init(c,d)}).get())},a.fn.foogallery=function(c,e){return e=d.fn(e)?e:a.noop,this.each(function(f,g){if(d.string(c)){var h=a.data(g,b.DATA_TEMPLATE);if(h instanceof b.Template)switch(c){case"layout":return void h.layout();case"destroy":return void h.destroy()}}else b.init(c,g).then(e)})},b.isCached=function(a){var b=new Image;b.src=a;var c=b.complete;return b.src="",b=null,c},b.supportedExifProperties=["aperture","camera","date","exposure","focalLength","iso","orientation"],d.exif=function(a){if(d.object(a)){var c=Object.keys(a);return c.length>0&&c.some(function(c){return-1!==b.supportedExifProperties.indexOf(c)&&!d.empty(a[c])})}return!1}}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.str),function(a,b,c,d,e){var f="__FooGallerySwipe__",g="ontouchstart"in window,h=window.navigator.msPointerEnabled&&!window.navigator.pointerEnabled&&!g,i=(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&!g,j=g||i;b.Swipe=c.Class.extend({construct:function(b,c){var d=this,f=".fgswipe";d.$el=a(b),d.opt=e.extend({threshold:20,allowPageScroll:!1,swipe:a.noop,data:{}},c),d.active=!1,d.startPoint=null,d.endPoint=null,d.events={start:(j?i?h?"MSPointerDown":"pointerdown":"touchstart":"mousedown")+f,move:(j?i?h?"MSPointerMove":"pointermove":"touchmove":"mousemove")+f,end:(j?i?h?"MSPointerUp":"pointerup":"touchend":"mouseup")+f,leave:(j?i?"mouseleave":null:"mouseleave")+f}},init:function(){var a=this;a.$el.on(a.events.start,{self:a},a.onStart),a.$el.on(a.events.move,{self:a},a.onMove),a.$el.on(a.events.end,{self:a},a.onEnd),d.string(a.events.leave)&&a.$el.on(a.events.leave,{self:a},a.onEnd),a.$el.data(f,a)},destroy:function(){var a=this;a.$el.off(a.events.start,a.onStart),a.$el.off(a.events.move,a.onMove),a.$el.off(a.events.end,a.onEnd),d.string(a.events.leave)&&a.$el.off(a.events.leave,a.onEnd),a.$el.removeData(f)},getAngle:function(a,b){var c=Math.atan2(a.x-b.x,a.y-b.y),d=Math.round(180*c/Math.PI);return 360-(d<0?360-Math.abs(d):d)},getDistance:function(a,b){var c=b.x-a.x,d=b.y-a.y;return c*=c,d*=d,Math.sqrt(c+d)},getDirection:function(a,b){var c=this,d=c.getAngle(a,b);return d>337.5||d<=22.5?"N":d>22.5&&d<=67.5?"NE":d>67.5&&d<=112.5?"E":d>112.5&&d<=157.5?"SE":d>157.5&&d<=202.5?"S":d>202.5&&d<=247.5?"SW":d>247.5&&d<=292.5?"W":d>292.5&&d<=337.5?"NW":"NONE"},getPoint:function(a){var b;return j&&!d.empty(b=a.originalEvent.touches||a.touches)?{x:b[0].pageX,y:b[0].pageY}:d.number(a.pageX)&&d.number(a.pageY)?{x:a.pageX,y:a.pageY}:null},getOffset:function(a){var b=this,c=b.$el.offset();return{left:a.x-c.left,top:a.y-c.top}},onStart:function(a){var b=a.data.self,c=b.getPoint(a);d.empty(c)||(b.active=!0,b.startPoint=b.endPoint=c)},onMove:function(b){var c=b.data.self,e=c.getPoint(b);if(c.active&&!d.empty(e))if(c.endPoint=e,c.opt.allowPageScroll){if(d.hash(c.opt.allowPageScroll)){var f=c.getDirection(c.startPoint,c.endPoint);c.opt.allowPageScroll.x||-1===a.inArray(f,["NE","E","SE","NW","W","SW"])||b.preventDefault(),c.opt.allowPageScroll.y||-1===a.inArray(f,["NW","N","NE","SW","S","SE"])||b.preventDefault()}}else b.preventDefault()},onEnd:function(a){var b=a.data.self;if(b.active){b.active=!1;var c={startPoint:b.startPoint,endPoint:b.endPoint,startOffset:b.getOffset(b.startPoint),endOffset:b.getOffset(b.endPoint),angle:b.getAngle(b.startPoint,b.endPoint),distance:b.getDistance(b.startPoint,b.endPoint),direction:b.getDirection(b.startPoint,b.endPoint)};if(b.opt.threshold>0&&c.distance<b.opt.threshold)return;b.opt.swipe.apply(this,[c,b.opt.data]),b.startPoint=null,b.endPoint=null}}}),a.fn.fgswipe=function(c){return this.each(function(){var e=a(this),g=e.data(f);if(g instanceof b.Swipe){if(d.string(c)&&d.fn(g[c]))return void g[c]();g.destroy()}d.hash(c)&&(g=new b.Swipe(this,c),g.init())})}}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.obj),function(a,b,c,d,e,f){b.TemplateFactory=c.Factory.extend({construct:function(){this.registered={}},register:function(a,b,c,e,f,g){var h=this,i=h._super(a,b,g);if(i){var j=h.registered;j[a].opt=d.hash(c)?c:{},j[a].cls=d.hash(e)?e:{},j[a].il8n=d.hash(f)?f:{}}return i},make:function(b,c){c=d.jq(c)?c:a(c),b=f.extend({},b,c.data("foogallery"));var e=this,g=e.type(b,c);return e.contains(g)?(b=e.options(g,b),e._super(g,b,c)):null},type:function(b,e){e=d.jq(e)?e:a(e);var f=this,g=d.hash(b)&&d.hash(b)&&d.string(b.type)&&f.contains(b.type)?b.type:null;if(null===g&&e.length>0)for(var h=f.registered,i=f.names(!0),j=0,k=i.length;j<k;j++)if(h.hasOwnProperty(i[j])&&"core"!==i[j]){var l=i[j],m=h[l].cls;if(d.string(m.container)){var n=c.selectify(m.container);if(e.is(n)){g=i[j];break}}}return g},configure:function(a,b,c,d){var e=this;if(e.contains(a)){var g=e.registered;f.extend(g[a].opt,b),f.extend(g[a].cls,c),f.extend(g[a].il8n,d)}},options:function(a,c){c=f.extend({type:a},c);var e=this,g=e.registered,h=g.core.opt,i=g.core.cls,j=g.core.il8n;return d.hash(c.cls)||(c.cls={}),d.hash(c.il8n)||(c.il8n={}),d.undef(b.filtering)||(c=b.filtering.merge(c)),d.undef(b.paging)||(c=b.paging.merge(c)),"core"!==a&&e.contains(a)?(c=f.extend({},h,g[a].opt,c),c.cls=f.extend({},i,g[a].cls,c.cls),c.il8n=f.extend({},j,g[a].il8n,c.il8n)):(c=f.extend({},h,c),c.cls=f.extend({},i,c.cls),c.il8n=f.extend({},j,c.il8n)),c}}),b.template=new b.TemplateFactory}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.obj),function(a,b,c,d,e){a.PagingFactory=b.Factory.extend({construct:function(){this.registered={}},register:function(a,b,d,e,f,g,h){var i=this,j=i._super(a,b,h);if(j){var k=i.registered;k[a].ctrl=c.fn(d)?d:null,k[a].opt=c.hash(e)?e:{},k[a].cls=c.hash(f)?f:{},k[a].il8n=c.hash(g)?g:{}}return j},type:function(a){var b,d=this;return c.hash(a)&&c.hash(b=a.paging)&&c.string(b.type)&&d.contains(b.type)?b.type:null},merge:function(a){a=e.extend({},a);var b=this,d=b.type(a),f=b.registered,g=f.default.opt,h=f.default.cls,i=f.default.il8n,j=c.hash(a.paging)?a.paging:{},k=c.hash(a.cls)&&c.hash(a.cls.paging)?e.extend({},a.cls.paging):{},l=c.hash(a.il8n)&&c.hash(a.il8n.paging)?e.extend({},a.il8n.paging):{};return c.hash(a.cls)||(a.cls={}),c.hash(a.il8n)||(a.il8n={}),"default"!==d&&b.contains(d)?(a.paging=e.extend({},g,f[d].opt,j,{type:d}),a.cls=e.extend(a.cls,{paging:h},{paging:f[d].cls},{paging:k}),a.il8n=e.extend(a.il8n,{paging:i},{paging:f[d].il8n},{paging:l})):(a.paging=e.extend({},g,j,{type:d}),a.cls=e.extend(a.cls,{paging:h},{paging:k}),a.il8n=e.extend(a.il8n,{paging:i},{paging:l})),a},configure:function(a,b,c,d){var f=this;if(f.contains(a)){var g=f.registered;e.extend(g[a].opt,b),e.extend(g[a].cls,c),e.extend(g[a].il8n,d)}},hasCtrl:function(a){var b=this,d=b.registered[a];return c.hash(d)&&c.fn(d.ctrl)},makeCtrl:function(a,b,d,e){var f=this,g=f.registered[a];return c.hash(g)&&c.fn(g.ctrl)?new g.ctrl(b,d,e):null}}),a.paging=new a.PagingFactory}(FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.obj),function(a,b,c,d,e,f){var g=0;b.Template=c.EventClass.extend({construct:function(e,f){var h=this;h._super(),h.namespace=".foogallery-"+ ++g,h.$el=d.jq(f)?f:a(f),h.$scrollParent=null,h.opt=e,h.template=e.template,h.id=h.$el.prop("id")||e.id,h.cls=e.cls,h.il8n=e.il8n,h.sel=c.selectify(h.cls),h.items=b.components.make("items",h),h.pages=d.undef(b.paging)?null:b.paging.make(e.paging.type,h),h.filter=d.undef(b.filtering)?null:b.filtering.make(e.filtering.type,h),h.state=b.components.make("state",h),h._initialize=null,h._checkTimeout=null,h._layoutTimeout=null,h._layoutWidths=[],h.initializing=!1,h.initialized=!1,h.destroying=!1,h.destroyed=!1,h._undo={classes:"",style:"",create:!1,children:!1},h.robserver=new ResizeObserver(function(){h.$el.is(":visible")&&h.layout()})},initialize:function(b){var c=this;return d.promise(c._initialize)?c._initialize:c._initialize=a.Deferred(function(a){c.preInit(b)?c.init().then(function(){c.postInit()?c.firstLoad().then(function(){c.ready(),a.resolve(c)}).fail(a.reject):a.reject("post-init failed")}).fail(a.reject):a.reject("pre-init failed")}).fail(function(a){console.log("initialize failed",c,a),c.destroy()}).promise()},preInit:function(e){var f=this;if(f.destroying)return!1;if(e=d.jq(e)?e:a(e),f.initializing=!0,0===e.length&&0===f.$el.parent().length)return!1;0===f.$el.length&&(f.$el=f.create(),f._undo.create=!0),e.length>0&&f.$el.appendTo(e);var g;d.empty(f.opt.scrollParent)||0===(g=a(f.opt.scrollParent)).length?f.$scrollParent=a(document):f.$scrollParent=g.is("html")?a(document):g,f.$el.data(b.DATA_TEMPLATE,f),d.empty(f.opt.on)||f.$el.on(f.opt.on),f._undo.classes=f.$el.attr("class"),f._undo.style=f.$el.attr("style"),f.$el.is(f.sel.container)||f.$el.addClass(f.cls.container);var h=c.selectify(f.opt.classes);return null==h||f.$el.is(h)||f.$el.addClass(f.opt.classes),f.robserver.observe(f.$el.get(0)),0===f.$el.children().not(f.sel.item.elem).length&&(f.$el.append(f.createChildren()),f._undo.children=!0),!f.raise("pre-init").isDefaultPrevented()},init:function(){var a=this;return a.raise("init").isDefaultPrevented()?e.rejectWith("init default prevented"):a.items.fetch()},postInit:function(){var b=this;return!b.destroying&&(!b.raise("post-init").isDefaultPrevented()&&(b.state.init(),b.$scrollParent.on("scroll"+b.namespace,{self:b},e.throttle(function(){b.loadAvailable()},50)),a(window).on("popstate"+b.namespace,{self:b},b.onWindowPopState),!0))},firstLoad:function(){var a=this;return a.destroying?e.rejected:(a.raise("first-load"),a.loadAvailable())},ready:function(){var a=this;return!a.destroying&&(a.initializing=!1,a.initialized=!0,a._check(1e3),a.raise("ready"),!0)},create:function(){var b=this;return a("<div/>",{id:b.id,class:b.cls.container}).addClass(b.opt.classes)},createChildren:function(){return a()},destroy:function(b){var c=this,f=c._super.bind(c);return c.destroyed?e.resolved:(c.destroying=!0,a.Deferred(function(a){c.initializing&&d.promise(c._initialize)?c._initialize.always(function(){c.destroying=!1,c.doDestroy(b),a.resolve()}):(c.destroying=!1,c.doDestroy(b),a.resolve())}).then(function(){f()}).promise())},doDestroy:function(c){var e=this;e.destroyed||(e.raise("destroy"),e.robserver.disconnect(),e._checkTimeout&&clearTimeout(e._checkTimeout),e.$scrollParent.off(e.namespace),a(window).off(e.namespace),e.state.destroy(c),e.filter&&e.filter.destroy(),e.pages&&e.pages.destroy(),e.items.destroy(),d.empty(e.opt.on)||e.$el.off(e.opt.on),e.raise("destroyed"),e.$el.removeData(b.DATA_TEMPLATE),d.empty(e._undo.classes)?e.$el.removeAttr("class"):e.$el.attr("class",e._undo.classes),d.empty(e._undo.style)?e.$el.removeAttr("style"):e.$el.attr("style",e._undo.style),e._undo.children&&e.destroyChildren(),e._undo.create&&e.$el.remove(),e.$el=e.state=e.items=e.pages=null,e.destroyed=!0,e.initializing=!1,e.initialized=!1)},destroyChildren:function(){},getAvailable:function(){return this.pages?this.pages.available():this.items.available()},loadAvailable:function(){return this.items.load(this.getAvailable())},getItems:function(){return this.pages?this.pages.items():this.items.available()},_check:function(a){a=d.number(a)?a:0;var b=this;return b._checkTimeout&&clearTimeout(b._checkTimeout),b._checkTimeout=setTimeout(function(){b._checkTimeout=null,!b.initialized||b.destroying&&b.destroyed||b.loadAvailable()},a)},raise:function(c,e){if(this.destroying||this.destroyed||!d.string(c)||d.empty(c))return null;e=d.array(e)?e:[];var g=this,h=c.split(".")[0],i=f.camel("on-"+h),j=a.Event(h+".foogallery");return e.unshift(g),g.trigger(h,e).defaultPrevented&&j.preventDefault(),g.$el.trigger(j,e),b.debug.logf("{id}|{name}:",{id:g.id,name:h},e),d.fn(g[i])&&(e.unshift(j),g[i].apply(g.$el.get(0),e)),j},layout:function(){var a=this,b=a.getContainerWidth();null===a._initialize||a._checkWidth(b)||a.raise("layout",[b])},_checkWidth:function(a){var b,c=this;return(b=-1!==c._layoutWidths.indexOf(a))||(c._layoutWidths.unshift(a),c._layoutWidths.splice(2,c._layoutWidths.length-2),null!=c._layoutTimeout&&clearTimeout(c._layoutTimeout),c._layoutTimeout=setTimeout(function(){c._layoutWidths.splice(0,c._layoutWidths.length)},100)),b},getContainerWidth:function(){var a=this;return a.$el.is(":visible")?a.$el.width():a.$el.parents(":visible:first").innerWidth()},getCSSClass:function(a,b){b=d.empty(b)?"":b;var c=a instanceof RegExp?a:d.string(a)&&this.opt.regex.hasOwnProperty(a)?this.opt.regex[a]:null,e=this.$el.prop("className")||"",f=null!=c?e.match(c):null;return null!=f&&f.length>=2?f[1]:b},onWindowPopState:function(a){var b=a.data.self,c=a.originalEvent.state;d.empty(c)||c.id!==b.id||(b.state.set(c),b.loadAvailable())}}),b.template.register("core",b.Template,{id:null,type:"core",classes:"",on:{},lazy:!0,viewport:200,items:[],fixLayout:!0,scrollParent:null,delay:0,throttle:50,timeout:6e4,srcset:"data-srcset-fg",src:"data-src-fg",template:{},regex:{theme:/(?:\s|^)(fg-(?:light|dark|custom))(?:\s|$)/,loadingIcon:/(?:\s|^)(fg-loading-(?:default|bars|dots|partial|pulse|trail))(?:\s|$)/,hoverIcon:/(?:\s|^)(fg-hover-(?:zoom|zoom2|zoom3|plus|circle-plus|eye|external|tint))(?:\s|$)/,videoIcon:/(?:\s|^)(fg-video-(?:default|1|2|3|4))(?:\s|$)/,hoverColor:/(?:\s|^)(fg-hover-(?:colorize|grayscale))(?:\s|$)/,hoverScale:/(?:\s|^)(fg-hover-scale)(?:\s|$)/,stickyVideoIcon:/(?:\s|^)(fg-video-sticky)(?:\s|$)/,insetShadow:/(?:\s|^)(fg-shadow-inset-(?:small|medium|large))(?:\s|$)/,filter:/(?:\s|^)(fg-filter-(?:1977|amaro|brannan|clarendon|earlybird|lofi|poprocket|reyes|toaster|walden|xpro2|xtreme))(?:\s|$)/}},{container:"foogallery"},{},-100)}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.str),function(a,b,c){a.Component=b.Class.extend({construct:function(a){this.tmpl=a},destroy:function(){this.tmpl=null}}),a.EventComponent=b.EventClass.extend({construct:function(a,b){this._super(a),this.tmpl=a,this.tmplEventPrefix=b},destroy:function(){this._super(),this.tmpl=null},trigger:function(a,d){var e,f,g=this,h=g._super(a,d);return null!=g.tmpl&&(h instanceof b.Event&&!h.isDefaultPrevented()?(e=null!=h.namespace?[h.type,h.namespace].join("."):h.type,(f=g.tmpl.raise(g.tmplEventPrefix+e,d))&&f.isDefaultPrevented()&&h.preventDefault()):c.array(h)&&h.forEach(function(a){a.isDefaultPrevented()||(e=null!=a.namespace?[a.type,a.namespace].join("."):a.type,(f=g.tmpl.raise(g.tmplEventPrefix+e,d))&&f.isDefaultPrevented()&&a.preventDefault())})),c.empty(h)?null:1===h.length?h[0]:h}}),a.components=new b.Factory}(FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d,e){b.State=b.Component.extend({construct:function(a){var b=this;b._super(a),b.apiEnabled=!!window.history&&!!history.replaceState,b.opt=b.tmpl.opt.state,b.enabled=b.opt.enabled,b.current={filter:[],page:0,item:null},b.pushOrReplace=b.isPushOrReplace(b.opt.pushOrReplace)?b.opt.pushOrReplace:"replace",b.defaultMask="foogallery-gallery-{id}";var c=d.escapeRegExp(b.tmpl.id),e=d.escapeRegExp(b.getMasked()),f=d.escapeRegExp(b.opt.values),g=d.escapeRegExp(b.opt.pair);b.regex={exists:new RegExp("^#"+c+"\\"+f+".+?"),masked:new RegExp("^#"+e+"\\"+f+".+?"),values:new RegExp("(\\w+)"+g+"([^"+f+"]+)","g")}},destroy:function(a){var b=this;a||b.clear(),b.opt=b.regex={},b._super()},init:function(){this.set(this.initial())},getIdNumber:function(){return this.tmpl.id.match(/\d+/g)[0]},getMasked:function(){var a=this,b=d.contains(a.opt.mask,"{id}")?a.opt.mask:a.defaultMask;return d.format(b,{id:a.getIdNumber()})},isPushOrReplace:function(b){return-1!==a.inArray(b,["push","replace"])},exists:function(){return this.regex.values.lastIndex=0,(this.regex.exists.test(location.hash)||this.regex.masked.test(location.hash))&&this.regex.values.test(location.hash)},parse:function(){var b=this,c=b.tmpl,d={};if(b.exists())if(b.enabled){d.id=b.tmpl.id,b.regex.values.lastIndex=0;var e=location.hash.match(b.regex.values);a.each(e,function(a,e){var f,g=e.split(b.opt.pair);if(2===g.length)switch(g[0]){case b.opt.itemKey:f=c.items.fromHash(g[1]),null!==f&&(d.item=f);break;case b.opt.pageKey:c.pages&&null!==(f=c.pages.fromHash(g[1]))&&(d.page=f);break;case b.opt.filterKey:c.filter&&null!==(f=c.filter.fromHash(g[1]))&&(d.filter=f)}})}else b.apiEnabled?history.replaceState(null,"",location.pathname+location.search):location.hash="#";return d},hashify:function(a){var b=this,d=b.tmpl;if(c.hash(a)){var e=[],f=d.items.toHash(a.item);return null!==f&&e.push(b.opt.itemKey+b.opt.pair+f),d.filter&&null!==(f=d.filter.toHash(a.filter))&&e.push(b.opt.filterKey+b.opt.pair+f),d.pages&&null!==(f=d.pages.toHash(a.page))&&e.push(b.opt.pageKey+b.opt.pair+f),e.length>0&&e.unshift("#"+b.getMasked()),e.join(b.opt.values)}return""},replace:function(a){var d=this;if(d.enabled&&d.apiEnabled){a.id=d.tmpl.id;var f=d.hashify(a),g=c.empty(f),h=e.extend({},a,{item:a.item instanceof b.Item?a.item.id:a.item});history.replaceState(g?null:h,"",g?location.pathname+location.search:f)}},push:function(a){var d=this;if(d.enabled&&d.apiEnabled){a.id=d.tmpl.id;var f=d.hashify(a),g=c.empty(f),h=e.extend({},a,{item:a.item instanceof b.Item?a.item.id:a.item});history.pushState(g?null:h,"",g?location.pathname+location.search:f)}},update:function(a,b){var c=this;c.enabled&&c.apiEnabled&&(b=c.isPushOrReplace(b)?b:c.pushOrReplace,c[b](a))},clear:function(){this.exists()&&this.replace({})},initial:function(){var a=this,b=a.parse();return c.empty(b)?a.get():e.extend({filter:[],page:1,item:null},b)},get:function(a){var c,d=this,f=d.tmpl,g={};return a instanceof b.Item&&(g.item=a),f.filter&&null!==(c=f.filter.getState())&&(g.filter=c),f.pages&&null!==(c=f.pages.getState())&&(g.page=c),e.extend({filter:[],page:1,item:null},g)},set:function(a){var b=this,d=b.tmpl;if(c.hash(a)){var f=e.extend({filter:[],page:1,item:null},a);d.items.reset();d.raise("before-state",[f]).isDefaultPrevented()||(d.filter&&d.filter.setState(f),d.pages?d.pages.setState(f):(d.items.detach(d.items.all()),d.items.create(d.items.available(),!0)),f.item&&(b.opt.scrollTo&&f.item.scrollTo(),c.empty(a.item)||(a.item=null,b.replace(a))),b.current=f,d.raise("after-state",[f]))}}}),b.template.configure("core",{state:{enabled:!1,scrollTo:!0,pushOrReplace:"replace",mask:"foogallery-gallery-{id}",values:"/",pair:":",array:"+",arraySeparator:",",itemKey:"i",filterKey:"f",pageKey:"p"}}),b.components.register("state",b.State)}(FooGallery.$,FooGallery,FooGallery.utils.is,FooGallery.utils.str,FooGallery.utils.obj),function(a,b,c,d,e,f){b.Items=b.Component.extend({construct:function(a){var b=this;b.ALLOW_CREATE=!0,b.ALLOW_APPEND=!0,b.ALLOW_LOAD=!0,b._super(a),b.maps={},b._fetched=null,b._arr=[],b._available=[];var d=b.tmpl.cls.item.caption;b.tmpl.sel.item.caption.all=c.selectify([d.elem,d.inner,d.title,d.description])},fromHash:function(a){return this.get(a)},toHash:function(a){return a instanceof b.Item?a.id:null},destroy:function(){var b=this,c=b.all(),d=[];c.length>0&&(b.tmpl.raise("destroy-items",[c]),d=a.map(c,function(a){return a.destroy()?a:null}),d.length>0&&b.tmpl.raise("destroyed-items",[d])),b.maps={},b._fetched=null,b._arr=[],b._available=[],b._super()},fetch:function(b){var c=this;if(!b&&d.promise(c._fetched))return c._fetched;var e=c.tmpl,f=e.sel,g=e.opt.items,h=a.Deferred(),i=c.make(e.$el.find(f.item.elem));return d.empty(g)?(i.push.apply(i,c.make(window[e.id+"-items"])),h.resolve(i)):d.array(g)?(i.push.apply(i,c.make(g)),h.resolve(i)):d.string(g)?a.get(g).then(function(a){i.push.apply(i,c.make(a)),h.resolve(i)},function(a,b,c){console.log("FooGallery: GET items error.",g,a,b,c),h.resolve(i)}):h.resolve(i),h.then(function(a){c.setAll(a)}),c._fetched=h.promise()},toJSON:function(a){return(a?this.all():this.available()).map(function(a){return a.toJSON()})},all:function(){return this._arr.slice()},count:function(a){return a?this.all().length:this.available().length},available:function(a){return d.fn(a)?this._available.filter(a,this):this._available.slice()},get:function(a){var b=d.number(a)?"index":"id";return this.maps[b][a]?this.maps[b][a]:null},setAll:function(a){this._arr=d.array(a)?a:[],this.maps=this.createMaps(this._arr),this._available=this.all()},setAvailable:function(a){this.maps=this.createMaps(this._arr),this._available=d.array(a)?a:[]},reset:function(){this.setAvailable(this.all())},find:function(a,b){if(b=d.fn(b)?b:function(){return!0},d.array(a))for(var c=0,e=a.length;c<e;c++)if(!0===b.call(this,a[c]))return a[c];return null},first:function(a){return this.find(this._available,a)},last:function(a){return this.find(this._available.slice().reverse(),a)},next:function(a,c,e){if(!(a instanceof b.Item))return null;e=!!d.boolean(e)&&e;var f=this._available.slice(),g=f.indexOf(a);if(-1!==g){var h=f.slice(0,g);return f=f.slice(g+1),e&&(f=f.concat(h)),this.find(f,c)}return null},prev:function(a,c,e){if(!(a instanceof b.Item))return null;e=!!d.boolean(e)&&e;var f=this._available.slice().reverse(),g=f.indexOf(a);if(-1!==g){var h=f.slice(0,g);return f=f.slice(g+1),e&&(f=f.concat(h)),this.find(f,c)}return null},createMaps:function(b){b=d.array(b)?b:[];var c={id:{},index:{}};return a.each(b,function(a,b){d.empty(b.id)&&(b.id=""+(a+1)),b.index=a,c.id[b.id]=b,c.index[b.index]=b}),c},loadable:function(b){var e,f=this,g=f.tmpl.opt;return g.lazy&&(e=c.getViewportBounds(g.viewport)),f.ALLOW_LOAD&&d.array(b)?a.map(b,function(a){return a.isCreated&&a.isAttached&&!a.isLoading&&!a.isLoaded&&!a.isError&&(!g.lazy||g.lazy&&a.intersects(e))?a:null}):[]},creatable:function(c){return this.ALLOW_CREATE&&d.array(c)?a.map(c,function(a){return a instanceof b.Item&&!a.isCreated?a:null}):[]},appendable:function(c){return this.ALLOW_APPEND&&d.array(c)?a.map(c,function(a){return a instanceof b.Item&&a.isCreated&&!a.isAttached?a:null}):[]},detachable:function(c){return d.array(c)?a.map(c,function(a){
11
- return a instanceof b.Item&&a.isCreated&&a.isAttached?a:null}):[]},jquerify:function(b){return a(a.map(b,function(a){return a.$el.get()}))},make:function(c){var e=this,g=[];if(d.jq(c)||d.array(c)){var h=[],i=a.makeArray(c);if(0===i.length)return g;e.tmpl.raise("make-items",[i]).isDefaultPrevented()||(g=a.map(i,function(a){var c=e.type(a),g=f.extend(d.hash(a)?a:{},{type:c}),i=b.components.make(c,e.tmpl,g);return d.element(a)?i.parse(a)?(h.push(i),e.ALLOW_APPEND||i.detach(),i):null:i})),g.length>0&&e.tmpl.raise("made-items",[g]),h.length>0&&e.tmpl.raise("parsed-items",[h])}return g},type:function(c){var e;if(d.hash(c))e=c.type;else if(d.element(c)){var f=a(c),g=this.tmpl.sel.item;e=f.find(g.anchor).data("type")}return d.string(e)&&b.components.contains(e)?e:"image"},create:function(b,c){var e=this,f=[],g=e.creatable(b);if(g.length>0){e.tmpl.raise("create-items",[g]).isDefaultPrevented()||(f=a.map(g,function(a){return a.create()?a:null})),f.length>0&&e.tmpl.raise("created-items",[f])}return d.boolean(c)&&c?e.append(b):f},append:function(b){var c=this,d=[],e=c.appendable(b);if(e.length>0){c.tmpl.raise("append-items",[e]).isDefaultPrevented()||(d=a.map(e,function(a){return a.append()?a:null})),d.length>0&&c.tmpl.raise("appended-items",[d])}return d},detach:function(b){var c=this,d=[],e=c.detachable(b);if(e.length>0){c.tmpl.raise("detach-items",[e]).isDefaultPrevented()||(d=a.map(e,function(a){return a.detach()?a:null})),d.length>0&&c.tmpl.raise("detached-items",[d])}return d},load:function(b){var c=this;if(b=c.loadable(b),b.length>0){if(!c.tmpl.raise("load-items",[b]).isDefaultPrevented()){var d=a.map(b,function(a){return a.load()});return e.when(d).done(function(a){c.tmpl.raise("loaded-items",[a])})}}return e.resolveWith([])}}),b.components.register("items",b.Items)}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.obj),function(a,b,c,d,e,f,g){b.Item=b.Component.extend({construct:function(a,b){var c=this;c._super(a),c.cls=a.cls.item,c.il8n=a.il8n.item,c.sel=a.sel.item,c.opt=f.extend({},a.opt.item,b),c.isAttached=!1,c.isCreated=!1,c.isDestroyed=!1,c.isLoading=!1,c.isLoaded=!1,c.isError=!1,c.isParsed=!1,c.$el=null,c.$inner=null,c.$anchor=null,c.$overlay=null,c.$wrap=null,c.$image=null,c.$caption=null,c.fixLayout=c.tmpl.opt.fixLayout,c.index=-1,c.type=c.opt.type,c.id=c.opt.id,c.productId=c.opt.productId,c.href=c.opt.href,c.src=c.opt.src,c.srcset=c.opt.srcset,c.width=c.opt.width,c.height=c.opt.height,c.title=c.opt.title,c.alt=c.opt.alt,c.caption=d.empty(c.opt.caption)?c.title:c.opt.caption,c.description=d.empty(c.opt.description)?c.alt:c.opt.description,c.attr=c.opt.attr,c.tags=c.opt.tags,c.maxWidth=c.opt.maxWidth,c.maxCaptionLength=c.opt.maxCaptionLength,c.maxDescriptionLength=c.opt.maxDescriptionLength,c.showCaptionTitle=c.opt.showCaptionTitle,c.showCaptionDescription=c.opt.showCaptionDescription,c.noLightbox=c.opt.noLightbox,c.panelHide=c.opt.panelHide,c.exif=c.opt.exif,c.hasExif=d.exif(c.exif),c._thumbUrl=null,c._load=null,c._undo={classes:"",style:"",loader:!1,wrap:!1,overlay:!1,placeholder:!1}},destroy:function(){var a=this;return a.tmpl.raise("destroy-item",[a]).isDefaultPrevented()||(a.isDestroyed=a.doDestroyItem()),a.isDestroyed&&(a.tmpl.raise("destroyed-item",[a]),a._super()),a.isDestroyed},doDestroyItem:function(){var a=this;return a.isParsed?(a.$anchor.add(a.$caption).off("click.foogallery"),a.append(),d.empty(a._undo.classes)?a.$el.removeAttr("class"):a.$el.attr("class",a._undo.classes),d.empty(a._undo.style)?a.$el.removeAttr("style"):a.$el.attr("style",a._undo.style),a._undo.overlay&&a.$overlay.remove(),a._undo.wrap&&(a.$anchor.append(a.$image),a.$wrap.remove()),a._undo.loader&&a.$el.find(a.sel.loader).remove(),a._undo.placeholder&&a.$image.prop("src")===b.EMPTY_IMAGE&&a.$image.removeAttr("src")):a.isCreated&&(a.detach(),a.$el.remove()),!0},parse:function(b){var c=this,d=a(b);return!c.tmpl.raise("parse-item",[c,d]).isDefaultPrevented()&&(c.isCreated=d.is(c.sel.elem))&&(c.isParsed=c.doParseItem(d),c.fixLayout&&c.fix()),c.isParsed&&c.tmpl.raise("parsed-item",[c]),c.isParsed},doParseItem:function(c){var e=this,g=e.tmpl.opt,h=e.cls,i=e.sel;if(e._undo.classes=c.attr("class")||"",e._undo.style=c.attr("style")||"",e.$el=c.data(b.DATA_ITEM,e),e.$inner=e.$el.children(i.inner),e.$anchor=e.$inner.children(i.anchor).on("click.foogallery",{self:e},e.onAnchorClick),e.$image=e.$anchor.find(i.image),e.$caption=e.$inner.children(i.caption.elem).on("click.foogallery",{self:e},e.onCaptionClick),!(e.$el.length&&e.$inner.length&&e.$anchor.length&&e.$image.length))return console.error("FooGallery Error: Invalid HTML markup. Check the item markup for additional elements or malformed HTML in the title or description.",e),e.isError=!0,e.tmpl.raise("error-item",[e]),0!==e.$el.length&&e.$el.remove(),!1;e.isAttached=e.$el.parent().length>0,e.isLoading=e.$el.is(i.loading),e.isLoaded=e.$el.is(i.loaded),e.isError=e.$el.is(i.error);var j=e.$anchor.attr("data-type",e.type).data();e.id=j.id||e.id,e.productId=j.productId||e.productId,e.tags=j.tags||e.tags,e.href=j.href||e.$anchor.attr("href")||e.href,e.src=e.$image.attr(g.src)||e.src,e.srcset=e.$image.attr(g.srcset)||e.srcset,e.width=parseInt(e.$image.attr("width"))||e.width,e.height=parseInt(e.$image.attr("height"))||e.height,e.title=e.$image.attr("title")||e.title,e.alt=e.$image.attr("alt")||e.alt,e.caption=j.title||j.captionTitle||e.caption,e.description=j.description||j.captionDesc||e.description,e.noLightbox=e.$anchor.hasClass(h.noLightbox),e.panelHide=e.$anchor.hasClass(h.panelHide),d.exif(j.exif)&&(e.exif=f.extend(e.exif,j.exif),e.hasExif=!0),d.empty(e.caption)&&(e.caption=a.trim(e.$caption.find(i.caption.title).html())),d.empty(e.description)&&(e.description=a.trim(e.$caption.find(i.caption.description).html())),d.number(e.maxCaptionLength)&&e.maxCaptionLength>0&&!d.empty(e.caption)&&d.string(e.caption)&&e.caption.length>e.maxCaptionLength&&e.$caption.find(i.caption.title).html(e.caption.substr(0,e.maxCaptionLength)+"&hellip;"),d.number(e.maxDescriptionLength)&&e.maxDescriptionLength>0&&!d.empty(e.description)&&d.string(e.description)&&e.description.length>e.maxDescriptionLength&&e.$caption.find(i.caption.description).html(e.description.substr(0,e.maxDescriptionLength)+"&hellip;"),e.$overlay=e.$anchor.children(i.overlay),0===e.$overlay.length&&(e.$overlay=a("<span/>",{class:h.overlay}),e.$anchor.append(e.$overlay),e._undo.overlay=!0),e.$wrap=e.$anchor.children(i.wrap),0===e.$wrap.length&&(e.$wrap=a("<span/>",{class:h.wrap}),e.$anchor.append(e.$wrap.append(e.$image)),e._undo.wrap=!0),0===e.$el.children(i.loader).length&&(e.$el.append(a("<div/>",{class:h.loader})),e._undo.loader=!0);var k=e.$image.get(0);return d.empty(k.src)&&(k.src=b.EMPTY_IMAGE,e._undo.placeholder=!0),e.$el.addClass(e.getTypeClass()),e.hasExif&&e.$el.addClass(h.exif),!e.isCreated||!e.isAttached||e.isLoading||e.isLoaded||e.isError||e.$el.addClass(h.idle),!0},create:function(){var a=this;if(!a.isCreated&&d.string(a.href)&&d.string(a.src)&&d.number(a.width)&&d.number(a.height)){a.tmpl.raise("create-item",[a]).isDefaultPrevented()||(a.isCreated=a.doCreateItem()),a.isCreated&&a.tmpl.raise("created-item",[a])}return a.isCreated},doCreateItem:function(){var c=this,e=c.tmpl.opt,f=c.cls,g=c.attr,h=c.getTypeClass(),i=c.hasExif?f.exif:"";g.elem.class=[f.elem,h,i,f.idle].join(" "),g.inner.class=f.inner;var j=[f.anchor];c.noLightbox&&j.push(f.noLightbox),c.panelHide&&j.push(f.panelHide),g.anchor.class=j.join(" "),g.anchor.href=c.href,g.anchor["data-type"]=c.type,g.anchor["data-id"]=c.id,g.anchor["data-title"]=c.caption,g.anchor["data-description"]=c.description,d.empty(c.tags)||(g.anchor["data-tags"]=JSON.stringify(c.tags)),d.empty(c.productId)||(g.anchor["data-product-id"]=c.productId),g.image.class=f.image,g.image[e.src]=c.src,g.image[e.srcset]=c.srcset,g.image.width=c.width,g.image.height=c.height,g.image.title=c.title,g.image.alt=c.alt,c.$el=a("<div/>").attr(g.elem).data(b.DATA_ITEM,c),c.$inner=a("<figure/>").attr(g.inner).appendTo(c.$el),c.$anchor=a("<a/>").attr(g.anchor).appendTo(c.$inner).on("click.foogallery",{self:c},c.onAnchorClick),c.$overlay=a("<span/>",{class:f.overlay}).appendTo(c.$anchor),c.$wrap=a("<span/>",{class:f.wrap}).appendTo(c.$anchor),c.$image=a("<img/>").attr(g.image).appendTo(c.$wrap),f=c.cls.caption,g=c.attr.caption,g.elem.class=f.elem,c.$caption=a("<figcaption/>").attr(g.elem).on("click.foogallery",{self:c},c.onCaptionClick),g.inner.class=f.inner;var k=a("<div/>").attr(g.inner).appendTo(c.$caption),l=c.showCaptionTitle&&!d.empty(c.caption),m=c.showCaptionDescription&&!d.empty(c.description);if(l||m){if(g.title.class=f.title,g.description.class=f.description,l){var n=a("<div/>").attr(g.title),o=c.caption;d.number(c.maxCaptionLength)&&c.maxCaptionLength>0&&d.string(c.caption)&&c.caption.length>c.maxCaptionLength&&(o=c.caption.substr(0,c.maxCaptionLength)+"&hellip;"),n.get(0).innerHTML=o,k.append(n)}if(m){var p=a("<div/>").attr(g.description),q=c.description;d.number(c.maxDescriptionLength)&&c.maxDescriptionLength>0&&d.string(c.description)&&c.description.length>c.maxDescriptionLength&&(q=c.description.substr(0,c.maxDescriptionLength)+"&hellip;"),p.get(0).innerHTML=q,k.append(p)}}return c.$caption.appendTo(c.$inner),0===c.$el.find(c.sel.loader).length&&c.$el.append(a("<div/>",{class:c.cls.loader})),!0},append:function(){var a=this;if(a.isCreated&&!a.isAttached){a.tmpl.raise("append-item",[a]).isDefaultPrevented()||(a.tmpl.$el.append(a.$el),!a.fixLayout&&a.isParsed||a.fix(),a.isAttached=!0),a.isAttached&&a.tmpl.raise("appended-item",[a])}return a.isAttached},detach:function(){var a=this;if(a.isCreated&&a.isAttached){a.tmpl.raise("detach-item",[a]).isDefaultPrevented()||(a.$el.detach(),!a.fixLayout&&a.isParsed||a.unfix(),a.isAttached=!1),a.isAttached||a.tmpl.raise("detached-item",[a])}return!a.isAttached},load:function(){var b=this;if(d.promise(b._load))return b._load;if(!b.isCreated||!b.isAttached)return e.rejectWith("not created or attached");if(b.tmpl.raise("load-item",[b]).isDefaultPrevented())return e.rejectWith("default prevented");var c=b.cls,f=b.$image.get(0),g=f.src;return b.isLoading=!0,b.$el.removeClass(c.idle).removeClass(c.loaded).removeClass(c.error).addClass(c.loading),b._load=a.Deferred(function(a){f.onload=function(){f.onload=f.onerror=null,b.isLoading=!1,b.isLoaded=!0,b.$el.removeClass(c.loading).addClass(c.loaded),!b.fixLayout&&b.isParsed||b.unfix(),b.tmpl.raise("loaded-item",[b]),a.resolve(b)},f.onerror=function(){f.onload=f.onerror=null,b.isLoading=!1,b.isError=!0,b.$el.removeClass(c.loading).addClass(c.error),d.string(g)&&b.$image.prop("src",g),b.tmpl.raise("error-item",[b]),a.reject(b)},f.src=b.getThumbUrl(),f.complete&&f.onload()}).promise()},fix:function(){var a=this;if(null==a.tmpl)return a;if(a.isCreated&&!a.isLoading&&!a.isLoaded&&!a.isError){var b=a.width,c=a.height,e=a.$image.get(0);if(!isNaN(b)&&!isNaN(c)&&e){var f=d.fn(a.maxWidth)?a.maxWidth(a):a.$image.width();f<=0&&(f=b);var g=f/b,h=c*g;a.$image.css({width:f,height:h})}}return a},unfix:function(){var a=this;return null==a.tmpl?a:(a.isCreated&&a.$image.css({width:"",height:""}),a)},getThumbSrc:function(a,b){return c.src(this.src,this.srcset,this.width,this.height,a,b)},getThumbUrl:function(a){a=!!d.boolean(a)&&a;var b=this;return!a&&d.string(b._thumbUrl)?b._thumbUrl:b._thumbUrl=b.getThumbSrc(b.$anchor.innerWidth(),b.$anchor.innerHeight())},getTypeClass:function(){return this.cls.types.hasOwnProperty(this.type)?this.cls.types[this.type]:""},scrollTo:function(a){var b=this;if(b.isAttached){var d=b.bounds(),e=c.getViewportBounds();switch(a){case"top":d.left+=d.width/2-e.width/2,d.top-=e.height/5;break;default:d.left+=d.width/2-e.width/2,d.top+=d.height/2-e.height/2}window.scrollTo(d.left,d.top)}return b},bounds:function(){return this.isAttached?c.getElementBounds(this.$el):null},intersects:function(a){return!!this.isAttached&&this.bounds().intersects(a)},updateState:function(){this.tmpl.state.update(this.tmpl.state.get(this))},toJSON:function(){return{type:this.type,id:this.id,productId:this.productId,href:this.href,src:this.src,srcset:this.srcset,width:this.width,height:this.height,alt:this.alt,title:this.title,caption:this.caption,description:this.description,tags:this.tags.slice(),maxCaptionLength:this.maxCaptionLength,maxDescriptionLength:this.maxDescriptionLength,showCaptionTitle:this.showCaptionTitle,showCaptionDescription:this.showCaptionDescription,noLightbox:this.noLightbox,panelHide:this.panelHide,attr:f.extend({},this.attr)}},onAnchorClick:function(a){var b=a.data.self;b.tmpl.raise("anchor-click-item",[b]).isDefaultPrevented()?a.preventDefault():b.updateState()},onCaptionClick:function(b){var c=b.data.self;!c.tmpl.raise("caption-click-item",[c]).isDefaultPrevented()&&c.$anchor.length>0&&!a(b.target).is("a,:input")&&c.$anchor.get(0).click()}}),b.template.configure("core",{item:{type:"item",id:"",href:"",src:"",srcset:"",width:0,height:0,title:"",alt:"",caption:"",description:"",tags:[],maxWidth:null,maxCaptionLength:0,maxDescriptionLength:0,showCaptionTitle:!0,showCaptionDescription:!0,noLightbox:!1,panelHide:!1,exif:{aperture:null,camera:null,date:null,exposure:null,focalLength:null,iso:null,orientation:null},attr:{elem:{},inner:{},anchor:{},image:{},caption:{elem:{},inner:{},title:{},description:{}}}}},{item:{elem:"fg-item",inner:"fg-item-inner",exif:"fg-item-exif",anchor:"fg-thumb",overlay:"fg-image-overlay",wrap:"fg-image-wrap",image:"fg-image",loader:"fg-loader",idle:"fg-idle",loading:"fg-loading",loaded:"fg-loaded",error:"fg-error",noLightbox:"fg-no-lightbox",panelHide:"fg-panel-hide",types:{item:"fg-type-unknown"},caption:{elem:"fg-caption",inner:"fg-caption-inner",title:"fg-caption-title",description:"fg-caption-desc"}}},{item:{exif:{aperture:"Aperture",camera:"Camera",date:"Date",exposure:"Exposure",focalLength:"Focal Length",iso:"ISO",orientation:"Orientation"}}}),b.components.register("item",b.Item)}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.obj,FooGallery.utils.str),function(a,b,c,d){b.Image=b.Item.extend({}),b.template.configure("core",null,{item:{types:{image:"fg-type-image"}}}),b.components.register("image",b.Image)}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d){b.Paging=b.Component.extend({construct:function(a){var b=this;b._super(a),b.opt=b.tmpl.opt.paging,b.cls=b.tmpl.cls.paging,b.il8n=b.tmpl.il8n.paging,b.sel=b.tmpl.sel.paging,b.pushOrReplace=b.opt.pushOrReplace,b.type=b.opt.type,b.theme=b.opt.theme,b.size=b.opt.size,b.position=b.opt.position,b.scrollToTop=b.opt.scrollToTop,b.current=0,b.total=0,b.ctrls=[],b._arr=[]},fromHash:function(a){var b=parseInt(a);return isNaN(b)?null:b},toHash:function(a){return d.number(a)&&a>0?a.toString():null},getState:function(){return this.isValid(this.current)?this.current:null},setState:function(a){this.rebuild(),a.item&&!this.contains(a.page,a.item)&&(a.page=this.find(a.item),a.page=0!==a.page?a.page:1),this.set(a.page,!1,!1,!0)},destroy:function(){var b=this;b._arr.splice(0,b._arr.length),a.each(b.ctrls.splice(0,b.ctrls.length),function(a,b){b.destroy()}),b._super()},build:function(){var a=this,c=a.tmpl.items.available();a.total=a.size>0&&c.length>0?Math.ceil(c.length/a.size):1;for(var d=0;d<a.total;d++)a._arr.push(c.splice(0,a.size));if(a.total>1&&b.paging.hasCtrl(a.type)){var e,f,g=a.position;"both"!==g&&"top"!==g||(e=b.paging.makeCtrl(a.type,a.tmpl,a,"top"),e.create()&&(e.append(),a.ctrls.push(e))),"both"!==g&&"bottom"!==g||(f=b.paging.makeCtrl(a.type,a.tmpl,a,"bottom"),f.create()&&(f.append(),a.ctrls.push(f)))}},rebuild:function(){var b=this;b.current=0,b.total=0,b._arr.splice(0,b._arr.length),a.each(b.ctrls.splice(0,b.ctrls.length),function(a,b){b.destroy()}),b.build()},all:function(){return this._arr.slice()},available:function(){return this.get(this.current)},items:function(){return this.get(this.current)},controls:function(b){var c=this;c.isValid(b)&&a.each(c.ctrls,function(a,c){c.update(b)})},isValid:function(a){return d.number(a)&&a>0&&a<=this.total},number:function(a){return this.isValid(a)?a:0===this.current?1:this.current},create:function(a,b){var c=this;a=c.number(a);var d=a-1;c.tmpl.items.detach(c.tmpl.items.all()),c.current=a,c.tmpl.items.create(c._arr[d],!0)},get:function(a){var b=this;return b.isValid(a)?(a=b.number(a),b._arr[a-1]):[]},set:function(a,b,c,e){var f=this;if(f.isValid(a)){var g,h=f.number(a);if(h!==f.current){var i=f.current,j=function(){if(c=!d.boolean(c)||c,e=!!d.boolean(e)&&e,c&&1===f.current&&!f.tmpl.state.exists()&&(g=f.tmpl.state.get(),f.tmpl.state.update(g,f.pushOrReplace)),f.controls(a),f.create(h,e),c&&(g=f.tmpl.state.get(),f.tmpl.state.update(g,f.pushOrReplace)),f.scrollToTop&&d.boolean(b)&&b){var j=f.get(f.current);j.length>0&&j[0].scrollTo("top")}f.tmpl.raise("after-page-change",[f.current,i,e])};return!f.tmpl.raise("before-page-change",[f.current,h,j,e]).isDefaultPrevented()&&(j(),!0)}}return!1},find:function(b){for(var c=this,d=0,e=c._arr.length;d<e;d++)if(-1!==a.inArray(b,c._arr[d]))return d+1;return 0},contains:function(b,c){var d=this.get(b);return-1!==a.inArray(c,d)},first:function(){this.goto(1)},last:function(){this.goto(this._arr.length)},prev:function(){this.goto(this.current-1)},next:function(){this.goto(this.current+1)},goto:function(a){var b=this;b.set(a,!0)&&b.tmpl.loadAvailable()}}),b.PagingControl=b.Component.extend({construct:function(a,b,c){var d=this;d._super(a),d.pages=b,d.position=c,d.$container=null},create:function(){var b=this;return b.$container=a("<nav/>",{class:b.pages.cls.container}).addClass(b.pages.theme),!0},destroy:function(){var a=this;a.$container.remove(),a.$container=null},append:function(){var a=this;"top"===a.position?a.$container.insertBefore(a.tmpl.$el):a.$container.insertAfter(a.tmpl.$el)},update:function(a){}}),b.paging.register("default",b.Paging,null,{type:"none",theme:"fg-light",size:30,pushOrReplace:"push",position:"none",scrollToTop:!0},{container:"fg-paging-container"},null,-100)}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d){b.Dots=b.Paging.extend({}),b.DotsControl=b.PagingControl.extend({construct:function(b,c,d){this._super(b,c,d),this.$container=a(),this.$list=a(),this.$items=a()},create:function(){for(var b,c=this,d=c.pages.cls,e=c.pages.il8n,f=[],g=a("<ul/>",{class:d.list}),h=0,i=c.pages.total;h<i;h++)f.push(b=c.createItem(h+1,e.page)),g.append(b);return c.$list=g,c.$container=a("<nav/>",{class:d.container}).addClass(c.pages.theme).append(g),c.$items=a(a.map(f,function(a){return a.get()})),!0},append:function(){var a=this;"top"===a.position?a.$container.insertBefore(a.tmpl.$el):a.$container.insertAfter(a.tmpl.$el)},destroy:function(){var b=this,c=b.pages.sel;b.$list.find(c.link).off("click.foogallery",b.onLinkClick),b.$container.remove(),b.$container=a(),b.$list=a(),b.$items=a()},update:function(a){this.setSelected(a-1)},setSelected:function(b){var c=this,e=c.pages.cls,f=c.pages.il8n,g=c.pages.sel;c.$items.filter(g.selected).removeClass(e.selected).each(function(b,c){var e=a(c),f=e.data("label"),h=e.find(g.reader);d.string(f)&&0!==h.length&&h.html(f)}),c.$items.eq(b).addClass(e.selected).each(function(b,c){var e=a(c),h=e.find(g.reader),i=h.html();d.string(i)&&0!==h.length&&(e.data("label",i),h.html(f.current))})},createItem:function(b,c,e,f,g){e=d.string(e)?e:b,c=d.string(c)?c:"";var h=this,i=h.pages.opt,j=h.pages.cls,k=a("<a/>",{class:j.link,href:"#page-"+b}).html(e).on("click.foogallery",{self:h,page:b},h.onLinkClick);d.empty(c)||k.attr("title",c.replace(/\{PAGE}/g,b).replace(/\{LIMIT}/g,i.limit+"")),g=d.string(g)?g:c,d.empty(g)||k.prepend(a("<span/>",{class:j.reader,text:g.replace(/\{PAGE}/g,"").replace(/\{LIMIT}/g,i.limit+"")}));var l=a("<li/>",{class:j.item}).append(k);return f=d.string(f)?f:"",d.empty(f)||l.addClass(f),l},onLinkClick:function(b){b.preventDefault();var c=b.data.self,d=b.data.page,e=c.pages.sel;a(this).closest(e.item).is(e.disabled)||(c.pages.set(d,!0),c.tmpl.loadAvailable())}}),b.paging.register("dots",b.Dots,b.DotsControl,{type:"dots",position:"both",pushOrReplace:"push"},{list:"fg-dots",item:"fg-dot-item",link:"fg-dot-link",disabled:"fg-disabled",selected:"fg-selected",visible:"fg-visible",reader:"fg-sr-only"},{current:"Current page",page:"Page {PAGE}"})}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c){b.DefaultTemplate=b.Template.extend({}),b.template.register("default",b.DefaultTemplate,null,{container:"foogallery fg-default"})}(FooGallery.$,FooGallery,FooGallery.utils),function(a,b,c,d){b.MasonryTemplate=b.Template.extend({construct:function(a,b){this._super(a,b),this.masonry=null,this.style=null,this.$columnWidth=null},getStylesheet:function(){var a=this;return null===a.style&&(a.style=document.createElement("style"),a.style.appendChild(document.createTextNode("")),document.head.appendChild(a.style)),a.style.sheet},delayedLayout:function(){var a=this;a._delayedLayout&&clearTimeout(a._delayedLayout),a._delayedLayout=setTimeout(function(){a._delayedLayout=null,a.masonry.layout()},20)},onPreInit:function(b,c){var e=c.sel,f=c.cls;f.layouts=a.map(f.layout,function(a){return a}).join(" ");for(var g=a.map(f.layout,function(a,b){return{key:b,value:a}}),h=0,i=g.length;h<i;h++)if(c.$el.hasClass(g[h].value)){c.template.layout=g[h].key;break}d.string(f.layout[c.template.layout])||(c.template.layout="col4");var j,k,l="fixed"===c.template.layout;if(c.template.isFitWidth=l,c.template.percentPosition=!l,c.template.transitionDuration=0,c.template.itemSelector=e.item.elem,c.$el.removeClass(f.layouts).addClass(f.layout[c.template.layout]),l||(0===c.$el.find(e.gutterWidth).length&&c.$el.prepend(a("<div/>").addClass(f.gutterWidth)),c.template.gutter=e.gutterWidth),0===c.$el.find(e.columnWidth).length&&c.$el.prepend(a("<div/>").addClass(f.columnWidth)),l&&d.number(c.template.columnWidth)){var m=c.$el.find(e.columnWidth).width(c.template.columnWidth);j=c.getStylesheet(),k="#"+c.id+e.container+" "+e.item.elem+" { width: "+m.outerWidth()+"px; }",j.insertRule(k,0)}c.template.columnWidth=e.columnWidth,l&&d.number(c.template.gutter)&&(j=c.getStylesheet(),k="#"+c.id+e.container+" "+e.item.elem+" { margin-bottom: "+c.template.gutter+"px; }",j.insertRule(k,0)),c.masonry=new Masonry(c.$el.get(0),c.template)},onPostInit:function(a,b){b.masonry.layout()},onFirstLoad:function(a,b){b.masonry.layout()},onReady:function(a,b){b.delayedLayout()},onDestroy:function(a,b){b._delayedLayout&&clearTimeout(b._delayedLayout),b.$el.find(b.sel.columnWidth).remove(),b.$el.find(b.sel.gutterWidth).remove(),b.style&&b.style.parentNode&&b.style.parentNode.removeChild(b.style)},onDestroyed:function(a,b){b.masonry instanceof Masonry&&b.masonry.destroy()},onLayout:function(a,b){b.masonry.layout()},onParsedItems:function(a,b,c){b.masonry.layout()},onAppendedItems:function(a,b,c){c=b.items.jquerify(c),c=b.masonry.addItems(c),b.masonry.layoutItems(c,!0)},onDetachItem:function(a,b,c){a.isDefaultPrevented()||(a.preventDefault(),b.masonry.remove(c.$el),c.isAttached=!1,c.unfix())},onDetachedItems:function(a,b,c){b.masonry.layout()},onLoadedItems:function(a,b,c){b.masonry.layout()}}),b.template.register("masonry",b.MasonryTemplate,{fixLayout:!0,template:{initLayout:!1,isInitLayout:!1,layout:"col4"}},{container:"foogallery fg-masonry",columnWidth:"fg-column-width",gutterWidth:"fg-gutter-width",layout:{fixed:"fg-masonry-fixed",col2:"fg-masonry-2col",col3:"fg-masonry-3col",col4:"fg-masonry-4col",col5:"fg-masonry-5col"}})}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d){b.Justified=c.Class.extend({construct:function(c,d){this.tmpl=c,this.$el=c.$el,this.options=a.extend(!0,{},b.Justified.defaults,d),this._items=[]},init:function(){var a=this;d.string(a.options.maxRowHeight)&&(a.options.maxRowHeight.indexOf("%")?a.options.maxRowHeight=a.options.rowHeight*(parseInt(a.options.maxRowHeight)/100):a.options.maxRowHeight=parseInt(a.options.maxRowHeight))},destroy:function(){this.$el.removeAttr("style")},parse:function(){var b=this;return b._items=a.map(b.tmpl.getItems(),function(a,b){return{index:b,width:a.width,height:a.height,top:0,left:0,$item:a.$el}})},getMaxRowHeight:function(){var a=this;return d.string(a.options.maxRowHeight)&&(a.options.maxRowHeight.indexOf("%")?a.options.maxRowHeight=a.options.rowHeight*(parseInt(a.options.maxRowHeight)/100):a.options.maxRowHeight=parseInt(a.options.maxRowHeight)),d.number(a.options.maxRowHeight)?a.options.maxRowHeight:a.options.rowHeight},getContainerWidth:function(){var a=this;return a.$el.is(":visible")?a.$el.width():a.$el.parents(":visible:first").innerWidth()},layout:function(){this.parse();var b=this,c=0,d=b.getContainerWidth(),e=b.getMaxRowHeight(),f=b.rows(d,e);a.each(f,function(a,d){d.visible&&(a>0&&(c+=b.options.margins),c+=d.height),b.render(d)}),b.$el.height(c)},render:function(a){for(var b,c=0,d=a.items.length;c<d;c++)b=a.items[c],a.visible?b.$item.css({width:b.width,height:b.height,top:b.top,left:b.left,display:"",maxHeight:this.options.maxRowHeight>0?this.options.maxRowHeight:""}).addClass("fg-positioned"):b.$item.css("display","none")},justify:function(a,b,c,d){var e=this,f=e.options.margins*(a.items.length-1),g=c-f,h=g/a.width;a.width=a.width*h,a.height=a.height*h,a.top=b,a.height>d&&(a.height=d),a.left=0,a.width<g&&(a.left=(g-a.width)/2),a.width+=f;for(var i,j=a.left,k=0,l=a.items.length;k<l;k++)k>0&&(j+=e.options.margins),i=a.items[k],i.left=j,i.top=b,i.width=i.width*h,i.height=i.height*h,i.height>d&&(i.height=d),j+=i.width;return a.height},position:function(a,b,c,d){var e=this,f=e.options.margins*(a.items.length-1),g=c-f;if(a.top=b,a.left=0,a.width<g)switch(d){case"center":a.left=(g-a.width)/2;break;case"right":a.left=g-a.width}a.width+=f;for(var h,i=a.left,j=0,k=a.items.length;j<k;j++)j>0&&(i+=e.options.margins),h=a.items[j],h.left=i,h.top=b,i+=h.width;return a.height},lastRow:function(a,b,c,d){var e=this,f=e.options.margins*(a.items.length-1),g=c-f,h=a.width/g>e.options.justifyThreshold;switch(e.options.lastRow){case"hide":h?e.justify(a,b,c,d):a.visible=!1;break;case"justify":e.justify(a,b,c,d);break;case"nojustify":h?e.justify(a,b,c,d):e.position(a,b,c,"left");break;case"left":case"center":case"right":h?e.justify(a,b,c,d):e.position(a,b,c,e.options.lastRow)}},items:function(){return a.map(this._items,function(a){return{index:a.index,width:a.width,height:a.height,$item:a.$item,top:a.top,left:a.left}})},rows:function(a,b){function c(){var a={index:++h,visible:!0,width:0,height:e.options.rowHeight,top:0,left:0,items:[]};return g.push(a),a}for(var d,e=this,f=e.items(),g=[],h=-1,i=c(),j=0,k=0,l=0,m=f.length;l<m;l++){if(d=f[l],d.height!=e.options.rowHeight){var n=e.options.rowHeight/d.height;d.height=d.height*n,d.width=d.width*n}k+d.width>a&&l>0&&(g.length>1&&(j+=e.options.margins),j+=e.justify(i,j,a,b),i=c(),k=0),i.items.length>0&&(k+=e.options.margins),k+=d.width,i.width+=d.width,i.items.push(d)}return g.length>1&&(j+=e.options.margins),e.lastRow(i,j,a,b),g}}),b.Justified.defaults={itemSelector:".fg-item",rowHeight:150,maxRowHeight:"200%",margins:0,lastRow:"center",justifyThreshold:1,refreshInterval:250}}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c){b.JustifiedTemplate=b.Template.extend({onPreInit:function(a,c){c.justified=new b.Justified(c,c.template)},onInit:function(a,b){b.justified.init()},onFirstLoad:function(a,b){b.justified.layout()},onReady:function(a,b){b.justified.layout()},onDestroy:function(a,b){b.justified.destroy()},onLayout:function(a,b){b.justified.layout()},onAfterPageChange:function(a,b,c,d,e){e||b.justified.layout()},onAfterFilterChange:function(a,b){b.justified.layout()}}),b.template.register("justified",b.JustifiedTemplate,null,{container:"foogallery fg-justified"})}(FooGallery.$,FooGallery,FooGallery.utils.is),function(a,b,c,d,e){b.PortfolioTemplate=b.Template.extend({construct:function(a,b){this._super(a,b),this.style=null,this.fullWidth=!1},getStylesheet:function(){var a=this;return null===a.style&&(a.style=document.createElement("style"),a.style.appendChild(document.createTextNode("")),document.head.appendChild(a.style)),a.style.sheet},onPreInit:function(a,b){b.appendCSS()},onPostInit:function(a,b){b.checkCSS()},onDestroy:function(a,b){b.removeCSS()},onLayout:function(a,b){b.checkCSS()},checkCSS:function(){var a=this,b=a.getContainerWidth();b<a.template.columnWidth!==a.fullWidth&&a.appendCSS(b)},appendCSS:function(a){var b=this;a=d.number(a)?a:b.getContainerWidth(),b.removeCSS();var c,e=b.getStylesheet(),f="#"+b.id+b.sel.container,g=f+" "+b.sel.item.elem,h=b.template.columnWidth,i=Math.ceil(b.template.gutter/2);switch(b.template.align){case"center":c=f+" { justify-content: center; }",e.insertRule(c,0);break;case"left":c=f+" { justify-content: flex-start; }",e.insertRule(c,0);break;case"right":c=f+" { justify-content: flex-end; }",e.insertRule(c,0)}b.fullWidth=a<h,b.fullWidth?(c=g+" { max-width: 100%; min-width: 100%; margin: "+i+"px; }",e.insertRule(c,0)):(c=g+" { max-width: "+h+"px; min-width: "+h+"px; margin: "+i+"px; }",e.insertRule(c,0))},removeCSS:function(){var a=this;a.style&&a.style.parentNode&&(a.style.parentNode.removeChild(a.style),a.style=null,a.fullWidth=!1)}}),b.template.register("simple_portfolio",b.PortfolioTemplate,{template:{gutter:40,align:"center",columnWidth:250}},{container:"foogallery fg-simple_portfolio"})}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn),function(a,b,c,d){b.ImageViewerTemplate=b.Template.extend({construct:function(b,c){this._super(d.extend({},b,{paging:{pushOrReplace:"replace",theme:"fg-light",type:"default",size:1,position:"none",scrollToTop:!1}}),c),this.$inner=a(),this.$current=a(),this.$total=a(),this.$prev=a(),this.$next=a()},createChildren:function(){var b=this;return a("<div/>",{class:b.cls.inner}).append(a("<div/>",{class:b.cls.innerContainer}),a("<div/>",{class:b.cls.controls}).append(a("<div/>",{class:b.cls.prev}).append(a("<span/>",{text:b.il8n.prev})),a("<label/>",{class:b.cls.count,text:b.il8n.count}).prepend(a("<span/>",{class:b.cls.countCurrent,text:"0"})).append(a("<span/>",{class:b.cls.countTotal,text:"0"})),a("<div/>",{class:b.cls.next}).append(a("<span/>",{text:b.il8n.next}))))},destroyChildren:function(){var a=this;a.$el.find(a.sel.inner).remove()},onPreInit:function(a,b){b.$inner=b.$el.find(b.sel.innerContainer),b.$current=b.$el.find(b.sel.countCurrent),b.$total=b.$el.find(b.sel.countTotal),b.$prev=b.$el.find(b.sel.prev),b.$next=b.$el.find(b.sel.next)},onInit:function(a,b){b.template.attachFooBox&&b.$el.on("foobox.previous",{self:b},b.onFooBoxPrev).on("foobox.next",{self:b},b.onFooBoxNext),b.$prev.on("click",{self:b},b.onPrevClick),b.$next.on("click",{self:b},b.onNextClick)},onFirstLoad:function(a,b){b.update()},onDestroy:function(a,b){b.template.attachFooBox&&b.$el.off({"foobox.previous":b.onFooBoxPrev,"foobox.next":b.onFooBoxNext}),b.$prev.off("click",b.onPrevClick),b.$next.off("click",b.onNextClick)},onAppendItem:function(a,b,c){a.preventDefault(),b.$inner.append(c.$el),c.fix(),c.isAttached=!0},onAfterPageChange:function(a,b,c,d,e){e||b.update()},onAfterFilterChange:function(a,b){b.update()},update:function(){this.pages&&(this.$current.text(this.pages.current),this.$total.text(this.pages.total))},prev:function(){this.pages&&(this.template.loop&&1===this.pages.current?this.pages.last():this.pages.prev(),this.update())},next:function(){this.pages&&(this.template.loop&&this.pages.current===this.pages.total?this.pages.first():this.pages.next(),this.update())},onFooBoxPrev:function(a){a.data.self.prev()},onFooBoxNext:function(a){a.data.self.next()},onPrevClick:function(a){a.preventDefault(),a.stopPropagation(),a.data.self.prev()},onNextClick:function(a){a.preventDefault(),a.stopPropagation(),a.data.self.next()}}),b.template.register("image-viewer",b.ImageViewerTemplate,{template:{attachFooBox:!1,loop:!1}},{container:"foogallery fg-image-viewer",inner:"fiv-inner",innerContainer:"fiv-inner-container",controls:"fiv-ctrls",prev:"fiv-prev",
12
- next:"fiv-next",count:"fiv-count",countCurrent:"fiv-count-current",countTotal:"fiv-count-total"},{prev:"Prev",next:"Next",count:"of"})}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.obj),function(a,b,c){b.ThumbnailTemplate=b.Template.extend({construct:function(a,b){this._super(c.extend({},a,{filtering:{type:"none"},paging:{pushOrReplace:"replace",theme:"fg-light",type:"default",size:1,position:"none",scrollToTop:!1}}),b)}}),b.template.register("thumbnail",b.ThumbnailTemplate,null,{container:"foogallery fg-thumbnail"})}(FooGallery.$,FooGallery,FooGallery.utils.obj),function(a,b,c,d,e){b.triggerPostLoad=function(b,c,d,e,f){if("first-load"===b.type||c.initialized&&("after-page-change"===b.type&&!f||"after-filter-change"===b.type))try{if(c.$el.parents(".fbx-item").length>0)return;c.$el.hasClass("fbx-instance")&&window.FOOBOX&&a.fn.foobox?c.$el.foobox(window.FOOBOX.o):a("body").trigger("post-load")}catch(a){console.error(a)}},b.autoDefaults={on:{"first-load.foogallery after-page-change.foogallery after-filter-change.foogallery":b.triggerPostLoad}},b.autoEnabled=!0,b.auto=function(a){b.autoDefaults=d.merge(b.autoDefaults,a)},b.globalsMerged=!1,b.mergeGlobals=function(){if(!0!==b.globalsMerged&&window.FooGallery_il8n&&e.object(window.FooGallery_il8n)){var a=window.FooGallery_il8n;for(var d in a)if(a.hasOwnProperty(d)&&b[d]instanceof c.Factory&&e.object(a[d]))for(var f in a[d])a[d].hasOwnProperty(f)&&b[d].configure(f,null,null,a[d][f]);b.globalsMerged=!0}},b.load=b.reload=function(){a(function(){b.mergeGlobals(),b.autoEnabled&&a('[id^="foogallery-gallery-"]:not(.fg-ready)').foogallery(b.autoDefaults)}),c.ready(function(){b.mergeGlobals(),b.autoEnabled&&a('[id^="foogallery-gallery-"].fg-ready').foogallery(b.autoDefaults)})},b.load()}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.obj,FooGallery.utils.is);
1
  /*
2
  * FooGallery - The Most Intuitive and Extensible Gallery Creation and Management Tool Ever Created for WordPress
3
+ * @version 1.4.24
4
  * @link
5
  * @copyright Steven Usher & Brad Vincent 2015
6
  * @license Released under the GPLv3 license.
7
  */
8
 
9
+ !function(){"use strict";function a(a){this.time=a.time,this.target=a.target,this.rootBounds=a.rootBounds,this.boundingClientRect=a.boundingClientRect,this.intersectionRect=a.intersectionRect||i(),this.isIntersecting=!!a.intersectionRect;var b=this.boundingClientRect,c=b.width*b.height,d=this.intersectionRect,e=d.width*d.height;this.intersectionRatio=c?Number((e/c).toFixed(4)):this.isIntersecting?1:0}function b(a,b){var c=b||{};if("function"!=typeof a)throw new Error("callback must be a function");if(c.root&&1!=c.root.nodeType)throw new Error("root must be an Element");this._checkForIntersections=d(this._checkForIntersections.bind(this),this.THROTTLE_TIMEOUT),this._callback=a,this._observationTargets=[],this._queuedEntries=[],this._rootMarginValues=this._parseRootMargin(c.rootMargin),this.thresholds=this._initThresholds(c.threshold),this.root=c.root||null,this.rootMargin=this._rootMarginValues.map(function(a){return a.value+a.unit}).join(" ")}function c(){return window.performance&&performance.now&&performance.now()}function d(a,b){var c=null;return function(){c||(c=setTimeout(function(){a(),c=null},b))}}function e(a,b,c,d){"function"==typeof a.addEventListener?a.addEventListener(b,c,d||!1):"function"==typeof a.attachEvent&&a.attachEvent("on"+b,c)}function f(a,b,c,d){"function"==typeof a.removeEventListener?a.removeEventListener(b,c,d||!1):"function"==typeof a.detatchEvent&&a.detatchEvent("on"+b,c)}function g(a,b){var c=Math.max(a.top,b.top),d=Math.min(a.bottom,b.bottom),e=Math.max(a.left,b.left),f=Math.min(a.right,b.right),g=f-e,h=d-c;return g>=0&&h>=0&&{top:c,bottom:d,left:e,right:f,width:g,height:h}}function h(a){var b;try{b=a.getBoundingClientRect()}catch(a){}return b?(b.width&&b.height||(b={top:b.top,right:b.right,bottom:b.bottom,left:b.left,width:b.right-b.left,height:b.bottom-b.top}),b):i()}function i(){return{top:0,bottom:0,left:0,right:0,width:0,height:0}}function j(a,b){for(var c=b;c;){if(c==a)return!0;c=k(c)}return!1}function k(a){var b=a.parentNode;return b&&11==b.nodeType&&b.host?b.host:b&&b.assignedSlot?b.assignedSlot.parentNode:b}if("object"==typeof window){if("IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)return void("isIntersecting"in window.IntersectionObserverEntry.prototype||Object.defineProperty(window.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}}));var l=window.document,m=[];b.prototype.THROTTLE_TIMEOUT=100,b.prototype.POLL_INTERVAL=null,b.prototype.USE_MUTATION_OBSERVER=!0,b.prototype.observe=function(a){if(!this._observationTargets.some(function(b){return b.element==a})){if(!a||1!=a.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:a,entry:null}),this._monitorIntersections(),this._checkForIntersections()}},b.prototype.unobserve=function(a){this._observationTargets=this._observationTargets.filter(function(b){return b.element!=a}),this._observationTargets.length||(this._unmonitorIntersections(),this._unregisterInstance())},b.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorIntersections(),this._unregisterInstance()},b.prototype.takeRecords=function(){var a=this._queuedEntries.slice();return this._queuedEntries=[],a},b.prototype._initThresholds=function(a){var b=a||[0];return Array.isArray(b)||(b=[b]),b.sort().filter(function(a,b,c){if("number"!=typeof a||isNaN(a)||a<0||a>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return a!==c[b-1]})},b.prototype._parseRootMargin=function(a){var b=a||"0px",c=b.split(/\s+/).map(function(a){var b=/^(-?\d*\.?\d+)(px|%)$/.exec(a);if(!b)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(b[1]),unit:b[2]}});return c[1]=c[1]||c[0],c[2]=c[2]||c[0],c[3]=c[3]||c[1],c},b.prototype._monitorIntersections=function(){this._monitoringIntersections||(this._monitoringIntersections=!0,this.POLL_INTERVAL?this._monitoringInterval=setInterval(this._checkForIntersections,this.POLL_INTERVAL):(e(window,"resize",this._checkForIntersections,!0),e(l,"scroll",this._checkForIntersections,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in window&&(this._domObserver=new MutationObserver(this._checkForIntersections),this._domObserver.observe(l,{attributes:!0,childList:!0,characterData:!0,subtree:!0}))))},b.prototype._unmonitorIntersections=function(){this._monitoringIntersections&&(this._monitoringIntersections=!1,clearInterval(this._monitoringInterval),this._monitoringInterval=null,f(window,"resize",this._checkForIntersections,!0),f(l,"scroll",this._checkForIntersections,!0),this._domObserver&&(this._domObserver.disconnect(),this._domObserver=null))},b.prototype._checkForIntersections=function(){var b=this._rootIsInDom(),d=b?this._getRootRect():i();this._observationTargets.forEach(function(e){var f=e.element,g=h(f),i=this._rootContainsTarget(f),j=e.entry,k=b&&i&&this._computeTargetAndRootIntersection(f,d),l=e.entry=new a({time:c(),target:f,boundingClientRect:g,rootBounds:d,intersectionRect:k});j?b&&i?this._hasCrossedThreshold(j,l)&&this._queuedEntries.push(l):j&&j.isIntersecting&&this._queuedEntries.push(l):this._queuedEntries.push(l)},this),this._queuedEntries.length&&this._callback(this.takeRecords(),this)},b.prototype._computeTargetAndRootIntersection=function(a,b){if("none"!=window.getComputedStyle(a).display){for(var c=h(a),d=c,e=k(a),f=!1;!f;){var i=null,j=1==e.nodeType?window.getComputedStyle(e):{};if("none"==j.display)return;if(e==this.root||e==l?(f=!0,i=b):e!=l.body&&e!=l.documentElement&&"visible"!=j.overflow&&(i=h(e)),i&&!(d=g(i,d)))break;e=k(e)}return d}},b.prototype._getRootRect=function(){var a;if(this.root)a=h(this.root);else{var b=l.documentElement,c=l.body;a={top:0,left:0,right:b.clientWidth||c.clientWidth,width:b.clientWidth||c.clientWidth,bottom:b.clientHeight||c.clientHeight,height:b.clientHeight||c.clientHeight}}return this._expandRectByRootMargin(a)},b.prototype._expandRectByRootMargin=function(a){var b=this._rootMarginValues.map(function(b,c){return"px"==b.unit?b.value:b.value*(c%2?a.width:a.height)/100}),c={top:a.top-b[0],right:a.right+b[1],bottom:a.bottom+b[2],left:a.left-b[3]};return c.width=c.right-c.left,c.height=c.bottom-c.top,c},b.prototype._hasCrossedThreshold=function(a,b){var c=a&&a.isIntersecting?a.intersectionRatio||0:-1,d=b.isIntersecting?b.intersectionRatio||0:-1;if(c!==d)for(var e=0;e<this.thresholds.length;e++){var f=this.thresholds[e];if(f==c||f==d||f<c!=f<d)return!0}},b.prototype._rootIsInDom=function(){return!this.root||j(l,this.root)},b.prototype._rootContainsTarget=function(a){return j(this.root||l,a)},b.prototype._registerInstance=function(){m.indexOf(this)<0&&m.push(this)},b.prototype._unregisterInstance=function(){var a=m.indexOf(this);-1!=a&&m.splice(a,1)},window.IntersectionObserver=b,window.IntersectionObserverEntry=a}}(),function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.ResizeObserver=b()}(this,function(){"use strict";function a(a,b){function c(){f&&(f=!1,a()),g&&e()}function d(){n(c)}function e(){var a=Date.now();if(f){if(a-h<o)return;g=!0}else f=!0,g=!1,setTimeout(d,b);h=a}var f=!1,g=!1,h=0;return e}function b(a){return parseFloat(a)||0}function c(a){for(var c=[],d=1;d<arguments.length;d++)c[d-1]=arguments[d];return c.reduce(function(c,d){return c+b(a["border-"+d+"-width"])},0)}function d(a){for(var c=["top","right","bottom","left"],d={},e=0,f=c;e<f.length;e++){var g=f[e],h=a["padding-"+g];d[g]=b(h)}return d}function e(a){var b=a.getBBox();return j(0,0,b.width,b.height)}function f(a){var e=a.clientWidth,f=a.clientHeight;if(!e&&!f)return v;var h=u(a).getComputedStyle(a),i=d(h),k=i.left+i.right,l=i.top+i.bottom,m=b(h.width),n=b(h.height);if("border-box"===h.boxSizing&&(Math.round(m+k)!==e&&(m-=c(h,"left","right")+k),Math.round(n+l)!==f&&(n-=c(h,"top","bottom")+l)),!g(a)){var o=Math.round(m+k)-e,p=Math.round(n+l)-f;1!==Math.abs(o)&&(m-=o),1!==Math.abs(p)&&(n-=p)}return j(i.left,i.top,m,n)}function g(a){return a===u(a).document.documentElement}function h(a){return l?w(a)?e(a):f(a):v}function i(a){var b=a.x,c=a.y,d=a.width,e=a.height,f="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,g=Object.create(f.prototype);return t(g,{x:b,y:c,width:d,height:e,top:c,right:b+d,bottom:e+c,left:b}),g}function j(a,b,c,d){return{x:a,y:b,width:c,height:d}}var k=function(){function a(a,b){var c=-1;return a.some(function(a,d){return a[0]===b&&(c=d,!0)}),c}return"undefined"!=typeof Map?Map:function(){function b(){this.__entries__=[]}return Object.defineProperty(b.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),b.prototype.get=function(b){var c=a(this.__entries__,b),d=this.__entries__[c];return d&&d[1]},b.prototype.set=function(b,c){var d=a(this.__entries__,b);~d?this.__entries__[d][1]=c:this.__entries__.push([b,c])},b.prototype.delete=function(b){var c=this.__entries__,d=a(c,b);~d&&c.splice(d,1)},b.prototype.has=function(b){return!!~a(this.__entries__,b)},b.prototype.clear=function(){this.__entries__.splice(0)},b.prototype.forEach=function(a,b){void 0===b&&(b=null);for(var c=0,d=this.__entries__;c<d.length;c++){var e=d[c];a.call(b,e[1],e[0])}},b}()}(),l="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,m=function(){return"undefined"!=typeof global&&global.Math===Math?global:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")()}(),n=function(){return"function"==typeof requestAnimationFrame?requestAnimationFrame.bind(m):function(a){return setTimeout(function(){return a(Date.now())},1e3/60)}}(),o=2,p=20,q=["top","right","bottom","left","width","height","size","weight"],r="undefined"!=typeof MutationObserver,s=function(){function b(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=a(this.refresh.bind(this),p)}return b.prototype.addObserver=function(a){~this.observers_.indexOf(a)||this.observers_.push(a),this.connected_||this.connect_()},b.prototype.removeObserver=function(a){var b=this.observers_,c=b.indexOf(a);~c&&b.splice(c,1),!b.length&&this.connected_&&this.disconnect_()},b.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},b.prototype.updateObservers_=function(){var a=this.observers_.filter(function(a){return a.gatherActive(),a.hasActive()});return a.forEach(function(a){return a.broadcastActive()}),a.length>0},b.prototype.connect_=function(){l&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),r?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},b.prototype.disconnect_=function(){l&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},b.prototype.onTransitionEnd_=function(a){var b=a.propertyName,c=void 0===b?"":b;q.some(function(a){return!!~c.indexOf(a)})&&this.refresh()},b.getInstance=function(){return this.instance_||(this.instance_=new b),this.instance_},b.instance_=null,b}(),t=function(a,b){for(var c=0,d=Object.keys(b);c<d.length;c++){var e=d[c];Object.defineProperty(a,e,{value:b[e],enumerable:!1,writable:!1,configurable:!0})}return a},u=function(a){return a&&a.ownerDocument&&a.ownerDocument.defaultView||m},v=j(0,0,0,0),w=function(){return"undefined"!=typeof SVGGraphicsElement?function(a){return a instanceof u(a).SVGGraphicsElement}:function(a){return a instanceof u(a).SVGElement&&"function"==typeof a.getBBox}}(),x=function(){function a(a){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=j(0,0,0,0),this.target=a}return a.prototype.isActive=function(){var a=h(this.target);return this.contentRect_=a,a.width!==this.broadcastWidth||a.height!==this.broadcastHeight},a.prototype.broadcastRect=function(){var a=this.contentRect_;return this.broadcastWidth=a.width,this.broadcastHeight=a.height,a},a}(),y=function(){function a(a,b){var c=i(b);t(this,{target:a,contentRect:c})}return a}(),z=function(){function a(a,b,c){if(this.activeObservations_=[],this.observations_=new k,"function"!=typeof a)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=a,this.controller_=b,this.callbackCtx_=c}return a.prototype.observe=function(a){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(a instanceof u(a).Element))throw new TypeError('parameter 1 is not of type "Element".');var b=this.observations_;b.has(a)||(b.set(a,new x(a)),this.controller_.addObserver(this),this.controller_.refresh())}},a.prototype.unobserve=function(a){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(a instanceof u(a).Element))throw new TypeError('parameter 1 is not of type "Element".');var b=this.observations_;b.has(a)&&(b.delete(a),b.size||this.controller_.removeObserver(this))}},a.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},a.prototype.gatherActive=function(){var a=this;this.clearActive(),this.observations_.forEach(function(b){b.isActive()&&a.activeObservations_.push(b)})},a.prototype.broadcastActive=function(){if(this.hasActive()){var a=this.callbackCtx_,b=this.activeObservations_.map(function(a){return new y(a.target,a.broadcastRect())});this.callback_.call(a,b,a),this.clearActive()}},a.prototype.clearActive=function(){this.activeObservations_.splice(0)},a.prototype.hasActive=function(){return this.activeObservations_.length>0},a}(),A="undefined"!=typeof WeakMap?new WeakMap:new k,B=function(){function a(b){if(!(this instanceof a))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var c=s.getInstance(),d=new z(b,c,this);A.set(this,d)}return a}();return["observe","unobserve","disconnect"].forEach(function(a){B.prototype[a]=function(){var b;return(b=A.get(this))[a].apply(b,arguments)}}),function(){return void 0!==m.ResizeObserver?m.ResizeObserver:B}()}),function(a,b){b.$=a}(jQuery,window.FooGallery=window.FooGallery||{}),function(a){if(!a)return void console.warn("jQuery must be included in the page prior to the FooGallery.utils library.");(function(){try{return!!window.FooGallery.utils}catch(a){return!1}})()||(window.FooGallery.utils={$:a,version:"0.2.2"})}(jQuery),function(a,b){"0.2.2"===b.version&&(b.is={},b.is.array=function(a){return"[object Array]"===Object.prototype.toString.call(a)},b.is.boolean=function(a){return"[object Boolean]"===Object.prototype.toString.call(a)},b.is.element=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:!!a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName},b.is.empty=function(a){if(b.is.undef(a)||null===a)return!0;if(b.is.number(a)&&0===a)return!0;if(b.is.boolean(a)&&!1===a)return!0;if(b.is.string(a)&&0===a.length)return!0;if(b.is.array(a)&&0===a.length)return!0;if(b.is.jq(a)&&0===a.length)return!0;if(b.is.hash(a)){for(var c in a)if(a.hasOwnProperty(c))return!1;return!0}return!1},b.is.error=function(a){return"[object Error]"===Object.prototype.toString.call(a)},b.is.fn=function(a){return a===window.alert||"[object Function]"===Object.prototype.toString.call(a)},b.is.hash=function(a){return b.is.object(a)&&a.constructor===Object&&!a.nodeType&&!a.setInterval},b.is.jq=function(c){return!b.is.undef(a)&&c instanceof a},b.is.number=function(a){return"[object Number]"===Object.prototype.toString.call(a)&&!isNaN(a)},b.is.object=function(a){return"[object Object]"===Object.prototype.toString.call(a)&&!b.is.undef(a)&&null!==a},b.is.promise=function(a){return b.is.object(a)&&b.is.fn(a.then)&&b.is.fn(a.promise)},b.is.size=function(a){return!!(b.is.string(a)&&!b.is.empty(a)||b.is.number(a))&&/^(auto|none|(?:[\d.]*)+?(?:%|px|mm|q|cm|in|pt|pc|em|ex|ch|rem|vh|vw|vmin|vmax)?)$/.test(a)},b.is.string=function(a){return"[object String]"===Object.prototype.toString.call(a)},b.is.undef=function(a){return void 0===a})}(FooGallery.utils.$,FooGallery.utils),function(a,b,c){if("0.2.2"===b.version){b.fn={};var d=Function.prototype.toString;b.fn.CONTAINS_SUPER=/xyz/.test(d.call(function(){xyz}))?/\b_super\b/:/.*/,b.fn.addOrOverride=function(a,e,f){if(c.object(a)&&c.string(e)&&!c.empty(e)&&c.fn(f)){var g=a[e],h=c.fn(g)&&b.fn.CONTAINS_SUPER.test(d.call(f));a[e]=h?function(a,b){return function(){var c=this._super;this._super=a;var d=b.apply(this,arguments);return this._super=c,d}}(g,f):f}},b.fn.apply=function(a,b){function d(){return a.apply(this,b)}return b=c.array(b)?b:[],d.prototype=a.prototype,new d},b.fn.arg2arr=function(a){return Array.prototype.slice.call(a)},b.fn.debounce=function(a,c){var d;return function(){var e=this,f=b.fn.arg2arr(arguments);clearTimeout(d),d=setTimeout(function(){a.apply(e,f)},c)}},b.fn.throttle=function(a,c){var d,e;return function(){var f=this,g=b.fn.arg2arr(arguments);d?(clearTimeout(e),e=setTimeout(function(){Date.now()-d>=c&&(a.apply(f,g),d=Date.now())},c-(Date.now()-d))):(a.apply(f,g),d=Date.now())}},b.fn.check=function(d,e,f,g){function h(a){return function(){return a.apply(d,arguments)}}return f=c.fn(f)?f:a.noop,d=c.object(d)?d:window,e=c.string(e)?b.fn.fetch(e,g):e,h(c.fn(e)?e:f)},b.fn.fetch=function(b,d){return!c.string(b)||c.empty(b)?null:(d=c.object(d)?d:window,a.each(b.split("."),function(a,b){if(!d[b])return!1;d=d[b]}),c.fn(d)?d:null)},b.fn.enqueue=function(d,e,f,g){function h(a,b){try{return n.push(a),b.apply(a,i)}catch(a){return j.reject(a,n),j}}var i=b.fn.arg2arr(arguments),j=a.Deferred(),k=a.Deferred(),l=k.promise(),m=[],n=[],o=!0;return d=i.shift(),e=i.shift(),a.each(d,function(a,d){c.fn(d[e])&&(l=l.then(function(){if(!o){var a=b.fn.arg2arr(arguments);m.push(a)}return o=!1,h(d,d[e])}))}),l.then(function(){if(!o){var a=b.fn.arg2arr(arguments);m.push(a)}o=!1,j.resolve(m)}),l.fail(function(){var a=b.fn.arg2arr(arguments);a.push(n),j.reject.apply(j,a)}),k.resolve(),j.promise()},b.fn.when=function(b){function d(){--g||e.resolve(f)}if(!c.array(b)||c.empty(b))return a.when();for(var e=a.Deferred(),f=[],g=b.length,h=0;h<b.length;h++)c.promise(b[h])?b[h].then(function(a){f.push(a)}).always(d):d();return e.promise()},b.fn.rejectWith=function(c,d){var e=a.Deferred(),f=b.fn.arg2arr(arguments);return e.reject.apply(e,f).promise()},b.fn.resolveWith=function(c,d){var e=a.Deferred(),f=b.fn.arg2arr(arguments);return e.resolve.apply(e,f).promise()},b.fn.resolved=a.Deferred().resolve().promise(),b.fn.rejected=a.Deferred().reject().promise()}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is),function(a,b){if("0.2.2"===a.version){a.url={};var c=document.createElement("a");a.url.parts=function(a){c.href=a;var b=c.port?c.port:-1!==["http:","https:"].indexOf(c.protocol)?"https:"===c.protocol?"443":"80":"",d=c.hostname+(b?":"+b:""),e=c.origin?c.origin:c.protocol+"//"+d,f="/"===c.pathname.slice(0,1)?c.pathname:"/"+c.pathname;return{hash:c.hash,host:d,hostname:c.hostname,href:c.href,origin:e,pathname:f,port:b,protocol:c.protocol,search:c.search}},a.url.full=function(a){return!b.string(a)||b.empty(a)?null:(c.href=a,c.href)},a.url.param=function(a,c,d){if(!b.string(a)||!b.string(c)||b.empty(c))return a;var e,f,g,h;return b.undef(d)?(e=new RegExp("[?|&]"+c+"=([^&;]+?)(&|#|;|$)"),f=e.exec(a)||["",""],g=f[1].replace(/\+/g,"%20"),b.string(g)&&!b.empty(g)?decodeURIComponent(g):null):(b.empty(d)?(e=new RegExp("^([^#]*?)(([^#]*)&)?"+c+"(=[^&#]*)?(&|#|$)"),g=a.replace(e,"$1$3$5").replace(/^([^#]*)((\?)&|\?(#|$))/,"$1$3$4")):(e=new RegExp("([?&])"+c+"[^&]*"),h=c+"="+encodeURIComponent(d),(g=a.replace(e,"$1"+h))!==a||e.test(g)||(g+=(-1!==g.indexOf("?")?"&":"?")+h)),g)}}}(FooGallery.utils,FooGallery.utils.is),function(a,b,c){"0.2.2"===a.version&&(a.str={},a.str.camel=function(a){return b.empty(a)?a:a.toUpperCase()===a?a.toLowerCase():a.replace(/^([A-Z])|[-\s_]+(\w)/g,function(a,c,d){return b.string(d)?d.toUpperCase():c.toLowerCase()})},a.str.kebab=function(a){return b.empty(a)?a:a.match(/[A-Z]{2,}(?=[A-Z][a-z0-9]*|\b)|[A-Z]?[a-z0-9]*|[A-Z]|[0-9]+/g).filter(Boolean).map(function(a){return a.toLowerCase()}).join("-")},a.str.contains=function(a,c,d){return!(!b.string(a)||b.empty(a)||!b.string(c)||b.empty(c))&&(c.length<=a.length&&-1!==(d?a.toUpperCase().indexOf(c.toUpperCase()):a.indexOf(c)))},a.str.containsWord=function(a,c,d){if(!b.string(a)||b.empty(a)||!b.string(c)||b.empty(c)||a.length<c.length)return!1;for(var e=a.split(/\W/),f=0,g=e.length;f<g;f++)if(d?e[f].toUpperCase()===c.toUpperCase():e[f]===c)return!0;return!1},a.str.endsWith=function(a,c){return!b.string(a)||b.empty(a)||!b.string(c)||b.empty(c)?a===c:a.slice(a.length-c.length)===c},a.str.escapeRegExp=function(a){return b.empty(a)?a:a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},a.str.fnv1a=function(a){if(!b.string(a)||b.empty(a))return null;var c,d,e=2166136261;for(c=0,d=a.length;c<d;c++)e^=a.charCodeAt(c),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);return e>>>0},a.str.from=function(b,c){return a.str.contains(b,c)?b.substring(b.indexOf(c)+c.length):null},a.str.join=function(d,e,f){if(!b.string(d)||!b.string(e))return null;var g=c.arg2arr(arguments);d=g.shift();var h,i,j=g.shift();for(h=0,i=g.length;h<i;h++)e=g[h],b.empty(e)||(a.str.endsWith(j,d)&&(j=j.slice(0,j.length-d.length)),a.str.startsWith(e,d)&&(e=e.slice(d.length)),j+=d+e);return j},a.str.startsWith=function(a,c){return!b.empty(a)&&!b.empty(c)&&a.slice(0,c.length)===c},a.str.until=function(b,c){return a.str.contains(b,c)?b.substring(0,b.indexOf(c)):b},a.str.format=function(d,e,f){var g=c.arg2arr(arguments);return d=g.shift(),b.string(d)&&g.length>0&&(1===g.length&&(b.array(g[0])||b.object(g[0]))&&(g=g[0]),a.each(g,function(a,b){d=d.replace(new RegExp("\\{"+b+"\\}","gi"),a+"")})),d})}(FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn),function(a,b,c,d,e){if("0.2.2"===b.version){b.obj={};var f=function(){};b.obj.create=function(a){if(!c.object(a))throw TypeError("Argument must be an object");f.prototype=a;var b=new f;return f.prototype=null,b},b.obj.extend=function(e,f,g){e=c.object(e)?e:{};var h=d.arg2arr(arguments);return h.shift(),a.each(h,function(a,c){b.obj.merge(e,c)}),e},b.obj.merge=function(a,d){a=c.hash(a)?a:{},d=c.hash(d)?d:{};for(var e in d)d.hasOwnProperty(e)&&(c.hash(d[e])?(a[e]=c.hash(a[e])?a[e]:{},b.obj.merge(a[e],d[e])):c.array(d[e])?a[e]=d[e].slice():a[e]=d[e]);return a},b.obj.mergeValid=function(d,e,f,g){if(!c.hash(f)||!c.hash(e))return d;e=c.hash(e)?e:{},g=c.hash(g)?g:{};var h,i,j;for(h in e)e.hasOwnProperty(h)&&c.fn(e[h])&&(i=c.array(g[h])?g[h]:c.string(g[h])?[g[h]]:[h],a.each(i,function(a,g){if(j=b.obj.prop(f,g),!c.undef(j))return e[h](j)?(b.obj.prop(d,h,j),!1):void 0}));return d},b.obj.prop=function(b,d,f){if(c.object(b)&&!c.empty(d)){var g,h;if(c.undef(f))return e.contains(d,".")?(g=d.split("."),h=g.length-1,a.each(g,function(a,d){if(a===h)f=b[d];else{if(!c.hash(b[d]))return!1;b=b[d]}})):c.undef(b[d])||(f=b[d]),f;e.contains(d,".")?(g=d.split("."),h=g.length-1,a.each(g,function(a,d){a===h?b[d]=f:b=c.hash(b[d])?b[d]:b[d]={}})):c.undef(b[d])||(b[d]=f)}}}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.str),function(a,b,c){if("0.2.2"===b.version){b.ready=function(a){function c(){try{a.call(window,b.$)}catch(a){console.error(a)}}(Function("/*@cc_on return true@*/")()?"complete"===document.readyState:"loading"!==document.readyState)?c():document.addEventListener("DOMContentLoaded",c,!1)},b.find=function(a,b,d){if(c.fn(b)){d=c.undef(d)?b:d;var e,f;if(c.array(a)){for(e=0,f=a.length;e<f;e++)if(b.call(d,a[e],e,a))return a[e]}else if(c.object(a)){var g=Object.keys(a);for(e=0,f=g.length;e<f;e++)if(b.call(d,a[g[e]],g[e],a))return a[g[e]]}}},b.each=function(a,b,d){if(c.fn(b)){d=c.undef(d)?b:d;var e,f;if(c.array(a))for(e=0,f=a.length;e<f&&!1!==b.call(d,a[e],e,a);e++);else if(c.object(a)){var g=Object.keys(a);for(e=0,f=g.length;e<f&&!1!==b.call(d,a[g[e]],g[e],a);e++);}}},b.inArray=function(a,b){return c.array(b)?b.indexOf(a):-1},b.versionCompare=function(a,b){function c(a){for(var b=a.split("."),c=[],d=0,e=b.length;d<e;d++)c[d]=parseInt(b[d]),isNaN(c[d])&&(c[d]=0);return c}if(!/[\d.]/.test(a)||!/[\d.]/.test(b))return NaN;for(var d=c(a),e=c(b);d.length<e.length;)d.push(0);for(;e.length<d.length;)e.push(0);for(var f=0;f<d.length;++f){if(e.length===f)return 1;if(d[f]!==e[f])return d[f]>e[f]?1:-1}return d.length!==e.length?-1:0};var d=0;b.uniqueId=function(a,b){var e=a.attr("id");return c.empty(e)&&(b=c.string(b)&&!c.empty(b)?b:"uid-",e=b+ ++d,a.attr("id",e).data("__uniqueId__",!0)),e},b.removeUniqueId=function(a){a.data("__uniqueId__")&&a.removeAttr("id").removeData("__uniqueId__")},b.selectify=function(a){if(c.empty(a))return null;if(c.hash(a)){var d,e={};for(var f in a)a.hasOwnProperty(f)&&(d=b.selectify(a[f]))&&(e[f]=d);return e}return c.string(a)||c.array(a)?(c.string(a)&&(a=[a]),a.map(function(a){return c.string(a)?"."+a.split(/\s/g).join("."):null}).join(",")):null},b.src=function(a,b,d,e,f,g,h){if(!c.string(a))return null;if(!c.string(b))return a;var i=b.replace(/(\s[\d.]+[whx]),/g,"$1 @,@ ").split(" @,@ "),j=i.map(function(a){return{url:/^\s*(\S*)/.exec(a)[1],w:parseFloat((/\S\s+(\d+)w/.exec(a)||[0,1/0])[1]),h:parseFloat((/\S\s+(\d+)h/.exec(a)||[0,1/0])[1]),x:parseFloat((/\S\s+([\d.]+)x/.exec(a)||[0,1])[1])}});if(!j.length)return a;j.unshift({url:a,w:j[0].w!==1/0&&j[0].h===1/0?d:1/0,h:j[0].h!==1/0&&j[0].w===1/0?e:1/0,x:1});var k=c.number(h)?h:window.devicePixelRatio||1,l={w:f*k,h:g*k,x:k},m=["w","h","x"];return m.forEach(function(a){var b=Math.max.apply(null,j.map(function(b){return b[a]}));j=j.filter(function(c){return c[a]>=l[a]||c[a]===b})}),m.forEach(function(a){var b=Math.min.apply(null,j.map(function(b){return b[a]}));j=j.filter(function(c){return c[a]===b})}),j[0].url},b.scrollParent=function(b,d,e){b=c.jq(b)?b:a(b),d=c.string(d)&&/^(x|y|xy|yx)$/i.test(d)?d:"xy";var f=a(!!b.length&&b[0].ownerDocument||document);if(e=c.jq(e)?e:f,!b.length)return e;var g=b.css("position"),h="absolute"===g,i=/(auto|scroll)/i,j=/x/i,k=/y/i,l=b.parentsUntil(e).filter(function(b,c){var e=a(this);if(h&&"static"===e.css("position"))return!1;var f=k.test(d)&&c.scrollHeight>c.clientHeight&&i.test(e.css("overflow-y")),g=j.test(d)&&c.scrollWidth>c.clientWidth&&i.test(e.css("overflow-x"));return f||g}).eq(0);return l.is("html")&&(l=f),"fixed"!==g&&l.length?l:e}}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is),function(a,b,c){function d(a){return setTimeout(a,1e3/60)}function e(a){clearTimeout(a)}if("0.2.2"===b.version){b.animation={},b.animation.requestFrame=(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||d).bind(window),b.animation.cancelFrame=(window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame||e).bind(window);var f=document.createElement("div");b.animation.supported=function(a){var b=a.style;return c.string(b.animation)||c.string(b.WebkitAnimation)||c.string(b.MozAnimation)||c.string(b.msAnimation)||c.string(b.OAnimation)}(f),b.animation.end=function(a){var b=a.style;return c.string(b.animation)?"animationend":c.string(b.WebkitAnimation)?"webkitAnimationEnd":c.string(b.MozAnimation)?"animationend":c.string(b.msAnimation)?"msAnimationEnd":c.string(b.OAnimation)?"oAnimationEnd":null}(f),b.animation.duration=function(a,b){if(b=c.number(b)?b:0,!c.jq(a))return b;var d=a.css("animation-duration");if(/^([\d.]*)+?(ms|s)/i.test(d)){var e=d.split(","),f=0;return e.forEach(function(a){var b=a.match(/^\s*?([\d.]*)+?(ms|s)\s*?$/i),c=parseFloat(b[1]);"s"===b[2].toLowerCase()&&(c*=1e3),c>f&&(f=c)}),f}return b},b.animation.iterations=function(a,b){if(b=c.number(b)?b:1,!c.jq(a))return b;var d=a.css("animation-iteration-count");if(/^(([\d.]+)|infinite)/i.test(d)){var e=d.split(","),f=0;return e.forEach(function(a){var b=parseFloat(a);isNaN(b)&&(b=1/0),b>f&&(f=b)}),f}return b},b.animation.start=function(d,e,f,g){var h=a.Deferred(),i=h.promise();if(d=d.first(),b.animation.supported){d.prop("offsetTop");var j=d.data("animation_safety");if(c.hash(j)&&c.number(j.timer)&&(clearTimeout(j.timer),d.removeData("animation_safety").off(b.animation.end+".utils"),j.deferred.reject()),!c.number(g)){var k=b.animation.iterations(d);if(k===1/0)return h.reject("No timeout supplied with an infinite animation."),i;g=b.animation.duration(d)*k+50}j={deferred:h,timer:setTimeout(function(){d.removeData("animation_safety").off(b.animation.end+".utils"),h.resolve()},g)},d.data("animation_safety",j),d.on(b.animation.end+".utils",function(a){d.is(a.target)&&(clearTimeout(j.timer),d.removeData("animation_safety").off(b.animation.end+".utils"),h.resolve())})}return b.animation.requestFrame(function(){c.fn(e)?e.apply(d.get(0),[d]):d.toggleClass(e,f),b.animation.supported||h.resolve()}),i}}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d){if("0.2.2"===b.version){b.transition={};var e=document.createElement("div");b.transition.supported=function(a){var b=a.style;return c.string(b.transition)||c.string(b.WebkitTransition)||c.string(b.MozTransition)||c.string(b.msTransition)||c.string(b.OTransition)}(e),b.transition.end=function(a){var b=a.style;return c.string(b.transition)?"transitionend":c.string(b.WebkitTransition)?"webkitTransitionEnd":c.string(b.MozTransition)?"transitionend":c.string(b.msTransition)?"msTransitionEnd":c.string(b.OTransition)?"oTransitionEnd":null}(e),b.transition.duration=function(a,b){if(b=c.number(b)?b:0,!c.jq(a))return b;var d=a.css("transition-duration");if(/^([\d.]*)+?(ms|s)/i.test(d)){var e=d.split(","),f=0;return e.forEach(function(a){var b=a.match(/^\s*?([\d.]*)+?(ms|s)\s*?$/i),c=parseFloat(b[1]);"s"===b[2].toLowerCase()&&(c*=1e3),c>f&&(f=c)}),f}return b},b.transition.start=function(e,f,g,h){var i=a.Deferred(),j=i.promise();if(e=e.first(),b.transition.supported){e.prop("offsetTop");var k=e.data("transition_safety");c.hash(k)&&c.number(k.timer)&&(clearTimeout(k.timer),e.removeData("transition_safety").off(b.transition.end+".utils"),k.deferred.reject()),h=c.number(h)?h:b.transition.duration(e)+50,k={deferred:i,timer:setTimeout(function(){e.removeData("transition_safety").off(b.transition.end+".utils"),i.resolve()},h)},e.data("transition_safety",k),e.on(b.transition.end+".utils",function(a){e.is(a.target)&&(clearTimeout(k.timer),e.removeData("transition_safety").off(b.transition.end+".utils"),i.resolve())})}return d.requestFrame(function(){c.fn(f)?f.apply(e.get(0),[e]):e.toggleClass(f,g),b.transition.supported||i.resolve()}),j}}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.animation),function(a,b,c,d,e){"0.2.2"===b.version&&(b.Class=function(){},b.Class.extend=function(a){function f(){if(!c.fn(this.construct))throw new SyntaxError('FooGallery.utils.Class objects must be constructed with the "new" keyword.');this.construct.apply(this,arguments)}a=c.hash(a)?a:{};var g=d.create(this.prototype);for(var h in a)a.hasOwnProperty(h)&&e.addOrOverride(g,h,a[h]);return g.construct=c.fn(g.construct)?g.construct:function(){},f.prototype=g,f.prototype.constructor=c.fn(g.__ctor__)?g.__ctor__:f,f.extend=b.Class.extend,f.override=b.Class.override,f.bases=b.Class.bases,f.__base__=this,
10
+ f},b.Class.override=function(a,b){e.addOrOverride(this.prototype,a,b)},b.Class.__base__=null,b.Class.bases=function(){function a(b,d){return c.array(d)||(d=[]),c.fn(b)&&null!==b.__base__?(d.unshift(b.__base__),a(b.__base__,d)):d}return a(this,[])})}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.obj,FooGallery.utils.fn),function(a,b,c){"0.2.2"===a.version&&(a.Event=a.Class.extend({construct:function(c){if(b.empty(c))throw new SyntaxError("FooGallery.utils.Event objects must be supplied a `type`.");var d=this,e=a.Event.parse(c);d.type=e.type,d.namespace=e.namespace,d.defaultPrevented=!1,d.target=null},preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return this.defaultPrevented}}),a.Event.parse=function(a){a=b.string(a)&&!b.empty(a)?a:null;var d=c.contains(a,".");return{namespaced:d,type:d?c.startsWith(a,".")?null:c.until(a,"."):a,namespace:d?c.from(a,"."):null}},a.EventClass=a.Class.extend({construct:function(){this.events={}},destroy:function(){this.events={}},on:function(a,c,d){var e=this;return b.object(a)?(d=c,Object.keys(a).forEach(function(c){b.fn(a[c])&&c.split(" ").forEach(function(b){e.addListener(b,a[c],d)})})):b.string(a)&&b.fn(c)&&a.split(" ").forEach(function(a){e.addListener(a,c,d)}),e},addListener:function(c,d,e){if(!b.string(c)||/\s/.test(c)||!b.fn(d))return!1;var f=this,g=a.Event.parse(c);return e=b.undef(e)?f:e,b.array(f.events[g.type])||(f.events[g.type]=[]),!f.events[g.type].some(function(a){return a.namespace===g.namespace&&a.fn===d&&a.thisArg===e})&&(f.events[g.type].push({namespace:g.namespace,fn:d,thisArg:e}),!0)},off:function(a,c,d){var e=this;return b.object(a)?(d=c,Object.keys(a).forEach(function(b){b.split(" ").forEach(function(c){e.removeListener(c,a[b],d)})})):b.string(a)&&a.split(" ").forEach(function(a){e.removeListener(a,c,d)}),e},removeListener:function(c,d,e){if(!b.string(c)||/\s/.test(c))return!1;var f=this,g=a.Event.parse(c),h=[];return e=b.undef(e)?f:e,b.empty(g.type)?b.empty(g.namespace)||h.push.apply(h,Object.keys(f.events)):h.push(g.type),h.forEach(function(a){b.array(f.events[a])&&(f.events[a]=f.events[a].filter(function(a){return null!=d?!(a.namespace===g.namespace&&a.fn===d&&a.thisArg===e):null!=g.namespace&&a.namespace!==g.namespace}),0===f.events[a].length&&delete f.events[a])}),!0},trigger:function(c,d){d=b.array(d)?d:[];var e=this,f=[];return c instanceof a.Event?(f.push(c),e.emit(c,d)):b.string(c)&&c.split(" ").forEach(function(b){var c=new a.Event(b);f.push(c),e.emit(c,d)}),b.empty(f)?null:1===f.length?f[0]:f},emit:function(a,c){if(a instanceof FooGallery.utils.Event){var d=this;c=b.array(c)?c:[],null===a.target&&(a.target=d),b.array(d.events[a.type])&&d.events[a.type].forEach(function(b){null!=a.namespace&&b.namespace!==a.namespace||b.fn.apply(b.thisArg,[a].concat(c))}),b.array(d.events.__all__)&&d.events.__all__.forEach(function(b){b.fn.apply(b.thisArg,[a].concat(c))})}}}))}(FooGallery.utils,FooGallery.utils.is,FooGallery.utils.str),function(a,b,c){if("0.2.2"===b.version){b.Bounds=b.Class.extend({construct:function(){var a=this;a.top=0,a.right=0,a.bottom=0,a.left=0,a.width=0,a.height=0},inflate:function(a){var b=this;return c.number(a)&&(b.top-=a,b.right+=a,b.bottom+=a,b.left-=a,b.width+=2*a,b.height+=2*a),b},intersects:function(a){var b=this;return b.left<=a.right&&a.left<=b.right&&b.top<=a.bottom&&a.top<=b.bottom}});var d;b.getViewportBounds=function(c){d||(d=a(window));var e=new b.Bounds;return e.top=d.scrollTop(),e.left=d.scrollLeft(),e.width=d.width(),e.height=d.height(),e.right=e.left+e.width,e.bottom=e.top+e.height,e.inflate(c),e},b.getElementBounds=function(d){c.jq(d)||(d=a(d));var e=new b.Bounds;if(0!==d.length){var f=d.offset();e.top=f.top,e.left=f.left,e.width=d.width(),e.height=d.height()}return e.right=e.left+e.width,e.bottom=e.top+e.height,e}}}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d,e){"0.2.2"===b.version&&(b.Timer=b.EventClass.extend({construct:function(a){this._super(),this.interval=c.number(a)?a:1e3,this.isRunning=!1,this.isPaused=!1,this.canResume=!1,this.canRestart=!1,this.__timeout=null,this.__decrement=!1,this.__time=0,this.__remaining=0,this.__current=0,this.__finish=0,this.__restart=[]},__reset:function(){clearTimeout(this.__timeout),this.__timeout=null,this.__decrement=!1,this.__time=0,this.__remaining=0,this.__current=0,this.__finish=0,this.isRunning=!1,this.isPaused=!1,this.canResume=!1},__eventArgs:function(a){return[this.__current,this.__time,this.__decrement].concat(d.arg2arr(arguments))},__tick:function(){var a=this;a.trigger("tick",a.__eventArgs()),a.__current===a.__finish?(a.trigger("complete",a.__eventArgs()),a.__reset()):(a.__decrement?a.__current--:a.__current++,a.__remaining--,a.canResume=a.__remaining>0,a.__timeout=setTimeout(function(){a.__tick()},a.interval))},start:function(a,b){var d=this;d.isRunning||(b=!!c.boolean(b)&&b,d.__restart=[a,b],d.__decrement=b,d.__time=a,d.__remaining=a,d.__current=b?a:0,d.__finish=b?0:a,d.canRestart=!0,d.isRunning=!0,d.isPaused=!1,d.trigger("start",d.__eventArgs()),d.__tick())},countdown:function(a){this.start(a,!0)},countup:function(a){this.start(a,!1)},restart:function(){this.stop(),this.canRestart&&this.start.apply(this,this.__restart)},stop:function(){(this.isRunning||this.isPaused)&&(this.__reset(),this.trigger("stop",this.__eventArgs()))},pause:function(){var a=this;return null!=a.__timeout&&(clearTimeout(a.__timeout),a.__timeout=null),a.isRunning&&(a.isRunning=!1,a.isPaused=!0,a.trigger("pause",a.__eventArgs())),a.__remaining},resume:function(){var a=this;a.canResume&&(a.isRunning=!0,a.isPaused=!1,a.trigger("resume",a.__eventArgs()),a.__tick())},reset:function(){this.__reset(),this.trigger("reset",this.__eventArgs())}}))}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.obj),function(a,b,c,d){"0.2.2"===b.version&&(b.Factory=b.Class.extend({construct:function(){this.registered={}},contains:function(a){return!c.undef(this.registered[a])},load:function(b,e,f){var g,h,i=this,j=d.arg2arr(arguments),k=[],l=[];b=j.shift()||{};for(g in i.registered)if(i.registered.hasOwnProperty(g)){var m=i.registered[g];b.hasOwnProperty(g)&&(h=b[g],c.string(h)&&(h=d.fetch(b[g])),c.fn(h)&&(m={name:g,klass:h,priority:i.registered[g].priority})),k.push(m)}for(g in b)b.hasOwnProperty(g)&&!i.registered.hasOwnProperty(g)&&(h=b[g],c.string(h)&&(h=d.fetch(b[g])),c.fn(h)&&k.push({name:g,klass:h,priority:0}));return k.sort(function(a,b){return b.priority-a.priority}),a.each(k,function(a,b){c.fn(b.klass)&&l.push(d.apply(b.klass,j))}),l},make:function(a,b,e){var f,g=this,h=d.arg2arr(arguments);return a=h.shift(),f=g.registered[a],c.hash(f)&&c.fn(f.klass)?d.apply(f.klass,h):null},names:function(b){b=!!c.boolean(b)&&b;var d,e=[];if(b){var f=[];for(d in this.registered)this.registered.hasOwnProperty(d)&&f.push(this.registered[d]);f.sort(function(a,b){return b.priority-a.priority}),a.each(f,function(a,b){e.push(b.name)})}else for(d in this.registered)this.registered.hasOwnProperty(d)&&e.push(d);return e},register:function(a,b,d){if(!c.string(a)||c.empty(a)||!c.fn(b))return!1;d=c.number(d)?d:0;var e=this.registered[a];return this.registered[a]={name:a,klass:b,priority:c.undef(e)?d:e.priority},!0}}))}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn),function(a,b,c){"0.2.2"===b.version&&(b.FullscreenAPI=b.EventClass.extend({construct:function(){this._super(),this.apis={w3:{enabled:"fullscreenEnabled",element:"fullscreenElement",request:"requestFullscreen",exit:"exitFullscreen",events:{change:"fullscreenchange",error:"fullscreenerror"}},webkit:{enabled:"webkitFullscreenEnabled",element:"webkitCurrentFullScreenElement",request:"webkitRequestFullscreen",exit:"webkitExitFullscreen",events:{change:"webkitfullscreenchange",error:"webkitfullscreenerror"}},moz:{enabled:"mozFullScreenEnabled",element:"mozFullScreenElement",request:"mozRequestFullScreen",exit:"mozCancelFullScreen",events:{change:"mozfullscreenchange",error:"mozfullscreenerror"}},ms:{enabled:"msFullscreenEnabled",element:"msFullscreenElement",request:"msRequestFullscreen",exit:"msExitFullscreen",events:{change:"MSFullscreenChange",error:"MSFullscreenError"}}},this.api=this.getAPI(),this.supported=null!=this.api,this.__listen()},destroy:function(){return this.__stopListening(),this._super()},getAPI:function(){for(var a in this.apis)if(this.apis.hasOwnProperty(a)&&this.apis[a].enabled in document)return this.apis[a];return null},element:function(){return this.supported?document[this.api.element]:null},request:function(b){if(this.supported&&b[this.api.request]){var d=b[this.api.request]();return d||a.Deferred(this.__resolver(this.api.request)).promise()}return c.rejected},exit:function(){if(this.supported&&this.element()){var b=document[this.api.exit]();return b||a.Deferred(this.__resolver(this.api.exit)).promise()}return c.rejected},toggle:function(a){return this.element()?this.exit():this.request(a)},__listen:function(){var b=this;b.supported&&a(document).on(b.api.events.change+".utils",function(){b.trigger("change")}).on(b.api.events.error+".utils",function(){b.trigger("error")})},__stopListening:function(){var b=this;b.supported&&a(document).off(b.api.events.change+".utils").off(b.api.events.error+".utils")},__resolver:function(b){var c=this;return function(d){function e(){d.resolve(),a(document).off(c.api.events.change,e).off(c.api.events.error,f)}function f(){d.reject(new TypeError),a(document).off(c.api.events.change,e).off(c.api.events.error,f)}if(b===c.api.exit&&c.element())return void setTimeout(function(){d.reject(new TypeError)},1);a(document).on(c.api.events.change,e).on(c.api.events.error,f)}}}))}(FooGallery.utils.$,FooGallery.utils,FooGallery.utils.fn),function(a,b,c,d,e){b.EMPTY_IMAGE="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",b.DATA_TEMPLATE="__FooGallery__",b.DATA_ITEM="__FooGalleryItem__",b.get=function(c){return a(c).data(b.DATA_TEMPLATE)},b.init=function(c,f){if(f=d.jq(f)?f:a(f),f.length>0){var g=f.data(b.DATA_TEMPLATE);if(g instanceof b.Template)return g.destroy(!0).then(function(){var a=b.template.make(c,f);return a instanceof b.Template?a.initialize():e.rejected})}var h=b.template.make(c,f);return h instanceof b.Template?h.initialize():e.rejected},b.initAll=function(c){return e.when(a(".foogallery").map(function(a,d){return b.init(c,d)}).get())},a.fn.foogallery=function(c,e){return e=d.fn(e)?e:a.noop,this.each(function(f,g){if(d.string(c)){var h=a.data(g,b.DATA_TEMPLATE);if(h instanceof b.Template)switch(c){case"layout":return void h.layout();case"destroy":return void h.destroy()}}else b.init(c,g).then(e)})},b.isCached=function(a){var b=new Image;b.src=a;var c=b.complete;return b.src="",b=null,c},b.supportedExifProperties=["aperture","camera","date","exposure","focalLength","iso","orientation"],d.exif=function(a){if(d.object(a)){var c=Object.keys(a);return c.length>0&&c.some(function(c){return-1!==b.supportedExifProperties.indexOf(c)&&!d.empty(a[c])})}return!1}}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.str),function(a,b,c,d,e){var f="__FooGallerySwipe__",g="ontouchstart"in window,h=window.navigator.msPointerEnabled&&!window.navigator.pointerEnabled&&!g,i=(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&!g,j=g||i;b.Swipe=c.Class.extend({construct:function(b,c){var d=this,f=".fgswipe";d.$el=a(b),d.opt=e.extend({threshold:20,allowPageScroll:!1,swipe:a.noop,data:{}},c),d.active=!1,d.startPoint=null,d.endPoint=null,d.events={start:(j?i?h?"MSPointerDown":"pointerdown":"touchstart":"mousedown")+f,move:(j?i?h?"MSPointerMove":"pointermove":"touchmove":"mousemove")+f,end:(j?i?h?"MSPointerUp":"pointerup":"touchend":"mouseup")+f,leave:(j?i?"mouseleave":null:"mouseleave")+f}},init:function(){var a=this;a.$el.on(a.events.start,{self:a},a.onStart),a.$el.on(a.events.move,{self:a},a.onMove),a.$el.on(a.events.end,{self:a},a.onEnd),d.string(a.events.leave)&&a.$el.on(a.events.leave,{self:a},a.onEnd),a.$el.data(f,a)},destroy:function(){var a=this;a.$el.off(a.events.start,a.onStart),a.$el.off(a.events.move,a.onMove),a.$el.off(a.events.end,a.onEnd),d.string(a.events.leave)&&a.$el.off(a.events.leave,a.onEnd),a.$el.removeData(f)},getAngle:function(a,b){var c=Math.atan2(a.x-b.x,a.y-b.y),d=Math.round(180*c/Math.PI);return 360-(d<0?360-Math.abs(d):d)},getDistance:function(a,b){var c=b.x-a.x,d=b.y-a.y;return c*=c,d*=d,Math.sqrt(c+d)},getDirection:function(a,b){var c=this,d=c.getAngle(a,b);return d>337.5||d<=22.5?"N":d>22.5&&d<=67.5?"NE":d>67.5&&d<=112.5?"E":d>112.5&&d<=157.5?"SE":d>157.5&&d<=202.5?"S":d>202.5&&d<=247.5?"SW":d>247.5&&d<=292.5?"W":d>292.5&&d<=337.5?"NW":"NONE"},getPoint:function(a){var b;return j&&!d.empty(b=a.originalEvent.touches||a.touches)?{x:b[0].pageX,y:b[0].pageY}:d.number(a.pageX)&&d.number(a.pageY)?{x:a.pageX,y:a.pageY}:null},getOffset:function(a){var b=this,c=b.$el.offset();return{left:a.x-c.left,top:a.y-c.top}},onStart:function(a){var b=a.data.self,c=b.getPoint(a);d.empty(c)||(b.active=!0,b.startPoint=b.endPoint=c)},onMove:function(a){var b=a.data.self,e=b.getPoint(a);if(b.active&&!d.empty(e))if(b.endPoint=e,b.opt.allowPageScroll){if(d.hash(b.opt.allowPageScroll)){var f=b.getDirection(b.startPoint,b.endPoint);b.opt.allowPageScroll.x||-1===c.inArray(f,["NE","E","SE","NW","W","SW"])||a.preventDefault(),b.opt.allowPageScroll.y||-1===c.inArray(f,["NW","N","NE","SW","S","SE"])||a.preventDefault()}}else a.preventDefault()},onEnd:function(a){var b=a.data.self;if(b.active){b.active=!1;var c={startPoint:b.startPoint,endPoint:b.endPoint,startOffset:b.getOffset(b.startPoint),endOffset:b.getOffset(b.endPoint),angle:b.getAngle(b.startPoint,b.endPoint),distance:b.getDistance(b.startPoint,b.endPoint),direction:b.getDirection(b.startPoint,b.endPoint)};if(b.opt.threshold>0&&c.distance<b.opt.threshold)return;b.opt.swipe.apply(this,[c,b.opt.data]),b.startPoint=null,b.endPoint=null}}}),a.fn.fgswipe=function(c){return this.each(function(){var e=a(this),g=e.data(f);if(g instanceof b.Swipe){if(d.string(c)&&d.fn(g[c]))return void g[c]();g.destroy()}d.hash(c)&&(g=new b.Swipe(this,c),g.init())})}}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.obj),function(a,b,c,d,e,f){b.TemplateFactory=c.Factory.extend({construct:function(){this.registered={}},register:function(a,b,c,e,f,g){var h=this,i=h._super(a,b,g);if(i){var j=h.registered;j[a].opt=d.hash(c)?c:{},j[a].cls=d.hash(e)?e:{},j[a].il8n=d.hash(f)?f:{}}return i},make:function(b,c){c=d.jq(c)?c:a(c),b=f.extend({},b,c.data("foogallery"));var e=this,g=e.type(b,c);return e.contains(g)?(b=e.options(g,b),e._super(g,b,c)):null},type:function(b,e){e=d.jq(e)?e:a(e);var f=this,g=d.hash(b)&&d.hash(b)&&d.string(b.type)&&f.contains(b.type)?b.type:null;if(null===g&&e.length>0)for(var h=f.registered,i=f.names(!0),j=0,k=i.length;j<k;j++)if(h.hasOwnProperty(i[j])&&"core"!==i[j]){var l=i[j],m=h[l].cls;if(d.string(m.container)){var n=c.selectify(m.container);if(e.is(n)){g=i[j];break}}}return g},configure:function(a,b,c,d){var e=this;if(e.contains(a)){var g=e.registered;f.extend(g[a].opt,b),f.extend(g[a].cls,c),f.extend(g[a].il8n,d)}},options:function(a,c){c=f.extend({type:a},c);var e=this,g=e.registered,h=g.core.opt,i=g.core.cls,j=g.core.il8n;return d.hash(c.cls)||(c.cls={}),d.hash(c.il8n)||(c.il8n={}),d.undef(b.filtering)||(c=b.filtering.merge(c)),d.undef(b.paging)||(c=b.paging.merge(c)),"core"!==a&&e.contains(a)?(c=f.extend({},h,g[a].opt,c),c.cls=f.extend({},i,g[a].cls,c.cls),c.il8n=f.extend({},j,g[a].il8n,c.il8n)):(c=f.extend({},h,c),c.cls=f.extend({},i,c.cls),c.il8n=f.extend({},j,c.il8n)),c}}),b.template=new b.TemplateFactory}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.obj),function(a,b,c,d,e){a.PagingFactory=b.Factory.extend({construct:function(){this.registered={}},register:function(a,b,d,e,f,g,h){var i=this,j=i._super(a,b,h);if(j){var k=i.registered;k[a].ctrl=c.fn(d)?d:null,k[a].opt=c.hash(e)?e:{},k[a].cls=c.hash(f)?f:{},k[a].il8n=c.hash(g)?g:{}}return j},type:function(a){var b,d=this;return c.hash(a)&&c.hash(b=a.paging)&&c.string(b.type)&&d.contains(b.type)?b.type:null},merge:function(a){a=e.extend({},a);var b=this,d=b.type(a),f=b.registered,g=f.default.opt,h=f.default.cls,i=f.default.il8n,j=c.hash(a.paging)?a.paging:{},k=c.hash(a.cls)&&c.hash(a.cls.paging)?e.extend({},a.cls.paging):{},l=c.hash(a.il8n)&&c.hash(a.il8n.paging)?e.extend({},a.il8n.paging):{};return c.hash(a.cls)||(a.cls={}),c.hash(a.il8n)||(a.il8n={}),"default"!==d&&b.contains(d)?(a.paging=e.extend({},g,f[d].opt,j,{type:d}),a.cls=e.extend(a.cls,{paging:h},{paging:f[d].cls},{paging:k}),a.il8n=e.extend(a.il8n,{paging:i},{paging:f[d].il8n},{paging:l})):(a.paging=e.extend({},g,j,{type:d}),a.cls=e.extend(a.cls,{paging:h},{paging:k}),a.il8n=e.extend(a.il8n,{paging:i},{paging:l})),a},configure:function(a,b,c,d){var f=this;if(f.contains(a)){var g=f.registered;e.extend(g[a].opt,b),e.extend(g[a].cls,c),e.extend(g[a].il8n,d)}},hasCtrl:function(a){var b=this,d=b.registered[a];return c.hash(d)&&c.fn(d.ctrl)},makeCtrl:function(a,b,d,e){var f=this,g=f.registered[a];return c.hash(g)&&c.fn(g.ctrl)?new g.ctrl(b,d,e):null}}),a.paging=new a.PagingFactory}(FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.obj),function(a,b,c,d,e,f){var g=0;b.Template=c.EventClass.extend({construct:function(e,f){var h=this;h._super(),h.namespace=".foogallery-"+ ++g,h.$el=d.jq(f)?f:a(f),h.$scrollParent=null,h.opt=e,h.template=e.template,h.id=h.$el.prop("id")||e.id,h.cls=e.cls,h.il8n=e.il8n,h.sel=c.selectify(h.cls),h.items=b.components.make("items",h),h.pages=d.undef(b.paging)?null:b.paging.make(e.paging.type,h),h.filter=d.undef(b.filtering)?null:b.filtering.make(e.filtering.type,h),h.state=b.components.make("state",h),h._initialize=null,h._checkTimeout=null,h._layoutTimeout=null,h._layoutWidths=[],h.initializing=!1,h.initialized=!1,h.destroying=!1,h.destroyed=!1,h._undo={classes:"",style:"",create:!1,children:!1},h.robserver=new ResizeObserver(function(){h.$el.is(":visible")&&h.layout()})},initialize:function(b){var c=this;return d.promise(c._initialize)?c._initialize:c._initialize=a.Deferred(function(a){c.preInit(b)?c.init().then(function(){c.postInit()?c.firstLoad().then(function(){c.ready(),a.resolve(c)}).fail(a.reject):a.reject("post-init failed")}).fail(a.reject):a.reject("pre-init failed")}).fail(function(a){console.log("initialize failed",c,a),c.destroy()}).promise()},preInit:function(e){var f=this;if(f.destroying)return!1;if(e=d.jq(e)?e:a(e),f.initializing=!0,0===e.length&&0===f.$el.parent().length)return!1;0===f.$el.length&&(f.$el=f.create(),f._undo.create=!0),e.length>0&&f.$el.appendTo(e);var g;d.empty(f.opt.scrollParent)||0===(g=a(f.opt.scrollParent)).length?f.$scrollParent=a(document):f.$scrollParent=g.is("html")?a(document):g,f.$el.data(b.DATA_TEMPLATE,f),d.empty(f.opt.on)||f.$el.on(f.opt.on),f._undo.classes=f.$el.attr("class"),f._undo.style=f.$el.attr("style"),f.$el.is(f.sel.container)||f.$el.addClass(f.cls.container);var h=c.selectify(f.opt.classes);return null==h||f.$el.is(h)||f.$el.addClass(f.opt.classes),f.robserver.observe(f.$el.get(0)),0===f.$el.children().not(f.sel.item.elem).length&&(f.$el.append(f.createChildren()),f._undo.children=!0),!f.raise("pre-init").isDefaultPrevented()},init:function(){var a=this;return a.raise("init").isDefaultPrevented()?e.rejectWith("init default prevented"):a.items.fetch()},postInit:function(){var b=this;return!b.destroying&&(!b.raise("post-init").isDefaultPrevented()&&(b.state.init(),b.$scrollParent.on("scroll"+b.namespace,{self:b},e.throttle(function(){b.loadAvailable()},50)),a(window).on("popstate"+b.namespace,{self:b},b.onWindowPopState),!0))},firstLoad:function(){var a=this;return a.destroying?e.rejected:(a.raise("first-load"),a.loadAvailable())},ready:function(){var a=this;return!a.destroying&&(a.initializing=!1,a.initialized=!0,a._check(1e3),a.raise("ready"),!0)},create:function(){var b=this;return a("<div/>",{id:b.id,class:b.cls.container}).addClass(b.opt.classes)},createChildren:function(){return a()},destroy:function(b){var c=this,f=c._super.bind(c);return c.destroyed?e.resolved:(c.destroying=!0,a.Deferred(function(a){c.initializing&&d.promise(c._initialize)?c._initialize.always(function(){c.destroying=!1,c.doDestroy(b),a.resolve()}):(c.destroying=!1,c.doDestroy(b),a.resolve())}).then(function(){f()}).promise())},doDestroy:function(c){var e=this;e.destroyed||(e.raise("destroy"),e.robserver.disconnect(),e._checkTimeout&&clearTimeout(e._checkTimeout),e.$scrollParent.off(e.namespace),a(window).off(e.namespace),e.state.destroy(c),e.filter&&e.filter.destroy(),e.pages&&e.pages.destroy(),e.items.destroy(),d.empty(e.opt.on)||e.$el.off(e.opt.on),e.raise("destroyed"),e.$el.removeData(b.DATA_TEMPLATE),d.empty(e._undo.classes)?e.$el.removeAttr("class"):e.$el.attr("class",e._undo.classes),d.empty(e._undo.style)?e.$el.removeAttr("style"):e.$el.attr("style",e._undo.style),e._undo.children&&e.destroyChildren(),e._undo.create&&e.$el.remove(),e.$el=e.state=e.items=e.pages=null,e.destroyed=!0,e.initializing=!1,e.initialized=!1)},destroyChildren:function(){},getAvailable:function(){return this.pages?this.pages.available():this.items.available()},loadAvailable:function(){return this.items.load(this.getAvailable())},getItems:function(){return this.pages?this.pages.items():this.items.available()},_check:function(a){a=d.number(a)?a:0;var b=this;return b._checkTimeout&&clearTimeout(b._checkTimeout),b._checkTimeout=setTimeout(function(){b._checkTimeout=null,!b.initialized||b.destroying&&b.destroyed||b.loadAvailable()},a)},raise:function(b,c){if(this.destroying||this.destroyed||!d.string(b)||d.empty(b))return null;c=d.array(c)?c:[];var e=this,g=b.split(".")[0],h=f.camel("on-"+g),i=a.Event(g+".foogallery");return c.unshift(e),e.trigger(g,c).defaultPrevented&&i.preventDefault(),e.$el.trigger(i,c),d.fn(e[h])&&(c.unshift(i),e[h].apply(e.$el.get(0),c)),i},layout:function(){var a=this,b=a.getContainerWidth();null===a._initialize||a._checkWidth(b)||a.raise("layout",[b])},_checkWidth:function(a){var b,c=this;return(b=-1!==c._layoutWidths.indexOf(a))||(c._layoutWidths.unshift(a),c._layoutWidths.splice(2,c._layoutWidths.length-2),null!=c._layoutTimeout&&clearTimeout(c._layoutTimeout),c._layoutTimeout=setTimeout(function(){c._layoutWidths.splice(0,c._layoutWidths.length)},100)),b},getContainerWidth:function(){var a=this;return a.$el.is(":visible")?a.$el.width():a.$el.parents(":visible:first").innerWidth()},getCSSClass:function(a,b){b=d.empty(b)?"":b;var c=a instanceof RegExp?a:d.string(a)&&this.opt.regex.hasOwnProperty(a)?this.opt.regex[a]:null,e=this.$el.prop("className")||"",f=null!=c?e.match(c):null;return null!=f&&f.length>=2?f[1]:b},onWindowPopState:function(a){var b=a.data.self,c=a.originalEvent.state;d.empty(c)||c.id!==b.id||(b.state.set(c),b.loadAvailable())}}),b.template.register("core",b.Template,{id:null,type:"core",classes:"",on:{},lazy:!0,viewport:200,items:[],fixLayout:!0,scrollParent:null,delay:0,throttle:50,timeout:6e4,srcset:"data-srcset-fg",src:"data-src-fg",template:{},regex:{theme:/(?:\s|^)(fg-(?:light|dark|custom))(?:\s|$)/,loadingIcon:/(?:\s|^)(fg-loading-(?:default|bars|dots|partial|pulse|trail))(?:\s|$)/,hoverIcon:/(?:\s|^)(fg-hover-(?:zoom|zoom2|zoom3|plus|circle-plus|eye|external|tint))(?:\s|$)/,videoIcon:/(?:\s|^)(fg-video-(?:default|1|2|3|4))(?:\s|$)/,hoverColor:/(?:\s|^)(fg-hover-(?:colorize|grayscale))(?:\s|$)/,hoverScale:/(?:\s|^)(fg-hover-scale)(?:\s|$)/,stickyVideoIcon:/(?:\s|^)(fg-video-sticky)(?:\s|$)/,insetShadow:/(?:\s|^)(fg-shadow-inset-(?:small|medium|large))(?:\s|$)/,filter:/(?:\s|^)(fg-filter-(?:1977|amaro|brannan|clarendon|earlybird|lofi|poprocket|reyes|toaster|walden|xpro2|xtreme))(?:\s|$)/}},{container:"foogallery"},{},-100)}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.str),function(a,b,c){a.Component=b.Class.extend({construct:function(a){this.tmpl=a},destroy:function(){this.tmpl=null}}),a.EventComponent=b.EventClass.extend({construct:function(a,b){this._super(a),this.tmpl=a,this.tmplEventPrefix=b},destroy:function(){this._super(),this.tmpl=null},trigger:function(a,d){var e,f,g=this,h=g._super(a,d);return null!=g.tmpl&&(h instanceof b.Event&&!h.isDefaultPrevented()?(e=null!=h.namespace?[h.type,h.namespace].join("."):h.type,(f=g.tmpl.raise(g.tmplEventPrefix+e,d))&&f.isDefaultPrevented()&&h.preventDefault()):c.array(h)&&h.forEach(function(a){a.isDefaultPrevented()||(e=null!=a.namespace?[a.type,a.namespace].join("."):a.type,(f=g.tmpl.raise(g.tmplEventPrefix+e,d))&&f.isDefaultPrevented()&&a.preventDefault())})),c.empty(h)?null:1===h.length?h[0]:h}}),a.components=new b.Factory}(FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d,e,f){b.State=b.Component.extend({construct:function(a){var b=this;b._super(a),b.apiEnabled=!!window.history&&!!history.replaceState,b.opt=b.tmpl.opt.state,b.enabled=b.opt.enabled,b.current={filter:[],page:0,item:null},b.pushOrReplace=b.isPushOrReplace(b.opt.pushOrReplace)?b.opt.pushOrReplace:"replace",b.defaultMask="foogallery-gallery-{id}";var c=e.escapeRegExp(b.tmpl.id),d=e.escapeRegExp(b.getMasked()),f=e.escapeRegExp(b.opt.values),g=e.escapeRegExp(b.opt.pair);b.regex={exists:new RegExp("^#"+c+"\\"+f+".+?"),masked:new RegExp("^#"+d+"\\"+f+".+?"),values:new RegExp("(\\w+)"+g+"([^"+f+"]+)","g")}},destroy:function(a){var b=this;a||b.clear(),b.opt=b.regex={},b._super()},init:function(){this.set(this.initial())},getIdNumber:function(){return this.tmpl.id.match(/\d+/g)[0]},getMasked:function(){var a=this,b=e.contains(a.opt.mask,"{id}")?a.opt.mask:a.defaultMask;return e.format(b,{id:a.getIdNumber()})},isPushOrReplace:function(a){return-1!==c.inArray(a,["push","replace"])},exists:function(){return this.regex.values.lastIndex=0,(this.regex.exists.test(location.hash)||this.regex.masked.test(location.hash))&&this.regex.values.test(location.hash)},parse:function(){var b=this,c=b.tmpl,d={};if(b.exists())if(b.enabled){d.id=b.tmpl.id,b.regex.values.lastIndex=0;var e=location.hash.match(b.regex.values);a.each(e,function(a,e){var f,g=e.split(b.opt.pair);if(2===g.length)switch(g[0]){case b.opt.itemKey:f=c.items.fromHash(g[1]),null!==f&&(d.item=f);break;case b.opt.pageKey:c.pages&&null!==(f=c.pages.fromHash(g[1]))&&(d.page=f);break;case b.opt.filterKey:c.filter&&null!==(f=c.filter.fromHash(g[1]))&&(d.filter=f)}})}else b.apiEnabled?history.replaceState(null,"",location.pathname+location.search):location.hash="#";return d},hashify:function(a){var b=this,c=b.tmpl;if(d.hash(a)){var e=[],f=c.items.toHash(a.item);return null!==f&&e.push(b.opt.itemKey+b.opt.pair+f),c.filter&&null!==(f=c.filter.toHash(a.filter))&&e.push(b.opt.filterKey+b.opt.pair+f),c.pages&&null!==(f=c.pages.toHash(a.page))&&e.push(b.opt.pageKey+b.opt.pair+f),e.length>0&&e.unshift("#"+b.getMasked()),e.join(b.opt.values)}return""},replace:function(a){var c=this;if(c.enabled&&c.apiEnabled){a.id=c.tmpl.id;var e=c.hashify(a),g=d.empty(e),h=f.extend({},a,{item:a.item instanceof b.Item?a.item.id:a.item});history.replaceState(g?null:h,"",g?location.pathname+location.search:e)}},push:function(a){var c=this;if(c.enabled&&c.apiEnabled){a.id=c.tmpl.id;var e=c.hashify(a),g=d.empty(e),h=f.extend({},a,{item:a.item instanceof b.Item?a.item.id:a.item});history.pushState(g?null:h,"",g?location.pathname+location.search:e)}},update:function(a,b){var c=this;c.enabled&&c.apiEnabled&&(b=c.isPushOrReplace(b)?b:c.pushOrReplace,c[b](a))},clear:function(){this.exists()&&this.replace({})},initial:function(){var a=this,b=a.parse();return d.empty(b)?a.get():f.extend({filter:[],page:1,item:null},b)},get:function(a){var c,d=this,e=d.tmpl,g={};return a instanceof b.Item&&(g.item=a),e.filter&&null!==(c=e.filter.getState())&&(g.filter=c),e.pages&&null!==(c=e.pages.getState())&&(g.page=c),f.extend({filter:[],page:1,item:null},g)},set:function(a){var b=this,c=b.tmpl;if(d.hash(a)){var e=f.extend({filter:[],page:1,item:null},a);c.items.reset();c.raise("before-state",[e]).isDefaultPrevented()||(c.filter&&c.filter.setState(e),c.pages?c.pages.setState(e):(c.items.detach(c.items.all()),c.items.create(c.items.available(),!0)),e.item&&(b.opt.scrollTo&&e.item.scrollTo(),d.empty(a.item)||(a.item=null,b.replace(a))),b.current=e,c.raise("after-state",[e]))}}}),b.template.configure("core",{state:{enabled:!1,scrollTo:!0,pushOrReplace:"replace",mask:"foogallery-gallery-{id}",values:"/",pair:":",array:"+",arraySeparator:",",itemKey:"i",filterKey:"f",pageKey:"p"}}),b.components.register("state",b.State)}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.str,FooGallery.utils.obj),function(a,b,c,d,e,f){b.Items=b.Component.extend({construct:function(a){var b=this;b.ALLOW_CREATE=!0,b.ALLOW_APPEND=!0,b.ALLOW_LOAD=!0,b._super(a),b.maps={},b._fetched=null,b._arr=[],b._available=[];var d=b.tmpl.cls.item.caption;b.tmpl.sel.item.caption.all=c.selectify([d.elem,d.inner,d.title,d.description])},fromHash:function(a){return this.get(a)},toHash:function(a){return a instanceof b.Item?a.id:null},destroy:function(){var b=this,c=b.all(),d=[];c.length>0&&(b.tmpl.raise("destroy-items",[c]),d=a.map(c,function(a){return a.destroy()?a:null}),d.length>0&&b.tmpl.raise("destroyed-items",[d])),b.maps={},b._fetched=null,b._arr=[],b._available=[],b._super()},fetch:function(b){var c=this;if(!b&&d.promise(c._fetched))return c._fetched;var e=c.tmpl,f=e.sel,g=e.opt.items,h=a.Deferred(),i=c.make(e.$el.find(f.item.elem));return d.empty(g)?(i.push.apply(i,c.make(window[e.id+"-items"])),h.resolve(i)):d.array(g)?(i.push.apply(i,c.make(g)),h.resolve(i)):d.string(g)?a.get(g).then(function(a){i.push.apply(i,c.make(a)),h.resolve(i)},function(a,b,c){console.log("FooGallery: GET items error.",g,a,b,c),h.resolve(i)}):h.resolve(i),h.then(function(a){c.setAll(a)}),c._fetched=h.promise()},toJSON:function(a){return(a?this.all():this.available()).map(function(a){return a.toJSON()})},all:function(){return this._arr.slice()},count:function(a){return a?this.all().length:this.available().length},available:function(a){return d.fn(a)?this._available.filter(a,this):this._available.slice()},get:function(a){var b=d.number(a)?"index":"id";return this.maps[b][a]?this.maps[b][a]:null},setAll:function(a){this._arr=d.array(a)?a:[],this.maps=this.createMaps(this._arr),this._available=this.all()},setAvailable:function(a){this.maps=this.createMaps(this._arr),this._available=d.array(a)?a:[]},reset:function(){this.setAvailable(this.all())},find:function(a,b){if(b=d.fn(b)?b:function(){return!0},d.array(a))for(var c=0,e=a.length;c<e;c++)if(!0===b.call(this,a[c]))return a[c];return null},first:function(a){return this.find(this._available,a)},last:function(a){return this.find(this._available.slice().reverse(),a)},next:function(a,c,e){if(!(a instanceof b.Item))return null;e=!!d.boolean(e)&&e;var f=this._available.slice(),g=f.indexOf(a);if(-1!==g){var h=f.slice(0,g);return f=f.slice(g+1),e&&(f=f.concat(h)),this.find(f,c)}return null},prev:function(a,c,e){if(!(a instanceof b.Item))return null;e=!!d.boolean(e)&&e;var f=this._available.slice().reverse(),g=f.indexOf(a);if(-1!==g){var h=f.slice(0,g);return f=f.slice(g+1),e&&(f=f.concat(h)),this.find(f,c)}return null},createMaps:function(b){b=d.array(b)?b:[];var c={id:{},index:{}};return a.each(b,function(a,b){d.empty(b.id)&&(b.id=""+(a+1)),b.index=a,c.id[b.id]=b,c.index[b.index]=b}),c},loadable:function(b){var e,f=this,g=f.tmpl.opt;return g.lazy&&(e=c.getViewportBounds(g.viewport)),f.ALLOW_LOAD&&d.array(b)?a.map(b,function(a){return a.isCreated&&a.isAttached&&!a.isLoading&&!a.isLoaded&&!a.isError&&(!g.lazy||g.lazy&&a.intersects(e))?a:null}):[]},creatable:function(c){return this.ALLOW_CREATE&&d.array(c)?a.map(c,function(a){return a instanceof b.Item&&!a.isCreated?a:null}):[]},appendable:function(c){return this.ALLOW_APPEND&&d.array(c)?a.map(c,function(a){return a instanceof b.Item&&a.isCreated&&!a.isAttached?a:null}):[]},detachable:function(c){
11
+ return d.array(c)?a.map(c,function(a){return a instanceof b.Item&&a.isCreated&&a.isAttached?a:null}):[]},jquerify:function(b){return a(a.map(b,function(a){return a.$el.get()}))},make:function(c){var e=this,g=[];if(d.jq(c)||d.array(c)){var h=[],i=a.makeArray(c);if(0===i.length)return g;e.tmpl.raise("make-items",[i]).isDefaultPrevented()||(g=a.map(i,function(a){var c=e.type(a),g=f.extend(d.hash(a)?a:{},{type:c}),i=b.components.make(c,e.tmpl,g);return d.element(a)?i.parse(a)?(h.push(i),e.ALLOW_APPEND||i.detach(),i):null:i})),g.length>0&&e.tmpl.raise("made-items",[g]),h.length>0&&e.tmpl.raise("parsed-items",[h])}return g},type:function(c){var e;if(d.hash(c))e=c.type;else if(d.element(c)){var f=a(c),g=this.tmpl.sel.item;e=f.find(g.anchor).data("type")}return d.string(e)&&b.components.contains(e)?e:"image"},create:function(b,c){var e=this,f=[],g=e.creatable(b);if(g.length>0){e.tmpl.raise("create-items",[g]).isDefaultPrevented()||(f=a.map(g,function(a){return a.create()?a:null})),f.length>0&&e.tmpl.raise("created-items",[f])}return d.boolean(c)&&c?e.append(b):f},append:function(b){var c=this,d=[],e=c.appendable(b);if(e.length>0){c.tmpl.raise("append-items",[e]).isDefaultPrevented()||(d=a.map(e,function(a){return a.append()?a:null})),d.length>0&&c.tmpl.raise("appended-items",[d])}return d},detach:function(b){var c=this,d=[],e=c.detachable(b);if(e.length>0){c.tmpl.raise("detach-items",[e]).isDefaultPrevented()||(d=a.map(e,function(a){return a.detach()?a:null})),d.length>0&&c.tmpl.raise("detached-items",[d])}return d},load:function(b){var c=this;if(b=c.loadable(b),b.length>0){if(!c.tmpl.raise("load-items",[b]).isDefaultPrevented()){var d=a.map(b,function(a){return a.load()});return e.when(d).done(function(a){c.tmpl.raise("loaded-items",[a])})}}return e.resolveWith([])}}),b.components.register("items",b.Items)}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.obj),function(a,b,c,d,e,f,g){b.Item=b.Component.extend({construct:function(a,b){var c=this;c._super(a),c.cls=a.cls.item,c.il8n=a.il8n.item,c.sel=a.sel.item,c.opt=f.extend({},a.opt.item,b),c.isAttached=!1,c.isCreated=!1,c.isDestroyed=!1,c.isLoading=!1,c.isLoaded=!1,c.isError=!1,c.isParsed=!1,c.$el=null,c.$inner=null,c.$anchor=null,c.$overlay=null,c.$wrap=null,c.$image=null,c.$caption=null,c.fixLayout=c.tmpl.opt.fixLayout,c.index=-1,c.type=c.opt.type,c.id=c.opt.id,c.productId=c.opt.productId,c.href=c.opt.href,c.src=c.opt.src,c.srcset=c.opt.srcset,c.width=c.opt.width,c.height=c.opt.height,c.title=c.opt.title,c.alt=c.opt.alt,c.caption=d.empty(c.opt.caption)?c.title:c.opt.caption,c.description=d.empty(c.opt.description)?c.alt:c.opt.description,c.attr=c.opt.attr,c.tags=c.opt.tags,c.maxWidth=c.opt.maxWidth,c.maxCaptionLength=c.opt.maxCaptionLength,c.maxDescriptionLength=c.opt.maxDescriptionLength,c.showCaptionTitle=c.opt.showCaptionTitle,c.showCaptionDescription=c.opt.showCaptionDescription,c.noLightbox=c.opt.noLightbox,c.panelHide=c.opt.panelHide,c.exif=c.opt.exif,c.hasExif=d.exif(c.exif),c._thumbUrl=null,c._load=null,c._undo={classes:"",style:"",loader:!1,wrap:!1,overlay:!1,placeholder:!1}},destroy:function(){var a=this;return a.tmpl.raise("destroy-item",[a]).isDefaultPrevented()||(a.isDestroyed=a.doDestroyItem()),a.isDestroyed&&(a.tmpl.raise("destroyed-item",[a]),a._super()),a.isDestroyed},doDestroyItem:function(){var a=this;return a.isParsed?(a.$anchor.add(a.$caption).off("click.foogallery"),a.append(),d.empty(a._undo.classes)?a.$el.removeAttr("class"):a.$el.attr("class",a._undo.classes),d.empty(a._undo.style)?a.$el.removeAttr("style"):a.$el.attr("style",a._undo.style),a._undo.overlay&&a.$overlay.remove(),a._undo.wrap&&(a.$anchor.append(a.$image),a.$wrap.remove()),a._undo.loader&&a.$el.find(a.sel.loader).remove(),a._undo.placeholder&&a.$image.prop("src")===b.EMPTY_IMAGE&&a.$image.removeAttr("src")):a.isCreated&&(a.detach(),a.$el.remove()),!0},parse:function(b){var c=this,d=a(b);return!c.tmpl.raise("parse-item",[c,d]).isDefaultPrevented()&&(c.isCreated=d.is(c.sel.elem))&&(c.isParsed=c.doParseItem(d),c.fixLayout&&c.fix()),c.isParsed&&c.tmpl.raise("parsed-item",[c]),c.isParsed},doParseItem:function(c){var e=this,g=e.tmpl.opt,h=e.cls,i=e.sel;if(e._undo.classes=c.attr("class")||"",e._undo.style=c.attr("style")||"",e.$el=c.data(b.DATA_ITEM,e),e.$inner=e.$el.children(i.inner),e.$anchor=e.$inner.children(i.anchor).on("click.foogallery",{self:e},e.onAnchorClick),e.$image=e.$anchor.find(i.image),e.$caption=e.$inner.children(i.caption.elem).on("click.foogallery",{self:e},e.onCaptionClick),!(e.$el.length&&e.$inner.length&&e.$anchor.length&&e.$image.length))return console.error("FooGallery Error: Invalid HTML markup. Check the item markup for additional elements or malformed HTML in the title or description.",e),e.isError=!0,e.tmpl.raise("error-item",[e]),0!==e.$el.length&&e.$el.remove(),!1;e.isAttached=e.$el.parent().length>0,e.isLoading=e.$el.is(i.loading),e.isLoaded=e.$el.is(i.loaded),e.isError=e.$el.is(i.error);var j=e.$anchor.attr("data-type",e.type).data();e.id=j.id||e.id,e.productId=j.productId||e.productId,e.tags=j.tags||e.tags,e.href=j.href||e.$anchor.attr("href")||e.href,e.src=e.$image.attr(g.src)||e.src,e.srcset=e.$image.attr(g.srcset)||e.srcset,e.width=parseInt(e.$image.attr("width"))||e.width,e.height=parseInt(e.$image.attr("height"))||e.height,e.title=e.$image.attr("title")||e.title,e.alt=e.$image.attr("alt")||e.alt,e.caption=j.title||j.captionTitle||e.caption,e.description=j.description||j.captionDesc||e.description,e.noLightbox=e.$anchor.hasClass(h.noLightbox),e.panelHide=e.$anchor.hasClass(h.panelHide),d.exif(j.exif)&&(e.exif=f.extend(e.exif,j.exif),e.hasExif=!0),d.empty(e.caption)&&(e.caption=a.trim(e.$caption.find(i.caption.title).html())),d.empty(e.description)&&(e.description=a.trim(e.$caption.find(i.caption.description).html())),d.number(e.maxCaptionLength)&&e.maxCaptionLength>0&&!d.empty(e.caption)&&d.string(e.caption)&&e.caption.length>e.maxCaptionLength&&e.$caption.find(i.caption.title).html(e.caption.substr(0,e.maxCaptionLength)+"&hellip;"),d.number(e.maxDescriptionLength)&&e.maxDescriptionLength>0&&!d.empty(e.description)&&d.string(e.description)&&e.description.length>e.maxDescriptionLength&&e.$caption.find(i.caption.description).html(e.description.substr(0,e.maxDescriptionLength)+"&hellip;"),e.$overlay=e.$anchor.children(i.overlay),0===e.$overlay.length&&(e.$overlay=a("<span/>",{class:h.overlay}),e.$anchor.append(e.$overlay),e._undo.overlay=!0),e.$wrap=e.$anchor.children(i.wrap),0===e.$wrap.length&&(e.$wrap=a("<span/>",{class:h.wrap}),e.$anchor.append(e.$wrap.append(e.$image)),e._undo.wrap=!0),0===e.$el.children(i.loader).length&&(e.$el.append(a("<div/>",{class:h.loader})),e._undo.loader=!0);var k=e.$image.get(0);return d.empty(k.src)&&(k.src=b.EMPTY_IMAGE,e._undo.placeholder=!0),e.$el.addClass(e.getTypeClass()),e.hasExif&&e.$el.addClass(h.exif),!e.isCreated||!e.isAttached||e.isLoading||e.isLoaded||e.isError||e.$el.addClass(h.idle),!0},create:function(){var a=this;if(!a.isCreated&&d.string(a.href)&&d.string(a.src)&&d.number(a.width)&&d.number(a.height)){a.tmpl.raise("create-item",[a]).isDefaultPrevented()||(a.isCreated=a.doCreateItem()),a.isCreated&&a.tmpl.raise("created-item",[a])}return a.isCreated},doCreateItem:function(){var c=this,e=c.tmpl.opt,f=c.cls,g=c.attr,h=c.getTypeClass(),i=c.hasExif?f.exif:"";g.elem.class=[f.elem,h,i,f.idle].join(" "),g.inner.class=f.inner;var j=[f.anchor];c.noLightbox&&j.push(f.noLightbox),c.panelHide&&j.push(f.panelHide),g.anchor.class=j.join(" "),g.anchor.href=c.href,g.anchor["data-type"]=c.type,g.anchor["data-id"]=c.id,g.anchor["data-title"]=c.caption,g.anchor["data-description"]=c.description,d.empty(c.tags)||(g.anchor["data-tags"]=JSON.stringify(c.tags)),d.empty(c.productId)||(g.anchor["data-product-id"]=c.productId),g.image.class=f.image,g.image[e.src]=c.src,g.image[e.srcset]=c.srcset,g.image.width=c.width,g.image.height=c.height,g.image.title=c.title,g.image.alt=c.alt,c.$el=a("<div/>").attr(g.elem).data(b.DATA_ITEM,c),c.$inner=a("<figure/>").attr(g.inner).appendTo(c.$el),c.$anchor=a("<a/>").attr(g.anchor).appendTo(c.$inner).on("click.foogallery",{self:c},c.onAnchorClick),c.$overlay=a("<span/>",{class:f.overlay}).appendTo(c.$anchor),c.$wrap=a("<span/>",{class:f.wrap}).appendTo(c.$anchor),c.$image=a("<img/>").attr(g.image).appendTo(c.$wrap),f=c.cls.caption,g=c.attr.caption,g.elem.class=f.elem,c.$caption=a("<figcaption/>").attr(g.elem).on("click.foogallery",{self:c},c.onCaptionClick),g.inner.class=f.inner;var k=a("<div/>").attr(g.inner).appendTo(c.$caption),l=c.showCaptionTitle&&!d.empty(c.caption),m=c.showCaptionDescription&&!d.empty(c.description);if(l||m){if(g.title.class=f.title,g.description.class=f.description,l){var n=a("<div/>").attr(g.title),o=c.caption;d.number(c.maxCaptionLength)&&c.maxCaptionLength>0&&d.string(c.caption)&&c.caption.length>c.maxCaptionLength&&(o=c.caption.substr(0,c.maxCaptionLength)+"&hellip;"),n.get(0).innerHTML=o,k.append(n)}if(m){var p=a("<div/>").attr(g.description),q=c.description;d.number(c.maxDescriptionLength)&&c.maxDescriptionLength>0&&d.string(c.description)&&c.description.length>c.maxDescriptionLength&&(q=c.description.substr(0,c.maxDescriptionLength)+"&hellip;"),p.get(0).innerHTML=q,k.append(p)}}return c.$caption.appendTo(c.$inner),0===c.$el.find(c.sel.loader).length&&c.$el.append(a("<div/>",{class:c.cls.loader})),!0},append:function(){var a=this;if(a.isCreated&&!a.isAttached){a.tmpl.raise("append-item",[a]).isDefaultPrevented()||(a.tmpl.$el.append(a.$el),!a.fixLayout&&a.isParsed||a.fix(),a.isAttached=!0),a.isAttached&&a.tmpl.raise("appended-item",[a])}return a.isAttached},detach:function(){var a=this;if(a.isCreated&&a.isAttached){a.tmpl.raise("detach-item",[a]).isDefaultPrevented()||(a.$el.detach(),!a.fixLayout&&a.isParsed||a.unfix(),a.isAttached=!1),a.isAttached||a.tmpl.raise("detached-item",[a])}return!a.isAttached},load:function(){var b=this;if(d.promise(b._load))return b._load;if(!b.isCreated||!b.isAttached)return e.rejectWith("not created or attached");if(b.tmpl.raise("load-item",[b]).isDefaultPrevented())return e.rejectWith("default prevented");var c=b.cls,f=b.$image.get(0),g=f.src;return b.isLoading=!0,b.$el.removeClass(c.idle).removeClass(c.loaded).removeClass(c.error).addClass(c.loading),b._load=a.Deferred(function(a){f.onload=function(){f.onload=f.onerror=null,b.isLoading=!1,b.isLoaded=!0,b.$el.removeClass(c.loading).addClass(c.loaded),!b.fixLayout&&b.isParsed||b.unfix(),b.tmpl.raise("loaded-item",[b]),a.resolve(b)},f.onerror=function(){f.onload=f.onerror=null,b.isLoading=!1,b.isError=!0,b.$el.removeClass(c.loading).addClass(c.error),d.string(g)&&b.$image.prop("src",g),b.tmpl.raise("error-item",[b]),a.reject(b)},f.src=b.getThumbUrl(),f.complete&&f.onload()}).promise()},fix:function(){var a=this;if(null==a.tmpl)return a;if(a.isCreated&&!a.isLoading&&!a.isLoaded&&!a.isError){var b=a.width,c=a.height,e=a.$image.get(0);if(!isNaN(b)&&!isNaN(c)&&e){var f=d.fn(a.maxWidth)?a.maxWidth(a):a.$image.width();f<=0&&(f=b);var g=f/b,h=c*g;a.$image.css({width:f,height:h})}}return a},unfix:function(){var a=this;return null==a.tmpl?a:(a.isCreated&&a.$image.css({width:"",height:""}),a)},getThumbSrc:function(a,b){return c.src(this.src,this.srcset,this.width,this.height,a,b)},getThumbUrl:function(a){a=!!d.boolean(a)&&a;var b=this;return!a&&d.string(b._thumbUrl)?b._thumbUrl:b._thumbUrl=b.getThumbSrc(b.$anchor.innerWidth(),b.$anchor.innerHeight())},getTypeClass:function(){return this.cls.types.hasOwnProperty(this.type)?this.cls.types[this.type]:""},scrollTo:function(a){var b=this;if(b.isAttached){var d=b.bounds(),e=c.getViewportBounds();switch(a){case"top":d.left+=d.width/2-e.width/2,d.top-=e.height/5;break;default:d.left+=d.width/2-e.width/2,d.top+=d.height/2-e.height/2}window.scrollTo(d.left,d.top)}return b},bounds:function(){return this.isAttached?c.getElementBounds(this.$el):null},intersects:function(a){return!!this.isAttached&&this.bounds().intersects(a)},updateState:function(){this.tmpl.state.update(this.tmpl.state.get(this))},toJSON:function(){return{type:this.type,id:this.id,productId:this.productId,href:this.href,src:this.src,srcset:this.srcset,width:this.width,height:this.height,alt:this.alt,title:this.title,caption:this.caption,description:this.description,tags:this.tags.slice(),maxCaptionLength:this.maxCaptionLength,maxDescriptionLength:this.maxDescriptionLength,showCaptionTitle:this.showCaptionTitle,showCaptionDescription:this.showCaptionDescription,noLightbox:this.noLightbox,panelHide:this.panelHide,attr:f.extend({},this.attr)}},onAnchorClick:function(a){var b=a.data.self;b.tmpl.raise("anchor-click-item",[b]).isDefaultPrevented()?a.preventDefault():b.updateState()},onCaptionClick:function(b){var c=b.data.self;!c.tmpl.raise("caption-click-item",[c]).isDefaultPrevented()&&c.$anchor.length>0&&!a(b.target).is("a,:input")&&c.$anchor.get(0).click()}}),b.template.configure("core",{item:{type:"item",id:"",href:"",src:"",srcset:"",width:0,height:0,title:"",alt:"",caption:"",description:"",tags:[],maxWidth:null,maxCaptionLength:0,maxDescriptionLength:0,showCaptionTitle:!0,showCaptionDescription:!0,noLightbox:!1,panelHide:!1,exif:{aperture:null,camera:null,date:null,exposure:null,focalLength:null,iso:null,orientation:null},attr:{elem:{},inner:{},anchor:{},image:{},caption:{elem:{},inner:{},title:{},description:{}}}}},{item:{elem:"fg-item",inner:"fg-item-inner",exif:"fg-item-exif",anchor:"fg-thumb",overlay:"fg-image-overlay",wrap:"fg-image-wrap",image:"fg-image",loader:"fg-loader",idle:"fg-idle",loading:"fg-loading",loaded:"fg-loaded",error:"fg-error",noLightbox:"fg-no-lightbox",panelHide:"fg-panel-hide",types:{item:"fg-type-unknown"},caption:{elem:"fg-caption",inner:"fg-caption-inner",title:"fg-caption-title",description:"fg-caption-desc"}}},{item:{exif:{aperture:"Aperture",camera:"Camera",date:"Date",exposure:"Exposure",focalLength:"Focal Length",iso:"ISO",orientation:"Orientation"}}}),b.components.register("item",b.Item)}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn,FooGallery.utils.obj,FooGallery.utils.str),function(a,b,c,d){b.Image=b.Item.extend({}),b.template.configure("core",null,{item:{types:{image:"fg-type-image"}}}),b.components.register("image",b.Image)}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d){b.Paging=b.Component.extend({construct:function(a){var b=this;b._super(a),b.opt=b.tmpl.opt.paging,b.cls=b.tmpl.cls.paging,b.il8n=b.tmpl.il8n.paging,b.sel=b.tmpl.sel.paging,b.pushOrReplace=b.opt.pushOrReplace,b.type=b.opt.type,b.theme=b.opt.theme,b.size=b.opt.size,b.position=b.opt.position,b.scrollToTop=b.opt.scrollToTop,b.current=0,b.total=0,b.ctrls=[],b._arr=[]},fromHash:function(a){var b=parseInt(a);return isNaN(b)?null:b},toHash:function(a){return d.number(a)&&a>0?a.toString():null},getState:function(){return this.isValid(this.current)?this.current:null},setState:function(a){this.rebuild(),a.item&&!this.contains(a.page,a.item)&&(a.page=this.find(a.item),a.page=0!==a.page?a.page:1),this.set(a.page,!1,!1,!0)},destroy:function(){var b=this;b._arr.splice(0,b._arr.length),a.each(b.ctrls.splice(0,b.ctrls.length),function(a,b){b.destroy()}),b._super()},build:function(){var a=this,c=a.tmpl.items.available();a.total=a.size>0&&c.length>0?Math.ceil(c.length/a.size):1;for(var d=0;d<a.total;d++)a._arr.push(c.splice(0,a.size));if(a.total>1&&b.paging.hasCtrl(a.type)){var e,f,g=a.position;"both"!==g&&"top"!==g||(e=b.paging.makeCtrl(a.type,a.tmpl,a,"top"),e.create()&&(e.append(),a.ctrls.push(e))),"both"!==g&&"bottom"!==g||(f=b.paging.makeCtrl(a.type,a.tmpl,a,"bottom"),f.create()&&(f.append(),a.ctrls.push(f)))}},rebuild:function(){var b=this;b.current=0,b.total=0,b._arr.splice(0,b._arr.length),a.each(b.ctrls.splice(0,b.ctrls.length),function(a,b){b.destroy()}),b.build()},all:function(){return this._arr.slice()},available:function(){return this.get(this.current)},items:function(){return this.get(this.current)},controls:function(b){var c=this;c.isValid(b)&&a.each(c.ctrls,function(a,c){c.update(b)})},isValid:function(a){return d.number(a)&&a>0&&a<=this.total},number:function(a){return this.isValid(a)?a:0===this.current?1:this.current},create:function(a,b){var c=this;a=c.number(a);var d=a-1;c.tmpl.items.detach(c.tmpl.items.all()),c.current=a,c.tmpl.items.create(c._arr[d],!0)},get:function(a){var b=this;return b.isValid(a)?(a=b.number(a),b._arr[a-1]):[]},set:function(a,b,c,e){var f=this;if(f.isValid(a)){var g,h=f.number(a);if(h!==f.current){var i=f.current,j=function(){if(c=!d.boolean(c)||c,e=!!d.boolean(e)&&e,c&&1===f.current&&!f.tmpl.state.exists()&&(g=f.tmpl.state.get(),f.tmpl.state.update(g,f.pushOrReplace)),f.controls(a),f.create(h,e),c&&(g=f.tmpl.state.get(),f.tmpl.state.update(g,f.pushOrReplace)),f.scrollToTop&&d.boolean(b)&&b){var j=f.get(f.current);j.length>0&&j[0].scrollTo("top")}f.tmpl.raise("after-page-change",[f.current,i,e])};return!f.tmpl.raise("before-page-change",[f.current,h,j,e]).isDefaultPrevented()&&(j(),!0)}}return!1},find:function(a){for(var b=this,d=0,e=b._arr.length;d<e;d++)if(-1!==c.inArray(a,b._arr[d]))return d+1;return 0},contains:function(a,b){var d=this.get(a);return-1!==c.inArray(b,d)},first:function(){this.goto(1)},last:function(){this.goto(this._arr.length)},prev:function(){this.goto(this.current-1)},next:function(){this.goto(this.current+1)},goto:function(a){var b=this;b.set(a,!0)&&b.tmpl.loadAvailable()}}),b.PagingControl=b.Component.extend({construct:function(a,b,c){var d=this;d._super(a),d.pages=b,d.position=c,d.$container=null},create:function(){var b=this;return b.$container=a("<nav/>",{class:b.pages.cls.container}).addClass(b.pages.theme),!0},destroy:function(){var a=this;a.$container.remove(),a.$container=null},append:function(){var a=this;"top"===a.position?a.$container.insertBefore(a.tmpl.$el):a.$container.insertAfter(a.tmpl.$el)},update:function(a){}}),b.paging.register("default",b.Paging,null,{type:"none",theme:"fg-light",size:30,pushOrReplace:"push",position:"none",scrollToTop:!0},{container:"fg-paging-container"},null,-100)}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d){b.Dots=b.Paging.extend({}),b.DotsControl=b.PagingControl.extend({construct:function(b,c,d){this._super(b,c,d),this.$container=a(),this.$list=a(),this.$items=a()},create:function(){for(var b,c=this,d=c.pages.cls,e=c.pages.il8n,f=[],g=a("<ul/>",{class:d.list}),h=0,i=c.pages.total;h<i;h++)f.push(b=c.createItem(h+1,e.page)),g.append(b);return c.$list=g,c.$container=a("<nav/>",{class:d.container}).addClass(c.pages.theme).append(g),c.$items=a(a.map(f,function(a){return a.get()})),!0},append:function(){var a=this;"top"===a.position?a.$container.insertBefore(a.tmpl.$el):a.$container.insertAfter(a.tmpl.$el)},destroy:function(){var b=this,c=b.pages.sel;b.$list.find(c.link).off("click.foogallery",b.onLinkClick),b.$container.remove(),b.$container=a(),b.$list=a(),b.$items=a()},update:function(a){this.setSelected(a-1)},setSelected:function(b){var c=this,e=c.pages.cls,f=c.pages.il8n,g=c.pages.sel;c.$items.filter(g.selected).removeClass(e.selected).each(function(b,c){var e=a(c),f=e.data("label"),h=e.find(g.reader);d.string(f)&&0!==h.length&&h.html(f)}),c.$items.eq(b).addClass(e.selected).each(function(b,c){var e=a(c),h=e.find(g.reader),i=h.html();d.string(i)&&0!==h.length&&(e.data("label",i),h.html(f.current))})},createItem:function(b,c,e,f,g){e=d.string(e)?e:b,c=d.string(c)?c:"";var h=this,i=h.pages.opt,j=h.pages.cls,k=a("<a/>",{class:j.link,href:"#page-"+b}).html(e).on("click.foogallery",{self:h,page:b},h.onLinkClick);d.empty(c)||k.attr("title",c.replace(/\{PAGE}/g,b).replace(/\{LIMIT}/g,i.limit+"")),g=d.string(g)?g:c,d.empty(g)||k.prepend(a("<span/>",{class:j.reader,text:g.replace(/\{PAGE}/g,"").replace(/\{LIMIT}/g,i.limit+"")}));var l=a("<li/>",{class:j.item}).append(k);return f=d.string(f)?f:"",d.empty(f)||l.addClass(f),l},onLinkClick:function(b){b.preventDefault();var c=b.data.self,d=b.data.page,e=c.pages.sel;a(this).closest(e.item).is(e.disabled)||(c.pages.set(d,!0),c.tmpl.loadAvailable())}}),b.paging.register("dots",b.Dots,b.DotsControl,{type:"dots",position:"both",pushOrReplace:"push"},{list:"fg-dots",item:"fg-dot-item",link:"fg-dot-link",disabled:"fg-disabled",selected:"fg-selected",visible:"fg-visible",reader:"fg-sr-only"},{current:"Current page",page:"Page {PAGE}"})}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c){b.DefaultTemplate=b.Template.extend({}),b.template.register("default",b.DefaultTemplate,null,{container:"foogallery fg-default"})}(FooGallery.$,FooGallery,FooGallery.utils),function(a,b,c,d){b.MasonryTemplate=b.Template.extend({construct:function(a,b){this._super(a,b),this.masonry=null,this.style=null,this.$columnWidth=null},getStylesheet:function(){var a=this;return null===a.style&&(a.style=document.createElement("style"),a.style.appendChild(document.createTextNode("")),document.head.appendChild(a.style)),a.style.sheet},delayedLayout:function(){var a=this;a._delayedLayout&&clearTimeout(a._delayedLayout),a._delayedLayout=setTimeout(function(){a._delayedLayout=null,a.masonry.layout()},20)},onPreInit:function(b,c){var e=c.sel,f=c.cls;f.layouts=a.map(f.layout,function(a){return a}).join(" ");for(var g=a.map(f.layout,function(a,b){return{key:b,value:a}}),h=0,i=g.length;h<i;h++)if(c.$el.hasClass(g[h].value)){c.template.layout=g[h].key;break}d.string(f.layout[c.template.layout])||(c.template.layout="col4");var j,k,l="fixed"===c.template.layout;if(c.template.isFitWidth=l,c.template.percentPosition=!l,c.template.transitionDuration=0,c.template.itemSelector=e.item.elem,c.$el.removeClass(f.layouts).addClass(f.layout[c.template.layout]),l||(0===c.$el.find(e.gutterWidth).length&&c.$el.prepend(a("<div/>").addClass(f.gutterWidth)),c.template.gutter=e.gutterWidth),0===c.$el.find(e.columnWidth).length&&c.$el.prepend(a("<div/>").addClass(f.columnWidth)),l&&d.number(c.template.columnWidth)){var m=c.$el.find(e.columnWidth).width(c.template.columnWidth);j=c.getStylesheet(),k="#"+c.id+e.container+" "+e.item.elem+" { width: "+m.outerWidth()+"px; }",j.insertRule(k,0)}c.template.columnWidth=e.columnWidth,l&&d.number(c.template.gutter)&&(j=c.getStylesheet(),k="#"+c.id+e.container+" "+e.item.elem+" { margin-bottom: "+c.template.gutter+"px; }",j.insertRule(k,0)),c.masonry=new Masonry(c.$el.get(0),c.template)},onPostInit:function(a,b){b.masonry.layout()},onFirstLoad:function(a,b){b.masonry.layout()},onReady:function(a,b){b.delayedLayout()},onDestroy:function(a,b){b._delayedLayout&&clearTimeout(b._delayedLayout),b.$el.find(b.sel.columnWidth).remove(),b.$el.find(b.sel.gutterWidth).remove(),b.style&&b.style.parentNode&&b.style.parentNode.removeChild(b.style)},onDestroyed:function(a,b){b.masonry instanceof Masonry&&b.masonry.destroy()},onLayout:function(a,b){b.masonry.layout()},onParsedItems:function(a,b,c){b.masonry.layout()},onAppendedItems:function(a,b,c){c=b.items.jquerify(c),c=b.masonry.addItems(c),b.masonry.layoutItems(c,!0)},onDetachItem:function(a,b,c){a.isDefaultPrevented()||(a.preventDefault(),b.masonry.remove(c.$el),c.isAttached=!1,c.unfix())},onDetachedItems:function(a,b,c){b.masonry.layout()},onLoadedItems:function(a,b,c){b.masonry.layout()}}),b.template.register("masonry",b.MasonryTemplate,{fixLayout:!0,template:{initLayout:!1,isInitLayout:!1,layout:"col4"}},{container:"foogallery fg-masonry",columnWidth:"fg-column-width",gutterWidth:"fg-gutter-width",layout:{fixed:"fg-masonry-fixed",col2:"fg-masonry-2col",col3:"fg-masonry-3col",col4:"fg-masonry-4col",col5:"fg-masonry-5col"}})}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c,d){b.Justified=c.Class.extend({construct:function(c,d){this.tmpl=c,this.$el=c.$el,this.options=a.extend(!0,{},b.Justified.defaults,d),this._items=[]},init:function(){var a=this;d.string(a.options.maxRowHeight)&&(a.options.maxRowHeight.indexOf("%")?a.options.maxRowHeight=a.options.rowHeight*(parseInt(a.options.maxRowHeight)/100):a.options.maxRowHeight=parseInt(a.options.maxRowHeight))},destroy:function(){this.$el.removeAttr("style")},parse:function(){var b=this;return b._items=a.map(b.tmpl.getItems(),function(a,b){return{index:b,width:a.width,height:a.height,top:0,left:0,$item:a.$el}})},getMaxRowHeight:function(){var a=this;return d.string(a.options.maxRowHeight)&&(a.options.maxRowHeight.indexOf("%")?a.options.maxRowHeight=a.options.rowHeight*(parseInt(a.options.maxRowHeight)/100):a.options.maxRowHeight=parseInt(a.options.maxRowHeight)),d.number(a.options.maxRowHeight)?a.options.maxRowHeight:a.options.rowHeight},getContainerWidth:function(){var a=this;return a.$el.is(":visible")?a.$el.width():a.$el.parents(":visible:first").innerWidth()},layout:function(){this.parse();var b=this,c=0,d=b.getContainerWidth(),e=b.getMaxRowHeight(),f=b.rows(d,e);a.each(f,function(a,d){d.visible&&(a>0&&(c+=b.options.margins),c+=d.height),b.render(d)}),b.$el.height(c)},render:function(a){for(var b,c=0,d=a.items.length;c<d;c++)b=a.items[c],a.visible?b.$item.css({width:b.width,height:b.height,top:b.top,left:b.left,display:"",maxHeight:this.options.maxRowHeight>0?this.options.maxRowHeight:""}).addClass("fg-positioned"):b.$item.css("display","none")},justify:function(a,b,c,d){var e=this,f=e.options.margins*(a.items.length-1),g=c-f,h=g/a.width;a.width=a.width*h,a.height=a.height*h,a.top=b,a.height>d&&(a.height=d),a.left=0,a.width<g&&(a.left=(g-a.width)/2),a.width+=f;for(var i,j=a.left,k=0,l=a.items.length;k<l;k++)k>0&&(j+=e.options.margins),i=a.items[k],i.left=j,i.top=b,i.width=i.width*h,i.height=i.height*h,i.height>d&&(i.height=d),j+=i.width;return a.height},position:function(a,b,c,d){var e=this,f=e.options.margins*(a.items.length-1),g=c-f;if(a.top=b,a.left=0,a.width<g)switch(d){case"center":a.left=(g-a.width)/2;break;case"right":a.left=g-a.width}a.width+=f;for(var h,i=a.left,j=0,k=a.items.length;j<k;j++)j>0&&(i+=e.options.margins),h=a.items[j],h.left=i,h.top=b,i+=h.width;return a.height},lastRow:function(a,b,c,d){var e=this,f=e.options.margins*(a.items.length-1),g=c-f,h=a.width/g>e.options.justifyThreshold;switch(e.options.lastRow){case"hide":h?e.justify(a,b,c,d):a.visible=!1;break;case"justify":e.justify(a,b,c,d);break;case"nojustify":h?e.justify(a,b,c,d):e.position(a,b,c,"left");break;case"left":case"center":case"right":h?e.justify(a,b,c,d):e.position(a,b,c,e.options.lastRow)}},items:function(){return a.map(this._items,function(a){return{index:a.index,width:a.width,height:a.height,$item:a.$item,top:a.top,left:a.left}})},rows:function(a,b){function c(){var a={index:++h,visible:!0,width:0,height:e.options.rowHeight,top:0,left:0,items:[]};return g.push(a),a}for(var d,e=this,f=e.items(),g=[],h=-1,i=c(),j=0,k=0,l=0,m=f.length;l<m;l++){if(d=f[l],d.height!=e.options.rowHeight){var n=e.options.rowHeight/d.height;d.height=d.height*n,d.width=d.width*n}k+d.width>a&&l>0&&(g.length>1&&(j+=e.options.margins),j+=e.justify(i,j,a,b),i=c(),k=0),i.items.length>0&&(k+=e.options.margins),k+=d.width,i.width+=d.width,i.items.push(d)}return g.length>1&&(j+=e.options.margins),e.lastRow(i,j,a,b),g}}),b.Justified.defaults={itemSelector:".fg-item",rowHeight:150,maxRowHeight:"200%",margins:0,lastRow:"center",justifyThreshold:1,refreshInterval:250}}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is),function(a,b,c){b.JustifiedTemplate=b.Template.extend({onPreInit:function(a,c){c.justified=new b.Justified(c,c.template)},onInit:function(a,b){b.justified.init()},onFirstLoad:function(a,b){b.justified.layout()},onReady:function(a,b){b.justified.layout()},onDestroy:function(a,b){b.justified.destroy()},onLayout:function(a,b){b.justified.layout()},onAfterPageChange:function(a,b,c,d,e){e||b.justified.layout()},onAfterFilterChange:function(a,b){b.justified.layout()}}),b.template.register("justified",b.JustifiedTemplate,null,{container:"foogallery fg-justified"})}(FooGallery.$,FooGallery,FooGallery.utils.is),function(a,b,c,d,e){b.PortfolioTemplate=b.Template.extend({construct:function(a,b){this._super(a,b),this.style=null,this.fullWidth=!1},getStylesheet:function(){var a=this;return null===a.style&&(a.style=document.createElement("style"),a.style.appendChild(document.createTextNode("")),document.head.appendChild(a.style)),a.style.sheet},onPreInit:function(a,b){b.appendCSS()},onPostInit:function(a,b){b.checkCSS()},onDestroy:function(a,b){b.removeCSS()},onLayout:function(a,b){b.checkCSS()},checkCSS:function(){var a=this,b=a.getContainerWidth();b<a.template.columnWidth!==a.fullWidth&&a.appendCSS(b)},appendCSS:function(a){var b=this;a=d.number(a)?a:b.getContainerWidth(),b.removeCSS();var c,e=b.getStylesheet(),f="#"+b.id+b.sel.container,g=f+" "+b.sel.item.elem,h=b.template.columnWidth,i=Math.ceil(b.template.gutter/2);switch(b.template.align){case"center":c=f+" { justify-content: center; }",e.insertRule(c,0);break;case"left":c=f+" { justify-content: flex-start; }",e.insertRule(c,0);break;case"right":c=f+" { justify-content: flex-end; }",e.insertRule(c,0)}b.fullWidth=a<h,b.fullWidth?(c=g+" { max-width: 100%; min-width: 100%; margin: "+i+"px; }",e.insertRule(c,0)):(c=g+" { max-width: "+h+"px; min-width: "+h+"px; margin: "+i+"px; }",e.insertRule(c,0))},removeCSS:function(){var a=this;a.style&&a.style.parentNode&&(a.style.parentNode.removeChild(a.style),a.style=null,a.fullWidth=!1)}}),b.template.register("simple_portfolio",b.PortfolioTemplate,{template:{gutter:40,align:"center",columnWidth:250}},{container:"foogallery fg-simple_portfolio"})}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn),function(a,b,c,d){b.ImageViewerTemplate=b.Template.extend({construct:function(b,c){this._super(d.extend({},b,{paging:{pushOrReplace:"replace",theme:"fg-light",type:"default",size:1,position:"none",scrollToTop:!1}}),c),this.$inner=a(),this.$current=a(),this.$total=a(),this.$prev=a(),this.$next=a()},createChildren:function(){var b=this;return a("<div/>",{class:b.cls.inner}).append(a("<div/>",{class:b.cls.innerContainer}),a("<div/>",{class:b.cls.controls}).append(a("<div/>",{class:b.cls.prev}).append(a("<span/>",{text:b.il8n.prev})),a("<label/>",{class:b.cls.count,text:b.il8n.count}).prepend(a("<span/>",{class:b.cls.countCurrent,text:"0"})).append(a("<span/>",{class:b.cls.countTotal,text:"0"})),a("<div/>",{class:b.cls.next}).append(a("<span/>",{text:b.il8n.next}))))},destroyChildren:function(){var a=this;a.$el.find(a.sel.inner).remove()},onPreInit:function(a,b){b.$inner=b.$el.find(b.sel.innerContainer),b.$current=b.$el.find(b.sel.countCurrent),b.$total=b.$el.find(b.sel.countTotal),b.$prev=b.$el.find(b.sel.prev),b.$next=b.$el.find(b.sel.next)},onInit:function(a,b){b.template.attachFooBox&&b.$el.on("foobox.previous",{self:b},b.onFooBoxPrev).on("foobox.next",{self:b},b.onFooBoxNext),b.$prev.on("click",{self:b},b.onPrevClick),b.$next.on("click",{self:b},b.onNextClick)},onFirstLoad:function(a,b){b.update()},onDestroy:function(a,b){b.template.attachFooBox&&b.$el.off({"foobox.previous":b.onFooBoxPrev,"foobox.next":b.onFooBoxNext}),b.$prev.off("click",b.onPrevClick),b.$next.off("click",b.onNextClick)},onAppendItem:function(a,b,c){a.preventDefault(),b.$inner.append(c.$el),c.fix(),c.isAttached=!0},onAfterPageChange:function(a,b,c,d,e){e||b.update()},onAfterFilterChange:function(a,b){b.update()},update:function(){this.pages&&(this.$current.text(this.pages.current),this.$total.text(this.pages.total))},prev:function(){this.pages&&(this.template.loop&&1===this.pages.current?this.pages.last():this.pages.prev(),this.update())},next:function(){this.pages&&(this.template.loop&&this.pages.current===this.pages.total?this.pages.first():this.pages.next(),this.update())},onFooBoxPrev:function(a){a.data.self.prev()},onFooBoxNext:function(a){a.data.self.next()},onPrevClick:function(a){a.preventDefault(),a.stopPropagation(),a.data.self.prev()},onNextClick:function(a){a.preventDefault(),a.stopPropagation(),a.data.self.next()}}),b.template.register("image-viewer",b.ImageViewerTemplate,{template:{attachFooBox:!1,loop:!1}},{container:"foogallery fg-image-viewer",inner:"fiv-inner",innerContainer:"fiv-inner-container",
12
+ controls:"fiv-ctrls",prev:"fiv-prev",next:"fiv-next",count:"fiv-count",countCurrent:"fiv-count-current",countTotal:"fiv-count-total"},{prev:"Prev",next:"Next",count:"of"})}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.obj),function(a,b,c){b.ThumbnailTemplate=b.Template.extend({construct:function(a,b){this._super(c.extend({},a,{filtering:{type:"none"},paging:{pushOrReplace:"replace",theme:"fg-light",type:"default",size:1,position:"none",scrollToTop:!1}}),b)}}),b.template.register("thumbnail",b.ThumbnailTemplate,null,{container:"foogallery fg-thumbnail"})}(FooGallery.$,FooGallery,FooGallery.utils.obj),function(a,b,c,d,e,f){b.StackAlbum=c.Class.extend({construct:function(c,f){var g=this;g.$el=d.jq(c)?c:a(c),g.el=g.$el.get(0),g.opt=e.extend({},b.StackAlbum.defaults,f,g.$el.data("foogallery")),g.$back=g.$el.find(".fg-header-back"),g.$active=g.$el.find(".fg-header-active"),g.$piles=g.$el.find(".fg-piles"),g.piles=g.$piles.find(".fg-pile").map(function(a,c){return new b.StackAlbum.Pile(g,c,{index:a})}).get(),g.ignoreResize=!1,g.robserver=new ResizeObserver(function(){!g.ignoreResize&&g.$el.is(":visible")&&g.layout(!0)})},init:function(){var a=this;a.piles.forEach(function(a){a.init()}),a.$back.on("click.foogallery",{self:a},a.onBackClick),a.robserver.observe(a.el)},destroy:function(){var a=this;a.robserver.disconnect(),a.$back.off(".foogallery"),a.piles.forEach(function(a){a.destroy()})},getLayoutInfo:function(){var a=this,b=a.opt.gutter+2*a.opt.border;return{maxWidth:a.$el.width(),space:b,halfSpace:b/2,itemWidth:a.opt.itemWidth,itemHeight:a.opt.itemHeight,itemOuterWidth:a.opt.itemWidth+2*a.opt.border,itemOuterHeight:a.opt.itemHeight+2*a.opt.border,blockWidth:a.opt.itemWidth+b,blockHeight:a.opt.itemHeight+b,border:a.opt.border,doubleBorder:2*a.opt.border,gutter:a.opt.gutter,halfGutter:a.opt.gutter/2}},layout:function(a){var b,c=this;a&&(c.$el.addClass("fg-disable-transitions"),c.$el.prop("offsetWidth")),c.hasActive?(b=c.activePile.layout(),c.activePile.setPosition(0,0,b.width,b.height),c.$piles.css({width:b.width+"px",height:b.height+"px"})):(b=c.layoutPiles(),c.$piles.css({width:b.width+"px",height:b.height+"px"})),a&&c.$el.removeClass("fg-disable-transitions")},layoutPiles:function(a){var b=this,c=b.getLayoutInfo(),e=0,f=1,g=0;return a=d.fn(a)?a:function(){},b.piles.forEach(function(b){var d=e;(e+=c.blockWidth)>c.maxWidth&&(d=0,e=c.blockWidth,f++);var h=c.blockHeight*(f-1);a(b,h,d,c.blockWidth,c.blockHeight),b.setPosition(h,d,c.blockWidth,c.blockHeight),e>g&&(g=e)}),{width:g,height:c.blockHeight*f}},setActive:function(a){var c,d=this,e=d.activePile,g=e instanceof b.StackAlbum.Pile;a=a instanceof b.StackAlbum.Pile?a:null,d.activePile=a,d.hasActive=null!==a,g&&e.collapse(),d.ignoreResize=!0,d.hasActive?(d.piles.forEach(function(b){b!==a&&b.hide(d.activePile)}),c=d.activePile.expand(),d.$active.text(a.title),d.$el.addClass("fg-has-active")):(c=d.layoutPiles(function(a){a.show()}),d.$el.removeClass("fg-has-active")),f.start(d.$piles,function(a){a.css({width:c.width+"px",height:c.height+"px"})},!1,350).then(function(){d.ignoreResize=!1})},onBackClick:function(a){a.preventDefault(),a.stopPropagation(),a.data.self.setActive(null)}}),b.StackAlbum.defaults={gutter:50,itemWidth:150,itemHeight:150,border:10,angleStep:1,randomAngle:!1}}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.obj,FooGallery.utils.transition),function(a,b,c,d,e){b.StackAlbum.Pile=c.Class.extend({construct:function(c,f,g){var h=this;h.album=c,h.$el=d.jq(f)?f:a(f),h.opt=e.extend({},b.StackAlbum.Pile.defaults,g,h.$el.data()),h.title=h.opt.title,h.items=h.$el.find(".fg-pile-item").map(function(a,c){return new b.StackAlbum.Item(h,c,{index:a})}).get(),h.$cover=a("<div/>",{class:"fg-pile-cover"}).append(a("<div/>",{class:"fg-pile-cover-content"}).append(a("<span/>",{class:"fg-pile-cover-title",text:h.opt.title}),a("<span/>",{class:"fg-pile-cover-count",text:h.items.length}))),h.top=0,h.left=0,h.isExpanded=!1},init:function(){var a=this,b=a.album.opt,c=a.getAngles(b.angleStep),d=b.randomAngle?a.randomAngle(c):b.angleStep;a.$cover.on("click.foogallery",{self:a},a.onCoverClick),a.items.forEach(function(e,f){e.init(),f>3||(0===f?(e.$el.addClass("fg-has-cover").append(a.$cover),e.load()):(f%2==0?e.setAngle(-d):e.setAngle(d),b.randomAngle?d=a.randomAngle(c):d+=b.angleStep))})},destroy:function(){var a=this;a.$cover.remove(),a.items.forEach(function(a,b){0===b&&a.$el.removeClass("fg-has-cover"),a.destroy()})},getAngles:function(a){for(var b=[],c=1;c<=3;c++)b.push(c*a);return b},randomAngle:function(a){var b=a.length,c=Math.floor(Math.random()*(b-0)+0),d=a.splice(c,1);return 1===d.length?d[0]:0},setPosition:function(a,b,c,e){var f=this;f.top=a,f.left=b,d.number(c)&&d.number(e)?f.$el.css({top:a+"px",left:b+"px",width:c+"px",height:e+"px"}):f.$el.css({top:a+"px",left:b+"px"})},layout:function(){var a=this,b=a.album.getLayoutInfo(),c=0,d=1,e=!1,f=0;return a.items.forEach(function(a){(c+=b.halfGutter)>b.maxWidth&&(c=b.halfGutter,d++,e=!0);var g=c;c+=b.itemOuterWidth+b.halfGutter,!e&&c>b.maxWidth&&(g=b.halfGutter,c=b.blockWidth,d++);var h=b.blockHeight*(d-1)+b.halfGutter;e=!1,a.setPosition(h,g,b.itemOuterWidth,b.itemOuterHeight),a.isLoaded||a.load(),c>f&&(f=c)}),{width:f,height:b.blockHeight*d}},expand:function(){var a,b=this;return b.$el.removeClass("fg-collapsed").addClass("fg-expanded"),a=b.layout(),b.setPosition(0,0,a.width,a.height),b.isExpanded=!0,a},collapse:function(){var a=this,b=a.album.getLayoutInfo();a.$el.removeClass("fg-expanded").addClass("fg-collapsed"),a.items.forEach(function(a){a.setPosition(b.halfGutter,b.halfGutter,b.itemOuterWidth,b.itemOuterHeight)});var c={width:b.blockWidth,height:b.blockHeight};return a.setPosition(0,0,c.width,c.height),a.isExpanded=!1,c},show:function(){this.$el.removeClass("fg-hidden fg-expanded fg-collapsed")},hide:function(a){var c=this;a instanceof b.StackAlbum.Pile&&c.setPosition(a.top,a.left),c.$el.addClass("fg-hidden")},onCoverClick:function(a){a.preventDefault(),a.stopPropagation();var b=a.data.self;b.album.setActive(b)}}),b.StackAlbum.Pile.defaults={index:-1,title:null}}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.obj),function(a,b,c,d,e){b.StackAlbum.Item=c.Class.extend({construct:function(c,f,g){var h=this;h.$el=d.jq(f)?f:a(f),h.opt=e.extend({},b.StackAlbum.Item.defaults,g,h.$el.data()),h.$thumb=h.$el.find(".fg-pile-item-thumb"),h.$image=h.$el.find(".fg-pile-item-image"),h.isLoaded=!1,h.isLoading=!1,h._loading=null},init:function(){},destroy:function(){},setAngle:function(a){this.$el.css({transform:"rotate("+a+"deg)"})},setPosition:function(a,b,c,d){this.$el.css({top:a+"px",left:b+"px",width:c+"px",height:d+"px"})},load:function(){var b=this;return d.promise(b._loading)?b._loading:b._loading=a.Deferred(function(a){b.$el.addClass("fg-loading"),b.isLoading=!0,b.$image.on({"load.foogallery":function(){b.$image.off(".foogallery"),b.$el.removeClass("fg-loading"),b.isLoading=!1,b.isLoaded=!0,a.resolve()},"error.foogallery":function(){b.$image.off(".foogallery"),b.$el.removeClass("fg-loading"),b.isLoading=!1,b.isLoaded=!0,a.reject()}}),b.$image.prop("src",b.$image.attr(b.opt.src))}).promise()}}),b.StackAlbum.Item.defaults={index:-1,src:"data-src-fg"}}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.obj),function(a,b,c){a.fn.foogalleryStackAlbum=function(c){return this.each(function(c,d){var e=a(d),f=e.data("__FooGalleryAlbum__");f instanceof b.StackAlbum&&f.destroy(),f=new b.StackAlbum(e),f.init(),e.data("__FooGalleryAlbum__",f)})},b.loadStackAlbums=b.reloadStackAlbums=function(){a(function(){a(".foogallery-stack-album:not(.fg-ready)").foogalleryStackAlbum()}),c.ready(function(){a(".foogallery-stack-album.fg-ready").foogalleryStackAlbum()})},b.loadStackAlbums()}(FooGallery.$,FooGallery,FooGallery.utils),function(a,b,c,d,e){b.triggerPostLoad=function(b,c,d,e,f){if("first-load"===b.type||c.initialized&&("after-page-change"===b.type&&!f||"after-filter-change"===b.type))try{if(c.$el.parents(".fbx-item").length>0)return;c.$el.hasClass("fbx-instance")&&window.FOOBOX&&a.fn.foobox?c.$el.foobox(window.FOOBOX.o):a("body").trigger("post-load")}catch(a){console.error(a)}},b.autoDefaults={on:{"first-load.foogallery after-page-change.foogallery after-filter-change.foogallery":b.triggerPostLoad}},b.autoEnabled=!0,b.auto=function(a){b.autoDefaults=d.merge(b.autoDefaults,a)},b.globalsMerged=!1,b.mergeGlobals=function(){if(!0!==b.globalsMerged&&window.FooGallery_il8n&&e.object(window.FooGallery_il8n)){var a=window.FooGallery_il8n;for(var d in a)if(a.hasOwnProperty(d)&&b[d]instanceof c.Factory&&e.object(a[d]))for(var f in a[d])a[d].hasOwnProperty(f)&&b[d].configure(f,null,null,a[d][f]);b.globalsMerged=!0}},b.load=b.reload=function(){a(function(){b.mergeGlobals(),b.autoEnabled&&a('[id^="foogallery-gallery-"]:not(.fg-ready)').foogallery(b.autoDefaults)}),c.ready(function(){b.mergeGlobals(),b.autoEnabled&&a('[id^="foogallery-gallery-"].fg-ready').foogallery(b.autoDefaults)})},b.load()}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.obj,FooGallery.utils.is);
extensions/default-templates/thumbnail/js/admin-gallery-thumbnail.js CHANGED
@@ -18,7 +18,7 @@
18
  FOOGALLERY_THUMBNAIL_TEMPLATE.setPreviewClasses();
19
  });
20
 
21
- $('.foogallery-thumbnail-preview').click(function(e) {
22
  e.preventDefault();
23
  });
24
  };
18
  FOOGALLERY_THUMBNAIL_TEMPLATE.setPreviewClasses();
19
  });
20
 
21
+ $('.foogallery-thumbnail-preview').on('click', function(e) {
22
  e.preventDefault();
23
  });
24
  };
foogallery.php CHANGED
@@ -3,7 +3,7 @@
3
  /*
4
  Plugin Name: FooGallery
5
  Description: FooGallery is the most intuitive and extensible gallery management tool ever created for WordPress
6
- Version: 1.9.37
7
  Author: FooPlugins
8
  Plugin URI: http://fooplugins.com/foogallery/
9
  Author URI: http://fooplugins.com
@@ -25,7 +25,7 @@ if ( function_exists( 'foogallery_fs' ) ) {
25
  define( 'FOOGALLERY_PATH', plugin_dir_path( __FILE__ ) );
26
  define( 'FOOGALLERY_URL', plugin_dir_url( __FILE__ ) );
27
  define( 'FOOGALLERY_FILE', __FILE__ );
28
- define( 'FOOGALLERY_VERSION', '1.9.37' );
29
  define( 'FOOGALLERY_SETTINGS_VERSION', '2' );
30
  require_once FOOGALLERY_PATH . 'includes/constants.php';
31
  // Create a helper function for easy SDK access.
3
  /*
4
  Plugin Name: FooGallery
5
  Description: FooGallery is the most intuitive and extensible gallery management tool ever created for WordPress
6
+ Version: 1.9.44
7
  Author: FooPlugins
8
  Plugin URI: http://fooplugins.com/foogallery/
9
  Author URI: http://fooplugins.com
25
  define( 'FOOGALLERY_PATH', plugin_dir_path( __FILE__ ) );
26
  define( 'FOOGALLERY_URL', plugin_dir_url( __FILE__ ) );
27
  define( 'FOOGALLERY_FILE', __FILE__ );
28
+ define( 'FOOGALLERY_VERSION', '1.9.44' );
29
  define( 'FOOGALLERY_SETTINGS_VERSION', '2' );
30
  require_once FOOGALLERY_PATH . 'includes/constants.php';
31
  // Create a helper function for easy SDK access.
freemius/assets/css/admin/account.css CHANGED
@@ -1 +1 @@
1
- label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.fs-notice[data-id="license_not_whitelabeled"].success,.fs-notice[data-id="license_whitelabeled"].success{color:inherit;border-left-color:#00a0d2}.fs-notice[data-id="license_not_whitelabeled"].success label.fs-plugin-title,.fs-notice[data-id="license_whitelabeled"].success label.fs-plugin-title{display:none}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type="text"]{color:#0073AA;font-size:16px;background:none}.fs-key-value-table input[type="text"]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:grey;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
1
+ label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.fs-notice[data-id="license_not_whitelabeled"].success,.fs-notice[data-id="license_whitelabeled"].success{color:inherit;border-left-color:#00a0d2}.fs-notice[data-id="license_not_whitelabeled"].success label.fs-plugin-title,.fs-notice[data-id="license_whitelabeled"].success label.fs-plugin-title{display:none}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type="text"]{color:#0073AA;font-size:16px;background:none}.fs-key-value-table input[type="text"]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:grey;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
freemius/languages/freemius.pot CHANGED
@@ -1,2524 +1,2524 @@
1
- # Copyright (C) 2020 freemius
2
- # This file is distributed under the same license as the freemius package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: freemius\n"
6
- "MIME-Version: 1.0\n"
7
- "Content-Type: text/plain; charset=UTF-8\n"
8
- "Content-Transfer-Encoding: 8bit\n"
9
- "Language-Team: Freemius Team <admin@freemius.com>\n"
10
- "Last-Translator: Vova Feldman <vova@freemius.com>\n"
11
- "Report-Msgid-Bugs-To: https://github.com/Freemius/wordpress-sdk/issues\n"
12
- "X-Poedit-Basepath: ..\n"
13
- "X-Poedit-KeywordsList: get_text_inline;fs_text_inline;fs_echo_inline;fs_esc_js_inline;fs_esc_attr_inline;fs_esc_attr_echo_inline;fs_esc_html_inline;fs_esc_html_echo_inline;get_text_x_inline:1,2c;fs_text_x_inline:1,2c;fs_echo_x_inline:1,2c;fs_esc_attr_x_inline:1,2c;fs_esc_js_x_inline:1,2c;fs_esc_js_echo_x_inline:1,2c;fs_esc_html_x_inline:1,2c;fs_esc_html_echo_x_inline:1,2c\n"
14
- "X-Poedit-SearchPath-0: .\n"
15
- "X-Poedit-SearchPathExcluded-0: *.js\n"
16
- "X-Poedit-SourceCharset: UTF-8\n"
17
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
-
19
- #: includes/class-freemius.php:1912, templates/account.php:910
20
- msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
21
- msgstr ""
22
-
23
- #: includes/class-freemius.php:1919
24
- msgid "Would you like to proceed with the update?"
25
- msgstr ""
26
-
27
- #: includes/class-freemius.php:2131
28
- msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
29
- msgstr ""
30
-
31
- #: includes/class-freemius.php:2133
32
- msgid "Error"
33
- msgstr ""
34
-
35
- #: includes/class-freemius.php:2533
36
- msgid "I found a better %s"
37
- msgstr ""
38
-
39
- #: includes/class-freemius.php:2535
40
- msgid "What's the %s's name?"
41
- msgstr ""
42
-
43
- #: includes/class-freemius.php:2541
44
- msgid "It's a temporary %s. I'm just debugging an issue."
45
- msgstr ""
46
-
47
- #: includes/class-freemius.php:2543
48
- msgid "Deactivation"
49
- msgstr ""
50
-
51
- #: includes/class-freemius.php:2544
52
- msgid "Theme Switch"
53
- msgstr ""
54
-
55
- #: includes/class-freemius.php:2553, templates/forms/resend-key.php:24, templates/forms/user-change.php:29
56
- msgid "Other"
57
- msgstr ""
58
-
59
- #: includes/class-freemius.php:2561
60
- msgid "I no longer need the %s"
61
- msgstr ""
62
-
63
- #: includes/class-freemius.php:2568
64
- msgid "I only needed the %s for a short period"
65
- msgstr ""
66
-
67
- #: includes/class-freemius.php:2574
68
- msgid "The %s broke my site"
69
- msgstr ""
70
-
71
- #: includes/class-freemius.php:2581
72
- msgid "The %s suddenly stopped working"
73
- msgstr ""
74
-
75
- #: includes/class-freemius.php:2591
76
- msgid "I can't pay for it anymore"
77
- msgstr ""
78
-
79
- #: includes/class-freemius.php:2593
80
- msgid "What price would you feel comfortable paying?"
81
- msgstr ""
82
-
83
- #: includes/class-freemius.php:2599
84
- msgid "I don't like to share my information with you"
85
- msgstr ""
86
-
87
- #: includes/class-freemius.php:2620
88
- msgid "The %s didn't work"
89
- msgstr ""
90
-
91
- #: includes/class-freemius.php:2630
92
- msgid "I couldn't understand how to make it work"
93
- msgstr ""
94
-
95
- #: includes/class-freemius.php:2638
96
- msgid "The %s is great, but I need specific feature that you don't support"
97
- msgstr ""
98
-
99
- #: includes/class-freemius.php:2640
100
- msgid "What feature?"
101
- msgstr ""
102
-
103
- #: includes/class-freemius.php:2644
104
- msgid "The %s is not working"
105
- msgstr ""
106
-
107
- #: includes/class-freemius.php:2646
108
- msgid "Kindly share what didn't work so we can fix it for future users..."
109
- msgstr ""
110
-
111
- #: includes/class-freemius.php:2650
112
- msgid "It's not what I was looking for"
113
- msgstr ""
114
-
115
- #: includes/class-freemius.php:2652
116
- msgid "What you've been looking for?"
117
- msgstr ""
118
-
119
- #: includes/class-freemius.php:2656
120
- msgid "The %s didn't work as expected"
121
- msgstr ""
122
-
123
- #: includes/class-freemius.php:2658
124
- msgid "What did you expect?"
125
- msgstr ""
126
-
127
- #: includes/class-freemius.php:3513, templates/debug.php:20
128
- msgid "Freemius Debug"
129
- msgstr ""
130
-
131
- #: includes/class-freemius.php:4265
132
- msgid "I don't know what is cURL or how to install it, help me!"
133
- msgstr ""
134
-
135
- #: includes/class-freemius.php:4267
136
- msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
137
- msgstr ""
138
-
139
- #: includes/class-freemius.php:4274
140
- msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
141
- msgstr ""
142
-
143
- #: includes/class-freemius.php:4379
144
- msgid "Yes - do your thing"
145
- msgstr ""
146
-
147
- #: includes/class-freemius.php:4384
148
- msgid "No - just deactivate"
149
- msgstr ""
150
-
151
- #: includes/class-freemius.php:4429, includes/class-freemius.php:4923, includes/class-freemius.php:6182, includes/class-freemius.php:13357, includes/class-freemius.php:14075, includes/class-freemius.php:17526, includes/class-freemius.php:17631, includes/class-freemius.php:17806, includes/class-freemius.php:20040, includes/class-freemius.php:20398, includes/class-freemius.php:20408, includes/class-freemius.php:21079, includes/class-freemius.php:21985, includes/class-freemius.php:22118, includes/class-freemius.php:22274, templates/add-ons.php:57
152
- msgctxt "exclamation"
153
- msgid "Oops"
154
- msgstr ""
155
-
156
- #: includes/class-freemius.php:4498
157
- msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
158
- msgstr ""
159
-
160
- #: includes/class-freemius.php:4920
161
- msgctxt "addonX cannot run without pluginY"
162
- msgid "%s cannot run without %s."
163
- msgstr ""
164
-
165
- #: includes/class-freemius.php:4921
166
- msgctxt "addonX cannot run..."
167
- msgid "%s cannot run without the plugin."
168
- msgstr ""
169
-
170
- #: includes/class-freemius.php:5120, includes/class-freemius.php:5145, includes/class-freemius.php:21150
171
- msgid "Unexpected API error. Please contact the %s's author with the following error."
172
- msgstr ""
173
-
174
- #: includes/class-freemius.php:5848
175
- msgid "Premium %s version was successfully activated."
176
- msgstr ""
177
-
178
- #: includes/class-freemius.php:5860, includes/class-freemius.php:7762
179
- msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
180
- msgid "W00t"
181
- msgstr ""
182
-
183
- #: includes/class-freemius.php:5875
184
- msgid "You have a %s license."
185
- msgstr ""
186
-
187
- #: includes/class-freemius.php:5879, includes/class-freemius.php:16925, includes/class-freemius.php:16936, includes/class-freemius.php:20309, includes/class-freemius.php:20659, includes/class-freemius.php:20728, includes/class-freemius.php:20900
188
- msgctxt "interjection expressing joy or exuberance"
189
- msgid "Yee-haw"
190
- msgstr ""
191
-
192
- #: includes/class-freemius.php:6165
193
- msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
194
- msgstr ""
195
-
196
- #: includes/class-freemius.php:6169
197
- msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
198
- msgstr ""
199
-
200
- #: includes/class-freemius.php:6178, templates/add-ons.php:186, templates/account/partials/addon.php:381
201
- msgid "More information about %s"
202
- msgstr ""
203
-
204
- #: includes/class-freemius.php:6179
205
- msgid "Purchase License"
206
- msgstr ""
207
-
208
- #: includes/class-freemius.php:7118, templates/connect.php:171
209
- msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
210
- msgstr ""
211
-
212
- #: includes/class-freemius.php:7122
213
- msgid "start the trial"
214
- msgstr ""
215
-
216
- #: includes/class-freemius.php:7123, templates/connect.php:175
217
- msgid "complete the install"
218
- msgstr ""
219
-
220
- #: includes/class-freemius.php:7241
221
- msgid "You are just one step away - %s"
222
- msgstr ""
223
-
224
- #: includes/class-freemius.php:7244
225
- msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
226
- msgid "Complete \"%s\" Activation Now"
227
- msgstr ""
228
-
229
- #: includes/class-freemius.php:7322
230
- msgid "We made a few tweaks to the %s, %s"
231
- msgstr ""
232
-
233
- #: includes/class-freemius.php:7326
234
- msgid "Opt in to make \"%s\" better!"
235
- msgstr ""
236
-
237
- #: includes/class-freemius.php:7761
238
- msgid "The upgrade of %s was successfully completed."
239
- msgstr ""
240
-
241
- #: includes/class-freemius.php:10243, includes/class-fs-plugin-updater.php:1099, includes/class-fs-plugin-updater.php:1294, includes/class-fs-plugin-updater.php:1301, templates/auto-installation.php:32
242
- msgid "Add-On"
243
- msgstr ""
244
-
245
- #: includes/class-freemius.php:10245, templates/account.php:392, templates/account.php:400, templates/debug.php:358, templates/debug.php:549
246
- msgid "Plugin"
247
- msgstr ""
248
-
249
- #: includes/class-freemius.php:10246, templates/account.php:393, templates/account.php:401, templates/debug.php:358, templates/debug.php:549, templates/forms/deactivation/form.php:71
250
- msgid "Theme"
251
- msgstr ""
252
-
253
- #: includes/class-freemius.php:13176
254
- msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
255
- msgstr ""
256
-
257
- #: includes/class-freemius.php:13190
258
- msgid "Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s."
259
- msgstr ""
260
-
261
- #: includes/class-freemius.php:13195
262
- msgid "User Dashboard"
263
- msgstr ""
264
-
265
- #: includes/class-freemius.php:13196
266
- msgid "revert it now"
267
- msgstr ""
268
-
269
- #: includes/class-freemius.php:13255
270
- msgid "An unknown error has occurred while trying to set the user's beta mode."
271
- msgstr ""
272
-
273
- #: includes/class-freemius.php:13328
274
- msgid "Invalid new user ID or email address."
275
- msgstr ""
276
-
277
- #: includes/class-freemius.php:13358, includes/class-freemius.php:22229
278
- msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
279
- msgstr ""
280
-
281
- #: includes/class-freemius.php:13359, includes/class-freemius.php:22230
282
- msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
283
- msgstr ""
284
-
285
- #: includes/class-freemius.php:13366, includes/class-freemius.php:22237
286
- msgid "Change Ownership"
287
- msgstr ""
288
-
289
- #: includes/class-freemius.php:13942
290
- msgid "Invalid site details collection."
291
- msgstr ""
292
-
293
- #: includes/class-freemius.php:14062
294
- msgid "We couldn't find your email address in the system, are you sure it's the right address?"
295
- msgstr ""
296
-
297
- #: includes/class-freemius.php:14064
298
- msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
299
- msgstr ""
300
-
301
- #: includes/class-freemius.php:14338
302
- msgid "Account is pending activation."
303
- msgstr ""
304
-
305
- #: includes/class-freemius.php:14450, templates/forms/premium-versions-upgrade-handler.php:47
306
- msgid "Buy a license now"
307
- msgstr ""
308
-
309
- #: includes/class-freemius.php:14462, templates/forms/premium-versions-upgrade-handler.php:46
310
- msgid "Renew your license now"
311
- msgstr ""
312
-
313
- #: includes/class-freemius.php:14466
314
- msgid "%s to access version %s security & feature updates, and support."
315
- msgstr ""
316
-
317
- #: includes/class-freemius.php:16907
318
- msgid "%s activation was successfully completed."
319
- msgstr ""
320
-
321
- #: includes/class-freemius.php:16921
322
- msgid "Your account was successfully activated with the %s plan."
323
- msgstr ""
324
-
325
- #: includes/class-freemius.php:16932, includes/class-freemius.php:20724
326
- msgid "Your trial has been successfully started."
327
- msgstr ""
328
-
329
- #: includes/class-freemius.php:17524, includes/class-freemius.php:17629, includes/class-freemius.php:17804
330
- msgid "Couldn't activate %s."
331
- msgstr ""
332
-
333
- #: includes/class-freemius.php:17525, includes/class-freemius.php:17630, includes/class-freemius.php:17805
334
- msgid "Please contact us with the following message:"
335
- msgstr ""
336
-
337
- #: includes/class-freemius.php:17626, templates/forms/data-debug-mode.php:162
338
- msgid "An unknown error has occurred."
339
- msgstr ""
340
-
341
- #: includes/class-freemius.php:18162, includes/class-freemius.php:23310
342
- msgid "Upgrade"
343
- msgstr ""
344
-
345
- #: includes/class-freemius.php:18168
346
- msgid "Start Trial"
347
- msgstr ""
348
-
349
- #: includes/class-freemius.php:18170
350
- msgid "Pricing"
351
- msgstr ""
352
-
353
- #: includes/class-freemius.php:18250, includes/class-freemius.php:18252
354
- msgid "Affiliation"
355
- msgstr ""
356
-
357
- #: includes/class-freemius.php:18280, includes/class-freemius.php:18282, templates/account.php:240, templates/debug.php:324
358
- msgid "Account"
359
- msgstr ""
360
-
361
- #: includes/class-freemius.php:18296, includes/class-freemius.php:18298, includes/customizer/class-fs-customizer-support-section.php:60
362
- msgid "Contact Us"
363
- msgstr ""
364
-
365
- #: includes/class-freemius.php:18309, includes/class-freemius.php:18311, includes/class-freemius.php:23324, templates/account.php:119, templates/account/partials/addon.php:44
366
- msgid "Add-Ons"
367
- msgstr ""
368
-
369
- #: includes/class-freemius.php:18345
370
- msgctxt "ASCII arrow left icon"
371
- msgid "&#x2190;"
372
- msgstr ""
373
-
374
- #: includes/class-freemius.php:18345
375
- msgctxt "ASCII arrow right icon"
376
- msgid "&#x27a4;"
377
- msgstr ""
378
-
379
- #: includes/class-freemius.php:18347, templates/pricing.php:109
380
- msgctxt "noun"
381
- msgid "Pricing"
382
- msgstr ""
383
-
384
- #: includes/class-freemius.php:18560, includes/customizer/class-fs-customizer-support-section.php:67
385
- msgid "Support Forum"
386
- msgstr ""
387
-
388
- #: includes/class-freemius.php:19534
389
- msgid "Your email has been successfully verified - you are AWESOME!"
390
- msgstr ""
391
-
392
- #: includes/class-freemius.php:19535
393
- msgctxt "a positive response"
394
- msgid "Right on"
395
- msgstr ""
396
-
397
- #: includes/class-freemius.php:20041
398
- msgid "seems like the key you entered doesn't match our records."
399
- msgstr ""
400
-
401
- #: includes/class-freemius.php:20065
402
- msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
403
- msgstr ""
404
-
405
- #: includes/class-freemius.php:20300
406
- msgid "Your %s Add-on plan was successfully upgraded."
407
- msgstr ""
408
-
409
- #: includes/class-freemius.php:20302
410
- msgid "%s Add-on was successfully purchased."
411
- msgstr ""
412
-
413
- #: includes/class-freemius.php:20305
414
- msgid "Download the latest version"
415
- msgstr ""
416
-
417
- #: includes/class-freemius.php:20391
418
- msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
419
- msgstr ""
420
-
421
- #: includes/class-freemius.php:20397, includes/class-freemius.php:20407, includes/class-freemius.php:20859, includes/class-freemius.php:20948
422
- msgid "Error received from the server:"
423
- msgstr ""
424
-
425
- #: includes/class-freemius.php:20407
426
- msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
427
- msgstr ""
428
-
429
- #: includes/class-freemius.php:20621, includes/class-freemius.php:20864, includes/class-freemius.php:20919, includes/class-freemius.php:21026
430
- msgctxt "something somebody says when they are thinking about what you have just said."
431
- msgid "Hmm"
432
- msgstr ""
433
-
434
- #: includes/class-freemius.php:20634
435
- msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
436
- msgstr ""
437
-
438
- #: includes/class-freemius.php:20635, templates/account.php:121, templates/add-ons.php:250, templates/account/partials/addon.php:46
439
- msgctxt "trial period"
440
- msgid "Trial"
441
- msgstr ""
442
-
443
- #: includes/class-freemius.php:20640
444
- msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
445
- msgstr ""
446
-
447
- #: includes/class-freemius.php:20644, includes/class-freemius.php:20703
448
- msgid "Please contact us here"
449
- msgstr ""
450
-
451
- #: includes/class-freemius.php:20655
452
- msgid "Your plan was successfully activated."
453
- msgstr ""
454
-
455
- #: includes/class-freemius.php:20656
456
- msgid "Your plan was successfully upgraded."
457
- msgstr ""
458
-
459
- #: includes/class-freemius.php:20673
460
- msgid "Your plan was successfully changed to %s."
461
- msgstr ""
462
-
463
- #: includes/class-freemius.php:20689
464
- msgid "Your license has expired. You can still continue using the free %s forever."
465
- msgstr ""
466
-
467
- #: includes/class-freemius.php:20691
468
- msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
469
- msgstr ""
470
-
471
- #: includes/class-freemius.php:20699
472
- msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
473
- msgstr ""
474
-
475
- #: includes/class-freemius.php:20712
476
- msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
477
- msgstr ""
478
-
479
- #: includes/class-freemius.php:20738
480
- msgid "Your free trial has expired. You can still continue using all our free features."
481
- msgstr ""
482
-
483
- #: includes/class-freemius.php:20740
484
- msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
485
- msgstr ""
486
-
487
- #: includes/class-freemius.php:20855
488
- msgid "It looks like the license could not be activated."
489
- msgstr ""
490
-
491
- #: includes/class-freemius.php:20897
492
- msgid "Your license was successfully activated."
493
- msgstr ""
494
-
495
- #: includes/class-freemius.php:20923
496
- msgid "It looks like your site currently doesn't have an active license."
497
- msgstr ""
498
-
499
- #: includes/class-freemius.php:20947
500
- msgid "It looks like the license deactivation failed."
501
- msgstr ""
502
-
503
- #: includes/class-freemius.php:20976
504
- msgid "Your %s license was successfully deactivated."
505
- msgstr ""
506
-
507
- #: includes/class-freemius.php:20977
508
- msgid "Your license was successfully deactivated, you are back to the %s plan."
509
- msgstr ""
510
-
511
- #: includes/class-freemius.php:20980
512
- msgid "O.K"
513
- msgstr ""
514
-
515
- #: includes/class-freemius.php:21033
516
- msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
517
- msgstr ""
518
-
519
- #: includes/class-freemius.php:21042
520
- msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
521
- msgstr ""
522
-
523
- #: includes/class-freemius.php:21084
524
- msgid "You are already running the %s in a trial mode."
525
- msgstr ""
526
-
527
- #: includes/class-freemius.php:21095
528
- msgid "You already utilized a trial before."
529
- msgstr ""
530
-
531
- #: includes/class-freemius.php:21109
532
- msgid "Plan %s do not exist, therefore, can't start a trial."
533
- msgstr ""
534
-
535
- #: includes/class-freemius.php:21120
536
- msgid "Plan %s does not support a trial period."
537
- msgstr ""
538
-
539
- #: includes/class-freemius.php:21131
540
- msgid "None of the %s's plans supports a trial period."
541
- msgstr ""
542
-
543
- #: includes/class-freemius.php:21181
544
- msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
545
- msgstr ""
546
-
547
- #: includes/class-freemius.php:21217
548
- msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
549
- msgstr ""
550
-
551
- #: includes/class-freemius.php:21236
552
- msgid "Your %s free trial was successfully cancelled."
553
- msgstr ""
554
-
555
- #: includes/class-freemius.php:21552
556
- msgid "Version %s was released."
557
- msgstr ""
558
-
559
- #: includes/class-freemius.php:21552
560
- msgid "Please download %s."
561
- msgstr ""
562
-
563
- #: includes/class-freemius.php:21559
564
- msgid "the latest %s version here"
565
- msgstr ""
566
-
567
- #: includes/class-freemius.php:21564
568
- msgid "New"
569
- msgstr ""
570
-
571
- #: includes/class-freemius.php:21569
572
- msgid "Seems like you got the latest release."
573
- msgstr ""
574
-
575
- #: includes/class-freemius.php:21570
576
- msgid "You are all good!"
577
- msgstr ""
578
-
579
- #: includes/class-freemius.php:21873
580
- msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
581
- msgstr ""
582
-
583
- #: includes/class-freemius.php:22013
584
- msgid "Site successfully opted in."
585
- msgstr ""
586
-
587
- #: includes/class-freemius.php:22014, includes/class-freemius.php:23020
588
- msgid "Awesome"
589
- msgstr ""
590
-
591
- #: includes/class-freemius.php:22030, templates/forms/optout.php:41
592
- msgid "We appreciate your help in making the %s better by letting us track some usage data."
593
- msgstr ""
594
-
595
- #: includes/class-freemius.php:22031
596
- msgid "Thank you!"
597
- msgstr ""
598
-
599
- #: includes/class-freemius.php:22038
600
- msgid "We will no longer be sending any usage data of %s on %s to %s."
601
- msgstr ""
602
-
603
- #: includes/class-freemius.php:22196
604
- msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
605
- msgstr ""
606
-
607
- #: includes/class-freemius.php:22202
608
- msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
609
- msgstr ""
610
-
611
- #: includes/class-freemius.php:22207
612
- msgid "%s is the new owner of the account."
613
- msgstr ""
614
-
615
- #: includes/class-freemius.php:22209
616
- msgctxt "as congratulations"
617
- msgid "Congrats"
618
- msgstr ""
619
-
620
- #: includes/class-freemius.php:22245
621
- msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
622
- msgstr ""
623
-
624
- #: includes/class-freemius.php:22257
625
- msgid "Please provide your full name."
626
- msgstr ""
627
-
628
- #: includes/class-freemius.php:22262
629
- msgid "Your name was successfully updated."
630
- msgstr ""
631
-
632
- #: includes/class-freemius.php:22323
633
- msgid "You have successfully updated your %s."
634
- msgstr ""
635
-
636
- #: includes/class-freemius.php:22382
637
- msgid "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin."
638
- msgstr ""
639
-
640
- #: includes/class-freemius.php:22385
641
- msgid "Click here"
642
- msgstr ""
643
-
644
- #: includes/class-freemius.php:22483
645
- msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
646
- msgstr ""
647
-
648
- #: includes/class-freemius.php:22484
649
- msgctxt "advance notice of something that will need attention."
650
- msgid "Heads up"
651
- msgstr ""
652
-
653
- #: includes/class-freemius.php:23060
654
- msgctxt "exclamation"
655
- msgid "Hey"
656
- msgstr ""
657
-
658
- #: includes/class-freemius.php:23060
659
- msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
660
- msgstr ""
661
-
662
- #: includes/class-freemius.php:23068
663
- msgid "No commitment for %s days - cancel anytime!"
664
- msgstr ""
665
-
666
- #: includes/class-freemius.php:23069
667
- msgid "No credit card required"
668
- msgstr ""
669
-
670
- #: includes/class-freemius.php:23076, templates/forms/trial-start.php:53
671
- msgctxt "call to action"
672
- msgid "Start free trial"
673
- msgstr ""
674
-
675
- #: includes/class-freemius.php:23153
676
- msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
677
- msgstr ""
678
-
679
- #: includes/class-freemius.php:23162
680
- msgid "Learn more"
681
- msgstr ""
682
-
683
- #: includes/class-freemius.php:23348, templates/account.php:556, templates/account.php:706, templates/connect.php:179, templates/connect.php:456, templates/forms/license-activation.php:27, templates/account/partials/addon.php:321
684
- msgid "Activate License"
685
- msgstr ""
686
-
687
- #: includes/class-freemius.php:23349, templates/account.php:650, templates/account.php:705, templates/account/partials/addon.php:322, templates/account/partials/site.php:271
688
- msgid "Change License"
689
- msgstr ""
690
-
691
- #: includes/class-freemius.php:23462, templates/account/partials/site.php:169
692
- msgid "Opt Out"
693
- msgstr ""
694
-
695
- #: includes/class-freemius.php:23464, includes/class-freemius.php:23470, templates/account/partials/site.php:49, templates/account/partials/site.php:169
696
- msgid "Opt In"
697
- msgstr ""
698
-
699
- #: includes/class-freemius.php:23700
700
- msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
701
- msgstr ""
702
-
703
- #: includes/class-freemius.php:23708
704
- msgid "Activate %s features"
705
- msgstr ""
706
-
707
- #: includes/class-freemius.php:23721
708
- msgid "Please follow these steps to complete the upgrade"
709
- msgstr ""
710
-
711
- #: includes/class-freemius.php:23725
712
- msgid "Download the latest %s version"
713
- msgstr ""
714
-
715
- #: includes/class-freemius.php:23729
716
- msgid "Upload and activate the downloaded version"
717
- msgstr ""
718
-
719
- #: includes/class-freemius.php:23731
720
- msgid "How to upload and activate?"
721
- msgstr ""
722
-
723
- #: includes/class-freemius.php:23865
724
- msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
725
- msgstr ""
726
-
727
- #: includes/class-freemius.php:24034
728
- msgid "Auto installation only works for opted-in users."
729
- msgstr ""
730
-
731
- #: includes/class-freemius.php:24044, includes/class-freemius.php:24077, includes/class-fs-plugin-updater.php:1273, includes/class-fs-plugin-updater.php:1287
732
- msgid "Invalid module ID."
733
- msgstr ""
734
-
735
- #: includes/class-freemius.php:24053, includes/class-fs-plugin-updater.php:1309
736
- msgid "Premium version already active."
737
- msgstr ""
738
-
739
- #: includes/class-freemius.php:24060
740
- msgid "You do not have a valid license to access the premium version."
741
- msgstr ""
742
-
743
- #: includes/class-freemius.php:24067
744
- msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
745
- msgstr ""
746
-
747
- #: includes/class-freemius.php:24085, includes/class-fs-plugin-updater.php:1308
748
- msgid "Premium add-on version already installed."
749
- msgstr ""
750
-
751
- #: includes/class-freemius.php:24435
752
- msgid "View paid features"
753
- msgstr ""
754
-
755
- #: includes/class-freemius.php:24757
756
- msgid "Thank you so much for using %s and its add-ons!"
757
- msgstr ""
758
-
759
- #: includes/class-freemius.php:24758
760
- msgid "Thank you so much for using %s!"
761
- msgstr ""
762
-
763
- #: includes/class-freemius.php:24764
764
- msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
765
- msgstr ""
766
-
767
- #: includes/class-freemius.php:24768
768
- msgid "Thank you so much for using our products!"
769
- msgstr ""
770
-
771
- #: includes/class-freemius.php:24769
772
- msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
773
- msgstr ""
774
-
775
- #: includes/class-freemius.php:24788
776
- msgid "%s and its add-ons"
777
- msgstr ""
778
-
779
- #: includes/class-freemius.php:24797
780
- msgid "Products"
781
- msgstr ""
782
-
783
- #: includes/class-freemius.php:24804, templates/connect.php:280
784
- msgid "Yes"
785
- msgstr ""
786
-
787
- #: includes/class-freemius.php:24805, templates/connect.php:281
788
- msgid "send me security & feature updates, educational content and offers."
789
- msgstr ""
790
-
791
- #: includes/class-freemius.php:24806, templates/connect.php:286
792
- msgid "No"
793
- msgstr ""
794
-
795
- #: includes/class-freemius.php:24808, templates/connect.php:288
796
- msgid "do %sNOT%s send me security & feature updates, educational content and offers."
797
- msgstr ""
798
-
799
- #: includes/class-freemius.php:24818
800
- msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
801
- msgstr ""
802
-
803
- #: includes/class-freemius.php:24820, templates/connect.php:295
804
- msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
805
- msgstr ""
806
-
807
- #: includes/class-freemius.php:25102
808
- msgid "License key is empty."
809
- msgstr ""
810
-
811
- #: includes/class-fs-plugin-updater.php:206, templates/forms/premium-versions-upgrade-handler.php:57
812
- msgid "Renew license"
813
- msgstr ""
814
-
815
- #: includes/class-fs-plugin-updater.php:211, templates/forms/premium-versions-upgrade-handler.php:58
816
- msgid "Buy license"
817
- msgstr ""
818
-
819
- #: includes/class-fs-plugin-updater.php:327, includes/class-fs-plugin-updater.php:360
820
- msgid "There is a %s of %s available."
821
- msgstr ""
822
-
823
- #: includes/class-fs-plugin-updater.php:329, includes/class-fs-plugin-updater.php:365
824
- msgid "new Beta version"
825
- msgstr ""
826
-
827
- #: includes/class-fs-plugin-updater.php:330, includes/class-fs-plugin-updater.php:366
828
- msgid "new version"
829
- msgstr ""
830
-
831
- #: includes/class-fs-plugin-updater.php:389
832
- msgid "Important Upgrade Notice:"
833
- msgstr ""
834
-
835
- #: includes/class-fs-plugin-updater.php:1338
836
- msgid "Installing plugin: %s"
837
- msgstr ""
838
-
839
- #: includes/class-fs-plugin-updater.php:1379
840
- msgid "Unable to connect to the filesystem. Please confirm your credentials."
841
- msgstr ""
842
-
843
- #: includes/class-fs-plugin-updater.php:1561
844
- msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
845
- msgstr ""
846
-
847
- #: includes/fs-plugin-info-dialog.php:541
848
- msgid "Purchase More"
849
- msgstr ""
850
-
851
- #: includes/fs-plugin-info-dialog.php:542, templates/account/partials/addon.php:385
852
- msgctxt "verb"
853
- msgid "Purchase"
854
- msgstr ""
855
-
856
- #: includes/fs-plugin-info-dialog.php:546
857
- msgid "Start my free %s"
858
- msgstr ""
859
-
860
- #: includes/fs-plugin-info-dialog.php:744
861
- msgid "Install Free Version Update Now"
862
- msgstr ""
863
-
864
- #: includes/fs-plugin-info-dialog.php:745, templates/account.php:639
865
- msgid "Install Update Now"
866
- msgstr ""
867
-
868
- #: includes/fs-plugin-info-dialog.php:754
869
- msgid "Install Free Version Now"
870
- msgstr ""
871
-
872
- #: includes/fs-plugin-info-dialog.php:755, templates/add-ons.php:323, templates/auto-installation.php:111, templates/account/partials/addon.php:365, templates/account/partials/addon.php:418
873
- msgid "Install Now"
874
- msgstr ""
875
-
876
- #: includes/fs-plugin-info-dialog.php:771
877
- msgctxt "as download latest version"
878
- msgid "Download Latest Free Version"
879
- msgstr ""
880
-
881
- #: includes/fs-plugin-info-dialog.php:772, templates/account.php:99, templates/add-ons.php:37, templates/account/partials/addon.php:25
882
- msgctxt "as download latest version"
883
- msgid "Download Latest"
884
- msgstr ""
885
-
886
- #: includes/fs-plugin-info-dialog.php:787, templates/add-ons.php:329, templates/account/partials/addon.php:356, templates/account/partials/addon.php:412
887
- msgid "Activate this add-on"
888
- msgstr ""
889
-
890
- #: includes/fs-plugin-info-dialog.php:789, templates/connect.php:453
891
- msgid "Activate Free Version"
892
- msgstr ""
893
-
894
- #: includes/fs-plugin-info-dialog.php:790, templates/account.php:123, templates/add-ons.php:330, templates/account/partials/addon.php:48
895
- msgid "Activate"
896
- msgstr ""
897
-
898
- #: includes/fs-plugin-info-dialog.php:1002
899
- msgctxt "Plugin installer section title"
900
- msgid "Description"
901
- msgstr ""
902
-
903
- #: includes/fs-plugin-info-dialog.php:1003
904
- msgctxt "Plugin installer section title"
905
- msgid "Installation"
906
- msgstr ""
907
-
908
- #: includes/fs-plugin-info-dialog.php:1004
909
- msgctxt "Plugin installer section title"
910
- msgid "FAQ"
911
- msgstr ""
912
-
913
- #: includes/fs-plugin-info-dialog.php:1005, templates/plugin-info/description.php:55
914
- msgid "Screenshots"
915
- msgstr ""
916
-
917
- #: includes/fs-plugin-info-dialog.php:1006
918
- msgctxt "Plugin installer section title"
919
- msgid "Changelog"
920
- msgstr ""
921
-
922
- #: includes/fs-plugin-info-dialog.php:1007
923
- msgctxt "Plugin installer section title"
924
- msgid "Reviews"
925
- msgstr ""
926
-
927
- #: includes/fs-plugin-info-dialog.php:1008
928
- msgctxt "Plugin installer section title"
929
- msgid "Other Notes"
930
- msgstr ""
931
-
932
- #: includes/fs-plugin-info-dialog.php:1023
933
- msgctxt "Plugin installer section title"
934
- msgid "Features & Pricing"
935
- msgstr ""
936
-
937
- #: includes/fs-plugin-info-dialog.php:1033
938
- msgid "Plugin Install"
939
- msgstr ""
940
-
941
- #: includes/fs-plugin-info-dialog.php:1105
942
- msgctxt "e.g. Professional Plan"
943
- msgid "%s Plan"
944
- msgstr ""
945
-
946
- #: includes/fs-plugin-info-dialog.php:1131
947
- msgctxt "e.g. the best product"
948
- msgid "Best"
949
- msgstr ""
950
-
951
- #: includes/fs-plugin-info-dialog.php:1137, includes/fs-plugin-info-dialog.php:1157
952
- msgctxt "as every month"
953
- msgid "Monthly"
954
- msgstr ""
955
-
956
- #: includes/fs-plugin-info-dialog.php:1140
957
- msgctxt "as once a year"
958
- msgid "Annual"
959
- msgstr ""
960
-
961
- #: includes/fs-plugin-info-dialog.php:1143
962
- msgid "Lifetime"
963
- msgstr ""
964
-
965
- #: includes/fs-plugin-info-dialog.php:1157, includes/fs-plugin-info-dialog.php:1159, includes/fs-plugin-info-dialog.php:1161
966
- msgctxt "e.g. billed monthly"
967
- msgid "Billed %s"
968
- msgstr ""
969
-
970
- #: includes/fs-plugin-info-dialog.php:1159
971
- msgctxt "as once a year"
972
- msgid "Annually"
973
- msgstr ""
974
-
975
- #: includes/fs-plugin-info-dialog.php:1161
976
- msgctxt "as once a year"
977
- msgid "Once"
978
- msgstr ""
979
-
980
- #: includes/fs-plugin-info-dialog.php:1167
981
- msgid "Single Site License"
982
- msgstr ""
983
-
984
- #: includes/fs-plugin-info-dialog.php:1169
985
- msgid "Unlimited Licenses"
986
- msgstr ""
987
-
988
- #: includes/fs-plugin-info-dialog.php:1171
989
- msgid "Up to %s Sites"
990
- msgstr ""
991
-
992
- #: includes/fs-plugin-info-dialog.php:1181, templates/plugin-info/features.php:82
993
- msgctxt "as monthly period"
994
- msgid "mo"
995
- msgstr ""
996
-
997
- #: includes/fs-plugin-info-dialog.php:1188, templates/plugin-info/features.php:80
998
- msgctxt "as annual period"
999
- msgid "year"
1000
- msgstr ""
1001
-
1002
- #: includes/fs-plugin-info-dialog.php:1242
1003
- msgctxt "noun"
1004
- msgid "Price"
1005
- msgstr ""
1006
-
1007
- #: includes/fs-plugin-info-dialog.php:1290
1008
- msgid "Save %s"
1009
- msgstr ""
1010
-
1011
- #: includes/fs-plugin-info-dialog.php:1300
1012
- msgid "No commitment for %s - cancel anytime"
1013
- msgstr ""
1014
-
1015
- #: includes/fs-plugin-info-dialog.php:1303
1016
- msgid "After your free %s, pay as little as %s"
1017
- msgstr ""
1018
-
1019
- #: includes/fs-plugin-info-dialog.php:1314
1020
- msgid "Details"
1021
- msgstr ""
1022
-
1023
- #: includes/fs-plugin-info-dialog.php:1318, templates/account.php:110, templates/debug.php:201, templates/debug.php:238, templates/debug.php:455, templates/account/partials/addon.php:36
1024
- msgctxt "product version"
1025
- msgid "Version"
1026
- msgstr ""
1027
-
1028
- #: includes/fs-plugin-info-dialog.php:1325
1029
- msgctxt "as the plugin author"
1030
- msgid "Author"
1031
- msgstr ""
1032
-
1033
- #: includes/fs-plugin-info-dialog.php:1332
1034
- msgid "Last Updated"
1035
- msgstr ""
1036
-
1037
- #: includes/fs-plugin-info-dialog.php:1337, templates/account.php:525
1038
- msgctxt "x-ago"
1039
- msgid "%s ago"
1040
- msgstr ""
1041
-
1042
- #: includes/fs-plugin-info-dialog.php:1346
1043
- msgid "Requires WordPress Version"
1044
- msgstr ""
1045
-
1046
- #: includes/fs-plugin-info-dialog.php:1347
1047
- msgid "%s or higher"
1048
- msgstr ""
1049
-
1050
- #: includes/fs-plugin-info-dialog.php:1354
1051
- msgid "Compatible up to"
1052
- msgstr ""
1053
-
1054
- #: includes/fs-plugin-info-dialog.php:1362
1055
- msgid "Downloaded"
1056
- msgstr ""
1057
-
1058
- #: includes/fs-plugin-info-dialog.php:1366
1059
- msgid "%s time"
1060
- msgstr ""
1061
-
1062
- #: includes/fs-plugin-info-dialog.php:1368
1063
- msgid "%s times"
1064
- msgstr ""
1065
-
1066
- #: includes/fs-plugin-info-dialog.php:1379
1067
- msgid "WordPress.org Plugin Page"
1068
- msgstr ""
1069
-
1070
- #: includes/fs-plugin-info-dialog.php:1388
1071
- msgid "Plugin Homepage"
1072
- msgstr ""
1073
-
1074
- #: includes/fs-plugin-info-dialog.php:1397, includes/fs-plugin-info-dialog.php:1481
1075
- msgid "Donate to this plugin"
1076
- msgstr ""
1077
-
1078
- #: includes/fs-plugin-info-dialog.php:1404
1079
- msgid "Average Rating"
1080
- msgstr ""
1081
-
1082
- #: includes/fs-plugin-info-dialog.php:1411
1083
- msgid "based on %s"
1084
- msgstr ""
1085
-
1086
- #: includes/fs-plugin-info-dialog.php:1415
1087
- msgid "%s rating"
1088
- msgstr ""
1089
-
1090
- #: includes/fs-plugin-info-dialog.php:1417
1091
- msgid "%s ratings"
1092
- msgstr ""
1093
-
1094
- #: includes/fs-plugin-info-dialog.php:1432
1095
- msgid "%s star"
1096
- msgstr ""
1097
-
1098
- #: includes/fs-plugin-info-dialog.php:1434
1099
- msgid "%s stars"
1100
- msgstr ""
1101
-
1102
- #: includes/fs-plugin-info-dialog.php:1446
1103
- msgid "Click to see reviews that provided a rating of %s"
1104
- msgstr ""
1105
-
1106
- #: includes/fs-plugin-info-dialog.php:1459
1107
- msgid "Contributors"
1108
- msgstr ""
1109
-
1110
- #: includes/fs-plugin-info-dialog.php:1489, includes/fs-plugin-info-dialog.php:1491
1111
- msgid "Warning"
1112
- msgstr ""
1113
-
1114
- #: includes/fs-plugin-info-dialog.php:1489
1115
- msgid "This plugin has not been tested with your current version of WordPress."
1116
- msgstr ""
1117
-
1118
- #: includes/fs-plugin-info-dialog.php:1491
1119
- msgid "This plugin has not been marked as compatible with your version of WordPress."
1120
- msgstr ""
1121
-
1122
- #: includes/fs-plugin-info-dialog.php:1510
1123
- msgid "Paid add-on must be deployed to Freemius."
1124
- msgstr ""
1125
-
1126
- #: includes/fs-plugin-info-dialog.php:1511
1127
- msgid "Add-on must be deployed to WordPress.org or Freemius."
1128
- msgstr ""
1129
-
1130
- #: includes/fs-plugin-info-dialog.php:1532
1131
- msgid "Newer Version (%s) Installed"
1132
- msgstr ""
1133
-
1134
- #: includes/fs-plugin-info-dialog.php:1533
1135
- msgid "Newer Free Version (%s) Installed"
1136
- msgstr ""
1137
-
1138
- #: includes/fs-plugin-info-dialog.php:1540
1139
- msgid "Latest Version Installed"
1140
- msgstr ""
1141
-
1142
- #: includes/fs-plugin-info-dialog.php:1541
1143
- msgid "Latest Free Version Installed"
1144
- msgstr ""
1145
-
1146
- #: templates/account.php:100, templates/forms/subscription-cancellation.php:96, templates/account/partials/addon.php:26, templates/account/partials/site.php:311
1147
- msgid "Downgrading your plan"
1148
- msgstr ""
1149
-
1150
- #: templates/account.php:101, templates/forms/subscription-cancellation.php:97, templates/account/partials/addon.php:27, templates/account/partials/site.php:312
1151
- msgid "Cancelling the subscription"
1152
- msgstr ""
1153
-
1154
- #. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
1155
- #: templates/account.php:103, templates/forms/subscription-cancellation.php:99, templates/account/partials/site.php:314
1156
- msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
1157
- msgstr ""
1158
-
1159
- #: templates/account.php:104, templates/forms/subscription-cancellation.php:100, templates/account/partials/addon.php:30, templates/account/partials/site.php:315
1160
- msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
1161
- msgstr ""
1162
-
1163
- #: templates/account.php:105, templates/forms/subscription-cancellation.php:106, templates/account/partials/addon.php:31
1164
- msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
1165
- msgstr ""
1166
-
1167
- #: templates/account.php:106, templates/forms/subscription-cancellation.php:101, templates/account/partials/addon.php:32, templates/account/partials/site.php:316
1168
- msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
1169
- msgstr ""
1170
-
1171
- #: templates/account.php:107, templates/forms/subscription-cancellation.php:102, templates/account/partials/addon.php:33, templates/account/partials/site.php:317
1172
- msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
1173
- msgstr ""
1174
-
1175
- #. translators: %s: Plan title (e.g. "Professional")
1176
- #: templates/account.php:109, templates/account/partials/activate-license-button.php:31, templates/account/partials/addon.php:35
1177
- msgid "Activate %s Plan"
1178
- msgstr ""
1179
-
1180
- #. translators: %s: Time period (e.g. Auto renews in "2 months")
1181
- #: templates/account.php:112, templates/account/partials/addon.php:38, templates/account/partials/site.php:291
1182
- msgid "Auto renews in %s"
1183
- msgstr ""
1184
-
1185
- #. translators: %s: Time period (e.g. Expires in "2 months")
1186
- #: templates/account.php:114, templates/account/partials/addon.php:40, templates/account/partials/site.php:293
1187
- msgid "Expires in %s"
1188
- msgstr ""
1189
-
1190
- #: templates/account.php:115
1191
- msgctxt "as synchronize license"
1192
- msgid "Sync License"
1193
- msgstr ""
1194
-
1195
- #: templates/account.php:116, templates/account/partials/addon.php:41
1196
- msgid "Cancel Trial"
1197
- msgstr ""
1198
-
1199
- #: templates/account.php:117, templates/account/partials/addon.php:42
1200
- msgid "Change Plan"
1201
- msgstr ""
1202
-
1203
- #: templates/account.php:118, templates/account/partials/addon.php:43
1204
- msgctxt "verb"
1205
- msgid "Upgrade"
1206
- msgstr ""
1207
-
1208
- #: templates/account.php:120, templates/account/partials/addon.php:45, templates/account/partials/site.php:318
1209
- msgctxt "verb"
1210
- msgid "Downgrade"
1211
- msgstr ""
1212
-
1213
- #: templates/account.php:122, templates/add-ons.php:246, templates/plugin-info/features.php:72, templates/account/partials/addon.php:47, templates/account/partials/site.php:33
1214
- msgid "Free"
1215
- msgstr ""
1216
-
1217
- #: templates/account.php:124, templates/debug.php:371, includes/customizer/class-fs-customizer-upsell-control.php:110, templates/account/partials/addon.php:49
1218
- msgctxt "as product pricing plan"
1219
- msgid "Plan"
1220
- msgstr ""
1221
-
1222
- #: templates/account.php:125
1223
- msgid "Bundle Plan"
1224
- msgstr ""
1225
-
1226
- #: templates/account.php:248
1227
- msgid "Free Trial"
1228
- msgstr ""
1229
-
1230
- #: templates/account.php:259
1231
- msgid "Account Details"
1232
- msgstr ""
1233
-
1234
- #: templates/account.php:266, templates/forms/data-debug-mode.php:33
1235
- msgid "Start Debug"
1236
- msgstr ""
1237
-
1238
- #: templates/account.php:268
1239
- msgid "Stop Debug"
1240
- msgstr ""
1241
-
1242
- #: templates/account.php:275
1243
- msgid "Billing & Invoices"
1244
- msgstr ""
1245
-
1246
- #: templates/account.php:286
1247
- msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1248
- msgstr ""
1249
-
1250
- #: templates/account.php:288
1251
- msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1252
- msgstr ""
1253
-
1254
- #: templates/account.php:291
1255
- msgid "Delete Account"
1256
- msgstr ""
1257
-
1258
- #: templates/account.php:303, templates/account/partials/addon.php:231, templates/account/partials/deactivate-license-button.php:35
1259
- msgid "Deactivate License"
1260
- msgstr ""
1261
-
1262
- #: templates/account.php:326, templates/forms/subscription-cancellation.php:125
1263
- msgid "Are you sure you want to proceed?"
1264
- msgstr ""
1265
-
1266
- #: templates/account.php:326, templates/account/partials/addon.php:255
1267
- msgid "Cancel Subscription"
1268
- msgstr ""
1269
-
1270
- #: templates/account.php:355, templates/account/partials/addon.php:340
1271
- msgctxt "as synchronize"
1272
- msgid "Sync"
1273
- msgstr ""
1274
-
1275
- #: templates/account.php:370, templates/debug.php:505
1276
- msgid "Name"
1277
- msgstr ""
1278
-
1279
- #: templates/account.php:376, templates/debug.php:506
1280
- msgid "Email"
1281
- msgstr ""
1282
-
1283
- #: templates/account.php:383, templates/debug.php:369, templates/debug.php:555
1284
- msgid "User ID"
1285
- msgstr ""
1286
-
1287
- #: templates/account.php:401, templates/account.php:719, templates/account.php:752, templates/debug.php:236, templates/debug.php:363, templates/debug.php:452, templates/debug.php:504, templates/debug.php:553, templates/debug.php:632, templates/account/payments.php:35, templates/debug/logger.php:21
1288
- msgid "ID"
1289
- msgstr ""
1290
-
1291
- #: templates/account.php:408
1292
- msgid "Site ID"
1293
- msgstr ""
1294
-
1295
- #: templates/account.php:411
1296
- msgid "No ID"
1297
- msgstr ""
1298
-
1299
- #: templates/account.php:416, templates/debug.php:243, templates/debug.php:372, templates/debug.php:456, templates/debug.php:508, templates/account/partials/site.php:227
1300
- msgid "Public Key"
1301
- msgstr ""
1302
-
1303
- #: templates/account.php:422, templates/debug.php:373, templates/debug.php:457, templates/debug.php:509, templates/account/partials/site.php:239
1304
- msgid "Secret Key"
1305
- msgstr ""
1306
-
1307
- #: templates/account.php:425
1308
- msgctxt "as secret encryption key missing"
1309
- msgid "No Secret"
1310
- msgstr ""
1311
-
1312
- #: templates/account.php:452, templates/account/partials/site.php:120, templates/account/partials/site.php:122
1313
- msgid "Trial"
1314
- msgstr ""
1315
-
1316
- #: templates/account.php:479, templates/debug.php:561, templates/account/partials/site.php:260
1317
- msgid "License Key"
1318
- msgstr ""
1319
-
1320
- #: templates/account.php:510
1321
- msgid "Join the Beta program"
1322
- msgstr ""
1323
-
1324
- #: templates/account.php:516
1325
- msgid "not verified"
1326
- msgstr ""
1327
-
1328
- #: templates/account.php:525, templates/account/partials/addon.php:190
1329
- msgid "Expired"
1330
- msgstr ""
1331
-
1332
- #: templates/account.php:585
1333
- msgid "Premium version"
1334
- msgstr ""
1335
-
1336
- #: templates/account.php:587
1337
- msgid "Free version"
1338
- msgstr ""
1339
-
1340
- #: templates/account.php:599
1341
- msgid "Verify Email"
1342
- msgstr ""
1343
-
1344
- #: templates/account.php:613
1345
- msgid "Download %s Version"
1346
- msgstr ""
1347
-
1348
- #: templates/account.php:629
1349
- msgid "Download Paid Version"
1350
- msgstr ""
1351
-
1352
- #: templates/account.php:647, templates/account.php:890, templates/account/partials/site.php:248, templates/account/partials/site.php:270
1353
- msgctxt "verb"
1354
- msgid "Show"
1355
- msgstr ""
1356
-
1357
- #: templates/account.php:662
1358
- msgid "What is your %s?"
1359
- msgstr ""
1360
-
1361
- #: templates/account.php:670, templates/account/billing.php:21
1362
- msgctxt "verb"
1363
- msgid "Edit"
1364
- msgstr ""
1365
-
1366
- #: templates/account.php:674, templates/forms/user-change.php:27
1367
- msgid "Change User"
1368
- msgstr ""
1369
-
1370
- #: templates/account.php:698
1371
- msgid "Sites"
1372
- msgstr ""
1373
-
1374
- #: templates/account.php:711
1375
- msgid "Search by address"
1376
- msgstr ""
1377
-
1378
- #: templates/account.php:720, templates/debug.php:366
1379
- msgid "Address"
1380
- msgstr ""
1381
-
1382
- #: templates/account.php:721
1383
- msgid "License"
1384
- msgstr ""
1385
-
1386
- #: templates/account.php:722
1387
- msgid "Plan"
1388
- msgstr ""
1389
-
1390
- #: templates/account.php:755
1391
- msgctxt "as software license"
1392
- msgid "License"
1393
- msgstr ""
1394
-
1395
- #: templates/account.php:884
1396
- msgctxt "verb"
1397
- msgid "Hide"
1398
- msgstr ""
1399
-
1400
- #: templates/account.php:906, templates/forms/data-debug-mode.php:31
1401
- msgid "Processing"
1402
- msgstr ""
1403
-
1404
- #: templates/account.php:909
1405
- msgid "Get updates for bleeding edge Beta versions of %s."
1406
- msgstr ""
1407
-
1408
- #: templates/account.php:967
1409
- msgid "Cancelling %s"
1410
- msgstr ""
1411
-
1412
- #: templates/account.php:967, templates/account.php:984, templates/forms/subscription-cancellation.php:27, templates/forms/deactivation/form.php:133
1413
- msgid "trial"
1414
- msgstr ""
1415
-
1416
- #: templates/account.php:982, templates/forms/deactivation/form.php:150
1417
- msgid "Cancelling %s..."
1418
- msgstr ""
1419
-
1420
- #: templates/account.php:985, templates/forms/subscription-cancellation.php:28, templates/forms/deactivation/form.php:134
1421
- msgid "subscription"
1422
- msgstr ""
1423
-
1424
- #: templates/account.php:999
1425
- msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1426
- msgstr ""
1427
-
1428
- #: templates/account.php:1073
1429
- msgid "Disabling white-label mode"
1430
- msgstr ""
1431
-
1432
- #: templates/account.php:1074
1433
- msgid "Enabling white-label mode"
1434
- msgstr ""
1435
-
1436
- #: templates/add-ons.php:38
1437
- msgid "View details"
1438
- msgstr ""
1439
-
1440
- #: templates/add-ons.php:48
1441
- msgid "Add Ons for %s"
1442
- msgstr ""
1443
-
1444
- #: templates/add-ons.php:58
1445
- msgid "We couldn't load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
1446
- msgstr ""
1447
-
1448
- #: templates/add-ons.php:229
1449
- msgctxt "active add-on"
1450
- msgid "Active"
1451
- msgstr ""
1452
-
1453
- #: templates/add-ons.php:230
1454
- msgctxt "installed add-on"
1455
- msgid "Installed"
1456
- msgstr ""
1457
-
1458
- #: templates/admin-notice.php:13, templates/forms/license-activation.php:220, templates/forms/resend-key.php:77
1459
- msgctxt "as close a window"
1460
- msgid "Dismiss"
1461
- msgstr ""
1462
-
1463
- #: templates/auto-installation.php:45
1464
- msgid "%s sec"
1465
- msgstr ""
1466
-
1467
- #: templates/auto-installation.php:83
1468
- msgid "Automatic Installation"
1469
- msgstr ""
1470
-
1471
- #: templates/auto-installation.php:93
1472
- msgid "An automated download and installation of %s (paid version) from %s will start in %s. If you would like to do it manually - click the cancellation button now."
1473
- msgstr ""
1474
-
1475
- #: templates/auto-installation.php:104
1476
- msgid "The installation process has started and may take a few minutes to complete. Please wait until it is done - do not refresh this page."
1477
- msgstr ""
1478
-
1479
- #: templates/auto-installation.php:109
1480
- msgid "Cancel Installation"
1481
- msgstr ""
1482
-
1483
- #: templates/checkout.php:180
1484
- msgid "Checkout"
1485
- msgstr ""
1486
-
1487
- #: templates/checkout.php:180
1488
- msgid "PCI compliant"
1489
- msgstr ""
1490
-
1491
- #. translators: %s: name (e.g. Hey John,)
1492
- #: templates/connect.php:112
1493
- msgctxt "greeting"
1494
- msgid "Hey %s,"
1495
- msgstr ""
1496
-
1497
- #: templates/connect.php:162
1498
- msgid "Allow & Continue"
1499
- msgstr ""
1500
-
1501
- #: templates/connect.php:166
1502
- msgid "Re-send activation email"
1503
- msgstr ""
1504
-
1505
- #: templates/connect.php:170
1506
- msgid "Thanks %s!"
1507
- msgstr ""
1508
-
1509
- #: templates/connect.php:180, templates/forms/license-activation.php:46
1510
- msgid "Agree & Activate License"
1511
- msgstr ""
1512
-
1513
- #: templates/connect.php:189
1514
- msgid "Thanks for purchasing %s! To get started, please enter your license key:"
1515
- msgstr ""
1516
-
1517
- #: templates/connect.php:196
1518
- msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
1519
- msgstr ""
1520
-
1521
- #: templates/connect.php:197
1522
- msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
1523
- msgstr ""
1524
-
1525
- #: templates/connect.php:203
1526
- msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1527
- msgstr ""
1528
-
1529
- #: templates/connect.php:204
1530
- msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1531
- msgstr ""
1532
-
1533
- #: templates/connect.php:238
1534
- msgid "We're excited to introduce the Freemius network-level integration."
1535
- msgstr ""
1536
-
1537
- #: templates/connect.php:241
1538
- msgid "During the update process we detected %d site(s) that are still pending license activation."
1539
- msgstr ""
1540
-
1541
- #: templates/connect.php:243
1542
- msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
1543
- msgstr ""
1544
-
1545
- #: templates/connect.php:245
1546
- msgid "%s's paid features"
1547
- msgstr ""
1548
-
1549
- #: templates/connect.php:250
1550
- msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
1551
- msgstr ""
1552
-
1553
- #: templates/connect.php:252
1554
- msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
1555
- msgstr ""
1556
-
1557
- #: templates/connect.php:261, templates/forms/data-debug-mode.php:35, templates/forms/license-activation.php:49
1558
- msgid "License key"
1559
- msgstr ""
1560
-
1561
- #: templates/connect.php:264, templates/forms/license-activation.php:22
1562
- msgid "Can't find your license key?"
1563
- msgstr ""
1564
-
1565
- #: templates/connect.php:323, templates/connect.php:695, templates/forms/deactivation/retry-skip.php:20
1566
- msgctxt "verb"
1567
- msgid "Skip"
1568
- msgstr ""
1569
-
1570
- #: templates/connect.php:326
1571
- msgid "Delegate to Site Admins"
1572
- msgstr ""
1573
-
1574
- #: templates/connect.php:326
1575
- msgid "If you click it, this decision will be delegated to the sites administrators."
1576
- msgstr ""
1577
-
1578
- #: templates/connect.php:364
1579
- msgid "Your Profile Overview"
1580
- msgstr ""
1581
-
1582
- #: templates/connect.php:365
1583
- msgid "Name and email address"
1584
- msgstr ""
1585
-
1586
- #: templates/connect.php:372
1587
- msgid "Your Site Overview"
1588
- msgstr ""
1589
-
1590
- #: templates/connect.php:373
1591
- msgid "Site URL, WP version, PHP info"
1592
- msgstr ""
1593
-
1594
- #: templates/connect.php:379
1595
- msgid "Admin Notices"
1596
- msgstr ""
1597
-
1598
- #: templates/connect.php:380, templates/connect.php:396
1599
- msgid "Updates, announcements, marketing, no spam"
1600
- msgstr ""
1601
-
1602
- #: templates/connect.php:386
1603
- msgid "Current %s Events"
1604
- msgstr ""
1605
-
1606
- #: templates/connect.php:387
1607
- msgid "Activation, deactivation and uninstall"
1608
- msgstr ""
1609
-
1610
- #: templates/connect.php:395
1611
- msgid "Newsletter"
1612
- msgstr ""
1613
-
1614
- #: templates/connect.php:403
1615
- msgid "Plugins & Themes"
1616
- msgstr ""
1617
-
1618
- #: templates/connect.php:404
1619
- msgid "Title, slug, version, and is active"
1620
- msgstr ""
1621
-
1622
- #: templates/connect.php:421, templates/forms/license-activation.php:41
1623
- msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1624
- msgstr ""
1625
-
1626
- #: templates/connect.php:426
1627
- msgid "What permissions are being granted?"
1628
- msgstr ""
1629
-
1630
- #: templates/connect.php:452
1631
- msgid "Don't have a license key?"
1632
- msgstr ""
1633
-
1634
- #: templates/connect.php:455
1635
- msgid "Have a license key?"
1636
- msgstr ""
1637
-
1638
- #: templates/connect.php:463
1639
- msgid "Privacy Policy"
1640
- msgstr ""
1641
-
1642
- #: templates/connect.php:465
1643
- msgid "License Agreement"
1644
- msgstr ""
1645
-
1646
- #: templates/connect.php:465
1647
- msgid "Terms of Service"
1648
- msgstr ""
1649
-
1650
- #: templates/connect.php:854
1651
- msgctxt "as in the process of sending an email"
1652
- msgid "Sending email"
1653
- msgstr ""
1654
-
1655
- #: templates/connect.php:855
1656
- msgctxt "as activating plugin"
1657
- msgid "Activating"
1658
- msgstr ""
1659
-
1660
- #: templates/contact.php:78
1661
- msgid "Contact"
1662
- msgstr ""
1663
-
1664
- #: templates/debug.php:17
1665
- msgctxt "as turned off"
1666
- msgid "Off"
1667
- msgstr ""
1668
-
1669
- #: templates/debug.php:18
1670
- msgctxt "as turned on"
1671
- msgid "On"
1672
- msgstr ""
1673
-
1674
- #: templates/debug.php:20
1675
- msgid "SDK"
1676
- msgstr ""
1677
-
1678
- #: templates/debug.php:24
1679
- msgctxt "as code debugging"
1680
- msgid "Debugging"
1681
- msgstr ""
1682
-
1683
- #: templates/debug.php:52, templates/debug.php:248, templates/debug.php:374, templates/debug.php:510
1684
- msgid "Actions"
1685
- msgstr ""
1686
-
1687
- #: templates/debug.php:62
1688
- msgid "Are you sure you want to delete all Freemius data?"
1689
- msgstr ""
1690
-
1691
- #: templates/debug.php:62
1692
- msgid "Delete All Accounts"
1693
- msgstr ""
1694
-
1695
- #: templates/debug.php:69
1696
- msgid "Clear API Cache"
1697
- msgstr ""
1698
-
1699
- #: templates/debug.php:77
1700
- msgid "Clear Updates Transients"
1701
- msgstr ""
1702
-
1703
- #: templates/debug.php:84
1704
- msgid "Sync Data From Server"
1705
- msgstr ""
1706
-
1707
- #: templates/debug.php:93
1708
- msgid "Migrate Options to Network"
1709
- msgstr ""
1710
-
1711
- #: templates/debug.php:98
1712
- msgid "Load DB Option"
1713
- msgstr ""
1714
-
1715
- #: templates/debug.php:101
1716
- msgid "Set DB Option"
1717
- msgstr ""
1718
-
1719
- #: templates/debug.php:180
1720
- msgid "Key"
1721
- msgstr ""
1722
-
1723
- #: templates/debug.php:181
1724
- msgid "Value"
1725
- msgstr ""
1726
-
1727
- #: templates/debug.php:197
1728
- msgctxt "as software development kit versions"
1729
- msgid "SDK Versions"
1730
- msgstr ""
1731
-
1732
- #: templates/debug.php:202
1733
- msgid "SDK Path"
1734
- msgstr ""
1735
-
1736
- #: templates/debug.php:203, templates/debug.php:242
1737
- msgid "Module Path"
1738
- msgstr ""
1739
-
1740
- #: templates/debug.php:204
1741
- msgid "Is Active"
1742
- msgstr ""
1743
-
1744
- #: templates/debug.php:232, templates/debug/plugins-themes-sync.php:35
1745
- msgid "Plugins"
1746
- msgstr ""
1747
-
1748
- #: templates/debug.php:232, templates/debug/plugins-themes-sync.php:56
1749
- msgid "Themes"
1750
- msgstr ""
1751
-
1752
- #: templates/debug.php:237, templates/debug.php:368, templates/debug.php:454, templates/debug/scheduled-crons.php:80
1753
- msgid "Slug"
1754
- msgstr ""
1755
-
1756
- #: templates/debug.php:239, templates/debug.php:453
1757
- msgid "Title"
1758
- msgstr ""
1759
-
1760
- #: templates/debug.php:240
1761
- msgctxt "as application program interface"
1762
- msgid "API"
1763
- msgstr ""
1764
-
1765
- #: templates/debug.php:241
1766
- msgid "Freemius State"
1767
- msgstr ""
1768
-
1769
- #: templates/debug.php:245
1770
- msgid "Network Blog"
1771
- msgstr ""
1772
-
1773
- #: templates/debug.php:246
1774
- msgid "Network User"
1775
- msgstr ""
1776
-
1777
- #: templates/debug.php:283
1778
- msgctxt "as connection was successful"
1779
- msgid "Connected"
1780
- msgstr ""
1781
-
1782
- #: templates/debug.php:284
1783
- msgctxt "as connection blocked"
1784
- msgid "Blocked"
1785
- msgstr ""
1786
-
1787
- #: templates/debug.php:320
1788
- msgid "Simulate Trial Promotion"
1789
- msgstr ""
1790
-
1791
- #: templates/debug.php:332
1792
- msgid "Simulate Network Upgrade"
1793
- msgstr ""
1794
-
1795
- #: templates/debug.php:357
1796
- msgid "%s Installs"
1797
- msgstr ""
1798
-
1799
- #: templates/debug.php:359
1800
- msgctxt "like websites"
1801
- msgid "Sites"
1802
- msgstr ""
1803
-
1804
- #: templates/debug.php:365, templates/account/partials/site.php:156
1805
- msgid "Blog ID"
1806
- msgstr ""
1807
-
1808
- #: templates/debug.php:370
1809
- msgid "License ID"
1810
- msgstr ""
1811
-
1812
- #: templates/debug.php:434, templates/debug.php:533, templates/account/partials/addon.php:435
1813
- msgctxt "verb"
1814
- msgid "Delete"
1815
- msgstr ""
1816
-
1817
- #: templates/debug.php:448
1818
- msgid "Add Ons of module %s"
1819
- msgstr ""
1820
-
1821
- #: templates/debug.php:500
1822
- msgid "Users"
1823
- msgstr ""
1824
-
1825
- #: templates/debug.php:507
1826
- msgid "Verified"
1827
- msgstr ""
1828
-
1829
- #: templates/debug.php:549
1830
- msgid "%s Licenses"
1831
- msgstr ""
1832
-
1833
- #: templates/debug.php:554
1834
- msgid "Plugin ID"
1835
- msgstr ""
1836
-
1837
- #: templates/debug.php:556
1838
- msgid "Plan ID"
1839
- msgstr ""
1840
-
1841
- #: templates/debug.php:557
1842
- msgid "Quota"
1843
- msgstr ""
1844
-
1845
- #: templates/debug.php:558
1846
- msgid "Activated"
1847
- msgstr ""
1848
-
1849
- #: templates/debug.php:559
1850
- msgid "Blocking"
1851
- msgstr ""
1852
-
1853
- #: templates/debug.php:560, templates/debug.php:631, templates/debug/logger.php:22
1854
- msgid "Type"
1855
- msgstr ""
1856
-
1857
- #: templates/debug.php:562
1858
- msgctxt "as expiration date"
1859
- msgid "Expiration"
1860
- msgstr ""
1861
-
1862
- #: templates/debug.php:590
1863
- msgid "Debug Log"
1864
- msgstr ""
1865
-
1866
- #: templates/debug.php:594
1867
- msgid "All Types"
1868
- msgstr ""
1869
-
1870
- #: templates/debug.php:601
1871
- msgid "All Requests"
1872
- msgstr ""
1873
-
1874
- #: templates/debug.php:606, templates/debug.php:635, templates/debug/logger.php:25
1875
- msgid "File"
1876
- msgstr ""
1877
-
1878
- #: templates/debug.php:607, templates/debug.php:633, templates/debug/logger.php:23
1879
- msgid "Function"
1880
- msgstr ""
1881
-
1882
- #: templates/debug.php:608
1883
- msgid "Process ID"
1884
- msgstr ""
1885
-
1886
- #: templates/debug.php:609
1887
- msgid "Logger"
1888
- msgstr ""
1889
-
1890
- #: templates/debug.php:610, templates/debug.php:634, templates/debug/logger.php:24
1891
- msgid "Message"
1892
- msgstr ""
1893
-
1894
- #: templates/debug.php:612
1895
- msgid "Filter"
1896
- msgstr ""
1897
-
1898
- #: templates/debug.php:620
1899
- msgid "Download"
1900
- msgstr ""
1901
-
1902
- #: templates/debug.php:636, templates/debug/logger.php:26
1903
- msgid "Timestamp"
1904
- msgstr ""
1905
-
1906
- #: templates/secure-https-header.php:28
1907
- msgid "Secure HTTPS %s page, running from an external domain"
1908
- msgstr ""
1909
-
1910
- #: includes/customizer/class-fs-customizer-support-section.php:55, templates/plugin-info/features.php:43
1911
- msgid "Support"
1912
- msgstr ""
1913
-
1914
- #: includes/debug/class-fs-debug-bar-panel.php:48, templates/debug/api-calls.php:54, templates/debug/logger.php:62
1915
- msgctxt "milliseconds"
1916
- msgid "ms"
1917
- msgstr ""
1918
-
1919
- #: includes/debug/debug-bar-start.php:41
1920
- msgid "Freemius API"
1921
- msgstr ""
1922
-
1923
- #: includes/debug/debug-bar-start.php:42
1924
- msgid "Requests"
1925
- msgstr ""
1926
-
1927
- #: templates/account/billing.php:22
1928
- msgctxt "verb"
1929
- msgid "Update"
1930
- msgstr ""
1931
-
1932
- #: templates/account/billing.php:33
1933
- msgid "Billing"
1934
- msgstr ""
1935
-
1936
- #: templates/account/billing.php:38, templates/account/billing.php:38
1937
- msgid "Business name"
1938
- msgstr ""
1939
-
1940
- #: templates/account/billing.php:39, templates/account/billing.php:39
1941
- msgid "Tax / VAT ID"
1942
- msgstr ""
1943
-
1944
- #: templates/account/billing.php:42, templates/account/billing.php:42, templates/account/billing.php:43, templates/account/billing.php:43
1945
- msgid "Address Line %d"
1946
- msgstr ""
1947
-
1948
- #: templates/account/billing.php:46, templates/account/billing.php:46
1949
- msgid "City"
1950
- msgstr ""
1951
-
1952
- #: templates/account/billing.php:46, templates/account/billing.php:46
1953
- msgid "Town"
1954
- msgstr ""
1955
-
1956
- #: templates/account/billing.php:47, templates/account/billing.php:47
1957
- msgid "ZIP / Postal Code"
1958
- msgstr ""
1959
-
1960
- #: templates/account/billing.php:302
1961
- msgid "Country"
1962
- msgstr ""
1963
-
1964
- #: templates/account/billing.php:304
1965
- msgid "Select Country"
1966
- msgstr ""
1967
-
1968
- #: templates/account/billing.php:311, templates/account/billing.php:312
1969
- msgid "State"
1970
- msgstr ""
1971
-
1972
- #: templates/account/billing.php:311, templates/account/billing.php:312
1973
- msgid "Province"
1974
- msgstr ""
1975
-
1976
- #: templates/account/payments.php:29
1977
- msgid "Payments"
1978
- msgstr ""
1979
-
1980
- #: templates/account/payments.php:36
1981
- msgid "Date"
1982
- msgstr ""
1983
-
1984
- #: templates/account/payments.php:37
1985
- msgid "Amount"
1986
- msgstr ""
1987
-
1988
- #: templates/account/payments.php:38, templates/account/payments.php:50
1989
- msgid "Invoice"
1990
- msgstr ""
1991
-
1992
- #: templates/debug/api-calls.php:56
1993
- msgid "API"
1994
- msgstr ""
1995
-
1996
- #: templates/debug/api-calls.php:68
1997
- msgid "Method"
1998
- msgstr ""
1999
-
2000
- #: templates/debug/api-calls.php:69
2001
- msgid "Code"
2002
- msgstr ""
2003
-
2004
- #: templates/debug/api-calls.php:70
2005
- msgid "Length"
2006
- msgstr ""
2007
-
2008
- #: templates/debug/api-calls.php:71
2009
- msgctxt "as file/folder path"
2010
- msgid "Path"
2011
- msgstr ""
2012
-
2013
- #: templates/debug/api-calls.php:73
2014
- msgid "Body"
2015
- msgstr ""
2016
-
2017
- #: templates/debug/api-calls.php:75
2018
- msgid "Result"
2019
- msgstr ""
2020
-
2021
- #: templates/debug/api-calls.php:76
2022
- msgid "Start"
2023
- msgstr ""
2024
-
2025
- #: templates/debug/api-calls.php:77
2026
- msgid "End"
2027
- msgstr ""
2028
-
2029
- #: templates/debug/logger.php:15
2030
- msgid "Log"
2031
- msgstr ""
2032
-
2033
- #. translators: %s: time period (e.g. In "2 hours")
2034
- #: templates/debug/plugins-themes-sync.php:18, templates/debug/scheduled-crons.php:91
2035
- msgid "In %s"
2036
- msgstr ""
2037
-
2038
- #. translators: %s: time period (e.g. "2 hours" ago)
2039
- #: templates/debug/plugins-themes-sync.php:20, templates/debug/scheduled-crons.php:93
2040
- msgid "%s ago"
2041
- msgstr ""
2042
-
2043
- #: templates/debug/plugins-themes-sync.php:21, templates/debug/scheduled-crons.php:74
2044
- msgctxt "seconds"
2045
- msgid "sec"
2046
- msgstr ""
2047
-
2048
- #: templates/debug/plugins-themes-sync.php:23
2049
- msgid "Plugins & Themes Sync"
2050
- msgstr ""
2051
-
2052
- #: templates/debug/plugins-themes-sync.php:28
2053
- msgid "Total"
2054
- msgstr ""
2055
-
2056
- #: templates/debug/plugins-themes-sync.php:29, templates/debug/scheduled-crons.php:84
2057
- msgid "Last"
2058
- msgstr ""
2059
-
2060
- #: templates/debug/scheduled-crons.php:76
2061
- msgid "Scheduled Crons"
2062
- msgstr ""
2063
-
2064
- #: templates/debug/scheduled-crons.php:81
2065
- msgid "Module"
2066
- msgstr ""
2067
-
2068
- #: templates/debug/scheduled-crons.php:82
2069
- msgid "Module Type"
2070
- msgstr ""
2071
-
2072
- #: templates/debug/scheduled-crons.php:83
2073
- msgid "Cron Type"
2074
- msgstr ""
2075
-
2076
- #: templates/debug/scheduled-crons.php:85
2077
- msgid "Next"
2078
- msgstr ""
2079
-
2080
- #: templates/forms/affiliation.php:82
2081
- msgid "Non-expiring"
2082
- msgstr ""
2083
-
2084
- #: templates/forms/affiliation.php:85
2085
- msgid "Apply to become an affiliate"
2086
- msgstr ""
2087
-
2088
- #: templates/forms/affiliation.php:107
2089
- msgid "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
2090
- msgstr ""
2091
-
2092
- #: templates/forms/affiliation.php:122
2093
- msgid "Thank you for applying for our affiliate program, we'll review your details during the next 14 days and will get back to you with further information."
2094
- msgstr ""
2095
-
2096
- #: templates/forms/affiliation.php:125
2097
- msgid "Your affiliation account was temporarily suspended."
2098
- msgstr ""
2099
-
2100
- #: templates/forms/affiliation.php:128
2101
- msgid "Thank you for applying for our affiliate program, unfortunately, we've decided at this point to reject your application. Please try again in 30 days."
2102
- msgstr ""
2103
-
2104
- #: templates/forms/affiliation.php:131
2105
- msgid "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
2106
- msgstr ""
2107
-
2108
- #: templates/forms/affiliation.php:144
2109
- msgid "Like the %s? Become our ambassador and earn cash ;-)"
2110
- msgstr ""
2111
-
2112
- #: templates/forms/affiliation.php:145
2113
- msgid "Refer new customers to our %s and earn %s commission on each successful sale you refer!"
2114
- msgstr ""
2115
-
2116
- #: templates/forms/affiliation.php:148
2117
- msgid "Program Summary"
2118
- msgstr ""
2119
-
2120
- #: templates/forms/affiliation.php:150
2121
- msgid "%s commission when a customer purchases a new license."
2122
- msgstr ""
2123
-
2124
- #: templates/forms/affiliation.php:152
2125
- msgid "Get commission for automated subscription renewals."
2126
- msgstr ""
2127
-
2128
- #: templates/forms/affiliation.php:155
2129
- msgid "%s tracking cookie after the first visit to maximize earnings potential."
2130
- msgstr ""
2131
-
2132
- #: templates/forms/affiliation.php:158
2133
- msgid "Unlimited commissions."
2134
- msgstr ""
2135
-
2136
- #: templates/forms/affiliation.php:160
2137
- msgid "%s minimum payout amount."
2138
- msgstr ""
2139
-
2140
- #: templates/forms/affiliation.php:161
2141
- msgid "Payouts are in USD and processed monthly via PayPal."
2142
- msgstr ""
2143
-
2144
- #: templates/forms/affiliation.php:162
2145
- msgid "As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days."
2146
- msgstr ""
2147
-
2148
- #: templates/forms/affiliation.php:165
2149
- msgid "Affiliate"
2150
- msgstr ""
2151
-
2152
- #: templates/forms/affiliation.php:168, templates/forms/resend-key.php:23
2153
- msgid "Email address"
2154
- msgstr ""
2155
-
2156
- #: templates/forms/affiliation.php:172
2157
- msgid "Full name"
2158
- msgstr ""
2159
-
2160
- #: templates/forms/affiliation.php:176
2161
- msgid "PayPal account email address"
2162
- msgstr ""
2163
-
2164
- #: templates/forms/affiliation.php:180
2165
- msgid "Where are you going to promote the %s?"
2166
- msgstr ""
2167
-
2168
- #: templates/forms/affiliation.php:182
2169
- msgid "Enter the domain of your website or other websites from where you plan to promote the %s."
2170
- msgstr ""
2171
-
2172
- #: templates/forms/affiliation.php:184
2173
- msgid "Add another domain"
2174
- msgstr ""
2175
-
2176
- #: templates/forms/affiliation.php:188
2177
- msgid "Extra Domains"
2178
- msgstr ""
2179
-
2180
- #: templates/forms/affiliation.php:189
2181
- msgid "Extra domains where you will be marketing the product from."
2182
- msgstr ""
2183
-
2184
- #: templates/forms/affiliation.php:199
2185
- msgid "Promotion methods"
2186
- msgstr ""
2187
-
2188
- #: templates/forms/affiliation.php:202
2189
- msgid "Social media (Facebook, Twitter, etc.)"
2190
- msgstr ""
2191
-
2192
- #: templates/forms/affiliation.php:206
2193
- msgid "Mobile apps"
2194
- msgstr ""
2195
-
2196
- #: templates/forms/affiliation.php:210
2197
- msgid "Website, email, and social media statistics (optional)"
2198
- msgstr ""
2199
-
2200
- #: templates/forms/affiliation.php:213
2201
- msgid "Please feel free to provide any relevant website or social media statistics, e.g. monthly unique site visits, number of email subscribers, followers, etc. (we will keep this information confidential)."
2202
- msgstr ""
2203
-
2204
- #: templates/forms/affiliation.php:217
2205
- msgid "How will you promote us?"
2206
- msgstr ""
2207
-
2208
- #: templates/forms/affiliation.php:220
2209
- msgid "Please provide details on how you intend to promote %s (please be as specific as possible)."
2210
- msgstr ""
2211
-
2212
- #: templates/forms/affiliation.php:232, templates/forms/resend-key.php:22
2213
- msgid "Cancel"
2214
- msgstr ""
2215
-
2216
- #: templates/forms/affiliation.php:234
2217
- msgid "Become an affiliate"
2218
- msgstr ""
2219
-
2220
- #: templates/forms/data-debug-mode.php:25
2221
- msgid "Please enter the license key to enable the debug mode:"
2222
- msgstr ""
2223
-
2224
- #: templates/forms/data-debug-mode.php:27
2225
- msgid "To enter the debug mode, please enter the secret key of the license owner (UserID = %d), which you can find in your \"My Profile\" section of your User Dashboard:"
2226
- msgstr ""
2227
-
2228
- #: templates/forms/data-debug-mode.php:32
2229
- msgid "Submit"
2230
- msgstr ""
2231
-
2232
- #: templates/forms/data-debug-mode.php:36
2233
- msgid "User key"
2234
- msgstr ""
2235
-
2236
- #: templates/forms/license-activation.php:23
2237
- msgid "Please enter the license key that you received in the email right after the purchase:"
2238
- msgstr ""
2239
-
2240
- #: templates/forms/license-activation.php:28
2241
- msgid "Update License"
2242
- msgstr ""
2243
-
2244
- #: templates/forms/license-activation.php:181
2245
- msgid "Associate with the license owner's account."
2246
- msgstr ""
2247
-
2248
- #: templates/forms/optout.php:30
2249
- msgctxt "verb"
2250
- msgid "Opt Out"
2251
- msgstr ""
2252
-
2253
- #: templates/forms/optout.php:31
2254
- msgctxt "verb"
2255
- msgid "Opt In"
2256
- msgstr ""
2257
-
2258
- #: templates/forms/optout.php:34
2259
- msgid "Connectivity to the licensing engine was successfully re-established. Automatic security & feature updates are now available through the WP Admin Dashboard."
2260
- msgstr ""
2261
-
2262
- #: templates/forms/optout.php:36
2263
- msgid "Warning: Opting out will block automatic updates"
2264
- msgstr ""
2265
-
2266
- #: templates/forms/optout.php:37
2267
- msgid "Ongoing connectivity with the licensing engine is essential for receiving automatic security & feature updates of the paid product. To receive these updates, data like your license key, %1$s version, and WordPress version, is periodically sent to the server to check for updates. By opting out, you understand that your site won't receive automatic updates for %2$s from within the WP Admin Dashboard. This can put your site at risk, and we highly recommend to keep this connection active. If you do choose to opt-out, you'll need to check for %1$s updates and install them manually."
2268
- msgstr ""
2269
-
2270
- #: templates/forms/optout.php:39
2271
- msgid "I'd like to keep automatic updates"
2272
- msgstr ""
2273
-
2274
- #: templates/forms/optout.php:44
2275
- msgid "Usage tracking is done in the name of making %s better. Making a better user experience, prioritizing new features, and more good things. We'd really appreciate if you'll reconsider letting us continue with the tracking."
2276
- msgstr ""
2277
-
2278
- #: templates/forms/optout.php:45
2279
- msgid "On second thought - I want to continue helping"
2280
- msgstr ""
2281
-
2282
- #: templates/forms/optout.php:49
2283
- msgid "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
2284
- msgstr ""
2285
-
2286
- #: templates/forms/optout.php:74
2287
- msgid "Plugins & themes tracking"
2288
- msgstr ""
2289
-
2290
- #: templates/forms/optout.php:261
2291
- msgid "Saved"
2292
- msgstr ""
2293
-
2294
- #: templates/forms/premium-versions-upgrade-handler.php:40
2295
- msgid "There is a new version of %s available."
2296
- msgstr ""
2297
-
2298
- #: templates/forms/premium-versions-upgrade-handler.php:41
2299
- msgid " %s to access version %s security & feature updates, and support."
2300
- msgstr ""
2301
-
2302
- #: templates/forms/premium-versions-upgrade-handler.php:54
2303
- msgid "New Version Available"
2304
- msgstr ""
2305
-
2306
- #: templates/forms/premium-versions-upgrade-handler.php:75
2307
- msgctxt "close a window"
2308
- msgid "Dismiss"
2309
- msgstr ""
2310
-
2311
- #: templates/forms/resend-key.php:21
2312
- msgid "Send License Key"
2313
- msgstr ""
2314
-
2315
- #: templates/forms/resend-key.php:57
2316
- msgid "Enter the email address you've used for the upgrade below and we will resend you the license key."
2317
- msgstr ""
2318
-
2319
- #: templates/forms/subscription-cancellation.php:37
2320
- msgid "Deactivating or uninstalling the %s will automatically disable the license, which you'll be able to use on another site."
2321
- msgstr ""
2322
-
2323
- #: templates/forms/subscription-cancellation.php:47
2324
- msgid "In case you are NOT planning on using this %s on this site (or any other site) - would you like to cancel the %s as well?"
2325
- msgstr ""
2326
-
2327
- #: templates/forms/subscription-cancellation.php:52
2328
- msgid "license"
2329
- msgstr ""
2330
-
2331
- #: templates/forms/subscription-cancellation.php:57
2332
- msgid "Cancel %s - I no longer need any security & feature updates, nor support for %s because I'm not planning to use the %s on this, or any other site."
2333
- msgstr ""
2334
-
2335
- #: templates/forms/subscription-cancellation.php:68
2336
- msgid "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
2337
- msgstr ""
2338
-
2339
- #: templates/forms/subscription-cancellation.php:103
2340
- msgid "Once your license expires you will no longer be able to use the %s, unless you activate it again with a valid premium license."
2341
- msgstr ""
2342
-
2343
- #: templates/forms/subscription-cancellation.php:136
2344
- msgid "Cancel %s?"
2345
- msgstr ""
2346
-
2347
- #: templates/forms/subscription-cancellation.php:143
2348
- msgid "Proceed"
2349
- msgstr ""
2350
-
2351
- #: templates/forms/subscription-cancellation.php:191, templates/forms/deactivation/form.php:171
2352
- msgid "Cancel %s & Proceed"
2353
- msgstr ""
2354
-
2355
- #: templates/forms/trial-start.php:22
2356
- msgid "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
2357
- msgstr ""
2358
-
2359
- #: templates/forms/trial-start.php:28
2360
- msgid "For compliance with the WordPress.org guidelines, before we start the trial we ask that you opt in with your user and non-sensitive site information, allowing the %s to periodically send data to %s to check for version updates and to validate your trial."
2361
- msgstr ""
2362
-
2363
- #: templates/forms/user-change.php:26
2364
- msgid "By changing the user, you agree to transfer the account ownership to:"
2365
- msgstr ""
2366
-
2367
- #: templates/forms/user-change.php:28
2368
- msgid "I Agree - Change User"
2369
- msgstr ""
2370
-
2371
- #: templates/forms/user-change.php:30
2372
- msgid "Enter email address"
2373
- msgstr ""
2374
-
2375
- #: templates/forms/user-change.php:81
2376
- msgctxt "close window"
2377
- msgid "Dismiss"
2378
- msgstr ""
2379
-
2380
- #: templates/js/style-premium-theme.php:39
2381
- msgid "Premium"
2382
- msgstr ""
2383
-
2384
- #: templates/js/style-premium-theme.php:42
2385
- msgid "Beta"
2386
- msgstr ""
2387
-
2388
- #: templates/partials/network-activation.php:27
2389
- msgid "Activate license on all sites in the network."
2390
- msgstr ""
2391
-
2392
- #: templates/partials/network-activation.php:28
2393
- msgid "Apply on all sites in the network."
2394
- msgstr ""
2395
-
2396
- #: templates/partials/network-activation.php:31
2397
- msgid "Activate license on all pending sites."
2398
- msgstr ""
2399
-
2400
- #: templates/partials/network-activation.php:32
2401
- msgid "Apply on all pending sites."
2402
- msgstr ""
2403
-
2404
- #: templates/partials/network-activation.php:40, templates/partials/network-activation.php:74
2405
- msgid "allow"
2406
- msgstr ""
2407
-
2408
- #: templates/partials/network-activation.php:43, templates/partials/network-activation.php:77
2409
- msgid "delegate"
2410
- msgstr ""
2411
-
2412
- #: templates/partials/network-activation.php:47, templates/partials/network-activation.php:81
2413
- msgid "skip"
2414
- msgstr ""
2415
-
2416
- #: templates/plugin-info/description.php:72, templates/plugin-info/screenshots.php:31
2417
- msgid "Click to view full-size screenshot %d"
2418
- msgstr ""
2419
-
2420
- #: templates/plugin-info/features.php:56
2421
- msgid "Unlimited Updates"
2422
- msgstr ""
2423
-
2424
- #: templates/account/partials/activate-license-button.php:46
2425
- msgid "Localhost"
2426
- msgstr ""
2427
-
2428
- #: templates/account/partials/activate-license-button.php:50
2429
- msgctxt "as 5 licenses left"
2430
- msgid "%s left"
2431
- msgstr ""
2432
-
2433
- #: templates/account/partials/activate-license-button.php:51
2434
- msgid "Last license"
2435
- msgstr ""
2436
-
2437
- #. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
2438
- #: templates/account/partials/addon.php:29
2439
- msgid "%1$s will immediately stop all future recurring payments and your %s plan license will expire in %s."
2440
- msgstr ""
2441
-
2442
- #: templates/account/partials/addon.php:185
2443
- msgid "Cancelled"
2444
- msgstr ""
2445
-
2446
- #: templates/account/partials/addon.php:195
2447
- msgid "No expiration"
2448
- msgstr ""
2449
-
2450
- #: templates/account/partials/site.php:189
2451
- msgid "Owner Name"
2452
- msgstr ""
2453
-
2454
- #: templates/account/partials/site.php:201
2455
- msgid "Owner Email"
2456
- msgstr ""
2457
-
2458
- #: templates/account/partials/site.php:213
2459
- msgid "Owner ID"
2460
- msgstr ""
2461
-
2462
- #: templates/account/partials/site.php:286
2463
- msgid "Subscription"
2464
- msgstr ""
2465
-
2466
- #: templates/forms/deactivation/contact.php:19
2467
- msgid "Sorry for the inconvenience and we are here to help if you give us a chance."
2468
- msgstr ""
2469
-
2470
- #: templates/forms/deactivation/contact.php:22
2471
- msgid "Contact Support"
2472
- msgstr ""
2473
-
2474
- #: templates/forms/deactivation/form.php:64
2475
- msgid "Anonymous feedback"
2476
- msgstr ""
2477
-
2478
- #: templates/forms/deactivation/form.php:70
2479
- msgid "Deactivate"
2480
- msgstr ""
2481
-
2482
- #: templates/forms/deactivation/form.php:72
2483
- msgid "Activate %s"
2484
- msgstr ""
2485
-
2486
- #: templates/forms/deactivation/form.php:87
2487
- msgid "Quick Feedback"
2488
- msgstr ""
2489
-
2490
- #: templates/forms/deactivation/form.php:91
2491
- msgid "If you have a moment, please let us know why you are %s"
2492
- msgstr ""
2493
-
2494
- #: templates/forms/deactivation/form.php:91
2495
- msgid "deactivating"
2496
- msgstr ""
2497
-
2498
- #: templates/forms/deactivation/form.php:91
2499
- msgid "switching"
2500
- msgstr ""
2501
-
2502
- #: templates/forms/deactivation/form.php:369
2503
- msgid "Submit & %s"
2504
- msgstr ""
2505
-
2506
- #: templates/forms/deactivation/form.php:390
2507
- msgid "Kindly tell us the reason so we can improve."
2508
- msgstr ""
2509
-
2510
- #: templates/forms/deactivation/form.php:515
2511
- msgid "Yes - %s"
2512
- msgstr ""
2513
-
2514
- #: templates/forms/deactivation/form.php:522
2515
- msgid "Skip & %s"
2516
- msgstr ""
2517
-
2518
- #: templates/forms/deactivation/retry-skip.php:21
2519
- msgid "Click here to use the plugin anonymously"
2520
- msgstr ""
2521
-
2522
- #: templates/forms/deactivation/retry-skip.php:23
2523
- msgid "You might have missed it, but you don't have to share any data and can just %s the opt-in."
2524
- msgstr ""
1
+ # Copyright (C) 2020 freemius
2
+ # This file is distributed under the same license as the freemius package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: freemius\n"
6
+ "MIME-Version: 1.0\n"
7
+ "Content-Type: text/plain; charset=UTF-8\n"
8
+ "Content-Transfer-Encoding: 8bit\n"
9
+ "Language-Team: Freemius Team <admin@freemius.com>\n"
10
+ "Last-Translator: Vova Feldman <vova@freemius.com>\n"
11
+ "Report-Msgid-Bugs-To: https://github.com/Freemius/wordpress-sdk/issues\n"
12
+ "X-Poedit-Basepath: ..\n"
13
+ "X-Poedit-KeywordsList: get_text_inline;fs_text_inline;fs_echo_inline;fs_esc_js_inline;fs_esc_attr_inline;fs_esc_attr_echo_inline;fs_esc_html_inline;fs_esc_html_echo_inline;get_text_x_inline:1,2c;fs_text_x_inline:1,2c;fs_echo_x_inline:1,2c;fs_esc_attr_x_inline:1,2c;fs_esc_js_x_inline:1,2c;fs_esc_js_echo_x_inline:1,2c;fs_esc_html_x_inline:1,2c;fs_esc_html_echo_x_inline:1,2c\n"
14
+ "X-Poedit-SearchPath-0: .\n"
15
+ "X-Poedit-SearchPathExcluded-0: *.js\n"
16
+ "X-Poedit-SourceCharset: UTF-8\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+
19
+ #: includes/class-freemius.php:1912, templates/account.php:910
20
+ msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
21
+ msgstr ""
22
+
23
+ #: includes/class-freemius.php:1919
24
+ msgid "Would you like to proceed with the update?"
25
+ msgstr ""
26
+
27
+ #: includes/class-freemius.php:2131
28
+ msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
29
+ msgstr ""
30
+
31
+ #: includes/class-freemius.php:2133
32
+ msgid "Error"
33
+ msgstr ""
34
+
35
+ #: includes/class-freemius.php:2533
36
+ msgid "I found a better %s"
37
+ msgstr ""
38
+
39
+ #: includes/class-freemius.php:2535
40
+ msgid "What's the %s's name?"
41
+ msgstr ""
42
+
43
+ #: includes/class-freemius.php:2541
44
+ msgid "It's a temporary %s. I'm just debugging an issue."
45
+ msgstr ""
46
+
47
+ #: includes/class-freemius.php:2543
48
+ msgid "Deactivation"
49
+ msgstr ""
50
+
51
+ #: includes/class-freemius.php:2544
52
+ msgid "Theme Switch"
53
+ msgstr ""
54
+
55
+ #: includes/class-freemius.php:2553, templates/forms/resend-key.php:24, templates/forms/user-change.php:29
56
+ msgid "Other"
57
+ msgstr ""
58
+
59
+ #: includes/class-freemius.php:2561
60
+ msgid "I no longer need the %s"
61
+ msgstr ""
62
+
63
+ #: includes/class-freemius.php:2568
64
+ msgid "I only needed the %s for a short period"
65
+ msgstr ""
66
+
67
+ #: includes/class-freemius.php:2574
68
+ msgid "The %s broke my site"
69
+ msgstr ""
70
+
71
+ #: includes/class-freemius.php:2581
72
+ msgid "The %s suddenly stopped working"
73
+ msgstr ""
74
+
75
+ #: includes/class-freemius.php:2591
76
+ msgid "I can't pay for it anymore"
77
+ msgstr ""
78
+
79
+ #: includes/class-freemius.php:2593
80
+ msgid "What price would you feel comfortable paying?"
81
+ msgstr ""
82
+
83
+ #: includes/class-freemius.php:2599
84
+ msgid "I don't like to share my information with you"
85
+ msgstr ""
86
+
87
+ #: includes/class-freemius.php:2620
88
+ msgid "The %s didn't work"
89
+ msgstr ""
90
+
91
+ #: includes/class-freemius.php:2630
92
+ msgid "I couldn't understand how to make it work"
93
+ msgstr ""
94
+
95
+ #: includes/class-freemius.php:2638
96
+ msgid "The %s is great, but I need specific feature that you don't support"
97
+ msgstr ""
98
+
99
+ #: includes/class-freemius.php:2640
100
+ msgid "What feature?"
101
+ msgstr ""
102
+
103
+ #: includes/class-freemius.php:2644
104
+ msgid "The %s is not working"
105
+ msgstr ""
106
+
107
+ #: includes/class-freemius.php:2646
108
+ msgid "Kindly share what didn't work so we can fix it for future users..."
109
+ msgstr ""
110
+
111
+ #: includes/class-freemius.php:2650
112
+ msgid "It's not what I was looking for"
113
+ msgstr ""
114
+
115
+ #: includes/class-freemius.php:2652
116
+ msgid "What you've been looking for?"
117
+ msgstr ""
118
+
119
+ #: includes/class-freemius.php:2656
120
+ msgid "The %s didn't work as expected"
121
+ msgstr ""
122
+
123
+ #: includes/class-freemius.php:2658
124
+ msgid "What did you expect?"
125
+ msgstr ""
126
+
127
+ #: includes/class-freemius.php:3513, templates/debug.php:20
128
+ msgid "Freemius Debug"
129
+ msgstr ""
130
+
131
+ #: includes/class-freemius.php:4265
132
+ msgid "I don't know what is cURL or how to install it, help me!"
133
+ msgstr ""
134
+
135
+ #: includes/class-freemius.php:4267
136
+ msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
137
+ msgstr ""
138
+
139
+ #: includes/class-freemius.php:4274
140
+ msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
141
+ msgstr ""
142
+
143
+ #: includes/class-freemius.php:4379
144
+ msgid "Yes - do your thing"
145
+ msgstr ""
146
+
147
+ #: includes/class-freemius.php:4384
148
+ msgid "No - just deactivate"
149
+ msgstr ""
150
+
151
+ #: includes/class-freemius.php:4429, includes/class-freemius.php:4923, includes/class-freemius.php:6182, includes/class-freemius.php:13357, includes/class-freemius.php:14075, includes/class-freemius.php:17526, includes/class-freemius.php:17631, includes/class-freemius.php:17806, includes/class-freemius.php:20040, includes/class-freemius.php:20398, includes/class-freemius.php:20408, includes/class-freemius.php:21079, includes/class-freemius.php:21985, includes/class-freemius.php:22118, includes/class-freemius.php:22274, templates/add-ons.php:57
152
+ msgctxt "exclamation"
153
+ msgid "Oops"
154
+ msgstr ""
155
+
156
+ #: includes/class-freemius.php:4498
157
+ msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
158
+ msgstr ""
159
+
160
+ #: includes/class-freemius.php:4920
161
+ msgctxt "addonX cannot run without pluginY"
162
+ msgid "%s cannot run without %s."
163
+ msgstr ""
164
+
165
+ #: includes/class-freemius.php:4921
166
+ msgctxt "addonX cannot run..."
167
+ msgid "%s cannot run without the plugin."
168
+ msgstr ""
169
+
170
+ #: includes/class-freemius.php:5120, includes/class-freemius.php:5145, includes/class-freemius.php:21150
171
+ msgid "Unexpected API error. Please contact the %s's author with the following error."
172
+ msgstr ""
173
+
174
+ #: includes/class-freemius.php:5848
175
+ msgid "Premium %s version was successfully activated."
176
+ msgstr ""
177
+
178
+ #: includes/class-freemius.php:5860, includes/class-freemius.php:7762
179
+ msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
180
+ msgid "W00t"
181
+ msgstr ""
182
+
183
+ #: includes/class-freemius.php:5875
184
+ msgid "You have a %s license."
185
+ msgstr ""
186
+
187
+ #: includes/class-freemius.php:5879, includes/class-freemius.php:16925, includes/class-freemius.php:16936, includes/class-freemius.php:20309, includes/class-freemius.php:20659, includes/class-freemius.php:20728, includes/class-freemius.php:20900
188
+ msgctxt "interjection expressing joy or exuberance"
189
+ msgid "Yee-haw"
190
+ msgstr ""
191
+
192
+ #: includes/class-freemius.php:6165
193
+ msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
194
+ msgstr ""
195
+
196
+ #: includes/class-freemius.php:6169
197
+ msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
198
+ msgstr ""
199
+
200
+ #: includes/class-freemius.php:6178, templates/add-ons.php:186, templates/account/partials/addon.php:381
201
+ msgid "More information about %s"
202
+ msgstr ""
203
+
204
+ #: includes/class-freemius.php:6179
205
+ msgid "Purchase License"
206
+ msgstr ""
207
+
208
+ #: includes/class-freemius.php:7118, templates/connect.php:171
209
+ msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
210
+ msgstr ""
211
+
212
+ #: includes/class-freemius.php:7122
213
+ msgid "start the trial"
214
+ msgstr ""
215
+
216
+ #: includes/class-freemius.php:7123, templates/connect.php:175
217
+ msgid "complete the install"
218
+ msgstr ""
219
+
220
+ #: includes/class-freemius.php:7241
221
+ msgid "You are just one step away - %s"
222
+ msgstr ""
223
+
224
+ #: includes/class-freemius.php:7244
225
+ msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
226
+ msgid "Complete \"%s\" Activation Now"
227
+ msgstr ""
228
+
229
+ #: includes/class-freemius.php:7322
230
+ msgid "We made a few tweaks to the %s, %s"
231
+ msgstr ""
232
+
233
+ #: includes/class-freemius.php:7326
234
+ msgid "Opt in to make \"%s\" better!"
235
+ msgstr ""
236
+
237
+ #: includes/class-freemius.php:7761
238
+ msgid "The upgrade of %s was successfully completed."
239
+ msgstr ""
240
+
241
+ #: includes/class-freemius.php:10243, includes/class-fs-plugin-updater.php:1099, includes/class-fs-plugin-updater.php:1294, includes/class-fs-plugin-updater.php:1301, templates/auto-installation.php:32
242
+ msgid "Add-On"
243
+ msgstr ""
244
+
245
+ #: includes/class-freemius.php:10245, templates/account.php:392, templates/account.php:400, templates/debug.php:358, templates/debug.php:549
246
+ msgid "Plugin"
247
+ msgstr ""
248
+
249
+ #: includes/class-freemius.php:10246, templates/account.php:393, templates/account.php:401, templates/debug.php:358, templates/debug.php:549, templates/forms/deactivation/form.php:71
250
+ msgid "Theme"
251
+ msgstr ""
252
+
253
+ #: includes/class-freemius.php:13176
254
+ msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
255
+ msgstr ""
256
+
257
+ #: includes/class-freemius.php:13190
258
+ msgid "Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s."
259
+ msgstr ""
260
+
261
+ #: includes/class-freemius.php:13195
262
+ msgid "User Dashboard"
263
+ msgstr ""
264
+
265
+ #: includes/class-freemius.php:13196
266
+ msgid "revert it now"
267
+ msgstr ""
268
+
269
+ #: includes/class-freemius.php:13255
270
+ msgid "An unknown error has occurred while trying to set the user's beta mode."
271
+ msgstr ""
272
+
273
+ #: includes/class-freemius.php:13328
274
+ msgid "Invalid new user ID or email address."
275
+ msgstr ""
276
+
277
+ #: includes/class-freemius.php:13358, includes/class-freemius.php:22229
278
+ msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
279
+ msgstr ""
280
+
281
+ #: includes/class-freemius.php:13359, includes/class-freemius.php:22230
282
+ msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
283
+ msgstr ""
284
+
285
+ #: includes/class-freemius.php:13366, includes/class-freemius.php:22237
286
+ msgid "Change Ownership"
287
+ msgstr ""
288
+
289
+ #: includes/class-freemius.php:13942
290
+ msgid "Invalid site details collection."
291
+ msgstr ""
292
+
293
+ #: includes/class-freemius.php:14062
294
+ msgid "We couldn't find your email address in the system, are you sure it's the right address?"
295
+ msgstr ""
296
+
297
+ #: includes/class-freemius.php:14064
298
+ msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
299
+ msgstr ""
300
+
301
+ #: includes/class-freemius.php:14338
302
+ msgid "Account is pending activation."
303
+ msgstr ""
304
+
305
+ #: includes/class-freemius.php:14450, templates/forms/premium-versions-upgrade-handler.php:47
306
+ msgid "Buy a license now"
307
+ msgstr ""
308
+
309
+ #: includes/class-freemius.php:14462, templates/forms/premium-versions-upgrade-handler.php:46
310
+ msgid "Renew your license now"
311
+ msgstr ""
312
+
313
+ #: includes/class-freemius.php:14466
314
+ msgid "%s to access version %s security & feature updates, and support."
315
+ msgstr ""
316
+
317
+ #: includes/class-freemius.php:16907
318
+ msgid "%s activation was successfully completed."
319
+ msgstr ""
320
+
321
+ #: includes/class-freemius.php:16921
322
+ msgid "Your account was successfully activated with the %s plan."
323
+ msgstr ""
324
+
325
+ #: includes/class-freemius.php:16932, includes/class-freemius.php:20724
326
+ msgid "Your trial has been successfully started."
327
+ msgstr ""
328
+
329
+ #: includes/class-freemius.php:17524, includes/class-freemius.php:17629, includes/class-freemius.php:17804
330
+ msgid "Couldn't activate %s."
331
+ msgstr ""
332
+
333
+ #: includes/class-freemius.php:17525, includes/class-freemius.php:17630, includes/class-freemius.php:17805
334
+ msgid "Please contact us with the following message:"
335
+ msgstr ""
336
+
337
+ #: includes/class-freemius.php:17626, templates/forms/data-debug-mode.php:162
338
+ msgid "An unknown error has occurred."
339
+ msgstr ""
340
+
341
+ #: includes/class-freemius.php:18162, includes/class-freemius.php:23310
342
+ msgid "Upgrade"
343
+ msgstr ""
344
+
345
+ #: includes/class-freemius.php:18168
346
+ msgid "Start Trial"
347
+ msgstr ""
348
+
349
+ #: includes/class-freemius.php:18170
350
+ msgid "Pricing"
351
+ msgstr ""
352
+
353
+ #: includes/class-freemius.php:18250, includes/class-freemius.php:18252
354
+ msgid "Affiliation"
355
+ msgstr ""
356
+
357
+ #: includes/class-freemius.php:18280, includes/class-freemius.php:18282, templates/account.php:240, templates/debug.php:324
358
+ msgid "Account"
359
+ msgstr ""
360
+
361
+ #: includes/class-freemius.php:18296, includes/class-freemius.php:18298, includes/customizer/class-fs-customizer-support-section.php:60
362
+ msgid "Contact Us"
363
+ msgstr ""
364
+
365
+ #: includes/class-freemius.php:18309, includes/class-freemius.php:18311, includes/class-freemius.php:23324, templates/account.php:119, templates/account/partials/addon.php:44
366
+ msgid "Add-Ons"
367
+ msgstr ""
368
+
369
+ #: includes/class-freemius.php:18345
370
+ msgctxt "ASCII arrow left icon"
371
+ msgid "&#x2190;"
372
+ msgstr ""
373
+
374
+ #: includes/class-freemius.php:18345
375
+ msgctxt "ASCII arrow right icon"
376
+ msgid "&#x27a4;"
377
+ msgstr ""
378
+
379
+ #: includes/class-freemius.php:18347, templates/pricing.php:109
380
+ msgctxt "noun"
381
+ msgid "Pricing"
382
+ msgstr ""
383
+
384
+ #: includes/class-freemius.php:18560, includes/customizer/class-fs-customizer-support-section.php:67
385
+ msgid "Support Forum"
386
+ msgstr ""
387
+
388
+ #: includes/class-freemius.php:19534
389
+ msgid "Your email has been successfully verified - you are AWESOME!"
390
+ msgstr ""
391
+
392
+ #: includes/class-freemius.php:19535
393
+ msgctxt "a positive response"
394
+ msgid "Right on"
395
+ msgstr ""
396
+
397
+ #: includes/class-freemius.php:20041
398
+ msgid "seems like the key you entered doesn't match our records."
399
+ msgstr ""
400
+
401
+ #: includes/class-freemius.php:20065
402
+ msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
403
+ msgstr ""
404
+
405
+ #: includes/class-freemius.php:20300
406
+ msgid "Your %s Add-on plan was successfully upgraded."
407
+ msgstr ""
408
+
409
+ #: includes/class-freemius.php:20302
410
+ msgid "%s Add-on was successfully purchased."
411
+ msgstr ""
412
+
413
+ #: includes/class-freemius.php:20305
414
+ msgid "Download the latest version"
415
+ msgstr ""
416
+
417
+ #: includes/class-freemius.php:20391
418
+ msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
419
+ msgstr ""
420
+
421
+ #: includes/class-freemius.php:20397, includes/class-freemius.php:20407, includes/class-freemius.php:20859, includes/class-freemius.php:20948
422
+ msgid "Error received from the server:"
423
+ msgstr ""
424
+
425
+ #: includes/class-freemius.php:20407
426
+ msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
427
+ msgstr ""
428
+
429
+ #: includes/class-freemius.php:20621, includes/class-freemius.php:20864, includes/class-freemius.php:20919, includes/class-freemius.php:21026
430
+ msgctxt "something somebody says when they are thinking about what you have just said."
431
+ msgid "Hmm"
432
+ msgstr ""
433
+
434
+ #: includes/class-freemius.php:20634
435
+ msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
436
+ msgstr ""
437
+
438
+ #: includes/class-freemius.php:20635, templates/account.php:121, templates/add-ons.php:250, templates/account/partials/addon.php:46
439
+ msgctxt "trial period"
440
+ msgid "Trial"
441
+ msgstr ""
442
+
443
+ #: includes/class-freemius.php:20640
444
+ msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
445
+ msgstr ""
446
+
447
+ #: includes/class-freemius.php:20644, includes/class-freemius.php:20703
448
+ msgid "Please contact us here"
449
+ msgstr ""
450
+
451
+ #: includes/class-freemius.php:20655
452
+ msgid "Your plan was successfully activated."
453
+ msgstr ""
454
+
455
+ #: includes/class-freemius.php:20656
456
+ msgid "Your plan was successfully upgraded."
457
+ msgstr ""
458
+
459
+ #: includes/class-freemius.php:20673
460
+ msgid "Your plan was successfully changed to %s."
461
+ msgstr ""
462
+
463
+ #: includes/class-freemius.php:20689
464
+ msgid "Your license has expired. You can still continue using the free %s forever."
465
+ msgstr ""
466
+
467
+ #: includes/class-freemius.php:20691
468
+ msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
469
+ msgstr ""
470
+
471
+ #: includes/class-freemius.php:20699
472
+ msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
473
+ msgstr ""
474
+
475
+ #: includes/class-freemius.php:20712
476
+ msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
477
+ msgstr ""
478
+
479
+ #: includes/class-freemius.php:20738
480
+ msgid "Your free trial has expired. You can still continue using all our free features."
481
+ msgstr ""
482
+
483
+ #: includes/class-freemius.php:20740
484
+ msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
485
+ msgstr ""
486
+
487
+ #: includes/class-freemius.php:20855
488
+ msgid "It looks like the license could not be activated."
489
+ msgstr ""
490
+
491
+ #: includes/class-freemius.php:20897
492
+ msgid "Your license was successfully activated."
493
+ msgstr ""
494
+
495
+ #: includes/class-freemius.php:20923
496
+ msgid "It looks like your site currently doesn't have an active license."
497
+ msgstr ""
498
+
499
+ #: includes/class-freemius.php:20947
500
+ msgid "It looks like the license deactivation failed."
501
+ msgstr ""
502
+
503
+ #: includes/class-freemius.php:20976
504
+ msgid "Your %s license was successfully deactivated."
505
+ msgstr ""
506
+
507
+ #: includes/class-freemius.php:20977
508
+ msgid "Your license was successfully deactivated, you are back to the %s plan."
509
+ msgstr ""
510
+
511
+ #: includes/class-freemius.php:20980
512
+ msgid "O.K"
513
+ msgstr ""
514
+
515
+ #: includes/class-freemius.php:21033
516
+ msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
517
+ msgstr ""
518
+
519
+ #: includes/class-freemius.php:21042
520
+ msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
521
+ msgstr ""
522
+
523
+ #: includes/class-freemius.php:21084
524
+ msgid "You are already running the %s in a trial mode."
525
+ msgstr ""
526
+
527
+ #: includes/class-freemius.php:21095
528
+ msgid "You already utilized a trial before."
529
+ msgstr ""
530
+
531
+ #: includes/class-freemius.php:21109
532
+ msgid "Plan %s do not exist, therefore, can't start a trial."
533
+ msgstr ""
534
+
535
+ #: includes/class-freemius.php:21120
536
+ msgid "Plan %s does not support a trial period."
537
+ msgstr ""
538
+
539
+ #: includes/class-freemius.php:21131
540
+ msgid "None of the %s's plans supports a trial period."
541
+ msgstr ""
542
+
543
+ #: includes/class-freemius.php:21181
544
+ msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
545
+ msgstr ""
546
+
547
+ #: includes/class-freemius.php:21217
548
+ msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
549
+ msgstr ""
550
+
551
+ #: includes/class-freemius.php:21236
552
+ msgid "Your %s free trial was successfully cancelled."
553
+ msgstr ""
554
+
555
+ #: includes/class-freemius.php:21552
556
+ msgid "Version %s was released."
557
+ msgstr ""
558
+
559
+ #: includes/class-freemius.php:21552
560
+ msgid "Please download %s."
561
+ msgstr ""
562
+
563
+ #: includes/class-freemius.php:21559
564
+ msgid "the latest %s version here"
565
+ msgstr ""
566
+
567
+ #: includes/class-freemius.php:21564
568
+ msgid "New"
569
+ msgstr ""
570
+
571
+ #: includes/class-freemius.php:21569
572
+ msgid "Seems like you got the latest release."
573
+ msgstr ""
574
+
575
+ #: includes/class-freemius.php:21570
576
+ msgid "You are all good!"
577
+ msgstr ""
578
+
579
+ #: includes/class-freemius.php:21873
580
+ msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
581
+ msgstr ""
582
+
583
+ #: includes/class-freemius.php:22013
584
+ msgid "Site successfully opted in."
585
+ msgstr ""
586
+
587
+ #: includes/class-freemius.php:22014, includes/class-freemius.php:23020
588
+ msgid "Awesome"
589
+ msgstr ""
590
+
591
+ #: includes/class-freemius.php:22030, templates/forms/optout.php:41
592
+ msgid "We appreciate your help in making the %s better by letting us track some usage data."
593
+ msgstr ""
594
+
595
+ #: includes/class-freemius.php:22031
596
+ msgid "Thank you!"
597
+ msgstr ""
598
+
599
+ #: includes/class-freemius.php:22038
600
+ msgid "We will no longer be sending any usage data of %s on %s to %s."
601
+ msgstr ""
602
+
603
+ #: includes/class-freemius.php:22196
604
+ msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
605
+ msgstr ""
606
+
607
+ #: includes/class-freemius.php:22202
608
+ msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
609
+ msgstr ""
610
+
611
+ #: includes/class-freemius.php:22207
612
+ msgid "%s is the new owner of the account."
613
+ msgstr ""
614
+
615
+ #: includes/class-freemius.php:22209
616
+ msgctxt "as congratulations"
617
+ msgid "Congrats"
618
+ msgstr ""
619
+
620
+ #: includes/class-freemius.php:22245
621
+ msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
622
+ msgstr ""
623
+
624
+ #: includes/class-freemius.php:22257
625
+ msgid "Please provide your full name."
626
+ msgstr ""
627
+
628
+ #: includes/class-freemius.php:22262
629
+ msgid "Your name was successfully updated."
630
+ msgstr ""
631
+
632
+ #: includes/class-freemius.php:22323
633
+ msgid "You have successfully updated your %s."
634
+ msgstr ""
635
+
636
+ #: includes/class-freemius.php:22382
637
+ msgid "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin."
638
+ msgstr ""
639
+
640
+ #: includes/class-freemius.php:22385
641
+ msgid "Click here"
642
+ msgstr ""
643
+
644
+ #: includes/class-freemius.php:22483
645
+ msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
646
+ msgstr ""
647
+
648
+ #: includes/class-freemius.php:22484
649
+ msgctxt "advance notice of something that will need attention."
650
+ msgid "Heads up"
651
+ msgstr ""
652
+
653
+ #: includes/class-freemius.php:23060
654
+ msgctxt "exclamation"
655
+ msgid "Hey"
656
+ msgstr ""
657
+
658
+ #: includes/class-freemius.php:23060
659
+ msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
660
+ msgstr ""
661
+
662
+ #: includes/class-freemius.php:23068
663
+ msgid "No commitment for %s days - cancel anytime!"
664
+ msgstr ""
665
+
666
+ #: includes/class-freemius.php:23069
667
+ msgid "No credit card required"
668
+ msgstr ""
669
+
670
+ #: includes/class-freemius.php:23076, templates/forms/trial-start.php:53
671
+ msgctxt "call to action"
672
+ msgid "Start free trial"
673
+ msgstr ""
674
+
675
+ #: includes/class-freemius.php:23153
676
+ msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
677
+ msgstr ""
678
+
679
+ #: includes/class-freemius.php:23162
680
+ msgid "Learn more"
681
+ msgstr ""
682
+
683
+ #: includes/class-freemius.php:23348, templates/account.php:556, templates/account.php:706, templates/connect.php:179, templates/connect.php:456, templates/forms/license-activation.php:27, templates/account/partials/addon.php:321
684
+ msgid "Activate License"
685
+ msgstr ""
686
+
687
+ #: includes/class-freemius.php:23349, templates/account.php:650, templates/account.php:705, templates/account/partials/addon.php:322, templates/account/partials/site.php:271
688
+ msgid "Change License"
689
+ msgstr ""
690
+
691
+ #: includes/class-freemius.php:23462, templates/account/partials/site.php:169
692
+ msgid "Opt Out"
693
+ msgstr ""
694
+
695
+ #: includes/class-freemius.php:23464, includes/class-freemius.php:23470, templates/account/partials/site.php:49, templates/account/partials/site.php:169
696
+ msgid "Opt In"
697
+ msgstr ""
698
+
699
+ #: includes/class-freemius.php:23700
700
+ msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
701
+ msgstr ""
702
+
703
+ #: includes/class-freemius.php:23708
704
+ msgid "Activate %s features"
705
+ msgstr ""
706
+
707
+ #: includes/class-freemius.php:23721
708
+ msgid "Please follow these steps to complete the upgrade"
709
+ msgstr ""
710
+
711
+ #: includes/class-freemius.php:23725
712
+ msgid "Download the latest %s version"
713
+ msgstr ""
714
+
715
+ #: includes/class-freemius.php:23729
716
+ msgid "Upload and activate the downloaded version"
717
+ msgstr ""
718
+
719
+ #: includes/class-freemius.php:23731
720
+ msgid "How to upload and activate?"
721
+ msgstr ""
722
+
723
+ #: includes/class-freemius.php:23865
724
+ msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
725
+ msgstr ""
726
+
727
+ #: includes/class-freemius.php:24034
728
+ msgid "Auto installation only works for opted-in users."
729
+ msgstr ""
730
+
731
+ #: includes/class-freemius.php:24044, includes/class-freemius.php:24077, includes/class-fs-plugin-updater.php:1273, includes/class-fs-plugin-updater.php:1287
732
+ msgid "Invalid module ID."
733
+ msgstr ""
734
+
735
+ #: includes/class-freemius.php:24053, includes/class-fs-plugin-updater.php:1309
736
+ msgid "Premium version already active."
737
+ msgstr ""
738
+
739
+ #: includes/class-freemius.php:24060
740
+ msgid "You do not have a valid license to access the premium version."
741
+ msgstr ""
742
+
743
+ #: includes/class-freemius.php:24067
744
+ msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
745
+ msgstr ""
746
+
747
+ #: includes/class-freemius.php:24085, includes/class-fs-plugin-updater.php:1308
748
+ msgid "Premium add-on version already installed."
749
+ msgstr ""
750
+
751
+ #: includes/class-freemius.php:24435
752
+ msgid "View paid features"
753
+ msgstr ""
754
+
755
+ #: includes/class-freemius.php:24757
756
+ msgid "Thank you so much for using %s and its add-ons!"
757
+ msgstr ""
758
+
759
+ #: includes/class-freemius.php:24758
760
+ msgid "Thank you so much for using %s!"
761
+ msgstr ""
762
+
763
+ #: includes/class-freemius.php:24764
764
+ msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
765
+ msgstr ""
766
+
767
+ #: includes/class-freemius.php:24768
768
+ msgid "Thank you so much for using our products!"
769
+ msgstr ""
770
+
771
+ #: includes/class-freemius.php:24769
772
+ msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
773
+ msgstr ""
774
+
775
+ #: includes/class-freemius.php:24788
776
+ msgid "%s and its add-ons"
777
+ msgstr ""
778
+
779
+ #: includes/class-freemius.php:24797
780
+ msgid "Products"
781
+ msgstr ""
782
+
783
+ #: includes/class-freemius.php:24804, templates/connect.php:280
784
+ msgid "Yes"
785
+ msgstr ""
786
+
787
+ #: includes/class-freemius.php:24805, templates/connect.php:281
788
+ msgid "send me security & feature updates, educational content and offers."
789
+ msgstr ""
790
+
791
+ #: includes/class-freemius.php:24806, templates/connect.php:286
792
+ msgid "No"
793
+ msgstr ""
794
+
795
+ #: includes/class-freemius.php:24808, templates/connect.php:288
796
+ msgid "do %sNOT%s send me security & feature updates, educational content and offers."
797
+ msgstr ""
798
+
799
+ #: includes/class-freemius.php:24818
800
+ msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
801
+ msgstr ""
802
+
803
+ #: includes/class-freemius.php:24820, templates/connect.php:295
804
+ msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
805
+ msgstr ""
806
+
807
+ #: includes/class-freemius.php:25102
808
+ msgid "License key is empty."
809
+ msgstr ""
810
+
811
+ #: includes/class-fs-plugin-updater.php:206, templates/forms/premium-versions-upgrade-handler.php:57
812
+ msgid "Renew license"
813
+ msgstr ""
814
+
815
+ #: includes/class-fs-plugin-updater.php:211, templates/forms/premium-versions-upgrade-handler.php:58
816
+ msgid "Buy license"
817
+ msgstr ""
818
+
819
+ #: includes/class-fs-plugin-updater.php:327, includes/class-fs-plugin-updater.php:360
820
+ msgid "There is a %s of %s available."
821
+ msgstr ""
822
+
823
+ #: includes/class-fs-plugin-updater.php:329, includes/class-fs-plugin-updater.php:365
824
+ msgid "new Beta version"
825
+ msgstr ""
826
+
827
+ #: includes/class-fs-plugin-updater.php:330, includes/class-fs-plugin-updater.php:366
828
+ msgid "new version"
829
+ msgstr ""
830
+
831
+ #: includes/class-fs-plugin-updater.php:389
832
+ msgid "Important Upgrade Notice:"
833
+ msgstr ""
834
+
835
+ #: includes/class-fs-plugin-updater.php:1338
836
+ msgid "Installing plugin: %s"
837
+ msgstr ""
838
+
839
+ #: includes/class-fs-plugin-updater.php:1379
840
+ msgid "Unable to connect to the filesystem. Please confirm your credentials."
841
+ msgstr ""
842
+
843
+ #: includes/class-fs-plugin-updater.php:1561
844
+ msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
845
+ msgstr ""
846
+
847
+ #: includes/fs-plugin-info-dialog.php:541
848
+ msgid "Purchase More"
849
+ msgstr ""
850
+
851
+ #: includes/fs-plugin-info-dialog.php:542, templates/account/partials/addon.php:385
852
+ msgctxt "verb"
853
+ msgid "Purchase"
854
+ msgstr ""
855
+
856
+ #: includes/fs-plugin-info-dialog.php:546
857
+ msgid "Start my free %s"
858
+ msgstr ""
859
+
860
+ #: includes/fs-plugin-info-dialog.php:744
861
+ msgid "Install Free Version Update Now"
862
+ msgstr ""
863
+
864
+ #: includes/fs-plugin-info-dialog.php:745, templates/account.php:639
865
+ msgid "Install Update Now"
866
+ msgstr ""
867
+
868
+ #: includes/fs-plugin-info-dialog.php:754
869
+ msgid "Install Free Version Now"
870
+ msgstr ""
871
+
872
+ #: includes/fs-plugin-info-dialog.php:755, templates/add-ons.php:323, templates/auto-installation.php:111, templates/account/partials/addon.php:365, templates/account/partials/addon.php:418
873
+ msgid "Install Now"
874
+ msgstr ""
875
+
876
+ #: includes/fs-plugin-info-dialog.php:771
877
+ msgctxt "as download latest version"
878
+ msgid "Download Latest Free Version"
879
+ msgstr ""
880
+
881
+ #: includes/fs-plugin-info-dialog.php:772, templates/account.php:99, templates/add-ons.php:37, templates/account/partials/addon.php:25
882
+ msgctxt "as download latest version"
883
+ msgid "Download Latest"
884
+ msgstr ""
885
+
886
+ #: includes/fs-plugin-info-dialog.php:787, templates/add-ons.php:329, templates/account/partials/addon.php:356, templates/account/partials/addon.php:412
887
+ msgid "Activate this add-on"
888
+ msgstr ""
889
+
890
+ #: includes/fs-plugin-info-dialog.php:789, templates/connect.php:453
891
+ msgid "Activate Free Version"
892
+ msgstr ""
893
+
894
+ #: includes/fs-plugin-info-dialog.php:790, templates/account.php:123, templates/add-ons.php:330, templates/account/partials/addon.php:48
895
+ msgid "Activate"
896
+ msgstr ""
897
+
898
+ #: includes/fs-plugin-info-dialog.php:1002
899
+ msgctxt "Plugin installer section title"
900
+ msgid "Description"
901
+ msgstr ""
902
+
903
+ #: includes/fs-plugin-info-dialog.php:1003
904
+ msgctxt "Plugin installer section title"
905
+ msgid "Installation"
906
+ msgstr ""
907
+
908
+ #: includes/fs-plugin-info-dialog.php:1004
909
+ msgctxt "Plugin installer section title"
910
+ msgid "FAQ"
911
+ msgstr ""
912
+
913
+ #: includes/fs-plugin-info-dialog.php:1005, templates/plugin-info/description.php:55
914
+ msgid "Screenshots"
915
+ msgstr ""
916
+
917
+ #: includes/fs-plugin-info-dialog.php:1006
918
+ msgctxt "Plugin installer section title"
919
+ msgid "Changelog"
920
+ msgstr ""
921
+
922
+ #: includes/fs-plugin-info-dialog.php:1007
923
+ msgctxt "Plugin installer section title"
924
+ msgid "Reviews"
925
+ msgstr ""
926
+
927
+ #: includes/fs-plugin-info-dialog.php:1008
928
+ msgctxt "Plugin installer section title"
929
+ msgid "Other Notes"
930
+ msgstr ""
931
+
932
+ #: includes/fs-plugin-info-dialog.php:1023
933
+ msgctxt "Plugin installer section title"
934
+ msgid "Features & Pricing"
935
+ msgstr ""
936
+
937
+ #: includes/fs-plugin-info-dialog.php:1033
938
+ msgid "Plugin Install"
939
+ msgstr ""
940
+
941
+ #: includes/fs-plugin-info-dialog.php:1105
942
+ msgctxt "e.g. Professional Plan"
943
+ msgid "%s Plan"
944
+ msgstr ""
945
+
946
+ #: includes/fs-plugin-info-dialog.php:1131
947
+ msgctxt "e.g. the best product"
948
+ msgid "Best"
949
+ msgstr ""
950
+
951
+ #: includes/fs-plugin-info-dialog.php:1137, includes/fs-plugin-info-dialog.php:1157
952
+ msgctxt "as every month"
953
+ msgid "Monthly"
954
+ msgstr ""
955
+
956
+ #: includes/fs-plugin-info-dialog.php:1140
957
+ msgctxt "as once a year"
958
+ msgid "Annual"
959
+ msgstr ""
960
+
961
+ #: includes/fs-plugin-info-dialog.php:1143
962
+ msgid "Lifetime"
963
+ msgstr ""
964
+
965
+ #: includes/fs-plugin-info-dialog.php:1157, includes/fs-plugin-info-dialog.php:1159, includes/fs-plugin-info-dialog.php:1161
966
+ msgctxt "e.g. billed monthly"
967
+ msgid "Billed %s"
968
+ msgstr ""
969
+
970
+ #: includes/fs-plugin-info-dialog.php:1159
971
+ msgctxt "as once a year"
972
+ msgid "Annually"
973
+ msgstr ""
974
+
975
+ #: includes/fs-plugin-info-dialog.php:1161
976
+ msgctxt "as once a year"
977
+ msgid "Once"
978
+ msgstr ""
979
+
980
+ #: includes/fs-plugin-info-dialog.php:1167
981
+ msgid "Single Site License"
982
+ msgstr ""
983
+
984
+ #: includes/fs-plugin-info-dialog.php:1169
985
+ msgid "Unlimited Licenses"
986
+ msgstr ""
987
+
988
+ #: includes/fs-plugin-info-dialog.php:1171
989
+ msgid "Up to %s Sites"
990
+ msgstr ""
991
+
992
+ #: includes/fs-plugin-info-dialog.php:1181, templates/plugin-info/features.php:82
993
+ msgctxt "as monthly period"
994
+ msgid "mo"
995
+ msgstr ""
996
+
997
+ #: includes/fs-plugin-info-dialog.php:1188, templates/plugin-info/features.php:80
998
+ msgctxt "as annual period"
999
+ msgid "year"
1000
+ msgstr ""
1001
+
1002
+ #: includes/fs-plugin-info-dialog.php:1242
1003
+ msgctxt "noun"
1004
+ msgid "Price"
1005
+ msgstr ""
1006
+
1007
+ #: includes/fs-plugin-info-dialog.php:1290
1008
+ msgid "Save %s"
1009
+ msgstr ""
1010
+
1011
+ #: includes/fs-plugin-info-dialog.php:1300
1012
+ msgid "No commitment for %s - cancel anytime"
1013
+ msgstr ""
1014
+
1015
+ #: includes/fs-plugin-info-dialog.php:1303
1016
+ msgid "After your free %s, pay as little as %s"
1017
+ msgstr ""
1018
+
1019
+ #: includes/fs-plugin-info-dialog.php:1314
1020
+ msgid "Details"
1021
+ msgstr ""
1022
+
1023
+ #: includes/fs-plugin-info-dialog.php:1318, templates/account.php:110, templates/debug.php:201, templates/debug.php:238, templates/debug.php:455, templates/account/partials/addon.php:36
1024
+ msgctxt "product version"
1025
+ msgid "Version"
1026
+ msgstr ""
1027
+
1028
+ #: includes/fs-plugin-info-dialog.php:1325
1029
+ msgctxt "as the plugin author"
1030
+ msgid "Author"
1031
+ msgstr ""
1032
+
1033
+ #: includes/fs-plugin-info-dialog.php:1332
1034
+ msgid "Last Updated"
1035
+ msgstr ""
1036
+
1037
+ #: includes/fs-plugin-info-dialog.php:1337, templates/account.php:525
1038
+ msgctxt "x-ago"
1039
+ msgid "%s ago"
1040
+ msgstr ""
1041
+
1042
+ #: includes/fs-plugin-info-dialog.php:1346
1043
+ msgid "Requires WordPress Version"
1044
+ msgstr ""
1045
+
1046
+ #: includes/fs-plugin-info-dialog.php:1347
1047
+ msgid "%s or higher"
1048
+ msgstr ""
1049
+
1050
+ #: includes/fs-plugin-info-dialog.php:1354
1051
+ msgid "Compatible up to"
1052
+ msgstr ""
1053
+
1054
+ #: includes/fs-plugin-info-dialog.php:1362
1055
+ msgid "Downloaded"
1056
+ msgstr ""
1057
+
1058
+ #: includes/fs-plugin-info-dialog.php:1366
1059
+ msgid "%s time"
1060
+ msgstr ""
1061
+
1062
+ #: includes/fs-plugin-info-dialog.php:1368
1063
+ msgid "%s times"
1064
+ msgstr ""
1065
+
1066
+ #: includes/fs-plugin-info-dialog.php:1379
1067
+ msgid "WordPress.org Plugin Page"
1068
+ msgstr ""
1069
+
1070
+ #: includes/fs-plugin-info-dialog.php:1388
1071
+ msgid "Plugin Homepage"
1072
+ msgstr ""
1073
+
1074
+ #: includes/fs-plugin-info-dialog.php:1397, includes/fs-plugin-info-dialog.php:1481
1075
+ msgid "Donate to this plugin"
1076
+ msgstr ""
1077
+
1078
+ #: includes/fs-plugin-info-dialog.php:1404
1079
+ msgid "Average Rating"
1080
+ msgstr ""
1081
+
1082
+ #: includes/fs-plugin-info-dialog.php:1411
1083
+ msgid "based on %s"
1084
+ msgstr ""
1085
+
1086
+ #: includes/fs-plugin-info-dialog.php:1415
1087
+ msgid "%s rating"
1088
+ msgstr ""
1089
+
1090
+ #: includes/fs-plugin-info-dialog.php:1417
1091
+ msgid "%s ratings"
1092
+ msgstr ""
1093
+
1094
+ #: includes/fs-plugin-info-dialog.php:1432
1095
+ msgid "%s star"
1096
+ msgstr ""
1097
+
1098
+ #: includes/fs-plugin-info-dialog.php:1434
1099
+ msgid "%s stars"
1100
+ msgstr ""
1101
+
1102
+ #: includes/fs-plugin-info-dialog.php:1446
1103
+ msgid "Click to see reviews that provided a rating of %s"
1104
+ msgstr ""
1105
+
1106
+ #: includes/fs-plugin-info-dialog.php:1459
1107
+ msgid "Contributors"
1108
+ msgstr ""
1109
+
1110
+ #: includes/fs-plugin-info-dialog.php:1489, includes/fs-plugin-info-dialog.php:1491
1111
+ msgid "Warning"
1112
+ msgstr ""
1113
+
1114
+ #: includes/fs-plugin-info-dialog.php:1489
1115
+ msgid "This plugin has not been tested with your current version of WordPress."
1116
+ msgstr ""
1117
+
1118
+ #: includes/fs-plugin-info-dialog.php:1491
1119
+ msgid "This plugin has not been marked as compatible with your version of WordPress."
1120
+ msgstr ""
1121
+
1122
+ #: includes/fs-plugin-info-dialog.php:1510
1123
+ msgid "Paid add-on must be deployed to Freemius."
1124
+ msgstr ""
1125
+
1126
+ #: includes/fs-plugin-info-dialog.php:1511
1127
+ msgid "Add-on must be deployed to WordPress.org or Freemius."
1128
+ msgstr ""
1129
+
1130
+ #: includes/fs-plugin-info-dialog.php:1532
1131
+ msgid "Newer Version (%s) Installed"
1132
+ msgstr ""
1133
+
1134
+ #: includes/fs-plugin-info-dialog.php:1533
1135
+ msgid "Newer Free Version (%s) Installed"
1136
+ msgstr ""
1137
+
1138
+ #: includes/fs-plugin-info-dialog.php:1540
1139
+ msgid "Latest Version Installed"
1140
+ msgstr ""
1141
+
1142
+ #: includes/fs-plugin-info-dialog.php:1541
1143
+ msgid "Latest Free Version Installed"
1144
+ msgstr ""
1145
+
1146
+ #: templates/account.php:100, templates/forms/subscription-cancellation.php:96, templates/account/partials/addon.php:26, templates/account/partials/site.php:311
1147
+ msgid "Downgrading your plan"
1148
+ msgstr ""
1149
+
1150
+ #: templates/account.php:101, templates/forms/subscription-cancellation.php:97, templates/account/partials/addon.php:27, templates/account/partials/site.php:312
1151
+ msgid "Cancelling the subscription"
1152
+ msgstr ""
1153
+
1154
+ #. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
1155
+ #: templates/account.php:103, templates/forms/subscription-cancellation.php:99, templates/account/partials/site.php:314
1156
+ msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
1157
+ msgstr ""
1158
+
1159
+ #: templates/account.php:104, templates/forms/subscription-cancellation.php:100, templates/account/partials/addon.php:30, templates/account/partials/site.php:315
1160
+ msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
1161
+ msgstr ""
1162
+
1163
+ #: templates/account.php:105, templates/forms/subscription-cancellation.php:106, templates/account/partials/addon.php:31
1164
+ msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
1165
+ msgstr ""
1166
+
1167
+ #: templates/account.php:106, templates/forms/subscription-cancellation.php:101, templates/account/partials/addon.php:32, templates/account/partials/site.php:316
1168
+ msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
1169
+ msgstr ""
1170
+
1171
+ #: templates/account.php:107, templates/forms/subscription-cancellation.php:102, templates/account/partials/addon.php:33, templates/account/partials/site.php:317
1172
+ msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
1173
+ msgstr ""
1174
+
1175
+ #. translators: %s: Plan title (e.g. "Professional")
1176
+ #: templates/account.php:109, templates/account/partials/activate-license-button.php:31, templates/account/partials/addon.php:35
1177
+ msgid "Activate %s Plan"
1178
+ msgstr ""
1179
+
1180
+ #. translators: %s: Time period (e.g. Auto renews in "2 months")
1181
+ #: templates/account.php:112, templates/account/partials/addon.php:38, templates/account/partials/site.php:291
1182
+ msgid "Auto renews in %s"
1183
+ msgstr ""
1184
+
1185
+ #. translators: %s: Time period (e.g. Expires in "2 months")
1186
+ #: templates/account.php:114, templates/account/partials/addon.php:40, templates/account/partials/site.php:293
1187
+ msgid "Expires in %s"
1188
+ msgstr ""
1189
+
1190
+ #: templates/account.php:115
1191
+ msgctxt "as synchronize license"
1192
+ msgid "Sync License"
1193
+ msgstr ""
1194
+
1195
+ #: templates/account.php:116, templates/account/partials/addon.php:41
1196
+ msgid "Cancel Trial"
1197
+ msgstr ""
1198
+
1199
+ #: templates/account.php:117, templates/account/partials/addon.php:42
1200
+ msgid "Change Plan"
1201
+ msgstr ""
1202
+
1203
+ #: templates/account.php:118, templates/account/partials/addon.php:43
1204
+ msgctxt "verb"
1205
+ msgid "Upgrade"
1206
+ msgstr ""
1207
+
1208
+ #: templates/account.php:120, templates/account/partials/addon.php:45, templates/account/partials/site.php:318
1209
+ msgctxt "verb"
1210
+ msgid "Downgrade"
1211
+ msgstr ""
1212
+
1213
+ #: templates/account.php:122, templates/add-ons.php:246, templates/plugin-info/features.php:72, templates/account/partials/addon.php:47, templates/account/partials/site.php:33
1214
+ msgid "Free"
1215
+ msgstr ""
1216
+
1217
+ #: templates/account.php:124, templates/debug.php:371, includes/customizer/class-fs-customizer-upsell-control.php:110, templates/account/partials/addon.php:49
1218
+ msgctxt "as product pricing plan"
1219
+ msgid "Plan"
1220
+ msgstr ""
1221
+
1222
+ #: templates/account.php:125
1223
+ msgid "Bundle Plan"
1224
+ msgstr ""
1225
+
1226
+ #: templates/account.php:248
1227
+ msgid "Free Trial"
1228
+ msgstr ""
1229
+
1230
+ #: templates/account.php:259
1231
+ msgid "Account Details"
1232
+ msgstr ""
1233
+
1234
+ #: templates/account.php:266, templates/forms/data-debug-mode.php:33
1235
+ msgid "Start Debug"
1236
+ msgstr ""
1237
+
1238
+ #: templates/account.php:268
1239
+ msgid "Stop Debug"
1240
+ msgstr ""
1241
+
1242
+ #: templates/account.php:275
1243
+ msgid "Billing & Invoices"
1244
+ msgstr ""
1245
+
1246
+ #: templates/account.php:286
1247
+ msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1248
+ msgstr ""
1249
+
1250
+ #: templates/account.php:288
1251
+ msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1252
+ msgstr ""
1253
+
1254
+ #: templates/account.php:291
1255
+ msgid "Delete Account"
1256
+ msgstr ""
1257
+
1258
+ #: templates/account.php:303, templates/account/partials/addon.php:231, templates/account/partials/deactivate-license-button.php:35
1259
+ msgid "Deactivate License"
1260
+ msgstr ""
1261
+
1262
+ #: templates/account.php:326, templates/forms/subscription-cancellation.php:125
1263
+ msgid "Are you sure you want to proceed?"
1264
+ msgstr ""
1265
+
1266
+ #: templates/account.php:326, templates/account/partials/addon.php:255
1267
+ msgid "Cancel Subscription"
1268
+ msgstr ""
1269
+
1270
+ #: templates/account.php:355, templates/account/partials/addon.php:340
1271
+ msgctxt "as synchronize"
1272
+ msgid "Sync"
1273
+ msgstr ""
1274
+
1275
+ #: templates/account.php:370, templates/debug.php:505
1276
+ msgid "Name"
1277
+ msgstr ""
1278
+
1279
+ #: templates/account.php:376, templates/debug.php:506
1280
+ msgid "Email"
1281
+ msgstr ""
1282
+
1283
+ #: templates/account.php:383, templates/debug.php:369, templates/debug.php:555
1284
+ msgid "User ID"
1285
+ msgstr ""
1286
+
1287
+ #: templates/account.php:401, templates/account.php:719, templates/account.php:752, templates/debug.php:236, templates/debug.php:363, templates/debug.php:452, templates/debug.php:504, templates/debug.php:553, templates/debug.php:632, templates/account/payments.php:35, templates/debug/logger.php:21
1288
+ msgid "ID"
1289
+ msgstr ""
1290
+
1291
+ #: templates/account.php:408
1292
+ msgid "Site ID"
1293
+ msgstr ""
1294
+
1295
+ #: templates/account.php:411
1296
+ msgid "No ID"
1297
+ msgstr ""
1298
+
1299
+ #: templates/account.php:416, templates/debug.php:243, templates/debug.php:372, templates/debug.php:456, templates/debug.php:508, templates/account/partials/site.php:227
1300
+ msgid "Public Key"
1301
+ msgstr ""
1302
+
1303
+ #: templates/account.php:422, templates/debug.php:373, templates/debug.php:457, templates/debug.php:509, templates/account/partials/site.php:239
1304
+ msgid "Secret Key"
1305
+ msgstr ""
1306
+
1307
+ #: templates/account.php:425
1308
+ msgctxt "as secret encryption key missing"
1309
+ msgid "No Secret"
1310
+ msgstr ""
1311
+
1312
+ #: templates/account.php:452, templates/account/partials/site.php:120, templates/account/partials/site.php:122
1313
+ msgid "Trial"
1314
+ msgstr ""
1315
+
1316
+ #: templates/account.php:479, templates/debug.php:561, templates/account/partials/site.php:260
1317
+ msgid "License Key"
1318
+ msgstr ""
1319
+
1320
+ #: templates/account.php:510
1321
+ msgid "Join the Beta program"
1322
+ msgstr ""
1323
+
1324
+ #: templates/account.php:516
1325
+ msgid "not verified"
1326
+ msgstr ""
1327
+
1328
+ #: templates/account.php:525, templates/account/partials/addon.php:190
1329
+ msgid "Expired"
1330
+ msgstr ""
1331
+
1332
+ #: templates/account.php:585
1333
+ msgid "Premium version"
1334
+ msgstr ""
1335
+
1336
+ #: templates/account.php:587
1337
+ msgid "Free version"
1338
+ msgstr ""
1339
+
1340
+ #: templates/account.php:599
1341
+ msgid "Verify Email"
1342
+ msgstr ""
1343
+
1344
+ #: templates/account.php:613
1345
+ msgid "Download %s Version"
1346
+ msgstr ""
1347
+
1348
+ #: templates/account.php:629
1349
+ msgid "Download Paid Version"
1350
+ msgstr ""
1351
+
1352
+ #: templates/account.php:647, templates/account.php:890, templates/account/partials/site.php:248, templates/account/partials/site.php:270
1353
+ msgctxt "verb"
1354
+ msgid "Show"
1355
+ msgstr ""
1356
+
1357
+ #: templates/account.php:662
1358
+ msgid "What is your %s?"
1359
+ msgstr ""
1360
+
1361
+ #: templates/account.php:670, templates/account/billing.php:21
1362
+ msgctxt "verb"
1363
+ msgid "Edit"
1364
+ msgstr ""
1365
+
1366
+ #: templates/account.php:674, templates/forms/user-change.php:27
1367
+ msgid "Change User"
1368
+ msgstr ""
1369
+
1370
+ #: templates/account.php:698
1371
+ msgid "Sites"
1372
+ msgstr ""
1373
+
1374
+ #: templates/account.php:711
1375
+ msgid "Search by address"
1376
+ msgstr ""
1377
+
1378
+ #: templates/account.php:720, templates/debug.php:366
1379
+ msgid "Address"
1380
+ msgstr ""
1381
+
1382
+ #: templates/account.php:721
1383
+ msgid "License"
1384
+ msgstr ""
1385
+
1386
+ #: templates/account.php:722
1387
+ msgid "Plan"
1388
+ msgstr ""
1389
+
1390
+ #: templates/account.php:755
1391
+ msgctxt "as software license"
1392
+ msgid "License"
1393
+ msgstr ""
1394
+
1395
+ #: templates/account.php:884
1396
+ msgctxt "verb"
1397
+ msgid "Hide"
1398
+ msgstr ""
1399
+
1400
+ #: templates/account.php:906, templates/forms/data-debug-mode.php:31
1401
+ msgid "Processing"
1402
+ msgstr ""
1403
+
1404
+ #: templates/account.php:909
1405
+ msgid "Get updates for bleeding edge Beta versions of %s."
1406
+ msgstr ""
1407
+
1408
+ #: templates/account.php:967
1409
+ msgid "Cancelling %s"
1410
+ msgstr ""
1411
+
1412
+ #: templates/account.php:967, templates/account.php:984, templates/forms/subscription-cancellation.php:27, templates/forms/deactivation/form.php:133
1413
+ msgid "trial"
1414
+ msgstr ""
1415
+
1416
+ #: templates/account.php:982, templates/forms/deactivation/form.php:150
1417
+ msgid "Cancelling %s..."
1418
+ msgstr ""
1419
+
1420
+ #: templates/account.php:985, templates/forms/subscription-cancellation.php:28, templates/forms/deactivation/form.php:134
1421
+ msgid "subscription"
1422
+ msgstr ""
1423
+
1424
+ #: templates/account.php:999
1425
+ msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1426
+ msgstr ""
1427
+
1428
+ #: templates/account.php:1073
1429
+ msgid "Disabling white-label mode"
1430
+ msgstr ""
1431
+
1432
+ #: templates/account.php:1074
1433
+ msgid "Enabling white-label mode"
1434
+ msgstr ""
1435
+
1436
+ #: templates/add-ons.php:38
1437
+ msgid "View details"
1438
+ msgstr ""
1439
+
1440
+ #: templates/add-ons.php:48
1441
+ msgid "Add Ons for %s"
1442
+ msgstr ""
1443
+
1444
+ #: templates/add-ons.php:58
1445
+ msgid "We couldn't load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
1446
+ msgstr ""
1447
+
1448
+ #: templates/add-ons.php:229
1449
+ msgctxt "active add-on"
1450
+ msgid "Active"
1451
+ msgstr ""
1452
+
1453
+ #: templates/add-ons.php:230
1454
+ msgctxt "installed add-on"
1455
+ msgid "Installed"
1456
+ msgstr ""
1457
+
1458
+ #: templates/admin-notice.php:13, templates/forms/license-activation.php:220, templates/forms/resend-key.php:77
1459
+ msgctxt "as close a window"
1460
+ msgid "Dismiss"
1461
+ msgstr ""
1462
+
1463
+ #: templates/auto-installation.php:45
1464
+ msgid "%s sec"
1465
+ msgstr ""
1466
+
1467
+ #: templates/auto-installation.php:83
1468
+ msgid "Automatic Installation"
1469
+ msgstr ""
1470
+
1471
+ #: templates/auto-installation.php:93
1472
+ msgid "An automated download and installation of %s (paid version) from %s will start in %s. If you would like to do it manually - click the cancellation button now."
1473
+ msgstr ""
1474
+
1475
+ #: templates/auto-installation.php:104
1476
+ msgid "The installation process has started and may take a few minutes to complete. Please wait until it is done - do not refresh this page."
1477
+ msgstr ""
1478
+
1479
+ #: templates/auto-installation.php:109
1480
+ msgid "Cancel Installation"
1481
+ msgstr ""
1482
+
1483
+ #: templates/checkout.php:180
1484
+ msgid "Checkout"
1485
+ msgstr ""
1486
+
1487
+ #: templates/checkout.php:180
1488
+ msgid "PCI compliant"
1489
+ msgstr ""
1490
+
1491
+ #. translators: %s: name (e.g. Hey John,)
1492
+ #: templates/connect.php:112
1493
+ msgctxt "greeting"
1494
+ msgid "Hey %s,"
1495
+ msgstr ""
1496
+
1497
+ #: templates/connect.php:162
1498
+ msgid "Allow & Continue"
1499
+ msgstr ""
1500
+
1501
+ #: templates/connect.php:166
1502
+ msgid "Re-send activation email"
1503
+ msgstr ""
1504
+
1505
+ #: templates/connect.php:170
1506
+ msgid "Thanks %s!"
1507
+ msgstr ""
1508
+
1509
+ #: templates/connect.php:180, templates/forms/license-activation.php:46
1510
+ msgid "Agree & Activate License"
1511
+ msgstr ""
1512
+
1513
+ #: templates/connect.php:189
1514
+ msgid "Thanks for purchasing %s! To get started, please enter your license key:"
1515
+ msgstr ""
1516
+
1517
+ #: templates/connect.php:196
1518
+ msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
1519
+ msgstr ""
1520
+
1521
+ #: templates/connect.php:197
1522
+ msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
1523
+ msgstr ""
1524
+
1525
+ #: templates/connect.php:203
1526
+ msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1527
+ msgstr ""
1528
+
1529
+ #: templates/connect.php:204
1530
+ msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1531
+ msgstr ""
1532
+
1533
+ #: templates/connect.php:238
1534
+ msgid "We're excited to introduce the Freemius network-level integration."
1535
+ msgstr ""
1536
+
1537
+ #: templates/connect.php:241
1538
+ msgid "During the update process we detected %d site(s) that are still pending license activation."
1539
+ msgstr ""
1540
+
1541
+ #: templates/connect.php:243
1542
+ msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
1543
+ msgstr ""
1544
+
1545
+ #: templates/connect.php:245
1546
+ msgid "%s's paid features"
1547
+ msgstr ""
1548
+
1549
+ #: templates/connect.php:250
1550
+ msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
1551
+ msgstr ""
1552
+
1553
+ #: templates/connect.php:252
1554
+ msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
1555
+ msgstr ""
1556
+
1557
+ #: templates/connect.php:261, templates/forms/data-debug-mode.php:35, templates/forms/license-activation.php:49
1558
+ msgid "License key"
1559
+ msgstr ""
1560
+
1561
+ #: templates/connect.php:264, templates/forms/license-activation.php:22
1562
+ msgid "Can't find your license key?"
1563
+ msgstr ""
1564
+
1565
+ #: templates/connect.php:323, templates/connect.php:695, templates/forms/deactivation/retry-skip.php:20
1566
+ msgctxt "verb"
1567
+ msgid "Skip"
1568
+ msgstr ""
1569
+
1570
+ #: templates/connect.php:326
1571
+ msgid "Delegate to Site Admins"
1572
+ msgstr ""
1573
+
1574
+ #: templates/connect.php:326
1575
+ msgid "If you click it, this decision will be delegated to the sites administrators."
1576
+ msgstr ""
1577
+
1578
+ #: templates/connect.php:364
1579
+ msgid "Your Profile Overview"
1580
+ msgstr ""
1581
+
1582
+ #: templates/connect.php:365
1583
+ msgid "Name and email address"
1584
+ msgstr ""
1585
+
1586
+ #: templates/connect.php:372
1587
+ msgid "Your Site Overview"
1588
+ msgstr ""
1589
+
1590
+ #: templates/connect.php:373
1591
+ msgid "Site URL, WP version, PHP info"
1592
+ msgstr ""
1593
+
1594
+ #: templates/connect.php:379
1595
+ msgid "Admin Notices"
1596
+ msgstr ""
1597
+
1598
+ #: templates/connect.php:380, templates/connect.php:396
1599
+ msgid "Updates, announcements, marketing, no spam"
1600
+ msgstr ""
1601
+
1602
+ #: templates/connect.php:386
1603
+ msgid "Current %s Events"
1604
+ msgstr ""
1605
+
1606
+ #: templates/connect.php:387
1607
+ msgid "Activation, deactivation and uninstall"
1608
+ msgstr ""
1609
+
1610
+ #: templates/connect.php:395
1611
+ msgid "Newsletter"
1612
+ msgstr ""
1613
+
1614
+ #: templates/connect.php:403
1615
+ msgid "Plugins & Themes"
1616
+ msgstr ""
1617
+
1618
+ #: templates/connect.php:404
1619
+ msgid "Title, slug, version, and is active"
1620
+ msgstr ""
1621
+
1622
+ #: templates/connect.php:421, templates/forms/license-activation.php:41
1623
+ msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1624
+ msgstr ""
1625
+
1626
+ #: templates/connect.php:426
1627
+ msgid "What permissions are being granted?"
1628
+ msgstr ""
1629
+
1630
+ #: templates/connect.php:452
1631
+ msgid "Don't have a license key?"
1632
+ msgstr ""
1633
+
1634
+ #: templates/connect.php:455
1635
+ msgid "Have a license key?"
1636
+ msgstr ""
1637
+
1638
+ #: templates/connect.php:463
1639
+ msgid "Privacy Policy"
1640
+ msgstr ""
1641
+
1642
+ #: templates/connect.php:465
1643
+ msgid "License Agreement"
1644
+ msgstr ""
1645
+
1646
+ #: templates/connect.php:465
1647
+ msgid "Terms of Service"
1648
+ msgstr ""
1649
+
1650
+ #: templates/connect.php:854
1651
+ msgctxt "as in the process of sending an email"
1652
+ msgid "Sending email"
1653
+ msgstr ""
1654
+
1655
+ #: templates/connect.php:855
1656
+ msgctxt "as activating plugin"
1657
+ msgid "Activating"
1658
+ msgstr ""
1659
+
1660
+ #: templates/contact.php:78
1661
+ msgid "Contact"
1662
+ msgstr ""
1663
+
1664
+ #: templates/debug.php:17
1665
+ msgctxt "as turned off"
1666
+ msgid "Off"
1667
+ msgstr ""
1668
+
1669
+ #: templates/debug.php:18
1670
+ msgctxt "as turned on"
1671
+ msgid "On"
1672
+ msgstr ""
1673
+
1674
+ #: templates/debug.php:20
1675
+ msgid "SDK"
1676
+ msgstr ""
1677
+
1678
+ #: templates/debug.php:24
1679
+ msgctxt "as code debugging"
1680
+ msgid "Debugging"
1681
+ msgstr ""
1682
+
1683
+ #: templates/debug.php:52, templates/debug.php:248, templates/debug.php:374, templates/debug.php:510
1684
+ msgid "Actions"
1685
+ msgstr ""
1686
+
1687
+ #: templates/debug.php:62
1688
+ msgid "Are you sure you want to delete all Freemius data?"
1689
+ msgstr ""
1690
+
1691
+ #: templates/debug.php:62
1692
+ msgid "Delete All Accounts"
1693
+ msgstr ""
1694
+
1695
+ #: templates/debug.php:69
1696
+ msgid "Clear API Cache"
1697
+ msgstr ""
1698
+
1699
+ #: templates/debug.php:77
1700
+ msgid "Clear Updates Transients"
1701
+ msgstr ""
1702
+
1703
+ #: templates/debug.php:84
1704
+ msgid "Sync Data From Server"
1705
+ msgstr ""
1706
+
1707
+ #: templates/debug.php:93
1708
+ msgid "Migrate Options to Network"
1709
+ msgstr ""
1710
+
1711
+ #: templates/debug.php:98
1712
+ msgid "Load DB Option"
1713
+ msgstr ""
1714
+
1715
+ #: templates/debug.php:101
1716
+ msgid "Set DB Option"
1717
+ msgstr ""
1718
+
1719
+ #: templates/debug.php:180
1720
+ msgid "Key"
1721
+ msgstr ""
1722
+
1723
+ #: templates/debug.php:181
1724
+ msgid "Value"
1725
+ msgstr ""
1726
+
1727
+ #: templates/debug.php:197
1728
+ msgctxt "as software development kit versions"
1729
+ msgid "SDK Versions"
1730
+ msgstr ""
1731
+
1732
+ #: templates/debug.php:202
1733
+ msgid "SDK Path"
1734
+ msgstr ""
1735
+
1736
+ #: templates/debug.php:203, templates/debug.php:242
1737
+ msgid "Module Path"
1738
+ msgstr ""
1739
+
1740
+ #: templates/debug.php:204
1741
+ msgid "Is Active"
1742
+ msgstr ""
1743
+
1744
+ #: templates/debug.php:232, templates/debug/plugins-themes-sync.php:35
1745
+ msgid "Plugins"
1746
+ msgstr ""
1747
+
1748
+ #: templates/debug.php:232, templates/debug/plugins-themes-sync.php:56
1749
+ msgid "Themes"
1750
+ msgstr ""
1751
+
1752
+ #: templates/debug.php:237, templates/debug.php:368, templates/debug.php:454, templates/debug/scheduled-crons.php:80
1753
+ msgid "Slug"
1754
+ msgstr ""
1755
+
1756
+ #: templates/debug.php:239, templates/debug.php:453
1757
+ msgid "Title"
1758
+ msgstr ""
1759
+
1760
+ #: templates/debug.php:240
1761
+ msgctxt "as application program interface"
1762
+ msgid "API"
1763
+ msgstr ""
1764
+
1765
+ #: templates/debug.php:241
1766
+ msgid "Freemius State"
1767
+ msgstr ""
1768
+
1769
+ #: templates/debug.php:245
1770
+ msgid "Network Blog"
1771
+ msgstr ""
1772
+
1773
+ #: templates/debug.php:246
1774
+ msgid "Network User"
1775
+ msgstr ""
1776
+
1777
+ #: templates/debug.php:283
1778
+ msgctxt "as connection was successful"
1779
+ msgid "Connected"
1780
+ msgstr ""
1781
+
1782
+ #: templates/debug.php:284
1783
+ msgctxt "as connection blocked"
1784
+ msgid "Blocked"
1785
+ msgstr ""
1786
+
1787
+ #: templates/debug.php:320
1788
+ msgid "Simulate Trial Promotion"
1789
+ msgstr ""
1790
+
1791
+ #: templates/debug.php:332
1792
+ msgid "Simulate Network Upgrade"
1793
+ msgstr ""
1794
+
1795
+ #: templates/debug.php:357
1796
+ msgid "%s Installs"
1797
+ msgstr ""
1798
+
1799
+ #: templates/debug.php:359
1800
+ msgctxt "like websites"
1801
+ msgid "Sites"
1802
+ msgstr ""
1803
+
1804
+ #: templates/debug.php:365, templates/account/partials/site.php:156
1805
+ msgid "Blog ID"
1806
+ msgstr ""
1807
+
1808
+ #: templates/debug.php:370
1809
+ msgid "License ID"
1810
+ msgstr ""
1811
+
1812
+ #: templates/debug.php:434, templates/debug.php:533, templates/account/partials/addon.php:435
1813
+ msgctxt "verb"
1814
+ msgid "Delete"
1815
+ msgstr ""
1816
+
1817
+ #: templates/debug.php:448
1818
+ msgid "Add Ons of module %s"
1819
+ msgstr ""
1820
+
1821
+ #: templates/debug.php:500
1822
+ msgid "Users"
1823
+ msgstr ""
1824
+
1825
+ #: templates/debug.php:507
1826
+ msgid "Verified"
1827
+ msgstr ""
1828
+
1829
+ #: templates/debug.php:549
1830
+ msgid "%s Licenses"
1831
+ msgstr ""
1832
+
1833
+ #: templates/debug.php:554
1834
+ msgid "Plugin ID"
1835
+ msgstr ""
1836
+
1837
+ #: templates/debug.php:556
1838
+ msgid "Plan ID"
1839
+ msgstr ""
1840
+
1841
+ #: templates/debug.php:557
1842
+ msgid "Quota"
1843
+ msgstr ""
1844
+
1845
+ #: templates/debug.php:558
1846
+ msgid "Activated"
1847
+ msgstr ""
1848
+
1849
+ #: templates/debug.php:559
1850
+ msgid "Blocking"
1851
+ msgstr ""
1852
+
1853
+ #: templates/debug.php:560, templates/debug.php:631, templates/debug/logger.php:22
1854
+ msgid "Type"
1855
+ msgstr ""
1856
+
1857
+ #: templates/debug.php:562
1858
+ msgctxt "as expiration date"
1859
+ msgid "Expiration"
1860
+ msgstr ""
1861
+
1862
+ #: templates/debug.php:590
1863
+ msgid "Debug Log"
1864
+ msgstr ""
1865
+
1866
+ #: templates/debug.php:594
1867
+ msgid "All Types"
1868
+ msgstr ""
1869
+
1870
+ #: templates/debug.php:601
1871
+ msgid "All Requests"
1872
+ msgstr ""
1873
+
1874
+ #: templates/debug.php:606, templates/debug.php:635, templates/debug/logger.php:25
1875
+ msgid "File"
1876
+ msgstr ""
1877
+
1878
+ #: templates/debug.php:607, templates/debug.php:633, templates/debug/logger.php:23
1879
+ msgid "Function"
1880
+ msgstr ""
1881
+
1882
+ #: templates/debug.php:608
1883
+ msgid "Process ID"
1884
+ msgstr ""
1885
+
1886
+ #: templates/debug.php:609
1887
+ msgid "Logger"
1888
+ msgstr ""
1889
+
1890
+ #: templates/debug.php:610, templates/debug.php:634, templates/debug/logger.php:24
1891
+ msgid "Message"
1892
+ msgstr ""
1893
+
1894
+ #: templates/debug.php:612
1895
+ msgid "Filter"
1896
+ msgstr ""
1897
+
1898
+ #: templates/debug.php:620
1899
+ msgid "Download"
1900
+ msgstr ""
1901
+
1902
+ #: templates/debug.php:636, templates/debug/logger.php:26
1903
+ msgid "Timestamp"
1904
+ msgstr ""
1905
+
1906
+ #: templates/secure-https-header.php:28
1907
+ msgid "Secure HTTPS %s page, running from an external domain"
1908
+ msgstr ""
1909
+
1910
+ #: includes/customizer/class-fs-customizer-support-section.php:55, templates/plugin-info/features.php:43
1911
+ msgid "Support"
1912
+ msgstr ""
1913
+
1914
+ #: includes/debug/class-fs-debug-bar-panel.php:48, templates/debug/api-calls.php:54, templates/debug/logger.php:62
1915
+ msgctxt "milliseconds"
1916
+ msgid "ms"
1917
+ msgstr ""
1918
+
1919
+ #: includes/debug/debug-bar-start.php:41
1920
+ msgid "Freemius API"
1921
+ msgstr ""
1922
+
1923
+ #: includes/debug/debug-bar-start.php:42
1924
+ msgid "Requests"
1925
+ msgstr ""
1926
+
1927
+ #: templates/account/billing.php:22
1928
+ msgctxt "verb"
1929
+ msgid "Update"
1930
+ msgstr ""
1931
+
1932
+ #: templates/account/billing.php:33
1933
+ msgid "Billing"
1934
+ msgstr ""
1935
+
1936
+ #: templates/account/billing.php:38, templates/account/billing.php:38
1937
+ msgid "Business name"
1938
+ msgstr ""
1939
+
1940
+ #: templates/account/billing.php:39, templates/account/billing.php:39
1941
+ msgid "Tax / VAT ID"
1942
+ msgstr ""
1943
+
1944
+ #: templates/account/billing.php:42, templates/account/billing.php:42, templates/account/billing.php:43, templates/account/billing.php:43
1945
+ msgid "Address Line %d"
1946
+ msgstr ""
1947
+
1948
+ #: templates/account/billing.php:46, templates/account/billing.php:46
1949
+ msgid "City"
1950
+ msgstr ""
1951
+
1952
+ #: templates/account/billing.php:46, templates/account/billing.php:46
1953
+ msgid "Town"
1954
+ msgstr ""
1955
+
1956
+ #: templates/account/billing.php:47, templates/account/billing.php:47
1957
+ msgid "ZIP / Postal Code"
1958
+ msgstr ""
1959
+
1960
+ #: templates/account/billing.php:302
1961
+ msgid "Country"
1962
+ msgstr ""
1963
+
1964
+ #: templates/account/billing.php:304
1965
+ msgid "Select Country"
1966
+ msgstr ""
1967
+
1968
+ #: templates/account/billing.php:311, templates/account/billing.php:312
1969
+ msgid "State"
1970
+ msgstr ""
1971
+
1972
+ #: templates/account/billing.php:311, templates/account/billing.php:312
1973
+ msgid "Province"
1974
+ msgstr ""
1975
+
1976
+ #: templates/account/payments.php:29
1977
+ msgid "Payments"
1978
+ msgstr ""
1979
+
1980
+ #: templates/account/payments.php:36
1981
+ msgid "Date"
1982
+ msgstr ""
1983
+
1984
+ #: templates/account/payments.php:37
1985
+ msgid "Amount"
1986
+ msgstr ""
1987
+
1988
+ #: templates/account/payments.php:38, templates/account/payments.php:50
1989
+ msgid "Invoice"
1990
+ msgstr ""
1991
+
1992
+ #: templates/debug/api-calls.php:56
1993
+ msgid "API"
1994
+ msgstr ""
1995
+
1996
+ #: templates/debug/api-calls.php:68
1997
+ msgid "Method"
1998
+ msgstr ""
1999
+
2000
+ #: templates/debug/api-calls.php:69
2001
+ msgid "Code"
2002
+ msgstr ""
2003
+
2004
+ #: templates/debug/api-calls.php:70
2005
+ msgid "Length"
2006
+ msgstr ""
2007
+
2008
+ #: templates/debug/api-calls.php:71
2009
+ msgctxt "as file/folder path"
2010
+ msgid "Path"
2011
+ msgstr ""
2012
+
2013
+ #: templates/debug/api-calls.php:73
2014
+ msgid "Body"
2015
+ msgstr ""
2016
+
2017
+ #: templates/debug/api-calls.php:75
2018
+ msgid "Result"
2019
+ msgstr ""
2020
+
2021
+ #: templates/debug/api-calls.php:76
2022
+ msgid "Start"
2023
+ msgstr ""
2024
+
2025
+ #: templates/debug/api-calls.php:77
2026
+ msgid "End"
2027
+ msgstr ""
2028
+
2029
+ #: templates/debug/logger.php:15
2030
+ msgid "Log"
2031
+ msgstr ""
2032
+
2033
+ #. translators: %s: time period (e.g. In "2 hours")
2034
+ #: templates/debug/plugins-themes-sync.php:18, templates/debug/scheduled-crons.php:91
2035
+ msgid "In %s"
2036
+ msgstr ""
2037
+
2038
+ #. translators: %s: time period (e.g. "2 hours" ago)
2039
+ #: templates/debug/plugins-themes-sync.php:20, templates/debug/scheduled-crons.php:93
2040
+ msgid "%s ago"
2041
+ msgstr ""
2042
+
2043
+ #: templates/debug/plugins-themes-sync.php:21, templates/debug/scheduled-crons.php:74
2044
+ msgctxt "seconds"
2045
+ msgid "sec"
2046
+ msgstr ""
2047
+
2048
+ #: templates/debug/plugins-themes-sync.php:23
2049
+ msgid "Plugins & Themes Sync"
2050
+ msgstr ""
2051
+
2052
+ #: templates/debug/plugins-themes-sync.php:28
2053
+ msgid "Total"
2054
+ msgstr ""
2055
+
2056
+ #: templates/debug/plugins-themes-sync.php:29, templates/debug/scheduled-crons.php:84
2057
+ msgid "Last"
2058
+ msgstr ""
2059
+
2060
+ #: templates/debug/scheduled-crons.php:76
2061
+ msgid "Scheduled Crons"
2062
+ msgstr ""
2063
+
2064
+ #: templates/debug/scheduled-crons.php:81
2065
+ msgid "Module"
2066
+ msgstr ""
2067
+
2068
+ #: templates/debug/scheduled-crons.php:82
2069
+ msgid "Module Type"
2070
+ msgstr ""
2071
+
2072
+ #: templates/debug/scheduled-crons.php:83
2073
+ msgid "Cron Type"
2074
+ msgstr ""
2075
+
2076
+ #: templates/debug/scheduled-crons.php:85
2077
+ msgid "Next"
2078
+ msgstr ""
2079
+
2080
+ #: templates/forms/affiliation.php:82
2081
+ msgid "Non-expiring"
2082
+ msgstr ""
2083
+
2084
+ #: templates/forms/affiliation.php:85
2085
+ msgid "Apply to become an affiliate"
2086
+ msgstr ""
2087
+
2088
+ #: templates/forms/affiliation.php:107
2089
+ msgid "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
2090
+ msgstr ""
2091
+
2092
+ #: templates/forms/affiliation.php:122
2093
+ msgid "Thank you for applying for our affiliate program, we'll review your details during the next 14 days and will get back to you with further information."
2094
+ msgstr ""
2095
+
2096
+ #: templates/forms/affiliation.php:125
2097
+ msgid "Your affiliation account was temporarily suspended."
2098
+ msgstr ""
2099
+
2100
+ #: templates/forms/affiliation.php:128
2101
+ msgid "Thank you for applying for our affiliate program, unfortunately, we've decided at this point to reject your application. Please try again in 30 days."
2102
+ msgstr ""
2103
+
2104
+ #: templates/forms/affiliation.php:131
2105
+ msgid "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
2106
+ msgstr ""
2107
+
2108
+ #: templates/forms/affiliation.php:144
2109
+ msgid "Like the %s? Become our ambassador and earn cash ;-)"
2110
+ msgstr ""
2111
+
2112
+ #: templates/forms/affiliation.php:145
2113
+ msgid "Refer new customers to our %s and earn %s commission on each successful sale you refer!"
2114
+ msgstr ""
2115
+
2116
+ #: templates/forms/affiliation.php:148
2117
+ msgid "Program Summary"
2118
+ msgstr ""
2119
+
2120
+ #: templates/forms/affiliation.php:150
2121
+ msgid "%s commission when a customer purchases a new license."
2122
+ msgstr ""
2123
+
2124
+ #: templates/forms/affiliation.php:152
2125
+ msgid "Get commission for automated subscription renewals."
2126
+ msgstr ""
2127
+
2128
+ #: templates/forms/affiliation.php:155
2129
+ msgid "%s tracking cookie after the first visit to maximize earnings potential."
2130
+ msgstr ""
2131
+
2132
+ #: templates/forms/affiliation.php:158
2133
+ msgid "Unlimited commissions."
2134
+ msgstr ""
2135
+
2136
+ #: templates/forms/affiliation.php:160
2137
+ msgid "%s minimum payout amount."
2138
+ msgstr ""
2139
+
2140
+ #: templates/forms/affiliation.php:161
2141
+ msgid "Payouts are in USD and processed monthly via PayPal."
2142
+ msgstr ""
2143
+
2144
+ #: templates/forms/affiliation.php:162
2145
+ msgid "As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days."
2146
+ msgstr ""
2147
+
2148
+ #: templates/forms/affiliation.php:165
2149
+ msgid "Affiliate"
2150
+ msgstr ""
2151
+
2152
+ #: templates/forms/affiliation.php:168, templates/forms/resend-key.php:23
2153
+ msgid "Email address"
2154
+ msgstr ""
2155
+
2156
+ #: templates/forms/affiliation.php:172
2157
+ msgid "Full name"
2158
+ msgstr ""
2159
+
2160
+ #: templates/forms/affiliation.php:176
2161
+ msgid "PayPal account email address"
2162
+ msgstr ""
2163
+
2164
+ #: templates/forms/affiliation.php:180
2165
+ msgid "Where are you going to promote the %s?"
2166
+ msgstr ""
2167
+
2168
+ #: templates/forms/affiliation.php:182
2169
+ msgid "Enter the domain of your website or other websites from where you plan to promote the %s."
2170
+ msgstr ""
2171
+
2172
+ #: templates/forms/affiliation.php:184
2173
+ msgid "Add another domain"
2174
+ msgstr ""
2175
+
2176
+ #: templates/forms/affiliation.php:188
2177
+ msgid "Extra Domains"
2178
+ msgstr ""
2179
+
2180
+ #: templates/forms/affiliation.php:189
2181
+ msgid "Extra domains where you will be marketing the product from."
2182
+ msgstr ""
2183
+
2184
+ #: templates/forms/affiliation.php:199
2185
+ msgid "Promotion methods"
2186
+ msgstr ""
2187
+
2188
+ #: templates/forms/affiliation.php:202
2189
+ msgid "Social media (Facebook, Twitter, etc.)"
2190
+ msgstr ""
2191
+
2192
+ #: templates/forms/affiliation.php:206
2193
+ msgid "Mobile apps"
2194
+ msgstr ""
2195
+
2196
+ #: templates/forms/affiliation.php:210
2197
+ msgid "Website, email, and social media statistics (optional)"
2198
+ msgstr ""
2199
+
2200
+ #: templates/forms/affiliation.php:213
2201
+ msgid "Please feel free to provide any relevant website or social media statistics, e.g. monthly unique site visits, number of email subscribers, followers, etc. (we will keep this information confidential)."
2202
+ msgstr ""
2203
+
2204
+ #: templates/forms/affiliation.php:217
2205
+ msgid "How will you promote us?"
2206
+ msgstr ""
2207
+
2208
+ #: templates/forms/affiliation.php:220
2209
+ msgid "Please provide details on how you intend to promote %s (please be as specific as possible)."
2210
+ msgstr ""
2211
+
2212
+ #: templates/forms/affiliation.php:232, templates/forms/resend-key.php:22
2213
+ msgid "Cancel"
2214
+ msgstr ""
2215
+
2216
+ #: templates/forms/affiliation.php:234
2217
+ msgid "Become an affiliate"
2218
+ msgstr ""
2219
+
2220
+ #: templates/forms/data-debug-mode.php:25
2221
+ msgid "Please enter the license key to enable the debug mode:"
2222
+ msgstr ""
2223
+
2224
+ #: templates/forms/data-debug-mode.php:27
2225
+ msgid "To enter the debug mode, please enter the secret key of the license owner (UserID = %d), which you can find in your \"My Profile\" section of your User Dashboard:"
2226
+ msgstr ""
2227
+
2228
+ #: templates/forms/data-debug-mode.php:32
2229
+ msgid "Submit"
2230
+ msgstr ""
2231
+
2232
+ #: templates/forms/data-debug-mode.php:36
2233
+ msgid "User key"
2234
+ msgstr ""
2235
+
2236
+ #: templates/forms/license-activation.php:23
2237
+ msgid "Please enter the license key that you received in the email right after the purchase:"
2238
+ msgstr ""
2239
+
2240
+ #: templates/forms/license-activation.php:28
2241
+ msgid "Update License"
2242
+ msgstr ""
2243
+
2244
+ #: templates/forms/license-activation.php:181
2245
+ msgid "Associate with the license owner's account."
2246
+ msgstr ""
2247
+
2248
+ #: templates/forms/optout.php:30
2249
+ msgctxt "verb"
2250
+ msgid "Opt Out"
2251
+ msgstr ""
2252
+
2253
+ #: templates/forms/optout.php:31
2254
+ msgctxt "verb"
2255
+ msgid "Opt In"
2256
+ msgstr ""
2257
+
2258
+ #: templates/forms/optout.php:34
2259
+ msgid "Connectivity to the licensing engine was successfully re-established. Automatic security & feature updates are now available through the WP Admin Dashboard."
2260
+ msgstr ""
2261
+
2262
+ #: templates/forms/optout.php:36
2263
+ msgid "Warning: Opting out will block automatic updates"
2264
+ msgstr ""
2265
+
2266
+ #: templates/forms/optout.php:37
2267
+ msgid "Ongoing connectivity with the licensing engine is essential for receiving automatic security & feature updates of the paid product. To receive these updates, data like your license key, %1$s version, and WordPress version, is periodically sent to the server to check for updates. By opting out, you understand that your site won't receive automatic updates for %2$s from within the WP Admin Dashboard. This can put your site at risk, and we highly recommend to keep this connection active. If you do choose to opt-out, you'll need to check for %1$s updates and install them manually."
2268
+ msgstr ""
2269
+
2270
+ #: templates/forms/optout.php:39
2271
+ msgid "I'd like to keep automatic updates"
2272
+ msgstr ""
2273
+
2274
+ #: templates/forms/optout.php:44
2275
+ msgid "Usage tracking is done in the name of making %s better. Making a better user experience, prioritizing new features, and more good things. We'd really appreciate if you'll reconsider letting us continue with the tracking."
2276
+ msgstr ""
2277
+
2278
+ #: templates/forms/optout.php:45
2279
+ msgid "On second thought - I want to continue helping"
2280
+ msgstr ""
2281
+
2282
+ #: templates/forms/optout.php:49
2283
+ msgid "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
2284
+ msgstr ""
2285
+
2286
+ #: templates/forms/optout.php:74
2287
+ msgid "Plugins & themes tracking"
2288
+ msgstr ""
2289
+
2290
+ #: templates/forms/optout.php:261
2291
+ msgid "Saved"
2292
+ msgstr ""
2293
+
2294
+ #: templates/forms/premium-versions-upgrade-handler.php:40
2295
+ msgid "There is a new version of %s available."
2296
+ msgstr ""
2297
+
2298
+ #: templates/forms/premium-versions-upgrade-handler.php:41
2299
+ msgid " %s to access version %s security & feature updates, and support."
2300
+ msgstr ""
2301
+
2302
+ #: templates/forms/premium-versions-upgrade-handler.php:54
2303
+ msgid "New Version Available"
2304
+ msgstr ""
2305
+
2306
+ #: templates/forms/premium-versions-upgrade-handler.php:75
2307
+ msgctxt "close a window"
2308
+ msgid "Dismiss"
2309
+ msgstr ""
2310
+
2311
+ #: templates/forms/resend-key.php:21
2312
+ msgid "Send License Key"
2313
+ msgstr ""
2314
+
2315
+ #: templates/forms/resend-key.php:57
2316
+ msgid "Enter the email address you've used for the upgrade below and we will resend you the license key."
2317
+ msgstr ""
2318
+
2319
+ #: templates/forms/subscription-cancellation.php:37
2320
+ msgid "Deactivating or uninstalling the %s will automatically disable the license, which you'll be able to use on another site."
2321
+ msgstr ""
2322
+
2323
+ #: templates/forms/subscription-cancellation.php:47
2324
+ msgid "In case you are NOT planning on using this %s on this site (or any other site) - would you like to cancel the %s as well?"
2325
+ msgstr ""
2326
+
2327
+ #: templates/forms/subscription-cancellation.php:52
2328
+ msgid "license"
2329
+ msgstr ""
2330
+
2331
+ #: templates/forms/subscription-cancellation.php:57
2332
+ msgid "Cancel %s - I no longer need any security & feature updates, nor support for %s because I'm not planning to use the %s on this, or any other site."
2333
+ msgstr ""
2334
+
2335
+ #: templates/forms/subscription-cancellation.php:68
2336
+ msgid "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
2337
+ msgstr ""
2338
+
2339
+ #: templates/forms/subscription-cancellation.php:103
2340
+ msgid "Once your license expires you will no longer be able to use the %s, unless you activate it again with a valid premium license."
2341
+ msgstr ""
2342
+
2343
+ #: templates/forms/subscription-cancellation.php:136
2344
+ msgid "Cancel %s?"
2345
+ msgstr ""
2346
+
2347
+ #: templates/forms/subscription-cancellation.php:143
2348
+ msgid "Proceed"
2349
+ msgstr ""
2350
+
2351
+ #: templates/forms/subscription-cancellation.php:191, templates/forms/deactivation/form.php:171
2352
+ msgid "Cancel %s & Proceed"
2353
+ msgstr ""
2354
+
2355
+ #: templates/forms/trial-start.php:22
2356
+ msgid "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
2357
+ msgstr ""
2358
+
2359
+ #: templates/forms/trial-start.php:28
2360
+ msgid "For compliance with the WordPress.org guidelines, before we start the trial we ask that you opt in with your user and non-sensitive site information, allowing the %s to periodically send data to %s to check for version updates and to validate your trial."
2361
+ msgstr ""
2362
+
2363
+ #: templates/forms/user-change.php:26
2364
+ msgid "By changing the user, you agree to transfer the account ownership to:"
2365
+ msgstr ""
2366
+
2367
+ #: templates/forms/user-change.php:28
2368
+ msgid "I Agree - Change User"
2369
+ msgstr ""
2370
+
2371
+ #: templates/forms/user-change.php:30
2372
+ msgid "Enter email address"
2373
+ msgstr ""
2374
+
2375
+ #: templates/forms/user-change.php:81
2376
+ msgctxt "close window"
2377
+ msgid "Dismiss"
2378
+ msgstr ""
2379
+
2380
+ #: templates/js/style-premium-theme.php:39
2381
+ msgid "Premium"
2382
+ msgstr ""
2383
+
2384
+ #: templates/js/style-premium-theme.php:42
2385
+ msgid "Beta"
2386
+ msgstr ""
2387
+
2388
+ #: templates/partials/network-activation.php:27
2389
+ msgid "Activate license on all sites in the network."
2390
+ msgstr ""
2391
+
2392
+ #: templates/partials/network-activation.php:28
2393
+ msgid "Apply on all sites in the network."
2394
+ msgstr ""
2395
+
2396
+ #: templates/partials/network-activation.php:31
2397
+ msgid "Activate license on all pending sites."
2398
+ msgstr ""
2399
+
2400
+ #: templates/partials/network-activation.php:32
2401
+ msgid "Apply on all pending sites."
2402
+ msgstr ""
2403
+
2404
+ #: templates/partials/network-activation.php:40, templates/partials/network-activation.php:74
2405
+ msgid "allow"
2406
+ msgstr ""
2407
+
2408
+ #: templates/partials/network-activation.php:43, templates/partials/network-activation.php:77
2409
+ msgid "delegate"
2410
+ msgstr ""
2411
+
2412
+ #: templates/partials/network-activation.php:47, templates/partials/network-activation.php:81
2413
+ msgid "skip"
2414
+ msgstr ""
2415
+
2416
+ #: templates/plugin-info/description.php:72, templates/plugin-info/screenshots.php:31
2417
+ msgid "Click to view full-size screenshot %d"
2418
+ msgstr ""
2419
+
2420
+ #: templates/plugin-info/features.php:56
2421
+ msgid "Unlimited Updates"
2422
+ msgstr ""
2423
+
2424
+ #: templates/account/partials/activate-license-button.php:46
2425
+ msgid "Localhost"
2426
+ msgstr ""
2427
+
2428
+ #: templates/account/partials/activate-license-button.php:50
2429
+ msgctxt "as 5 licenses left"
2430
+ msgid "%s left"
2431
+ msgstr ""
2432
+
2433
+ #: templates/account/partials/activate-license-button.php:51
2434
+ msgid "Last license"
2435
+ msgstr ""
2436
+
2437
+ #. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
2438
+ #: templates/account/partials/addon.php:29
2439
+ msgid "%1$s will immediately stop all future recurring payments and your %s plan license will expire in %s."
2440
+ msgstr ""
2441
+
2442
+ #: templates/account/partials/addon.php:185
2443
+ msgid "Cancelled"
2444
+ msgstr ""
2445
+
2446
+ #: templates/account/partials/addon.php:195
2447
+ msgid "No expiration"
2448
+ msgstr ""
2449
+
2450
+ #: templates/account/partials/site.php:189
2451
+ msgid "Owner Name"
2452
+ msgstr ""
2453
+
2454
+ #: templates/account/partials/site.php:201
2455
+ msgid "Owner Email"
2456
+ msgstr ""
2457
+
2458
+ #: templates/account/partials/site.php:213
2459
+ msgid "Owner ID"
2460
+ msgstr ""
2461
+
2462
+ #: templates/account/partials/site.php:286
2463
+ msgid "Subscription"
2464
+ msgstr ""
2465
+
2466
+ #: templates/forms/deactivation/contact.php:19
2467
+ msgid "Sorry for the inconvenience and we are here to help if you give us a chance."
2468
+ msgstr ""
2469
+
2470
+ #: templates/forms/deactivation/contact.php:22
2471
+ msgid "Contact Support"
2472
+ msgstr ""
2473
+
2474
+ #: templates/forms/deactivation/form.php:64
2475
+ msgid "Anonymous feedback"
2476
+ msgstr ""
2477
+
2478
+ #: templates/forms/deactivation/form.php:70
2479
+ msgid "Deactivate"
2480
+ msgstr ""
2481
+
2482
+ #: templates/forms/deactivation/form.php:72
2483
+ msgid "Activate %s"
2484
+ msgstr ""
2485
+
2486
+ #: templates/forms/deactivation/form.php:87
2487
+ msgid "Quick Feedback"
2488
+ msgstr ""
2489
+
2490
+ #: templates/forms/deactivation/form.php:91
2491
+ msgid "If you have a moment, please let us know why you are %s"
2492
+ msgstr ""
2493
+
2494
+ #: templates/forms/deactivation/form.php:91
2495
+ msgid "deactivating"
2496
+ msgstr ""
2497
+
2498
+ #: templates/forms/deactivation/form.php:91
2499
+ msgid "switching"
2500
+ msgstr ""
2501
+
2502
+ #: templates/forms/deactivation/form.php:369
2503
+ msgid "Submit & %s"
2504
+ msgstr ""
2505
+
2506
+ #: templates/forms/deactivation/form.php:390
2507
+ msgid "Kindly tell us the reason so we can improve."
2508
+ msgstr ""
2509
+
2510
+ #: templates/forms/deactivation/form.php:515
2511
+ msgid "Yes - %s"
2512
+ msgstr ""
2513
+
2514
+ #: templates/forms/deactivation/form.php:522
2515
+ msgid "Skip & %s"
2516
+ msgstr ""
2517
+
2518
+ #: templates/forms/deactivation/retry-skip.php:21
2519
+ msgid "Click here to use the plugin anonymously"
2520
+ msgstr ""
2521
+
2522
+ #: templates/forms/deactivation/retry-skip.php:23
2523
+ msgid "You might have missed it, but you don't have to share any data and can just %s the opt-in."
2524
+ msgstr ""
freemius/start.php CHANGED
@@ -1,530 +1,530 @@
1
- <?php
2
- /**
3
- * @package Freemius
4
- * @copyright Copyright (c) 2015, Freemius, Inc.
5
- * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6
- * @since 1.0.3
7
- */
8
-
9
- if ( ! defined( 'ABSPATH' ) ) {
10
- exit;
11
- }
12
-
13
- /**
14
- * Freemius SDK Version.
15
- *
16
- * @var string
17
- */
18
- $this_sdk_version = '2.4.1';
19
-
20
- #region SDK Selection Logic --------------------------------------------------------------------
21
-
22
- /**
23
- * Special logic added on 1.1.6 to make sure that every Freemius powered plugin
24
- * will ALWAYS be loaded with the newest SDK from the active Freemius powered plugins.
25
- *
26
- * Since Freemius SDK is backward compatible, this will make sure that all Freemius powered
27
- * plugins will run correctly.
28
- *
29
- * @since 1.1.6
30
- */
31
-
32
- global $fs_active_plugins;
33
-
34
- if ( ! function_exists( 'fs_find_caller_plugin_file' ) ) {
35
- // Require SDK essentials.
36
- require_once dirname( __FILE__ ) . '/includes/fs-essential-functions.php';
37
- }
38
-
39
- /**
40
- * This complex logic fixes symlink issues (e.g. with Vargant). The logic assumes
41
- * that if it's a file from an SDK running in a theme, the location of the SDK
42
- * is in the main theme's folder.
43
- *
44
- * @author Vova Feldman (@svovaf)
45
- * @since 1.2.2.6
46
- */
47
- $file_path = fs_normalize_path( __FILE__ );
48
- $fs_root_path = dirname( $file_path );
49
- /**
50
- * Get the themes directory where the active theme is located (not passing the stylesheet will make WordPress
51
- * assume that the themes directory is inside `wp-content`.
52
- *
53
- * @author Leo Fajardo (@leorw)
54
- * @since 2.2.3
55
- */
56
- $themes_directory = get_theme_root( get_stylesheet() );
57
- $themes_directory_name = basename( $themes_directory );
58
- $theme_candidate_basename = basename( dirname( $fs_root_path ) ) . '/' . basename( $fs_root_path );
59
-
60
- if ( $file_path == fs_normalize_path( realpath( trailingslashit( $themes_directory ) . $theme_candidate_basename . '/' . basename( $file_path ) ) )
61
- ) {
62
- $this_sdk_relative_path = '../' . $themes_directory_name . '/' . $theme_candidate_basename;
63
- $is_theme = true;
64
- } else {
65
- $this_sdk_relative_path = plugin_basename( $fs_root_path );
66
- $is_theme = false;
67
- }
68
-
69
- if ( ! isset( $fs_active_plugins ) ) {
70
- // Load all Freemius powered active plugins.
71
- $fs_active_plugins = get_option( 'fs_active_plugins', new stdClass() );
72
-
73
- if ( ! isset( $fs_active_plugins->plugins ) ) {
74
- $fs_active_plugins->plugins = array();
75
- }
76
- }
77
-
78
- if ( empty( $fs_active_plugins->abspath ) ) {
79
- /**
80
- * Store the WP install absolute path reference to identify environment change
81
- * while replicating the storage.
82
- *
83
- * @author Vova Feldman (@svovaf)
84
- * @since 1.2.1.7
85
- */
86
- $fs_active_plugins->abspath = ABSPATH;
87
- } else {
88
- if ( ABSPATH !== $fs_active_plugins->abspath ) {
89
- /**
90
- * WordPress path has changed, cleanup the SDK references cache.
91
- * This resolves issues triggered when spinning a staging environments
92
- * while replicating the database.
93
- *
94
- * @author Vova Feldman (@svovaf)
95
- * @since 1.2.1.7
96
- */
97
- $fs_active_plugins->abspath = ABSPATH;
98
- $fs_active_plugins->plugins = array();
99
- unset( $fs_active_plugins->newest );
100
- } else {
101
- /**
102
- * Make sure SDK references are still valid. This resolves
103
- * issues when users hard delete modules via FTP.
104
- *
105
- * @author Vova Feldman (@svovaf)
106
- * @since 1.2.1.7
107
- */
108
- $has_changes = false;
109
- foreach ( $fs_active_plugins->plugins as $sdk_path => $data ) {
110
- if ( ! file_exists( ( isset( $data->type ) && 'theme' === $data->type ? $themes_directory : WP_PLUGIN_DIR ) . '/' . $sdk_path ) ) {
111
- unset( $fs_active_plugins->plugins[ $sdk_path ] );
112
-
113
- if (
114
- ! empty( $fs_active_plugins->newest ) &&
115
- $sdk_path === $fs_active_plugins->newest->sdk_path
116
- ) {
117
- unset( $fs_active_plugins->newest );
118
- }
119
-
120
- $has_changes = true;
121
- }
122
- }
123
-
124
- if ( $has_changes ) {
125
- if ( empty( $fs_active_plugins->plugins ) ) {
126
- unset( $fs_active_plugins->newest );
127
- }
128
-
129
- update_option( 'fs_active_plugins', $fs_active_plugins );
130
- }
131
- }
132
- }
133
-
134
- if ( ! function_exists( 'fs_find_direct_caller_plugin_file' ) ) {
135
- require_once dirname( __FILE__ ) . '/includes/supplements/fs-essential-functions-1.1.7.1.php';
136
- }
137
-
138
- if ( ! function_exists( 'fs_get_plugins' ) ) {
139
- require_once dirname( __FILE__ ) . '/includes/supplements/fs-essential-functions-2.2.1.php';
140
- }
141
-
142
- // Update current SDK info based on the SDK path.
143
- if ( ! isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) ||
144
- $this_sdk_version != $fs_active_plugins->plugins[ $this_sdk_relative_path ]->version
145
- ) {
146
- if ( $is_theme ) {
147
- $plugin_path = basename( dirname( $this_sdk_relative_path ) );
148
- } else {
149
- $plugin_path = plugin_basename( fs_find_direct_caller_plugin_file( $file_path ) );
150
- }
151
-
152
- $fs_active_plugins->plugins[ $this_sdk_relative_path ] = (object) array(
153
- 'version' => $this_sdk_version,
154
- 'type' => ( $is_theme ? 'theme' : 'plugin' ),
155
- 'timestamp' => time(),
156
- 'plugin_path' => $plugin_path,
157
- );
158
- }
159
-
160
- $is_current_sdk_newest = isset( $fs_active_plugins->newest ) && ( $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path );
161
-
162
- if ( ! isset( $fs_active_plugins->newest ) ) {
163
- /**
164
- * This will be executed only once, for the first time a Freemius powered plugin is activated.
165
- */
166
- fs_update_sdk_newest_version( $this_sdk_relative_path, $fs_active_plugins->plugins[ $this_sdk_relative_path ]->plugin_path );
167
-
168
- $is_current_sdk_newest = true;
169
- } else if ( version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '<' ) ) {
170
- /**
171
- * Current SDK is newer than the newest stored SDK.
172
- */
173
- fs_update_sdk_newest_version( $this_sdk_relative_path, $fs_active_plugins->plugins[ $this_sdk_relative_path ]->plugin_path );
174
-
175
- if ( class_exists( 'Freemius' ) ) {
176
- // Older SDK version was already loaded.
177
-
178
- if ( ! $fs_active_plugins->newest->in_activation ) {
179
- // Re-order plugins to load this plugin first.
180
- fs_newest_sdk_plugin_first();
181
- }
182
-
183
- // Refresh page.
184
- fs_redirect( $_SERVER['REQUEST_URI'] );
185
- }
186
- } else {
187
- if ( ! function_exists( 'get_plugins' ) ) {
188
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
189
- }
190
-
191
- $fs_newest_sdk = $fs_active_plugins->newest;
192
- $fs_newest_sdk = $fs_active_plugins->plugins[ $fs_newest_sdk->sdk_path ];
193
-
194
- $is_newest_sdk_type_theme = ( isset( $fs_newest_sdk->type ) && 'theme' === $fs_newest_sdk->type );
195
-
196
- if ( ! $is_newest_sdk_type_theme ) {
197
- $is_newest_sdk_plugin_active = is_plugin_active( $fs_newest_sdk->plugin_path );
198
- } else {
199
- $current_theme = wp_get_theme();
200
- $is_newest_sdk_plugin_active = ( $current_theme->stylesheet === $fs_newest_sdk->plugin_path );
201
-
202
- $current_theme_parent = $current_theme->parent();
203
-
204
- /**
205
- * If the current theme is a child of the theme that has the newest SDK, this prevents a redirects loop
206
- * from happening by keeping the SDK info stored in the `fs_active_plugins` option.
207
- */
208
- if ( ! $is_newest_sdk_plugin_active && $current_theme_parent instanceof WP_Theme ) {
209
- $is_newest_sdk_plugin_active = ( $fs_newest_sdk->plugin_path === $current_theme_parent->stylesheet );
210
- }
211
- }
212
-
213
- if ( $is_current_sdk_newest &&
214
- ! $is_newest_sdk_plugin_active &&
215
- ! $fs_active_plugins->newest->in_activation
216
- ) {
217
- // If current SDK is the newest and the plugin is NOT active, it means
218
- // that the current plugin in activation mode.
219
- $fs_active_plugins->newest->in_activation = true;
220
- update_option( 'fs_active_plugins', $fs_active_plugins );
221
- }
222
-
223
- if ( ! $is_theme ) {
224
- $sdk_starter_path = fs_normalize_path( WP_PLUGIN_DIR . '/' . $this_sdk_relative_path . '/start.php' );
225
- } else {
226
- $sdk_starter_path = fs_normalize_path(
227
- $themes_directory
228
- . '/'
229
- . str_replace( "../{$themes_directory_name}/", '', $this_sdk_relative_path )
230
- . '/start.php' );
231
- }
232
-
233
- $is_newest_sdk_path_valid = ( $is_newest_sdk_plugin_active || $fs_active_plugins->newest->in_activation ) && file_exists( $sdk_starter_path );
234
-
235
- if ( ! $is_newest_sdk_path_valid && ! $is_current_sdk_newest ) {
236
- // Plugin with newest SDK is no longer active, or SDK was moved to a different location.
237
- unset( $fs_active_plugins->plugins[ $fs_active_plugins->newest->sdk_path ] );
238
- }
239
-
240
- if ( ! ( $is_newest_sdk_plugin_active || $fs_active_plugins->newest->in_activation ) ||
241
- ! $is_newest_sdk_path_valid ||
242
- // Is newest SDK downgraded.
243
- ( $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path &&
244
- version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '>' ) )
245
- ) {
246
- /**
247
- * Plugin with newest SDK is no longer active.
248
- * OR
249
- * The newest SDK was in the current plugin. BUT, seems like the version of
250
- * the SDK was downgraded to a lower SDK.
251
- */
252
- // Find the active plugin with the newest SDK version and update the newest reference.
253
- fs_fallback_to_newest_active_sdk();
254
- } else {
255
- if ( $is_newest_sdk_plugin_active &&
256
- $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path &&
257
- ( $fs_active_plugins->newest->in_activation ||
258
- ( class_exists( 'Freemius' ) && ( ! defined( 'WP_FS__SDK_VERSION' ) || version_compare( WP_FS__SDK_VERSION, $this_sdk_version, '<' ) ) )
259
- )
260
-
261
- ) {
262
- if ( $fs_active_plugins->newest->in_activation && ! $is_newest_sdk_type_theme ) {
263
- // Plugin no more in activation.
264
- $fs_active_plugins->newest->in_activation = false;
265
- update_option( 'fs_active_plugins', $fs_active_plugins );
266
- }
267
-
268
- // Reorder plugins to load plugin with newest SDK first.
269
- if ( fs_newest_sdk_plugin_first() ) {
270
- // Refresh page after re-order to make sure activated plugin loads newest SDK.
271
- if ( class_exists( 'Freemius' ) ) {
272
- fs_redirect( $_SERVER['REQUEST_URI'] );
273
- }
274
- }
275
- }
276
- }
277
- }
278
-
279
- if ( class_exists( 'Freemius' ) ) {
280
- // SDK was already loaded.
281
- return;
282
- }
283
-
284
- if ( version_compare( $this_sdk_version, $fs_active_plugins->newest->version, '<' ) ) {
285
- $newest_sdk = $fs_active_plugins->plugins[ $fs_active_plugins->newest->sdk_path ];
286
-
287
- $plugins_or_theme_dir_path = ( ! isset( $newest_sdk->type ) || 'theme' !== $newest_sdk->type ) ?
288
- WP_PLUGIN_DIR :
289
- $themes_directory;
290
-
291
- $newest_sdk_starter = fs_normalize_path(
292
- $plugins_or_theme_dir_path
293
- . '/'
294
- . str_replace( "../{$themes_directory_name}/", '', $fs_active_plugins->newest->sdk_path )
295
- . '/start.php' );
296
-
297
- if ( file_exists( $newest_sdk_starter ) ) {
298
- // Reorder plugins to load plugin with newest SDK first.
299
- fs_newest_sdk_plugin_first();
300
-
301
- // There's a newer SDK version, load it instead of the current one!
302
- require_once $newest_sdk_starter;
303
-
304
- return;
305
- }
306
- }
307
-
308
- #endregion SDK Selection Logic --------------------------------------------------------------------
309
-
310
- #region Hooks & Filters Collection --------------------------------------------------------------------
311
-
312
- /**
313
- * Freemius hooks (actions & filters) tags structure:
314
- *
315
- * fs_{filter/action_name}_{plugin_slug}
316
- *
317
- * --------------------------------------------------------
318
- *
319
- * Usage with WordPress' add_action() / add_filter():
320
- *
321
- * add_action('fs_{filter/action_name}_{plugin_slug}', $callable);
322
- *
323
- * --------------------------------------------------------
324
- *
325
- * Usage with Freemius' instance add_action() / add_filter():
326
- *
327
- * // No need to add 'fs_' prefix nor '_{plugin_slug}' suffix.
328
- * my_freemius()->add_action('{action_name}', $callable);
329
- *
330
- * --------------------------------------------------------
331
- *
332
- * Freemius filters collection:
333
- *
334
- * fs_connect_url_{plugin_slug}
335
- * fs_trial_promotion_message_{plugin_slug}
336
- * fs_is_long_term_user_{plugin_slug}
337
- * fs_uninstall_reasons_{plugin_slug}
338
- * fs_is_plugin_update_{plugin_slug}
339
- * fs_api_domains_{plugin_slug}
340
- * fs_email_template_sections_{plugin_slug}
341
- * fs_support_forum_submenu_{plugin_slug}
342
- * fs_support_forum_url_{plugin_slug}
343
- * fs_connect_message_{plugin_slug}
344
- * fs_connect_message_on_update_{plugin_slug}
345
- * fs_uninstall_confirmation_message_{plugin_slug}
346
- * fs_pending_activation_message_{plugin_slug}
347
- * fs_is_submenu_visible_{plugin_slug}
348
- * fs_plugin_icon_{plugin_slug}
349
- * fs_show_trial_{plugin_slug}
350
- *
351
- * --------------------------------------------------------
352
- *
353
- * Freemius actions collection:
354
- *
355
- * fs_after_license_loaded_{plugin_slug}
356
- * fs_after_license_change_{plugin_slug}
357
- * fs_after_plans_sync_{plugin_slug}
358
- *
359
- * fs_after_account_details_{plugin_slug}
360
- * fs_after_account_user_sync_{plugin_slug}
361
- * fs_after_account_plan_sync_{plugin_slug}
362
- * fs_before_account_load_{plugin_slug}
363
- * fs_after_account_connection_{plugin_slug}
364
- * fs_account_property_edit_{plugin_slug}
365
- * fs_account_email_verified_{plugin_slug}
366
- * fs_account_page_load_before_departure_{plugin_slug}
367
- * fs_before_account_delete_{plugin_slug}
368
- * fs_after_account_delete_{plugin_slug}
369
- *
370
- * fs_sdk_version_update_{plugin_slug}
371
- * fs_plugin_version_update_{plugin_slug}
372
- *
373
- * fs_initiated_{plugin_slug}
374
- * fs_after_init_plugin_registered_{plugin_slug}
375
- * fs_after_init_plugin_anonymous_{plugin_slug}
376
- * fs_after_init_plugin_pending_activations_{plugin_slug}
377
- * fs_after_init_addon_registered_{plugin_slug}
378
- * fs_after_init_addon_anonymous_{plugin_slug}
379
- * fs_after_init_addon_pending_activations_{plugin_slug}
380
- *
381
- * fs_after_premium_version_activation_{plugin_slug}
382
- * fs_after_free_version_reactivation_{plugin_slug}
383
- *
384
- * fs_after_uninstall_{plugin_slug}
385
- * fs_before_admin_menu_init_{plugin_slug}
386
- */
387
-
388
- #endregion Hooks & Filters Collection --------------------------------------------------------------------
389
-
390
- if ( ! class_exists( 'Freemius' ) ) {
391
-
392
- if ( ! defined( 'WP_FS__SDK_VERSION' ) ) {
393
- define( 'WP_FS__SDK_VERSION', $this_sdk_version );
394
- }
395
-
396
- $plugins_or_theme_dir_path = fs_normalize_path( trailingslashit( $is_theme ?
397
- $themes_directory :
398
- WP_PLUGIN_DIR ) );
399
-
400
- if ( 0 === strpos( $file_path, $plugins_or_theme_dir_path ) ) {
401
- // No symlinks
402
- } else {
403
- /**
404
- * This logic finds the SDK symlink and set WP_FS__DIR to use it.
405
- *
406
- * @author Vova Feldman (@svovaf)
407
- * @since 1.2.2.5
408
- */
409
- $sdk_symlink = null;
410
-
411
- // Try to load SDK's symlink from cache.
412
- if ( isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
413
- is_object( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
414
- ! empty( $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink )
415
- ) {
416
- $sdk_symlink = $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink;
417
- if ( 0 === strpos( $sdk_symlink, $plugins_or_theme_dir_path ) ) {
418
- /**
419
- * Make the symlink path relative.
420
- *
421
- * @author Leo Fajardo (@leorw)
422
- */
423
- $sdk_symlink = substr( $sdk_symlink, strlen( $plugins_or_theme_dir_path ) );
424
-
425
- $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink = $sdk_symlink;
426
- update_option( 'fs_active_plugins', $fs_active_plugins );
427
- }
428
-
429
- $realpath = realpath( $plugins_or_theme_dir_path . $sdk_symlink );
430
- if ( ! is_string( $realpath ) || ! file_exists( $realpath ) ) {
431
- $sdk_symlink = null;
432
- }
433
- }
434
-
435
- if ( empty( $sdk_symlink ) ) // Has symlinks, therefore, we need to configure WP_FS__DIR based on the symlink.
436
- {
437
- $partial_path_right = basename( $file_path );
438
- $partial_path_left = dirname( $file_path );
439
- $realpath = realpath( $plugins_or_theme_dir_path . $partial_path_right );
440
-
441
- while ( '/' !== $partial_path_left &&
442
- ( false === $realpath || $file_path !== fs_normalize_path( $realpath ) )
443
- ) {
444
- $partial_path_right = trailingslashit( basename( $partial_path_left ) ) . $partial_path_right;
445
- $partial_path_left_prev = $partial_path_left;
446
- $partial_path_left = dirname( $partial_path_left_prev );
447
-
448
- /**
449
- * Avoid infinite loop if for example `$partial_path_left_prev` is `C:/`, in this case,
450
- * `dirname( 'C:/' )` will return `C:/`.
451
- *
452
- * @author Leo Fajardo (@leorw)
453
- */
454
- if ( $partial_path_left === $partial_path_left_prev ) {
455
- $partial_path_left = '';
456
- break;
457
- }
458
-
459
- $realpath = realpath( $plugins_or_theme_dir_path . $partial_path_right );
460
- }
461
-
462
- if ( ! empty( $partial_path_left ) && '/' !== $partial_path_left ) {
463
- $sdk_symlink = fs_normalize_path( dirname( $partial_path_right ) );
464
-
465
- // Cache value.
466
- if ( isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
467
- is_object( $fs_active_plugins->plugins[ $this_sdk_relative_path ] )
468
- ) {
469
- $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink = $sdk_symlink;
470
- update_option( 'fs_active_plugins', $fs_active_plugins );
471
- }
472
- }
473
- }
474
-
475
- if ( ! empty( $sdk_symlink ) ) {
476
- // Set SDK dir to the symlink path.
477
- define( 'WP_FS__DIR', $plugins_or_theme_dir_path . $sdk_symlink );
478
- }
479
- }
480
-
481
- // Load SDK files.
482
- require_once dirname( __FILE__ ) . '/require.php';
483
-
484
- /**
485
- * Quick shortcut to get Freemius for specified plugin.
486
- * Used by various templates.
487
- *
488
- * @param number $module_id
489
- *
490
- * @return Freemius
491
- */
492
- function freemius( $module_id ) {
493
- return Freemius::instance( $module_id );
494
- }
495
-
496
- /**
497
- * @param string $slug
498
- * @param number $plugin_id
499
- * @param string $public_key
500
- * @param bool $is_live Is live or test plugin.
501
- * @param bool $is_premium Hints freemius if running the premium plugin or not.
502
- *
503
- * @return Freemius
504
- *
505
- * @deprecated Please use fs_dynamic_init().
506
- */
507
- function fs_init( $slug, $plugin_id, $public_key, $is_live = true, $is_premium = true ) {
508
- $fs = Freemius::instance( $plugin_id, $slug, true );
509
- $fs->init( $plugin_id, $public_key, $is_live, $is_premium );
510
-
511
- return $fs;
512
- }
513
-
514
- /**
515
- * @param array <string,string> $module Plugin or Theme details.
516
- *
517
- * @return Freemius
518
- * @throws Freemius_Exception
519
- */
520
- function fs_dynamic_init( $module ) {
521
- $fs = Freemius::instance( $module['id'], $module['slug'], true );
522
- $fs->dynamic_init( $module );
523
-
524
- return $fs;
525
- }
526
-
527
- function fs_dump_log() {
528
- FS_Logger::dump();
529
- }
530
  }
1
+ <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6
+ * @since 1.0.3
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
+ /**
14
+ * Freemius SDK Version.
15
+ *
16
+ * @var string
17
+ */
18
+ $this_sdk_version = '2.4.1';
19
+
20
+ #region SDK Selection Logic --------------------------------------------------------------------
21
+
22
+ /**
23
+ * Special logic added on 1.1.6 to make sure that every Freemius powered plugin
24
+ * will ALWAYS be loaded with the newest SDK from the active Freemius powered plugins.
25
+ *
26
+ * Since Freemius SDK is backward compatible, this will make sure that all Freemius powered
27
+ * plugins will run correctly.
28
+ *
29
+ * @since 1.1.6
30
+ */
31
+
32
+ global $fs_active_plugins;
33
+
34
+ if ( ! function_exists( 'fs_find_caller_plugin_file' ) ) {
35
+ // Require SDK essentials.
36
+ require_once dirname( __FILE__ ) . '/includes/fs-essential-functions.php';
37
+ }
38
+
39
+ /**
40
+ * This complex logic fixes symlink issues (e.g. with Vargant). The logic assumes
41
+ * that if it's a file from an SDK running in a theme, the location of the SDK
42
+ * is in the main theme's folder.
43
+ *
44
+ * @author Vova Feldman (@svovaf)
45
+ * @since 1.2.2.6
46
+ */
47
+ $file_path = fs_normalize_path( __FILE__ );
48
+ $fs_root_path = dirname( $file_path );
49
+ /**
50
+ * Get the themes directory where the active theme is located (not passing the stylesheet will make WordPress
51
+ * assume that the themes directory is inside `wp-content`.
52
+ *
53
+ * @author Leo Fajardo (@leorw)
54
+ * @since 2.2.3
55
+ */
56
+ $themes_directory = get_theme_root( get_stylesheet() );
57
+ $themes_directory_name = basename( $themes_directory );
58
+ $theme_candidate_basename = basename( dirname( $fs_root_path ) ) . '/' . basename( $fs_root_path );
59
+
60
+ if ( $file_path == fs_normalize_path( realpath( trailingslashit( $themes_directory ) . $theme_candidate_basename . '/' . basename( $file_path ) ) )
61
+ ) {
62
+ $this_sdk_relative_path = '../' . $themes_directory_name . '/' . $theme_candidate_basename;
63
+ $is_theme = true;
64
+ } else {
65
+ $this_sdk_relative_path = plugin_basename( $fs_root_path );
66
+ $is_theme = false;
67
+ }
68
+
69
+ if ( ! isset( $fs_active_plugins ) ) {
70
+ // Load all Freemius powered active plugins.
71
+ $fs_active_plugins = get_option( 'fs_active_plugins', new stdClass() );
72
+
73
+ if ( ! isset( $fs_active_plugins->plugins ) ) {
74
+ $fs_active_plugins->plugins = array();
75
+ }
76
+ }
77
+
78
+ if ( empty( $fs_active_plugins->abspath ) ) {
79
+ /**
80
+ * Store the WP install absolute path reference to identify environment change
81
+ * while replicating the storage.
82
+ *
83
+ * @author Vova Feldman (@svovaf)
84
+ * @since 1.2.1.7
85
+ */
86
+ $fs_active_plugins->abspath = ABSPATH;
87
+ } else {
88
+ if ( ABSPATH !== $fs_active_plugins->abspath ) {
89
+ /**
90
+ * WordPress path has changed, cleanup the SDK references cache.
91
+ * This resolves issues triggered when spinning a staging environments
92
+ * while replicating the database.
93
+ *
94
+ * @author Vova Feldman (@svovaf)
95
+ * @since 1.2.1.7
96
+ */
97
+ $fs_active_plugins->abspath = ABSPATH;
98
+ $fs_active_plugins->plugins = array();
99
+ unset( $fs_active_plugins->newest );
100
+ } else {
101
+ /**
102
+ * Make sure SDK references are still valid. This resolves
103
+ * issues when users hard delete modules via FTP.
104
+ *
105
+ * @author Vova Feldman (@svovaf)
106
+ * @since 1.2.1.7
107
+ */
108
+ $has_changes = false;
109
+ foreach ( $fs_active_plugins->plugins as $sdk_path => $data ) {
110
+ if ( ! file_exists( ( isset( $data->type ) && 'theme' === $data->type ? $themes_directory : WP_PLUGIN_DIR ) . '/' . $sdk_path ) ) {
111
+ unset( $fs_active_plugins->plugins[ $sdk_path ] );
112
+
113
+ if (
114
+ ! empty( $fs_active_plugins->newest ) &&
115
+ $sdk_path === $fs_active_plugins->newest->sdk_path
116
+ ) {
117
+ unset( $fs_active_plugins->newest );
118
+ }
119
+
120
+ $has_changes = true;
121
+ }
122
+ }
123
+
124
+ if ( $has_changes ) {
125
+ if ( empty( $fs_active_plugins->plugins ) ) {
126
+ unset( $fs_active_plugins->newest );
127
+ }
128
+
129
+ update_option( 'fs_active_plugins', $fs_active_plugins );
130
+ }
131
+ }
132
+ }
133
+
134
+ if ( ! function_exists( 'fs_find_direct_caller_plugin_file' ) ) {
135
+ require_once dirname( __FILE__ ) . '/includes/supplements/fs-essential-functions-1.1.7.1.php';
136
+ }
137
+
138
+ if ( ! function_exists( 'fs_get_plugins' ) ) {
139
+ require_once dirname( __FILE__ ) . '/includes/supplements/fs-essential-functions-2.2.1.php';
140
+ }
141
+
142
+ // Update current SDK info based on the SDK path.
143
+ if ( ! isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) ||
144
+ $this_sdk_version != $fs_active_plugins->plugins[ $this_sdk_relative_path ]->version
145
+ ) {
146
+ if ( $is_theme ) {
147
+ $plugin_path = basename( dirname( $this_sdk_relative_path ) );
148
+ } else {
149
+ $plugin_path = plugin_basename( fs_find_direct_caller_plugin_file( $file_path ) );
150
+ }
151
+
152
+ $fs_active_plugins->plugins[ $this_sdk_relative_path ] = (object) array(
153
+ 'version' => $this_sdk_version,
154
+ 'type' => ( $is_theme ? 'theme' : 'plugin' ),
155
+ 'timestamp' => time(),
156
+ 'plugin_path' => $plugin_path,
157
+ );
158
+ }
159
+
160
+ $is_current_sdk_newest = isset( $fs_active_plugins->newest ) && ( $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path );
161
+
162
+ if ( ! isset( $fs_active_plugins->newest ) ) {
163
+ /**
164
+ * This will be executed only once, for the first time a Freemius powered plugin is activated.
165
+ */
166
+ fs_update_sdk_newest_version( $this_sdk_relative_path, $fs_active_plugins->plugins[ $this_sdk_relative_path ]->plugin_path );
167
+
168
+ $is_current_sdk_newest = true;
169
+ } else if ( version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '<' ) ) {
170
+ /**
171
+ * Current SDK is newer than the newest stored SDK.
172
+ */
173
+ fs_update_sdk_newest_version( $this_sdk_relative_path, $fs_active_plugins->plugins[ $this_sdk_relative_path ]->plugin_path );
174
+
175
+ if ( class_exists( 'Freemius' ) ) {
176
+ // Older SDK version was already loaded.
177
+
178
+ if ( ! $fs_active_plugins->newest->in_activation ) {
179
+ // Re-order plugins to load this plugin first.
180
+ fs_newest_sdk_plugin_first();
181
+ }
182
+
183
+ // Refresh page.
184
+ fs_redirect( $_SERVER['REQUEST_URI'] );
185
+ }
186
+ } else {
187
+ if ( ! function_exists( 'get_plugins' ) ) {
188
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
189
+ }
190
+
191
+ $fs_newest_sdk = $fs_active_plugins->newest;
192
+ $fs_newest_sdk = $fs_active_plugins->plugins[ $fs_newest_sdk->sdk_path ];
193
+
194
+ $is_newest_sdk_type_theme = ( isset( $fs_newest_sdk->type ) && 'theme' === $fs_newest_sdk->type );
195
+
196
+ if ( ! $is_newest_sdk_type_theme ) {
197
+ $is_newest_sdk_plugin_active = is_plugin_active( $fs_newest_sdk->plugin_path );
198
+ } else {
199
+ $current_theme = wp_get_theme();
200
+ $is_newest_sdk_plugin_active = ( $current_theme->stylesheet === $fs_newest_sdk->plugin_path );
201
+
202
+ $current_theme_parent = $current_theme->parent();
203
+
204
+ /**
205
+ * If the current theme is a child of the theme that has the newest SDK, this prevents a redirects loop
206
+ * from happening by keeping the SDK info stored in the `fs_active_plugins` option.
207
+ */
208
+ if ( ! $is_newest_sdk_plugin_active && $current_theme_parent instanceof WP_Theme ) {
209
+ $is_newest_sdk_plugin_active = ( $fs_newest_sdk->plugin_path === $current_theme_parent->stylesheet );
210
+ }
211
+ }
212
+
213
+ if ( $is_current_sdk_newest &&
214
+ ! $is_newest_sdk_plugin_active &&
215
+ ! $fs_active_plugins->newest->in_activation
216
+ ) {
217
+ // If current SDK is the newest and the plugin is NOT active, it means
218
+ // that the current plugin in activation mode.
219
+ $fs_active_plugins->newest->in_activation = true;
220
+ update_option( 'fs_active_plugins', $fs_active_plugins );
221
+ }
222
+
223
+ if ( ! $is_theme ) {
224
+ $sdk_starter_path = fs_normalize_path( WP_PLUGIN_DIR . '/' . $this_sdk_relative_path . '/start.php' );
225
+ } else {
226
+ $sdk_starter_path = fs_normalize_path(
227
+ $themes_directory
228
+ . '/'
229
+ . str_replace( "../{$themes_directory_name}/", '', $this_sdk_relative_path )
230
+ . '/start.php' );
231
+ }
232
+
233
+ $is_newest_sdk_path_valid = ( $is_newest_sdk_plugin_active || $fs_active_plugins->newest->in_activation ) && file_exists( $sdk_starter_path );
234
+
235
+ if ( ! $is_newest_sdk_path_valid && ! $is_current_sdk_newest ) {
236
+ // Plugin with newest SDK is no longer active, or SDK was moved to a different location.
237
+ unset( $fs_active_plugins->plugins[ $fs_active_plugins->newest->sdk_path ] );
238
+ }
239
+
240
+ if ( ! ( $is_newest_sdk_plugin_active || $fs_active_plugins->newest->in_activation ) ||
241
+ ! $is_newest_sdk_path_valid ||
242
+ // Is newest SDK downgraded.
243
+ ( $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path &&
244
+ version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '>' ) )
245
+ ) {
246
+ /**
247
+ * Plugin with newest SDK is no longer active.
248
+ * OR
249
+ * The newest SDK was in the current plugin. BUT, seems like the version of
250
+ * the SDK was downgraded to a lower SDK.
251
+ */
252
+ // Find the active plugin with the newest SDK version and update the newest reference.
253
+ fs_fallback_to_newest_active_sdk();
254
+ } else {
255
+ if ( $is_newest_sdk_plugin_active &&
256
+ $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path &&
257
+ ( $fs_active_plugins->newest->in_activation ||
258
+ ( class_exists( 'Freemius' ) && ( ! defined( 'WP_FS__SDK_VERSION' ) || version_compare( WP_FS__SDK_VERSION, $this_sdk_version, '<' ) ) )
259
+ )
260
+
261
+ ) {
262
+ if ( $fs_active_plugins->newest->in_activation && ! $is_newest_sdk_type_theme ) {
263
+ // Plugin no more in activation.
264
+ $fs_active_plugins->newest->in_activation = false;
265
+ update_option( 'fs_active_plugins', $fs_active_plugins );
266
+ }
267
+
268
+ // Reorder plugins to load plugin with newest SDK first.
269
+ if ( fs_newest_sdk_plugin_first() ) {
270
+ // Refresh page after re-order to make sure activated plugin loads newest SDK.
271
+ if ( class_exists( 'Freemius' ) ) {
272
+ fs_redirect( $_SERVER['REQUEST_URI'] );
273
+ }
274
+ }
275
+ }
276
+ }
277
+ }
278
+
279
+ if ( class_exists( 'Freemius' ) ) {
280
+ // SDK was already loaded.
281
+ return;
282
+ }
283
+
284
+ if ( version_compare( $this_sdk_version, $fs_active_plugins->newest->version, '<' ) ) {
285
+ $newest_sdk = $fs_active_plugins->plugins[ $fs_active_plugins->newest->sdk_path ];
286
+
287
+ $plugins_or_theme_dir_path = ( ! isset( $newest_sdk->type ) || 'theme' !== $newest_sdk->type ) ?
288
+ WP_PLUGIN_DIR :
289
+ $themes_directory;
290
+
291
+ $newest_sdk_starter = fs_normalize_path(
292
+ $plugins_or_theme_dir_path
293
+ . '/'
294
+ . str_replace( "../{$themes_directory_name}/", '', $fs_active_plugins->newest->sdk_path )
295
+ . '/start.php' );
296
+
297
+ if ( file_exists( $newest_sdk_starter ) ) {
298
+ // Reorder plugins to load plugin with newest SDK first.
299
+ fs_newest_sdk_plugin_first();
300
+
301
+ // There's a newer SDK version, load it instead of the current one!
302
+ require_once $newest_sdk_starter;
303
+
304
+ return;
305
+ }
306
+ }
307
+
308
+ #endregion SDK Selection Logic --------------------------------------------------------------------
309
+
310
+ #region Hooks & Filters Collection --------------------------------------------------------------------
311
+
312
+ /**
313
+ * Freemius hooks (actions & filters) tags structure:
314
+ *
315
+ * fs_{filter/action_name}_{plugin_slug}
316
+ *
317
+ * --------------------------------------------------------
318
+ *
319
+ * Usage with WordPress' add_action() / add_filter():
320
+ *
321
+ * add_action('fs_{filter/action_name}_{plugin_slug}', $callable);
322
+ *
323
+ * --------------------------------------------------------
324
+ *
325
+ * Usage with Freemius' instance add_action() / add_filter():
326
+ *
327
+ * // No need to add 'fs_' prefix nor '_{plugin_slug}' suffix.
328
+ * my_freemius()->add_action('{action_name}', $callable);
329
+ *
330
+ * --------------------------------------------------------
331
+ *
332
+ * Freemius filters collection:
333
+ *
334
+ * fs_connect_url_{plugin_slug}
335
+ * fs_trial_promotion_message_{plugin_slug}
336
+ * fs_is_long_term_user_{plugin_slug}
337
+ * fs_uninstall_reasons_{plugin_slug}
338
+ * fs_is_plugin_update_{plugin_slug}
339
+ * fs_api_domains_{plugin_slug}
340
+ * fs_email_template_sections_{plugin_slug}
341
+ * fs_support_forum_submenu_{plugin_slug}
342
+ * fs_support_forum_url_{plugin_slug}
343
+ * fs_connect_message_{plugin_slug}
344
+ * fs_connect_message_on_update_{plugin_slug}
345
+ * fs_uninstall_confirmation_message_{plugin_slug}
346
+ * fs_pending_activation_message_{plugin_slug}
347
+ * fs_is_submenu_visible_{plugin_slug}
348
+ * fs_plugin_icon_{plugin_slug}
349
+ * fs_show_trial_{plugin_slug}
350
+ *
351
+ * --------------------------------------------------------
352
+ *
353
+ * Freemius actions collection:
354
+ *
355
+ * fs_after_license_loaded_{plugin_slug}
356
+ * fs_after_license_change_{plugin_slug}
357
+ * fs_after_plans_sync_{plugin_slug}
358
+ *
359
+ * fs_after_account_details_{plugin_slug}
360
+ * fs_after_account_user_sync_{plugin_slug}
361
+ * fs_after_account_plan_sync_{plugin_slug}
362
+ * fs_before_account_load_{plugin_slug}
363
+ * fs_after_account_connection_{plugin_slug}
364
+ * fs_account_property_edit_{plugin_slug}
365
+ * fs_account_email_verified_{plugin_slug}
366
+ * fs_account_page_load_before_departure_{plugin_slug}
367
+ * fs_before_account_delete_{plugin_slug}
368
+ * fs_after_account_delete_{plugin_slug}
369
+ *
370
+ * fs_sdk_version_update_{plugin_slug}
371
+ * fs_plugin_version_update_{plugin_slug}
372
+ *
373
+ * fs_initiated_{plugin_slug}
374
+ * fs_after_init_plugin_registered_{plugin_slug}
375
+ * fs_after_init_plugin_anonymous_{plugin_slug}
376
+ * fs_after_init_plugin_pending_activations_{plugin_slug}
377
+ * fs_after_init_addon_registered_{plugin_slug}
378
+ * fs_after_init_addon_anonymous_{plugin_slug}
379
+ * fs_after_init_addon_pending_activations_{plugin_slug}
380
+ *
381
+ * fs_after_premium_version_activation_{plugin_slug}
382
+ * fs_after_free_version_reactivation_{plugin_slug}
383
+ *
384
+ * fs_after_uninstall_{plugin_slug}
385
+ * fs_before_admin_menu_init_{plugin_slug}
386
+ */
387
+
388
+ #endregion Hooks & Filters Collection --------------------------------------------------------------------
389
+
390
+ if ( ! class_exists( 'Freemius' ) ) {
391
+
392
+ if ( ! defined( 'WP_FS__SDK_VERSION' ) ) {
393
+ define( 'WP_FS__SDK_VERSION', $this_sdk_version );
394
+ }
395
+
396
+ $plugins_or_theme_dir_path = fs_normalize_path( trailingslashit( $is_theme ?
397
+ $themes_directory :
398
+ WP_PLUGIN_DIR ) );
399
+
400
+ if ( 0 === strpos( $file_path, $plugins_or_theme_dir_path ) ) {
401
+ // No symlinks
402
+ } else {
403
+ /**
404
+ * This logic finds the SDK symlink and set WP_FS__DIR to use it.
405
+ *
406
+ * @author Vova Feldman (@svovaf)
407
+ * @since 1.2.2.5
408
+ */
409
+ $sdk_symlink = null;
410
+
411
+ // Try to load SDK's symlink from cache.
412
+ if ( isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
413
+ is_object( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
414
+ ! empty( $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink )
415
+ ) {
416
+ $sdk_symlink = $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink;
417
+ if ( 0 === strpos( $sdk_symlink, $plugins_or_theme_dir_path ) ) {
418
+ /**
419
+ * Make the symlink path relative.
420
+ *
421
+ * @author Leo Fajardo (@leorw)
422
+ */
423
+ $sdk_symlink = substr( $sdk_symlink, strlen( $plugins_or_theme_dir_path ) );
424
+
425
+ $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink = $sdk_symlink;
426
+ update_option( 'fs_active_plugins', $fs_active_plugins );
427
+ }
428
+
429
+ $realpath = realpath( $plugins_or_theme_dir_path . $sdk_symlink );
430
+ if ( ! is_string( $realpath ) || ! file_exists( $realpath ) ) {
431
+ $sdk_symlink = null;
432
+ }
433
+ }
434
+
435
+ if ( empty( $sdk_symlink ) ) // Has symlinks, therefore, we need to configure WP_FS__DIR based on the symlink.
436
+ {
437
+ $partial_path_right = basename( $file_path );
438
+ $partial_path_left = dirname( $file_path );
439
+ $realpath = realpath( $plugins_or_theme_dir_path . $partial_path_right );
440
+
441
+ while ( '/' !== $partial_path_left &&
442
+ ( false === $realpath || $file_path !== fs_normalize_path( $realpath ) )
443
+ ) {
444
+ $partial_path_right = trailingslashit( basename( $partial_path_left ) ) . $partial_path_right;
445
+ $partial_path_left_prev = $partial_path_left;
446
+ $partial_path_left = dirname( $partial_path_left_prev );
447
+
448
+ /**
449
+ * Avoid infinite loop if for example `$partial_path_left_prev` is `C:/`, in this case,
450
+ * `dirname( 'C:/' )` will return `C:/`.
451
+ *
452
+ * @author Leo Fajardo (@leorw)
453
+ */
454
+ if ( $partial_path_left === $partial_path_left_prev ) {
455
+ $partial_path_left = '';
456
+ break;
457
+ }
458
+
459
+ $realpath = realpath( $plugins_or_theme_dir_path . $partial_path_right );
460
+ }
461
+
462
+ if ( ! empty( $partial_path_left ) && '/' !== $partial_path_left ) {
463
+ $sdk_symlink = fs_normalize_path( dirname( $partial_path_right ) );
464
+
465
+ // Cache value.
466
+ if ( isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
467
+ is_object( $fs_active_plugins->plugins[ $this_sdk_relative_path ] )
468
+ ) {
469
+ $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink = $sdk_symlink;
470
+ update_option( 'fs_active_plugins', $fs_active_plugins );
471
+ }
472
+ }
473
+ }
474
+
475
+ if ( ! empty( $sdk_symlink ) ) {
476
+ // Set SDK dir to the symlink path.
477
+ define( 'WP_FS__DIR', $plugins_or_theme_dir_path . $sdk_symlink );
478
+ }
479
+ }
480
+
481
+ // Load SDK files.
482
+ require_once dirname( __FILE__ ) . '/require.php';
483
+
484
+ /**
485
+ * Quick shortcut to get Freemius for specified plugin.
486
+ * Used by various templates.
487
+ *
488
+ * @param number $module_id
489
+ *
490
+ * @return Freemius
491
+ */
492
+ function freemius( $module_id ) {
493
+ return Freemius::instance( $module_id );
494
+ }
495
+
496
+ /**
497
+ * @param string $slug
498
+ * @param number $plugin_id
499
+ * @param string $public_key
500
+ * @param bool $is_live Is live or test plugin.
501
+ * @param bool $is_premium Hints freemius if running the premium plugin or not.
502
+ *
503
+ * @return Freemius
504
+ *
505
+ * @deprecated Please use fs_dynamic_init().
506
+ */
507
+ function fs_init( $slug, $plugin_id, $public_key, $is_live = true, $is_premium = true ) {
508
+ $fs = Freemius::instance( $plugin_id, $slug, true );
509
+ $fs->init( $plugin_id, $public_key, $is_live, $is_premium );
510
+
511
+ return $fs;
512
+ }
513
+
514
+ /**
515
+ * @param array <string,string> $module Plugin or Theme details.
516
+ *
517
+ * @return Freemius
518
+ * @throws Freemius_Exception
519
+ */
520
+ function fs_dynamic_init( $module ) {
521
+ $fs = Freemius::instance( $module['id'], $module['slug'], true );
522
+ $fs->dynamic_init( $module );
523
+
524
+ return $fs;
525
+ }
526
+
527
+ function fs_dump_log() {
528
+ FS_Logger::dump();
529
+ }
530
  }
freemius/templates/forms/affiliation.php CHANGED
@@ -1,509 +1,509 @@
1
- <?php
2
- /**
3
- * @package Freemius
4
- * @copyright Copyright (c) 2015, Freemius, Inc.
5
- * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6
- * @since 1.2.3
7
- */
8
-
9
- if ( ! defined( 'ABSPATH' ) ) {
10
- exit;
11
- }
12
-
13
- /**
14
- * @var array $VARS
15
- * @var Freemius $fs
16
- */
17
- $fs = freemius( $VARS['id'] );
18
-
19
- $slug = $fs->get_slug();
20
-
21
- $user = $fs->get_user();
22
- $affiliate = $fs->get_affiliate();
23
- $affiliate_terms = $fs->get_affiliate_terms();
24
-
25
- $plugin_title = $fs->get_plugin_title();
26
- $module_type = $fs->is_plugin() ?
27
- WP_FS__MODULE_TYPE_PLUGIN :
28
- WP_FS__MODULE_TYPE_THEME;
29
-
30
- $commission = $affiliate_terms->get_formatted_commission();
31
-
32
- $readonly = false;
33
- $is_affiliate = is_object( $affiliate );
34
- $is_pending_affiliate = false;
35
- $email_address = ( is_object( $user ) ?
36
- $user->email :
37
- '' );
38
- $full_name = ( is_object( $user ) ?
39
- $user->get_name() :
40
- '' );
41
- $paypal_email_address = '';
42
- $domain = '';
43
- $extra_domains = array();
44
- $promotion_method_social_media = false;
45
- $promotion_method_mobile_apps = false;
46
- $statistics_information = false;
47
- $promotion_method_description = false;
48
- $members_dashboard_login_url = 'https://members.freemius.com/login/';
49
-
50
- $affiliate_application_data = $fs->get_affiliate_application_data();
51
-
52
- if ( $is_affiliate && $affiliate->is_pending() ) {
53
- $readonly = 'readonly';
54
- $is_pending_affiliate = true;
55
-
56
- $paypal_email_address = $affiliate->paypal_email;
57
- $domain = $affiliate->domain;
58
- $statistics_information = $affiliate_application_data['stats_description'];
59
- $promotion_method_description = $affiliate_application_data['promotion_method_description'];
60
-
61
- if ( ! empty( $affiliate_application_data['additional_domains'] ) ) {
62
- $extra_domains = $affiliate_application_data['additional_domains'];
63
- }
64
-
65
- if ( ! empty( $affiliate_application_data['promotion_methods'] ) ) {
66
- $promotion_methods = explode( ',', $affiliate_application_data['promotion_methods'] );
67
- $promotion_method_social_media = in_array( 'social_media', $promotion_methods );
68
- $promotion_method_mobile_apps = in_array( 'mobile_apps', $promotion_methods );
69
- }
70
- } else {
71
- $current_user = Freemius::_get_current_wp_user();
72
- $full_name = trim( $current_user->user_firstname . ' ' . $current_user->user_lastname );
73
- $email_address = $current_user->user_email;
74
- $domain = fs_strip_url_protocol( get_site_url() );
75
- }
76
-
77
- $affiliate_tracking = 30;
78
-
79
- if ( is_object( $affiliate_terms ) ) {
80
- $affiliate_tracking = ( ! is_null( $affiliate_terms->cookie_days ) ?
81
- ( $affiliate_terms->cookie_days . '-day' ) :
82
- fs_text_inline( 'Non-expiring', 'non-expiring', $slug ) );
83
- }
84
-
85
- $apply_to_become_affiliate_text = fs_text_inline( 'Apply to become an affiliate', 'apply-to-become-an-affiliate', $slug );
86
-
87
- $module_id = $fs->get_id();
88
- $affiliate_program_terms_url = "https://freemius.com/plugin/{$module_id}/{$slug}/legal/affiliate-program/";
89
- ?>
90
- <div id="fs_affiliation_content_wrapper" class="wrap">
91
- <form method="post" action="">
92
- <div id="poststuff">
93
- <div class="postbox">
94
- <div class="inside">
95
- <div id="messages">
96
- <div id="error_message" class="error" style="display: none">
97
- <p><strong></strong></p>
98
- </div>
99
- <div id="message" class="updated" style="display: none">
100
- <p><strong></strong></p>
101
- </div>
102
- <?php if ( $is_affiliate ) : ?>
103
- <?php if ( $affiliate->is_active() ) : ?>
104
- <div class="updated">
105
- <p><strong><?php
106
- echo sprintf(
107
- fs_esc_html_inline( "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s.", 'affiliate-application-accepted', $slug ),
108
- $plugin_title,
109
- sprintf(
110
- '<a href="%s" target="_blank" rel="noopener">%s</a>',
111
- $members_dashboard_login_url,
112
- $members_dashboard_login_url
113
- )
114
- );
115
- ?></strong></p>
116
- </div>
117
- <?php else : ?>
118
- <?php
119
- $message_text = '';
120
-
121
- if ( $is_pending_affiliate ) {
122
- $message_text = fs_text_inline( "Thank you for applying for our affiliate program, we'll review your details during the next 14 days and will get back to you with further information.", 'affiliate-application-thank-you', $slug );
123
- $message_container_class = 'updated';
124
- } else if ( $affiliate->is_suspended() ) {
125
- $message_text = fs_text_inline( 'Your affiliation account was temporarily suspended.', 'affiliate-account-suspended', $slug );
126
- $message_container_class = 'notice notice-warning';
127
- } else if ( $affiliate->is_rejected() ) {
128
- $message_text = fs_text_inline( "Thank you for applying for our affiliate program, unfortunately, we've decided at this point to reject your application. Please try again in 30 days.", 'affiliate-application-rejected', $slug );
129
- $message_container_class = 'error';
130
- } else if ( $affiliate->is_blocked() ) {
131
- $message_text = fs_text_inline( 'Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support.', 'affiliate-account-blocked', $slug );
132
- $message_container_class = 'error';
133
- }
134
- ?>
135
- <div class="<?php echo $message_container_class ?>">
136
- <p><strong><?php echo esc_html( $message_text ) ?></strong></p>
137
- </div>
138
- <?php endif ?>
139
- <?php endif ?>
140
- </div>
141
- <div class="entry-content">
142
- <?php if ( ! $is_affiliate ) : ?>
143
- <div id="application_messages_container">
144
- <p><?php echo esc_html( sprintf( fs_text_inline( 'Like the %s? Become our ambassador and earn cash ;-)', 'become-an-ambassador', $slug ), $module_type ) ) ?></p>
145
- <p><?php echo esc_html( sprintf( fs_text_inline( 'Refer new customers to our %s and earn %s commission on each successful sale you refer!', 'refer-new-customers', $slug ), $module_type, $commission ) ) ?></p>
146
- </div>
147
- <?php endif ?>
148
- <h3><?php fs_esc_html_echo_inline( 'Program Summary', 'program-summary', $slug ) ?></h3>
149
- <ul>
150
- <li><?php echo esc_html( sprintf( fs_text_inline( '%s commission when a customer purchases a new license.', 'commission-on-new-license-purchase', $slug ), $commission ) ) ?></li>
151
- <?php if ( is_object( $affiliate_terms ) && $affiliate_terms->has_renewals_commission() ) : ?>
152
- <li><?php echo esc_html( sprintf( fs_text_inline( 'Get commission for automated subscription renewals.', 'renewals-commission', $slug ) ) ) ?></li>
153
- <?php endif ?>
154
- <?php if ( is_object( $affiliate_terms ) && ( ! $affiliate_terms->is_session_cookie() ) ) : ?>
155
- <li><?php echo esc_html( sprintf( fs_text_inline( '%s tracking cookie after the first visit to maximize earnings potential.', 'affiliate-tracking', $slug ), $affiliate_tracking ) ) ?></li>
156
- <?php endif ?>
157
- <?php if ( is_object( $affiliate_terms ) && $affiliate_terms->has_lifetime_commission() ) : ?>
158
- <li><?php fs_esc_html_echo_inline( 'Unlimited commissions.', 'unlimited-commissions', $slug ) ?></li>
159
- <?php endif ?>
160
- <li><?php echo esc_html( sprintf( fs_text_inline( '%s minimum payout amount.', 'minimum-payout-amount', $slug ), '$100' ) ) ?></li>
161
- <li><?php fs_esc_html_echo_inline( 'Payouts are in USD and processed monthly via PayPal.', 'payouts-unit-and-processing', $slug ) ?></li>
162
- <li><?php fs_esc_html_echo_inline( 'As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days.', 'commission-payment', $slug ) ?></li>
163
- </ul>
164
- <div id="application_form_container" <?php echo ( $is_pending_affiliate ) ? '' : 'style="display: none"' ?>>
165
- <h3><?php fs_esc_html_echo_inline( 'Affiliate', 'affiliate', $slug ) ?></h3>
166
- <form>
167
- <div class="input-container input-container-text">
168
- <label class="input-label"><?php fs_esc_html_echo_inline( 'Email address', 'email-address', $slug ) ?></label>
169
- <input id="email_address" type="text" value="<?php echo esc_attr( $email_address ) ?>" class="regular-text" <?php echo ( $readonly || is_object( $user ) ) ? 'readonly' : '' ?>>
170
- </div>
171
- <div class="input-container input-container-text">
172
- <label class="input-label"><?php fs_esc_html_echo_inline( 'Full name', 'full-name', $slug ) ?></label>
173
- <input id="full_name" type="text" value="<?php echo esc_attr( $full_name ) ?>" class="regular-text" <?php echo $readonly ?>>
174
- </div>
175
- <div class="input-container input-container-text">
176
- <label class="input-label"><?php fs_esc_html_echo_inline( 'PayPal account email address', 'paypal-account-email-address', $slug ) ?></label>
177
- <input id="paypal_email" type="text" value="<?php echo esc_attr( $paypal_email_address ) ?>" class="regular-text" <?php echo $readonly ?>>
178
- </div>
179
- <div class="input-container input-container-text">
180
- <label class="input-label"><?php echo esc_html( sprintf( fs_text_inline( 'Where are you going to promote the %s?', 'domain-field-label', $slug ), $module_type ) ) ?></label>
181
- <input id="domain" type="text" value="<?php echo esc_attr( $domain ) ?>" class="domain regular-text" <?php echo $readonly ?>>
182
- <p class="description"><?php echo esc_html( sprintf( fs_text_inline( 'Enter the domain of your website or other websites from where you plan to promote the %s.', 'domain-field-desc', $slug ), $module_type ) ) ?></p>
183
- <?php if ( ! $is_affiliate ) : ?>
184
- <a id="add_domain" href="#" class="disabled">+ <?php fs_esc_html_echo_inline( 'Add another domain', 'add-another-domain', $slug ) ?>...</a>
185
- <?php endif ?>
186
- </div>
187
- <div id="extra_domains_container" class="input-container input-container-text" <?php echo $is_pending_affiliate ? '' : 'style="display: none"' ?>>
188
- <label class="input-label"><?php fs_esc_html_echo_inline( 'Extra Domains', 'extra-domain-fields-label', $slug ) ?></label>
189
- <p class="description"><?php fs_esc_html_echo_inline( 'Extra domains where you will be marketing the product from.', 'extra-domain-fields-desc', $slug ) ?></p>
190
- <?php if ( $is_pending_affiliate && ! empty( $extra_domains ) ) : ?>
191
- <?php foreach ( $extra_domains as $extra_domain ) : ?>
192
- <div class="extra-domain-input-container">
193
- <input type="text" value="<?php echo esc_attr( $extra_domain ) ?>" class="domain regular-text" <?php echo $readonly ?>>
194
- </div>
195
- <?php endforeach ?>
196
- <?php endif ?>
197
- </div>
198
- <div class="input-container">
199
- <label class="input-label"><?php fs_esc_html_echo_inline( 'Promotion methods', 'promotion-methods', $slug ) ?></label>
200
- <div>
201
- <input id="promotion_method_social_media" type="checkbox" <?php checked( $promotion_method_social_media ) ?> <?php disabled( $is_affiliate ) ?>/>
202
- <label for="promotion_method_social_media"><?php fs_esc_html_echo_inline( 'Social media (Facebook, Twitter, etc.)', 'social-media', $slug ) ?></label>
203
- </div>
204
- <div>
205
- <input id="promotion_method_mobile_apps" type="checkbox" <?php checked( $promotion_method_mobile_apps ) ?> <?php disabled( $is_affiliate ) ?>/>
206
- <label for="promotion_method_mobile_apps"><?php fs_esc_html_echo_inline( 'Mobile apps', 'mobile-apps', $slug ) ?></label>
207
- </div>
208
- </div>
209
- <div class="input-container input-container-text">
210
- <label class="input-label"><nobr><?php fs_esc_html_echo_inline( 'Website, email, and social media statistics (optional)', 'statistics-information-field-label', $slug ) ?></nobr></label>
211
- <textarea id="statistics_information" rows="5" <?php echo $readonly ?> class="regular-text"><?php echo $statistics_information ?></textarea>
212
- <?php if ( ! $is_affiliate ) : ?>
213
- <p class="description"><?php fs_esc_html_echo_inline( 'Please feel free to provide any relevant website or social media statistics, e.g. monthly unique site visits, number of email subscribers, followers, etc. (we will keep this information confidential).', 'statistics-information-field-desc', $slug ) ?></p>
214
- <?php endif ?>
215
- </div>
216
- <div class="input-container input-container-text">
217
- <label class="input-label"><?php fs_esc_html_echo_inline( 'How will you promote us?', 'promotion-method-desc-field-label', $slug ) ?></label>
218
- <textarea id="promotion_method_description" rows="5" <?php echo $readonly ?> class="regular-text"><?php echo $promotion_method_description ?></textarea>
219
- <?php if ( ! $is_affiliate ) : ?>
220
- <p class="description"><?php echo esc_html( sprintf( fs_text_inline( 'Please provide details on how you intend to promote %s (please be as specific as possible).', 'promotion-method-desc-field-desc', $slug ), $plugin_title ) ) ?></p>
221
- <?php endif ?>
222
- </div>
223
- <?php if ( ! $is_affiliate ) : ?>
224
- <div>
225
- <input type="checkbox" id="legal_consent_checkbox">
226
- <label for="legal_consent_checkbox">I agree to the <a href="<?php echo $affiliate_program_terms_url ?>" target="_blank" rel="noopener">Referrer Program</a>'s terms & conditions.</label>
227
- </div>
228
- <?php endif ?>
229
- </form>
230
- </div>
231
- <?php if ( ! $is_affiliate ) : ?>
232
- <a id="cancel_button" href="#" class="button button-secondary button-cancel" style="display: none"><?php fs_esc_html_echo_inline( 'Cancel', 'cancel', $slug ) ?></a>
233
- <a id="submit_button" class="button button-primary disabled" href="#" style="display: none"><?php echo esc_html( $apply_to_become_affiliate_text ) ?></a>
234
- <a id="apply_button" class="button button-primary" href="#"><?php fs_esc_html_echo_inline( 'Become an affiliate', 'become-an-affiliate', $slug ) ?></a>
235
- <?php endif ?>
236
- </div>
237
- </div>
238
- </div>
239
- </div>
240
- </form>
241
- <script type="text/javascript">
242
- jQuery(function ($) {
243
- var
244
- $contentWrapper = $('#fs_affiliation_content_wrapper'),
245
- $socialMedia = $('#promotion_method_social_media'),
246
- $mobileApps = $('#promotion_method_mobile_apps'),
247
- $applyButton = $('#apply_button'),
248
- $submitButton = $('#submit_button'),
249
- $cancelButton = $('#cancel_button'),
250
- $applicationFormContainer = $('#application_form_container'),
251
- $errorMessageContainer = $('#error_message'),
252
- $domain = $('#domain'),
253
- $addDomain = $('#add_domain'),
254
- $extraDomainsContainer = $('#extra_domains_container'),
255
- $legalConsentCheckbox = $( '#legal_consent_checkbox' );
256
-
257
- $applyButton.click(function (evt) {
258
- evt.preventDefault();
259
-
260
- var $this = $(this);
261
- $this.hide();
262
-
263
- $applicationFormContainer.show();
264
- $cancelButton.show();
265
- $submitButton.show();
266
-
267
- $contentWrapper.find('input[type="text"]:first').focus();
268
- });
269
-
270
- $submitButton.click(function (evt) {
271
- evt.preventDefault();
272
-
273
- var $this = $(this);
274
-
275
- if ($this.hasClass('disabled')) {
276
- return;
277
- }
278
-
279
- $errorMessageContainer.hide();
280
-
281
- var
282
- $emailAddress = $('#email_address'),
283
- emailAddress = null,
284
- paypalEmailAddress = $('#paypal_email').val().trim();
285
-
286
- if (1 === $emailAddress.length) {
287
- emailAddress = $emailAddress.val().trim();
288
-
289
- if (0 === emailAddress.length) {
290
- showErrorMessage('<?php fs_esc_js_echo_inline( 'Email address is required.', 'email-address-is-required', $slug ) ?>');
291
- return;
292
- }
293
- }
294
-
295
- if (0 === paypalEmailAddress.length) {
296
- showErrorMessage('<?php fs_esc_js_echo_inline( 'PayPal email address is required.', 'paypal-email-address-is-required', $slug ) ?>');
297
- return;
298
- }
299
-
300
- var
301
- $extraDomains = $extraDomainsContainer.find('.domain'),
302
- domain = $domain.val().trim().toLowerCase(),
303
- extraDomains = [];
304
-
305
- if (0 === domain.length) {
306
- showErrorMessage('<?php fs_esc_js_echo_inline( 'Domain is required.', 'domain-is-required', $slug ) ?>');
307
- return;
308
- } else if ('freemius.com' === domain) {
309
- showErrorMessage('<?php fs_esc_js_echo_inline( 'Invalid domain', 'invalid-domain', $slug ) ?>' + ' [' + domain + '].');
310
- return;
311
- }
312
-
313
- if ($extraDomains.length > 0) {
314
- var hasError = false;
315
-
316
- $extraDomains.each(function () {
317
- var
318
- $this = $(this),
319
- extraDomain = $this.val().trim().toLowerCase();
320
- if (0 === extraDomain.length || extraDomain === domain) {
321
- return true;
322
- } else if ('freemius.com' === extraDomain) {
323
- showErrorMessage('<?php fs_esc_js_echo_inline( 'Invalid domain', 'invalid-domain', $slug ) ?>' + ' [' + extraDomain + '].');
324
- hasError = true;
325
- return false;
326
- }
327
-
328
- extraDomains.push(extraDomain);
329
- });
330
-
331
- if (hasError) {
332
- return;
333
- }
334
- }
335
-
336
- var
337
- promotionMethods = [],
338
- statisticsInformation = $('#statistics_information').val(),
339
- promotionMethodDescription = $('#promotion_method_description').val();
340
-
341
- if ($socialMedia.attr('checked')) {
342
- promotionMethods.push('social_media');
343
- }
344
-
345
- if ($mobileApps.attr('checked')) {
346
- promotionMethods.push('mobile_apps');
347
- }
348
-
349
- var affiliate = {
350
- full_name : $('#full_name').val().trim(),
351
- paypal_email : paypalEmailAddress,
352
- stats_description : statisticsInformation,
353
- promotion_method_description: promotionMethodDescription
354
- };
355
-
356
- if (null !== emailAddress) {
357
- affiliate.email = emailAddress;
358
- }
359
-
360
- affiliate.domain = domain;
361
- affiliate.additional_domains = extraDomains;
362
-
363
- if (promotionMethods.length > 0) {
364
- affiliate.promotion_methods = promotionMethods.join(',');
365
- }
366
-
367
- $.ajax({
368
- url : ajaxurl,
369
- method : 'POST',
370
- data : {
371
- action : '<?php echo $fs->get_ajax_action( 'submit_affiliate_application' ) ?>',
372
- security : '<?php echo $fs->get_ajax_security( 'submit_affiliate_application' ) ?>',
373
- module_id: '<?php echo $module_id ?>',
374
- affiliate: affiliate
375
- },
376
- beforeSend: function () {
377
- $cancelButton.addClass('disabled');
378
- $submitButton.addClass('disabled');
379
- $submitButton.text('<?php fs_esc_js_echo_inline( 'Submitting', 'submitting' ) ?>...');
380
- },
381
- success : function (result) {
382
- if (result.success) {
383
- location.reload();
384
- } else {
385
- if (result.error && result.error.length > 0) {
386
- showErrorMessage(result.error);
387
- }
388
-
389
- $cancelButton.removeClass('disabled');
390
- $submitButton.removeClass('disabled');
391
- $submitButton.text('<?php echo esc_js( $apply_to_become_affiliate_text ) ?>')
392
- }
393
- }
394
- });
395
- });
396
-
397
- $cancelButton.click(function (evt) {
398
- evt.preventDefault();
399
-
400
- var $this = $(this);
401
-
402
- if ($this.hasClass('disabled')) {
403
- return;
404
- }
405
-
406
- $applicationFormContainer.hide();
407
- $this.hide();
408
- $submitButton.hide();
409
-
410
- $applyButton.show();
411
-
412
- window.scrollTo(0, 0);
413
- });
414
-
415
- $domain.on('input propertychange', onDomainChange);
416
-
417
- $addDomain.click(function (evt) {
418
- evt.preventDefault();
419
-
420
- var
421
- $this = $(this),
422
- domain = $domain.val().trim();
423
-
424
- if ($this.hasClass('disabled') || 0 === domain.length) {
425
- return;
426
- }
427
-
428
- $domain.off('input propertychange');
429
- $this.addClass('disabled');
430
-
431
- var
432
- $extraDomainInputContainer = $('<div class="extra-domain-input-container"><input type="text" class="domain regular-text"/></div>'),
433
- $extraDomainInput = $extraDomainInputContainer.find('input'),
434
- $removeDomain = $('<a href="#" class="remove-domain"><i class="dashicons dashicons-no" title="<?php fs_esc_js_echo_inline( 'Remove', 'remove', $slug ) ?>"></i></a>');
435
-
436
- $extraDomainInputContainer.append($removeDomain);
437
-
438
- $extraDomainInput.on('input propertychange', onDomainChange);
439
-
440
- $removeDomain.click(function (evt) {
441
- evt.preventDefault();
442
-
443
- var
444
- $extraDomainInputs = $('.extra-domain-input-container .domain');
445
-
446
- if (1 === $extraDomainInputs.length)
447
- $extraDomainInputs.val('').focus();
448
- else
449
- $(this).parent().remove();
450
- });
451
-
452
- $extraDomainsContainer.show();
453
-
454
- $extraDomainInputContainer.appendTo($extraDomainsContainer);
455
- $extraDomainInput.focus();
456
-
457
- $this.appendTo($extraDomainsContainer);
458
- });
459
-
460
- /**
461
- * @author Leo Fajardo (@leorw)
462
- */
463
- function onDomainChange() {
464
- var
465
- domain = $(this).val().trim();
466
-
467
- if (domain.length > 0) {
468
- $addDomain.removeClass('disabled');
469
- } else {
470
- $addDomain.addClass('disabled');
471
- }
472
- }
473
-
474
- /**
475
- * @author Leo Fajardo (@leorw)
476
- *
477
- * @param {String} message
478
- */
479
- function showErrorMessage(message) {
480
- $errorMessageContainer.find('strong').text(message);
481
- $errorMessageContainer.show();
482
-
483
- window.scrollTo(0, 0);
484
- }
485
-
486
- /**
487
- * @author Xiaheng Chen (@xhchen)
488
- *
489
- * @since 2.4.0
490
- */
491
- $legalConsentCheckbox.click( function () {
492
- if ( $( this ).prop( 'checked' ) ) {
493
- $submitButton.removeClass( 'disabled' );
494
- } else {
495
- $submitButton.addClass( 'disabled' );
496
- }
497
- } );
498
- });
499
- </script>
500
- </div>
501
- <?php
502
- $params = array(
503
- 'page' => 'affiliation',
504
- 'module_id' => $module_id,
505
- 'module_slug' => $slug,
506
- 'module_version' => $fs->get_plugin_version(),
507
- );
508
- fs_require_template( 'powered-by.php', $params );
509
  ?>
1
+ <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6
+ * @since 1.2.3
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
+ /**
14
+ * @var array $VARS
15
+ * @var Freemius $fs
16
+ */
17
+ $fs = freemius( $VARS['id'] );
18
+
19
+ $slug = $fs->get_slug();
20
+
21
+ $user = $fs->get_user();
22
+ $affiliate = $fs->get_affiliate();
23
+ $affiliate_terms = $fs->get_affiliate_terms();
24
+
25
+ $plugin_title = $fs->get_plugin_title();
26
+ $module_type = $fs->is_plugin() ?
27
+ WP_FS__MODULE_TYPE_PLUGIN :
28
+ WP_FS__MODULE_TYPE_THEME;
29
+
30
+ $commission = $affiliate_terms->get_formatted_commission();
31
+
32
+ $readonly = false;
33
+ $is_affiliate = is_object( $affiliate );
34
+ $is_pending_affiliate = false;
35
+ $email_address = ( is_object( $user ) ?
36
+ $user->email :
37
+ '' );
38
+ $full_name = ( is_object( $user ) ?
39
+ $user->get_name() :
40
+ '' );
41
+ $paypal_email_address = '';
42
+ $domain = '';
43
+ $extra_domains = array();
44
+ $promotion_method_social_media = false;
45
+ $promotion_method_mobile_apps = false;
46
+ $statistics_information = false;
47
+ $promotion_method_description = false;
48
+ $members_dashboard_login_url = 'https://members.freemius.com/login/';
49
+
50
+ $affiliate_application_data = $fs->get_affiliate_application_data();
51
+
52
+ if ( $is_affiliate && $affiliate->is_pending() ) {
53
+ $readonly = 'readonly';
54
+ $is_pending_affiliate = true;
55
+
56
+ $paypal_email_address = $affiliate->paypal_email;
57
+ $domain = $affiliate->domain;
58
+ $statistics_information = $affiliate_application_data['stats_description'];
59
+ $promotion_method_description = $affiliate_application_data['promotion_method_description'];
60
+
61
+ if ( ! empty( $affiliate_application_data['additional_domains'] ) ) {
62
+ $extra_domains = $affiliate_application_data['additional_domains'];
63
+ }
64
+
65
+ if ( ! empty( $affiliate_application_data['promotion_methods'] ) ) {
66
+ $promotion_methods = explode( ',', $affiliate_application_data['promotion_methods'] );
67
+ $promotion_method_social_media = in_array( 'social_media', $promotion_methods );
68
+ $promotion_method_mobile_apps = in_array( 'mobile_apps', $promotion_methods );
69
+ }
70
+ } else {
71
+ $current_user = Freemius::_get_current_wp_user();
72
+ $full_name = trim( $current_user->user_firstname . ' ' . $current_user->user_lastname );
73
+ $email_address = $current_user->user_email;
74
+ $domain = fs_strip_url_protocol( get_site_url() );
75
+ }
76
+
77
+ $affiliate_tracking = 30;
78
+
79
+ if ( is_object( $affiliate_terms ) ) {
80
+ $affiliate_tracking = ( ! is_null( $affiliate_terms->cookie_days ) ?
81
+ ( $affiliate_terms->cookie_days . '-day' ) :
82
+ fs_text_inline( 'Non-expiring', 'non-expiring', $slug ) );
83
+ }
84
+
85
+ $apply_to_become_affiliate_text = fs_text_inline( 'Apply to become an affiliate', 'apply-to-become-an-affiliate', $slug );
86
+
87
+ $module_id = $fs->get_id();
88
+ $affiliate_program_terms_url = "https://freemius.com/plugin/{$module_id}/{$slug}/legal/affiliate-program/";
89
+ ?>
90
+ <div id="fs_affiliation_content_wrapper" class="wrap">
91
+ <form method="post" action="">
92
+ <div id="poststuff">
93
+ <div class="postbox">
94
+ <div class="inside">
95
+ <div id="messages">
96
+ <div id="error_message" class="error" style="display: none">
97
+ <p><strong></strong></p>
98
+ </div>
99
+ <div id="message" class="updated" style="display: none">
100
+ <p><strong></strong></p>
101
+ </div>
102
+ <?php if ( $is_affiliate ) : ?>
103
+ <?php if ( $affiliate->is_active() ) : ?>
104
+ <div class="updated">
105
+ <p><strong><?php
106
+ echo sprintf(
107
+ fs_esc_html_inline( "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s.", 'affiliate-application-accepted', $slug ),
108
+ $plugin_title,
109
+ sprintf(
110
+ '<a href="%s" target="_blank" rel="noopener">%s</a>',
111
+ $members_dashboard_login_url,
112
+ $members_dashboard_login_url
113
+ )
114
+ );
115
+ ?></strong></p>
116
+ </div>
117
+ <?php else : ?>
118
+ <?php
119
+ $message_text = '';
120
+
121
+ if ( $is_pending_affiliate ) {
122
+ $message_text = fs_text_inline( "Thank you for applying for our affiliate program, we'll review your details during the next 14 days and will get back to you with further information.", 'affiliate-application-thank-you', $slug );
123
+ $message_container_class = 'updated';
124
+ } else if ( $affiliate->is_suspended() ) {
125
+ $message_text = fs_text_inline( 'Your affiliation account was temporarily suspended.', 'affiliate-account-suspended', $slug );
126
+ $message_container_class = 'notice notice-warning';
127
+ } else if ( $affiliate->is_rejected() ) {
128
+ $message_text = fs_text_inline( "Thank you for applying for our affiliate program, unfortunately, we've decided at this point to reject your application. Please try again in 30 days.", 'affiliate-application-rejected', $slug );
129
+ $message_container_class = 'error';
130
+ } else if ( $affiliate->is_blocked() ) {
131
+ $message_text = fs_text_inline( 'Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support.', 'affiliate-account-blocked', $slug );
132
+ $message_container_class = 'error';
133
+ }
134
+ ?>
135
+ <div class="<?php echo $message_container_class ?>">
136
+ <p><strong><?php echo esc_html( $message_text ) ?></strong></p>
137
+ </div>
138
+ <?php endif ?>
139
+ <?php endif ?>
140
+ </div>
141
+ <div class="entry-content">
142
+ <?php if ( ! $is_affiliate ) : ?>
143
+ <div id="application_messages_container">
144
+ <p><?php echo esc_html( sprintf( fs_text_inline( 'Like the %s? Become our ambassador and earn cash ;-)', 'become-an-ambassador', $slug ), $module_type ) ) ?></p>
145
+ <p><?php echo esc_html( sprintf( fs_text_inline( 'Refer new customers to our %s and earn %s commission on each successful sale you refer!', 'refer-new-customers', $slug ), $module_type, $commission ) ) ?></p>
146
+ </div>
147
+ <?php endif ?>
148
+ <h3><?php fs_esc_html_echo_inline( 'Program Summary', 'program-summary', $slug ) ?></h3>
149
+ <ul>
150
+ <li><?php echo esc_html( sprintf( fs_text_inline( '%s commission when a customer purchases a new license.', 'commission-on-new-license-purchase', $slug ), $commission ) ) ?></li>
151
+ <?php if ( is_object( $affiliate_terms ) && $affiliate_terms->has_renewals_commission() ) : ?>
152
+ <li><?php echo esc_html( sprintf( fs_text_inline( 'Get commission for automated subscription renewals.', 'renewals-commission', $slug ) ) ) ?></li>
153
+ <?php endif ?>
154
+ <?php if ( is_object( $affiliate_terms ) && ( ! $affiliate_terms->is_session_cookie() ) ) : ?>
155
+ <li><?php echo esc_html( sprintf( fs_text_inline( '%s tracking cookie after the first visit to maximize earnings potential.', 'affiliate-tracking', $slug ), $affiliate_tracking ) ) ?></li>
156
+ <?php endif ?>
157
+ <?php if ( is_object( $affiliate_terms ) && $affiliate_terms->has_lifetime_commission() ) : ?>
158
+ <li><?php fs_esc_html_echo_inline( 'Unlimited commissions.', 'unlimited-commissions', $slug ) ?></li>
159
+ <?php endif ?>
160
+ <li><?php echo esc_html( sprintf( fs_text_inline( '%s minimum payout amount.', 'minimum-payout-amount', $slug ), '$100' ) ) ?></li>
161
+ <li><?php fs_esc_html_echo_inline( 'Payouts are in USD and processed monthly via PayPal.', 'payouts-unit-and-processing', $slug ) ?></li>
162
+ <li><?php fs_esc_html_echo_inline( 'As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days.', 'commission-payment', $slug ) ?></li>
163
+ </ul>
164
+ <div id="application_form_container" <?php echo ( $is_pending_affiliate ) ? '' : 'style="display: none"' ?>>
165
+ <h3><?php fs_esc_html_echo_inline( 'Affiliate', 'affiliate', $slug ) ?></h3>
166
+ <form>
167
+ <div class="input-container input-container-text">
168
+ <label class="input-label"><?php fs_esc_html_echo_inline( 'Email address', 'email-address', $slug ) ?></label>
169
+ <input id="email_address" type="text" value="<?php echo esc_attr( $email_address ) ?>" class="regular-text" <?php echo ( $readonly || is_object( $user ) ) ? 'readonly' : '' ?>>
170
+ </div>
171
+ <div class="input-container input-container-text">
172
+ <label class="input-label"><?php fs_esc_html_echo_inline( 'Full name', 'full-name', $slug ) ?></label>
173
+ <input id="full_name" type="text" value="<?php echo esc_attr( $full_name ) ?>" class="regular-text" <?php echo $readonly ?>>
174
+ </div>
175
+ <div class="input-container input-container-text">
176
+ <label class="input-label"><?php fs_esc_html_echo_inline( 'PayPal account email address', 'paypal-account-email-address', $slug ) ?></label>
177
+ <input id="paypal_email" type="text" value="<?php echo esc_attr( $paypal_email_address ) ?>" class="regular-text" <?php echo $readonly ?>>
178
+ </div>
179
+ <div class="input-container input-container-text">
180
+ <label class="input-label"><?php echo esc_html( sprintf( fs_text_inline( 'Where are you going to promote the %s?', 'domain-field-label', $slug ), $module_type ) ) ?></label>
181
+ <input id="domain" type="text" value="<?php echo esc_attr( $domain ) ?>" class="domain regular-text" <?php echo $readonly ?>>
182
+ <p class="description"><?php echo esc_html( sprintf( fs_text_inline( 'Enter the domain of your website or other websites from where you plan to promote the %s.', 'domain-field-desc', $slug ), $module_type ) ) ?></p>
183
+ <?php if ( ! $is_affiliate ) : ?>
184
+ <a id="add_domain" href="#" class="disabled">+ <?php fs_esc_html_echo_inline( 'Add another domain', 'add-another-domain', $slug ) ?>...</a>
185
+ <?php endif ?>
186
+ </div>
187
+ <div id="extra_domains_container" class="input-container input-container-text" <?php echo $is_pending_affiliate ? '' : 'style="display: none"' ?>>
188
+ <label class="input-label"><?php fs_esc_html_echo_inline( 'Extra Domains', 'extra-domain-fields-label', $slug ) ?></label>
189
+ <p class="description"><?php fs_esc_html_echo_inline( 'Extra domains where you will be marketing the product from.', 'extra-domain-fields-desc', $slug ) ?></p>
190
+ <?php if ( $is_pending_affiliate && ! empty( $extra_domains ) ) : ?>
191
+ <?php foreach ( $extra_domains as $extra_domain ) : ?>
192
+ <div class="extra-domain-input-container">
193
+ <input type="text" value="<?php echo esc_attr( $extra_domain ) ?>" class="domain regular-text" <?php echo $readonly ?>>
194
+ </div>
195
+ <?php endforeach ?>
196
+ <?php endif ?>
197
+ </div>
198
+ <div class="input-container">
199
+ <label class="input-label"><?php fs_esc_html_echo_inline( 'Promotion methods', 'promotion-methods', $slug ) ?></label>
200
+ <div>
201
+ <input id="promotion_method_social_media" type="checkbox" <?php checked( $promotion_method_social_media ) ?> <?php disabled( $is_affiliate ) ?>/>
202
+ <label for="promotion_method_social_media"><?php fs_esc_html_echo_inline( 'Social media (Facebook, Twitter, etc.)', 'social-media', $slug ) ?></label>
203
+ </div>
204
+ <div>
205
+ <input id="promotion_method_mobile_apps" type="checkbox" <?php checked( $promotion_method_mobile_apps ) ?> <?php disabled( $is_affiliate ) ?>/>
206
+ <label for="promotion_method_mobile_apps"><?php fs_esc_html_echo_inline( 'Mobile apps', 'mobile-apps', $slug ) ?></label>
207
+ </div>
208
+ </div>
209
+ <div class="input-container input-container-text">
210
+ <label class="input-label"><nobr><?php fs_esc_html_echo_inline( 'Website, email, and social media statistics (optional)', 'statistics-information-field-label', $slug ) ?></nobr></label>
211
+ <textarea id="statistics_information" rows="5" <?php echo $readonly ?> class="regular-text"><?php echo $statistics_information ?></textarea>
212
+ <?php if ( ! $is_affiliate ) : ?>
213
+ <p class="description"><?php fs_esc_html_echo_inline( 'Please feel free to provide any relevant website or social media statistics, e.g. monthly unique site visits, number of email subscribers, followers, etc. (we will keep this information confidential).', 'statistics-information-field-desc', $slug ) ?></p>
214
+ <?php endif ?>
215
+ </div>
216
+ <div class="input-container input-container-text">
217
+ <label class="input-label"><?php fs_esc_html_echo_inline( 'How will you promote us?', 'promotion-method-desc-field-label', $slug ) ?></label>
218
+ <textarea id="promotion_method_description" rows="5" <?php echo $readonly ?> class="regular-text"><?php echo $promotion_method_description ?></textarea>
219
+ <?php if ( ! $is_affiliate ) : ?>
220
+ <p class="description"><?php echo esc_html( sprintf( fs_text_inline( 'Please provide details on how you intend to promote %s (please be as specific as possible).', 'promotion-method-desc-field-desc', $slug ), $plugin_title ) ) ?></p>
221
+ <?php endif ?>
222
+ </div>
223
+ <?php if ( ! $is_affiliate ) : ?>
224
+ <div>
225
+ <input type="checkbox" id="legal_consent_checkbox">
226
+ <label for="legal_consent_checkbox">I agree to the <a href="<?php echo $affiliate_program_terms_url ?>" target="_blank" rel="noopener">Referrer Program</a>'s terms & conditions.</label>
227
+ </div>
228
+ <?php endif ?>
229
+ </form>
230
+ </div>
231
+ <?php if ( ! $is_affiliate ) : ?>
232
+ <a id="cancel_button" href="#" class="button button-secondary button-cancel" style="display: none"><?php fs_esc_html_echo_inline( 'Cancel', 'cancel', $slug ) ?></a>
233
+ <a id="submit_button" class="button button-primary disabled" href="#" style="display: none"><?php echo esc_html( $apply_to_become_affiliate_text ) ?></a>
234
+ <a id="apply_button" class="button button-primary" href="#"><?php fs_esc_html_echo_inline( 'Become an affiliate', 'become-an-affiliate', $slug ) ?></a>
235
+ <?php endif ?>
236
+ </div>
237
+ </div>
238
+ </div>
239
+ </div>
240
+ </form>
241
+ <script type="text/javascript">
242
+ jQuery(function ($) {
243
+ var
244
+ $contentWrapper = $('#fs_affiliation_content_wrapper'),
245
+ $socialMedia = $('#promotion_method_social_media'),
246
+ $mobileApps = $('#promotion_method_mobile_apps'),
247
+ $applyButton = $('#apply_button'),
248
+ $submitButton = $('#submit_button'),
249
+ $cancelButton = $('#cancel_button'),
250
+ $applicationFormContainer = $('#application_form_container'),
251
+ $errorMessageContainer = $('#error_message'),
252
+ $domain = $('#domain'),
253
+ $addDomain = $('#add_domain'),
254
+ $extraDomainsContainer = $('#extra_domains_container'),
255
+ $legalConsentCheckbox = $( '#legal_consent_checkbox' );
256
+
257
+ $applyButton.click(function (evt) {
258
+ evt.preventDefault();
259
+
260
+ var $this = $(this);
261
+ $this.hide();
262
+
263
+ $applicationFormContainer.show();
264
+ $cancelButton.show();
265
+ $submitButton.show();
266
+
267
+ $contentWrapper.find('input[type="text"]:first').focus();
268
+ });
269
+
270
+ $submitButton.click(function (evt) {
271
+ evt.preventDefault();
272
+
273
+ var $this = $(this);
274
+
275
+ if ($this.hasClass('disabled')) {
276
+ return;
277
+ }
278
+
279
+ $errorMessageContainer.hide();
280
+
281
+ var
282
+ $emailAddress = $('#email_address'),
283
+ emailAddress = null,
284
+ paypalEmailAddress = $('#paypal_email').val().trim();
285
+
286
+ if (1 === $emailAddress.length) {
287
+ emailAddress = $emailAddress.val().trim();
288
+
289
+ if (0 === emailAddress.length) {
290
+ showErrorMessage('<?php fs_esc_js_echo_inline( 'Email address is required.', 'email-address-is-required', $slug ) ?>');
291
+ return;
292
+ }
293
+ }
294
+
295
+ if (0 === paypalEmailAddress.length) {
296
+ showErrorMessage('<?php fs_esc_js_echo_inline( 'PayPal email address is required.', 'paypal-email-address-is-required', $slug ) ?>');
297
+ return;
298
+ }
299
+
300
+ var
301
+ $extraDomains = $extraDomainsContainer.find('.domain'),
302
+ domain = $domain.val().trim().toLowerCase(),
303
+ extraDomains = [];
304
+
305
+ if (0 === domain.length) {
306
+ showErrorMessage('<?php fs_esc_js_echo_inline( 'Domain is required.', 'domain-is-required', $slug ) ?>');
307
+ return;
308
+ } else if ('freemius.com' === domain) {
309
+ showErrorMessage('<?php fs_esc_js_echo_inline( 'Invalid domain', 'invalid-domain', $slug ) ?>' + ' [' + domain + '].');
310
+ return;
311
+ }
312
+
313
+ if ($extraDomains.length > 0) {
314
+ var hasError = false;
315
+
316
+ $extraDomains.each(function () {
317
+ var
318
+ $this = $(this),
319
+ extraDomain = $this.val().trim().toLowerCase();
320
+ if (0 === extraDomain.length || extraDomain === domain) {
321
+ return true;
322
+ } else if ('freemius.com' === extraDomain) {
323
+ showErrorMessage('<?php fs_esc_js_echo_inline( 'Invalid domain', 'invalid-domain', $slug ) ?>' + ' [' + extraDomain + '].');
324
+ hasError = true;
325
+ return false;
326
+ }
327
+
328
+ extraDomains.push(extraDomain);
329
+ });
330
+
331
+ if (hasError) {
332
+ return;
333
+ }
334
+ }
335
+
336
+ var
337
+ promotionMethods = [],
338
+ statisticsInformation = $('#statistics_information').val(),
339
+ promotionMethodDescription = $('#promotion_method_description').val();
340
+
341
+ if ($socialMedia.attr('checked')) {
342
+ promotionMethods.push('social_media');
343
+ }
344
+
345
+ if ($mobileApps.attr('checked')) {
346
+ promotionMethods.push('mobile_apps');
347
+ }
348
+
349
+ var affiliate = {
350
+ full_name : $('#full_name').val().trim(),
351
+ paypal_email : paypalEmailAddress,
352
+ stats_description : statisticsInformation,
353
+ promotion_method_description: promotionMethodDescription
354
+ };
355
+
356
+ if (null !== emailAddress) {
357
+ affiliate.email = emailAddress;
358
+ }
359
+
360
+ affiliate.domain = domain;
361
+ affiliate.additional_domains = extraDomains;
362
+
363
+ if (promotionMethods.length > 0) {
364
+ affiliate.promotion_methods = promotionMethods.join(',');
365
+ }
366
+
367
+ $.ajax({
368
+ url : ajaxurl,
369
+ method : 'POST',
370
+ data : {
371
+ action : '<?php echo $fs->get_ajax_action( 'submit_affiliate_application' ) ?>',
372
+ security : '<?php echo $fs->get_ajax_security( 'submit_affiliate_application' ) ?>',
373
+ module_id: '<?php echo $module_id ?>',
374
+ affiliate: affiliate
375
+ },
376
+ beforeSend: function () {
377
+ $cancelButton.addClass('disabled');
378
+ $submitButton.addClass('disabled');
379
+ $submitButton.text('<?php fs_esc_js_echo_inline( 'Submitting', 'submitting' ) ?>...');
380
+ },
381
+ success : function (result) {
382
+ if (result.success) {
383
+ location.reload();
384
+ } else {
385
+ if (result.error && result.error.length > 0) {
386
+ showErrorMessage(result.error);
387
+ }
388
+
389
+ $cancelButton.removeClass('disabled');
390
+ $submitButton.removeClass('disabled');
391
+ $submitButton.text('<?php echo esc_js( $apply_to_become_affiliate_text ) ?>')
392
+ }
393
+ }
394
+ });
395
+ });
396
+
397
+ $cancelButton.click(function (evt) {
398
+ evt.preventDefault();
399
+
400
+ var $this = $(this);
401
+
402
+ if ($this.hasClass('disabled')) {
403
+ return;
404
+ }
405
+
406
+ $applicationFormContainer.hide();
407
+ $this.hide();
408
+ $submitButton.hide();
409
+
410
+ $applyButton.show();
411
+
412
+ window.scrollTo(0, 0);
413
+ });
414
+
415
+ $domain.on('input propertychange', onDomainChange);
416
+
417
+ $addDomain.click(function (evt) {
418
+ evt.preventDefault();
419
+
420
+ var
421
+ $this = $(this),
422
+ domain = $domain.val().trim();
423
+
424
+ if ($this.hasClass('disabled') || 0 === domain.length) {
425
+ return;
426
+ }
427
+
428
+ $domain.off('input propertychange');
429
+ $this.addClass('disabled');
430
+
431
+ var
432
+ $extraDomainInputContainer = $('<div class="extra-domain-input-container"><input type="text" class="domain regular-text"/></div>'),
433
+ $extraDomainInput = $extraDomainInputContainer.find('input'),
434
+ $removeDomain = $('<a href="#" class="remove-domain"><i class="dashicons dashicons-no" title="<?php fs_esc_js_echo_inline( 'Remove', 'remove', $slug ) ?>"></i></a>');
435
+
436
+ $extraDomainInputContainer.append($removeDomain);
437
+
438
+ $extraDomainInput.on('input propertychange', onDomainChange);
439
+
440
+ $removeDomain.click(function (evt) {
441
+ evt.preventDefault();
442
+
443
+ var
444
+ $extraDomainInputs = $('.extra-domain-input-container .domain');
445
+
446
+ if (1 === $extraDomainInputs.length)
447
+ $extraDomainInputs.val('').focus();
448
+ else
449
+ $(this).parent().remove();
450
+ });
451
+
452
+ $extraDomainsContainer.show();
453
+
454
+ $extraDomainInputContainer.appendTo($extraDomainsContainer);
455
+ $extraDomainInput.focus();
456
+
457
+ $this.appendTo($extraDomainsContainer);
458
+ });
459
+
460
+ /**
461
+ * @author Leo Fajardo (@leorw)
462
+ */
463
+ function onDomainChange() {
464
+ var
465
+ domain = $(this).val().trim();
466
+
467
+ if (domain.length > 0) {
468
+ $addDomain.removeClass('disabled');
469
+ } else {
470
+ $addDomain.addClass('disabled');
471
+ }
472
+ }
473
+
474
+ /**
475
+ * @author Leo Fajardo (@leorw)
476
+ *
477
+ * @param {String} message
478
+ */
479
+ function showErrorMessage(message) {
480
+ $errorMessageContainer.find('strong').text(message);
481
+ $errorMessageContainer.show();
482
+
483
+ window.scrollTo(0, 0);
484
+ }
485
+
486
+ /**
487
+ * @author Xiaheng Chen (@xhchen)
488
+ *
489
+ * @since 2.4.0
490
+ */
491
+ $legalConsentCheckbox.click( function () {
492
+ if ( $( this ).prop( 'checked' ) ) {
493
+ $submitButton.removeClass( 'disabled' );
494
+ } else {
495
+ $submitButton.addClass( 'disabled' );
496
+ }
497
+ } );
498
+ });
499
+ </script>
500
+ </div>
501
+ <?php
502
+ $params = array(
503
+ 'page' => 'affiliation',
504
+ 'module_id' => $module_id,
505
+ 'module_slug' => $slug,
506
+ 'module_version' => $fs->get_plugin_version(),
507
+ );
508
+ fs_require_template( 'powered-by.php', $params );
509
  ?>
includes/WPThumb/wpthumb.php CHANGED
@@ -570,7 +570,7 @@ class WP_Thumb {
570
  $path = $this->getCacheFilePath();
571
  }
572
 
573
- if ( $this->args['return'] == 'path' )
574
  return $path;
575
 
576
  return $path ? $this->getFileURLForFilePath( $path ) : $path;
570
  $path = $this->getCacheFilePath();
571
  }
572
 
573
+ if ( isset( $this->args ) && $this->args['return'] == 'path' )
574
  return $path;
575
 
576
  return $path ? $this->getFileURLForFilePath( $path ) : $path;
includes/admin/class-admin.php CHANGED
@@ -43,6 +43,9 @@ if ( ! class_exists( 'FooGallery_Admin' ) ) {
43
  //output shortcode for javascript
44
  add_action( 'admin_footer', array( $this, 'output_shortcode_variable' ), 200 );
45
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts_and_styles' ) );
 
 
 
46
  }
47
 
48
  public function enqueue_scripts_and_styles( $hook ) {
@@ -70,7 +73,7 @@ if ( ! class_exists( 'FooGallery_Admin' ) ) {
70
  /**
71
  * @param $links
72
  *
73
- * @return string
74
  */
75
  function plugin_listing_links( $links ) {
76
  if ( !is_array( $links ) ) {
@@ -94,5 +97,22 @@ if ( ! class_exists( 'FooGallery_Admin' ) ) {
94
  <?php
95
  }
96
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  }
98
  }
43
  //output shortcode for javascript
44
  add_action( 'admin_footer', array( $this, 'output_shortcode_variable' ), 200 );
45
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts_and_styles' ) );
46
+
47
+ add_filter( 'fs_show_trial_foogallery', array( $this, 'force_trial_hide' ) );
48
+ add_action( 'admin_init', array( $this, 'force_hide_trial_notice' ), 99 );
49
  }
50
 
51
  public function enqueue_scripts_and_styles( $hook ) {
73
  /**
74
  * @param $links
75
  *
76
+ * @return string[]
77
  */
78
  function plugin_listing_links( $links ) {
79
  if ( !is_array( $links ) ) {
97
  <?php
98
  }
99
  }
100
+
101
+ function force_trial_hide( $show_trial ) {
102
+ if ( 'on' === foogallery_get_setting( 'force_hide_trial', false ) ) {
103
+ $show_trial = false;
104
+ }
105
+
106
+ return $show_trial;
107
+ }
108
+
109
+ function force_hide_trial_notice() {
110
+ if ( 'on' === foogallery_get_setting( 'force_hide_trial', false ) ) {
111
+ $freemius_sdk = foogallery_fs();
112
+ $plugin_id = $freemius_sdk->get_slug();
113
+ $admin_notice_manager = FS_Admin_Notice_Manager::instance( $plugin_id );
114
+ $admin_notice_manager->remove_sticky( 'trial_promotion' );
115
+ }
116
+ }
117
  }
118
  }
includes/admin/class-columns.php CHANGED
@@ -90,7 +90,7 @@ if ( ! class_exists( 'FooGallery_Admin_Columns' ) ) {
90
  if ( $this->include_clipboard_script ) { ?>
91
  <script>
92
  jQuery(function($) {
93
- $('.foogallery-shortcode').click( function () {
94
  try {
95
  //select the contents
96
  this.select();
90
  if ( $this->include_clipboard_script ) { ?>
91
  <script>
92
  jQuery(function($) {
93
+ $('.foogallery-shortcode').on('click', function () {
94
  try {
95
  //select the contents
96
  this.select();
includes/admin/class-gallery-editor.php CHANGED
@@ -45,6 +45,9 @@ if ( ! class_exists( 'FooGallery_Admin_Gallery_Editor' ) ) {
45
  add_action( 'admin_footer', array( $this, 'render_gallery_modal' ) );
46
  add_action( 'wp_footer', array( $this, 'render_gallery_modal' ) );
47
 
 
 
 
48
  $foogallery = FooGallery_Plugin::get_instance();
49
  $foogallery->register_and_enqueue_js( 'admin-foogallery-editor.js' );
50
 
@@ -141,102 +144,6 @@ if ( ! class_exists( 'FooGallery_Admin_Gallery_Editor' ) ) {
141
  margin-left: 5px;
142
  }
143
 
144
- .foogallery-pile {
145
- position: relative;
146
- z-index: 10;
147
- float: left;
148
- margin: 10px 20px 30px 20px !important;
149
- }
150
-
151
- .foogallery-pile .foogallery-gallery-select {
152
- max-width: 100%;
153
- vertical-align: bottom;
154
- border: 8px solid #fff;
155
- -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
156
- -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
157
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
158
- overflow: hidden;
159
- width: 200px;
160
- height: 200px;
161
- cursor: pointer;
162
- background-position: center center;
163
- background-size: cover !important;
164
- }
165
-
166
- /* Stacks creted by the use of generated content */
167
- .foogallery-pile:before, .foogallery-pile:after {
168
- content: "";
169
- width: 100%;
170
- height: 100%;
171
- position: absolute;
172
- border: 8px solid #fff;
173
- left: 0;
174
- -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
175
- -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
176
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
177
- -webkit-box-sizing: border-box;
178
- -moz-box-sizing: border-box;
179
- box-sizing: border-box;
180
- }
181
- /* 1st element in stack (behind image) */
182
- .foogallery-pile:before {
183
- top: -3px; z-index: -10;
184
- -webkit-transform: rotate(2deg);
185
- -moz-transform: rotate(2deg);
186
- transform: rotate(2deg);
187
- }
188
- /* 2nd element in stack (behind image) */
189
- .foogallery-pile:after {
190
- top: -2px; z-index: -20;
191
- -webkit-transform: rotate(-2deg);
192
- -moz-transform: rotate(-2deg);
193
- transform: rotate(-2deg);
194
- }
195
-
196
- .foogallery-gallery-select.selected {
197
- border-color: #1E8CBE;
198
- }
199
-
200
- .foogallery-gallery-select.selected::before {
201
- content: "\f147";
202
- display: inline-block;
203
- font: normal 100px/110px 'dashicons';
204
- position: absolute;
205
- color: #FFF;
206
- top: 40%;
207
- left: 50%;
208
- margin-left: -50px;
209
- margin-top: -50px;
210
- speak: none;
211
- -webkit-font-smoothing: antialiased;
212
- background: #1E8CBE;
213
- border-radius: 50%;
214
- width: 100px;
215
- height: 100px;
216
- z-index: 4;
217
- }
218
-
219
- .foogallery-gallery-select-inner {
220
- opacity: 0.8;
221
- position: absolute;
222
- bottom: 8px;
223
- left:8px;
224
- right:8px;
225
- padding: 5px;
226
- background: #FFF;
227
- text-align: center;
228
- }
229
-
230
- .foogallery-gallery-select-inner h3 {
231
- display: block;
232
- margin: 0;
233
- }
234
-
235
- .foogallery-gallery-select-inner span {
236
- display: block;
237
- font-size: 0.9em;
238
- }
239
-
240
  .foogallery-add-gallery {
241
  background: #444;
242
  }
@@ -357,23 +264,23 @@ if ( ! class_exists( 'FooGallery_Admin_Gallery_Editor' ) ) {
357
  'force_use_original_thumb' => true
358
  ) );
359
  $images = $gallery->image_count();
 
 
 
360
  ?>
361
- <li class="foogallery-pile">
362
- <div class="foogallery-gallery-select" data-foogallery-id="<?php echo $gallery->ID; ?>" style="background: url('<?php echo $img_src; ?>') no-repeat">
363
- <div class="foogallery-gallery-select-inner" >
364
- <?php
365
-
366
- $title = empty( $gallery->name ) ?
367
- sprintf( __( '%s #%s', 'foogallery' ), foogallery_plugin_name(), $gallery->ID ) :
368
- $gallery->name;
369
-
370
- ?>
371
- <h3><?php echo $title; ?></h3>
372
- <span><?php echo $images; ?></span>
373
- <code>[<?php echo foogallery_gallery_shortcode_tag(); ?> id="<?php echo $gallery->ID; ?>"]</code>
374
- </div>
375
- </div>
376
- </li>
377
  <?php } ?>
378
  <li class="foogallery-pile">
379
  <div class="foogallery-gallery-select foogallery-add-gallery">
45
  add_action( 'admin_footer', array( $this, 'render_gallery_modal' ) );
46
  add_action( 'wp_footer', array( $this, 'render_gallery_modal' ) );
47
 
48
+ $url = FOOGALLERY_URL . 'css/admin-foogallery-gallery-piles.css';
49
+ wp_enqueue_style( 'admin-foogallery-gallery-piles', $url, array(), FOOGALLERY_VERSION );
50
+
51
  $foogallery = FooGallery_Plugin::get_instance();
52
  $foogallery->register_and_enqueue_js( 'admin-foogallery-editor.js' );
53
 
144
  margin-left: 5px;
145
  }
146
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  .foogallery-add-gallery {
148
  background: #444;
149
  }
264
  'force_use_original_thumb' => true
265
  ) );
266
  $images = $gallery->image_count();
267
+ $title = empty( $gallery->name ) ?
268
+ sprintf( __( '%s #%s', 'foogallery' ), foogallery_plugin_name(), $gallery->ID ) :
269
+ $gallery->name;
270
  ?>
271
+ <li class="foogallery-pile">
272
+ <div class="foogallery-gallery-select" data-foogallery-id="<?php echo $gallery->ID; ?>">
273
+ <div style="display: table;">
274
+ <div style="display: table-cell; vertical-align: middle; text-align: center;">
275
+ <img src="<?php echo $img_src; ?>"/>
276
+ <h3>
277
+ <?php echo esc_html( $title ); ?>
278
+ <span><?php echo $images; ?></span>
279
+ </h3>
280
+ </div>
281
+ </div>
282
+ </div>
283
+ </li>
 
 
 
284
  <?php } ?>
285
  <li class="foogallery-pile">
286
  <div class="foogallery-gallery-select foogallery-add-gallery">
includes/admin/class-settings.php CHANGED
@@ -302,9 +302,10 @@ if ( ! class_exists( 'FooGallery_Admin_Settings' ) ) {
302
  $settings[] = array(
303
  'id' => 'enable_custom_ready',
304
  'title' => __( 'Custom Ready Event', 'foogallery' ),
305
- 'desc' => sprintf( __( 'By default the jQuery ready event is used, but there are sometimes unavoidable javascript errors on the page, which could result in the default gallery templates not initializing correctly. Enable this setting to use a built-in custom ready event to overcome this if needed.', 'foogallery' ), foogallery_plugin_name() ),
306
  'type' => 'checkbox',
307
- 'tab' => 'advanced'
 
308
  );
309
 
310
  $settings[] = array(
@@ -362,6 +363,16 @@ if ( ! class_exists( 'FooGallery_Admin_Settings' ) ) {
362
  'type' => 'checkbox',
363
  'tab' => 'advanced',
364
  );
 
 
 
 
 
 
 
 
 
 
365
  //endregion Advanced Tab
366
 
367
  return apply_filters( 'foogallery_admin_settings_override', array(
302
  $settings[] = array(
303
  'id' => 'enable_custom_ready',
304
  'title' => __( 'Custom Ready Event', 'foogallery' ),
305
+ 'desc' => sprintf( __( 'There are sometimes unavoidable javascript errors on the page, which could result in the gallery not initializing correctly. Enable this setting to use a built-in custom ready event to overcome this problem if needed.', 'foogallery' ), foogallery_plugin_name() ),
306
  'type' => 'checkbox',
307
+ 'tab' => 'advanced',
308
+ 'default' => 'on'
309
  );
310
 
311
  $settings[] = array(
363
  'type' => 'checkbox',
364
  'tab' => 'advanced',
365
  );
366
+
367
+ if ( !foogallery_is_pro() ) {
368
+ $settings[] = array(
369
+ 'id' => 'force_hide_trial',
370
+ 'title' => __( 'Force Hide Trial Notice', 'foogallery' ),
371
+ 'desc' => __( 'Force the trial notice admin banner to never show', 'foogallery' ),
372
+ 'type' => 'checkbox',
373
+ 'tab' => 'advanced'
374
+ );
375
+ }
376
  //endregion Advanced Tab
377
 
378
  return apply_filters( 'foogallery_admin_settings_override', array(
includes/admin/view-help.php CHANGED
@@ -26,7 +26,7 @@ $show_demos = apply_filters( 'foogallery_admin_help_show_demos', true );
26
  $.admin_tabs = {
27
 
28
  init : function() {
29
- $("a.nav-tab").click( function(e) {
30
  e.preventDefault();
31
 
32
  $this = $(this);
26
  $.admin_tabs = {
27
 
28
  init : function() {
29
+ $("a.nav-tab").on( 'click', function(e) {
30
  e.preventDefault();
31
 
32
  $this = $(this);
includes/class-foogallery-common-fields.php CHANGED
@@ -572,7 +572,7 @@ if ( ! class_exists( 'FooGallery_Common_Fields' ) ) {
572
  $classes[] = $this->get_setting_from_gallery( $gallery, 'caption_invert_color', '' );
573
  }
574
 
575
- if ( foogallery_get_setting( 'enable_custom_ready' ) ) {
576
  $classes[] = 'fg-ready';
577
  }
578
  }
572
  $classes[] = $this->get_setting_from_gallery( $gallery, 'caption_invert_color', '' );
573
  }
574
 
575
+ if ( 'on' === foogallery_get_setting( 'enable_custom_ready', 'on' ) ) {
576
  $classes[] = 'fg-ready';
577
  }
578
  }
includes/class-foogallery-datasource-media_library.php CHANGED
@@ -95,18 +95,23 @@ if ( ! class_exists( 'FooGallery_Datasource_MediaLibrary' ) ) {
95
 
96
  //always output the ability to add via media library
97
  $has_attachments = $foogallery->has_attachments();
 
98
 
99
  $media_button_start = foogallery_get_setting('add_media_button_start', '' ) === 'on';
 
 
 
 
100
  ?>
101
- <input type="hidden" data-foogallery-preview="include" name='foogallery_attachments' id="foogallery_attachments" value="<?php echo $foogallery->attachment_id_csv(); ?>"/>
102
- <div class="foogallery-attachments-list-container <?php echo $has_attachments ? '' : 'hidden'; ?>">
103
  <ul class="foogallery-attachments-list <?php echo $media_button_start ? 'foogallery-add-media-button-start' : ''; ?>">
104
  <?php if ( $media_button_start ) {
105
  $this->render_add_media_button( $foogallery->ID );
106
  } ?>
107
  <?php
108
  //render all attachments that have been added to the gallery from the media library
109
- if ( $has_attachments ) {
110
  foreach ( $foogallery->attachments() as $attachment ) {
111
  $this->render_attachment_item( $attachment );
112
  }
@@ -249,6 +254,12 @@ if ( ! class_exists( 'FooGallery_Datasource_MediaLibrary_Query_Helper' ) ) {
249
  }
250
  }
251
 
 
 
 
 
 
 
252
  //setup intercepting actions
253
  add_action( 'pre_get_posts', array( $this, 'force_gallery_ordering' ), 99 );
254
  add_action( 'pre_get_posts', array( $this, 'force_suppress_filters' ), PHP_INT_MAX );
@@ -259,7 +270,7 @@ if ( ! class_exists( 'FooGallery_Datasource_MediaLibrary_Query_Helper' ) ) {
259
  remove_action( 'pre_get_posts', array( $this, 'force_gallery_ordering' ), 99 );
260
  remove_action( 'pre_get_posts', array( $this, 'force_suppress_filters' ), PHP_INT_MAX );
261
 
262
- $foogallery_force_sort = null;
263
 
264
  foreach ( $attachment_posts as $attachment_post ) {
265
  $attachments[] = apply_filters( 'foogallery_attachment_load', FooGalleryAttachment::get( $attachment_post ), $foogallery );
@@ -275,12 +286,18 @@ if ( ! class_exists( 'FooGallery_Datasource_MediaLibrary_Query_Helper' ) ) {
275
  */
276
  public function force_gallery_ordering( $query ) {
277
  global $foogallery_force_sort;
 
 
278
 
279
  //only care about attachments
280
  if ( isset( $foogallery_force_sort ) && array_key_exists( 'post_type', $query->query ) &&
281
  'attachment' === $query->query['post_type'] ) {
282
- $query->set( 'orderby', foogallery_sorting_get_posts_orderby_arg( $foogallery_force_sort ) );
283
- $query->set( 'order', foogallery_sorting_get_posts_order_arg( $foogallery_force_sort ) );
 
 
 
 
284
  }
285
  }
286
 
95
 
96
  //always output the ability to add via media library
97
  $has_attachments = $foogallery->has_attachments();
98
+ $show_attachments = isset( $foogallery->datasource_name ) && 'media_library' === $foogallery->datasource_name;
99
 
100
  $media_button_start = foogallery_get_setting('add_media_button_start', '' ) === 'on';
101
+ $attachment_ids = '';
102
+ if ( $has_attachments && $show_attachments ) {
103
+ $attachment_ids = $foogallery->attachment_id_csv();
104
+ }
105
  ?>
106
+ <input type="hidden" data-foogallery-preview="include" name='foogallery_attachments' id="foogallery_attachments" value="<?php echo $attachment_ids; ?>"/>
107
+ <div class="foogallery-attachments-list-container <?php echo $show_attachments && $has_attachments ? '' : 'hidden'; ?>">
108
  <ul class="foogallery-attachments-list <?php echo $media_button_start ? 'foogallery-add-media-button-start' : ''; ?>">
109
  <?php if ( $media_button_start ) {
110
  $this->render_add_media_button( $foogallery->ID );
111
  } ?>
112
  <?php
113
  //render all attachments that have been added to the gallery from the media library
114
+ if ( $has_attachments && $show_attachments ) {
115
  foreach ( $foogallery->attachments() as $attachment ) {
116
  $this->render_attachment_item( $attachment );
117
  }
254
  }
255
  }
256
 
257
+ //set some sorting globals
258
+ global $foogallery_force_sort_orderby;
259
+ global $foogallery_force_sort_order;
260
+ $foogallery_force_sort_orderby = $attachment_query_args['orderby'];
261
+ $foogallery_force_sort_order = $attachment_query_args['order'];
262
+
263
  //setup intercepting actions
264
  add_action( 'pre_get_posts', array( $this, 'force_gallery_ordering' ), 99 );
265
  add_action( 'pre_get_posts', array( $this, 'force_suppress_filters' ), PHP_INT_MAX );
270
  remove_action( 'pre_get_posts', array( $this, 'force_gallery_ordering' ), 99 );
271
  remove_action( 'pre_get_posts', array( $this, 'force_suppress_filters' ), PHP_INT_MAX );
272
 
273
+ $foogallery_force_sort = $foogallery_force_sort_orderby = $foogallery_force_sort_order = null;
274
 
275
  foreach ( $attachment_posts as $attachment_post ) {
276
  $attachments[] = apply_filters( 'foogallery_attachment_load', FooGalleryAttachment::get( $attachment_post ), $foogallery );
286
  */
287
  public function force_gallery_ordering( $query ) {
288
  global $foogallery_force_sort;
289
+ global $foogallery_force_sort_orderby;
290
+ global $foogallery_force_sort_order;
291
 
292
  //only care about attachments
293
  if ( isset( $foogallery_force_sort ) && array_key_exists( 'post_type', $query->query ) &&
294
  'attachment' === $query->query['post_type'] ) {
295
+ if ( isset( $foogallery_force_sort_orderby ) ) {
296
+ $query->set( 'orderby', $foogallery_force_sort_orderby );
297
+ }
298
+ if ( isset( $foogallery_force_sort_order ) ) {
299
+ $query->set( 'order', $foogallery_force_sort_order );
300
+ }
301
  }
302
  }
303
 
includes/class-thumbnail-dimensions.php CHANGED
@@ -82,6 +82,16 @@ if ( ! class_exists( 'FooGallery_Thumbnail_Dimensions' ) ) {
82
  $thumb_height = (int)$thumbnail_dimensions['height'];
83
  $thumb_crop = (bool)$thumbnail_dimensions['crop'];
84
 
 
 
 
 
 
 
 
 
 
 
85
  //set the appropriate arguments on the attachments so that they can be
86
  // picked up and used in the 'include_thumb_dimension_attributes' function below
87
  foreach ($foogallery->attachments() as $attachment) {
82
  $thumb_height = (int)$thumbnail_dimensions['height'];
83
  $thumb_crop = (bool)$thumbnail_dimensions['crop'];
84
 
85
+ //allow width and height arguments to be overridden
86
+ $override_width = foogallery_gallery_template_setting( 'override_width', false );
87
+ if ( $override_width !== false && intval( $override_width ) > 0 ) {
88
+ $thumb_width = intval( $override_width );
89
+ }
90
+ $override_height = foogallery_gallery_template_setting( 'override_height', false );
91
+ if ( $override_height !== false && intval( $override_height ) > 0 ) {
92
+ $thumb_height = intval( $override_height );
93
+ }
94
+
95
  //set the appropriate arguments on the attachments so that they can be
96
  // picked up and used in the 'include_thumb_dimension_attributes' function below
97
  foreach ($foogallery->attachments() as $attachment) {
includes/compatibility/class-foobox-compatibility.php CHANGED
@@ -33,6 +33,76 @@ if ( !class_exists( 'FooGallery_FooBox_Compatibility' ) ) {
33
  //FooBox Free specific functionality
34
  add_filter( 'foogallery_album_stack_link_class_name', array($this, 'album_stack_link_class_name'));
35
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
37
 
38
  function add_foobox_help_field( $fields, $template ) {
33
  //FooBox Free specific functionality
34
  add_filter( 'foogallery_album_stack_link_class_name', array($this, 'album_stack_link_class_name'));
35
  }
36
+
37
+ //cater for different captions sources
38
+ add_filter( 'foogallery_attachment_html_link_attributes', array( $this, 'add_caption_attributes' ), 20, 3 );
39
+
40
+ //add custom captions
41
+ add_filter( 'foogallery_build_attachment_html_caption_custom', array( &$this, 'customize_captions' ), 90, 3 );
42
+ }
43
+
44
+ /**
45
+ * Customize the captions if needed
46
+ *
47
+ * @param $captions
48
+ * @param $foogallery_attachment FooGalleryAttachment
49
+ * @param $args array
50
+ *
51
+ * @return array
52
+ */
53
+ function customize_captions( $captions, $foogallery_attachment, $args) {
54
+
55
+ if ( isset( $foogallery_attachment->custom_captions ) && $foogallery_attachment->custom_captions ) {
56
+ //specifically for foobox, make sure the custom captions are set
57
+ $foogallery_attachment->caption_title = ' ';
58
+ $foogallery_attachment->caption_desc = $captions['desc'];
59
+ }
60
+
61
+ return $captions;
62
+ }
63
+
64
+ /**
65
+ * Handle custom captions for the lightbox
66
+ * @param $attr
67
+ * @param $args
68
+ * @param $foogallery_attachment
69
+ *
70
+ * @return mixed
71
+ */
72
+ function add_caption_attributes( $attr, $args, $foogallery_attachment ) {
73
+ global $current_foogallery;
74
+
75
+ //check if lightbox set to foogallery
76
+ if ( isset( $current_foogallery->lightbox ) && 'foobox' === $current_foogallery->lightbox ) {
77
+
78
+ //check lightbox caption source
79
+ $source = foogallery_gallery_template_setting( 'lightbox_caption_override', '' );
80
+
81
+ if ( 'override' === $source ) {
82
+ $caption_title_source = foogallery_gallery_template_setting('lightbox_caption_override_title', '' );
83
+ if ( 'none' === $caption_title_source ) {
84
+ $attr['data-caption-title'] = ' ';
85
+ } else if ( '' !== $caption_title_source ) {
86
+ $attr['data-caption-title'] = foogallery_sanitize_html( foogallery_get_caption_by_source( $foogallery_attachment, $caption_title_source, 'title' ) );
87
+ }
88
+
89
+ $caption_desc_source = foogallery_gallery_template_setting('lightbox_caption_override_desc', '' );
90
+ if ( 'none' === $caption_desc_source ) {
91
+ $attr['data-caption-desc'] = ' ';
92
+ } else if ( '' !== $caption_desc_source ) {
93
+ $attr['data-caption-desc'] = foogallery_sanitize_html( foogallery_get_caption_by_source( $foogallery_attachment, $caption_desc_source, 'description' ) );
94
+ }
95
+ } else if ( 'custom' === $source ) {
96
+
97
+ $template = foogallery_gallery_template_setting( 'lightbox_caption_custom_template', '' );
98
+ if ( !empty( $template ) ) {
99
+ $attr['data-caption-title'] = ' ';
100
+ $attr['data-caption-desc'] = foogallery_sanitize_html( FooGallery_Pro_Advanced_Captions::build_custom_caption( $template, $foogallery_attachment ) );
101
+ }
102
+ }
103
+ }
104
+
105
+ return $attr;
106
  }
107
 
108
  function add_foobox_help_field( $fields, $template ) {
includes/foopluginbase/js/admin-settings.js CHANGED
@@ -61,7 +61,7 @@
61
 
62
  FOOPluginBaseAdminSettings.setupTabs = function() {
63
 
64
- $(".foo-nav-tabs a.nav-tab").click( function(e) {
65
  e.preventDefault();
66
 
67
  $this = $(this);
61
 
62
  FOOPluginBaseAdminSettings.setupTabs = function() {
63
 
64
+ $(".foo-nav-tabs a.nav-tab").on('click', function(e) {
65
  e.preventDefault();
66
 
67
  $this = $(this);
includes/render-functions.php CHANGED
@@ -396,6 +396,16 @@ function foogallery_attachment_html( $foogallery_attachment, $args = array() ) {
396
  $args = foogallery_gallery_template_arguments();
397
  }
398
 
 
 
 
 
 
 
 
 
 
 
399
  $caption = foogallery_attachment_html_caption( $foogallery_attachment, $args );
400
 
401
  $html = foogallery_attachment_html_item_opening( $foogallery_attachment, $args );
396
  $args = foogallery_gallery_template_arguments();
397
  }
398
 
399
+ //allow width and height arguments to be overridden
400
+ $override_width = foogallery_gallery_template_setting( 'override_width', false );
401
+ if ( $override_width !== false && intval( $override_width ) > 0 ) {
402
+ $args['width'] = $override_width;
403
+ }
404
+ $override_height = foogallery_gallery_template_setting( 'override_height', false );
405
+ if ( $override_height !== false && intval( $override_height ) > 0 ) {
406
+ $args['height'] = $override_height;
407
+ }
408
+
409
  $caption = foogallery_attachment_html_caption( $foogallery_attachment, $args );
410
 
411
  $html = foogallery_attachment_html_item_opening( $foogallery_attachment, $args );
js/admin-foogallery.js CHANGED
@@ -244,8 +244,8 @@
244
 
245
  $('.foogallery-items-view-switch-container').appendTo( $items_metabox_heading ).removeClass('hidden');
246
 
247
- $('.foogallery-items-view-switch-container a').click(function(e) {
248
- e.preventDefault();
249
 
250
  var $currentButton = $('.foogallery-items-view-switch-container a.current'),
251
  currentSelector = $currentButton.data('container'),
@@ -588,7 +588,7 @@
588
 
589
  }(window.FOOGALLERY = window.FOOGALLERY || {}, jQuery));
590
 
591
- jQuery(function ($) {
592
  if ( $('#foogallery_attachments').length > 0 ) {
593
  FOOGALLERY.adminReady();
594
  }
244
 
245
  $('.foogallery-items-view-switch-container').appendTo( $items_metabox_heading ).removeClass('hidden');
246
 
247
+ $('.foogallery-items-view-switch-container a').on('click', function(e) {
248
+ e.stopPropagation();
249
 
250
  var $currentButton = $('.foogallery-items-view-switch-container a.current'),
251
  currentSelector = $currentButton.data('container'),
588
 
589
  }(window.FOOGALLERY = window.FOOGALLERY || {}, jQuery));
590
 
591
+ FooGallery.utils.ready(function ($) {
592
  if ( $('#foogallery_attachments').length > 0 ) {
593
  FOOGALLERY.adminReady();
594
  }
js/admin-page-foogallery-extensions.js CHANGED
@@ -76,7 +76,7 @@
76
  };
77
 
78
  FOOGALLERY.bindTabs = function() {
79
- $("a.nav-tab").click( function(e) {
80
  $this = $(this);
81
 
82
  $this.parents(".nav-tab-wrapper:first").find(".nav-tab-active").removeClass("nav-tab-active");
76
  };
77
 
78
  FOOGALLERY.bindTabs = function() {
79
+ $("a.nav-tab").on('click', function(e) {
80
  $this = $(this);
81
 
82
  $this.parents(".nav-tab-wrapper:first").find(".nav-tab-active").removeClass("nav-tab-active");
js/admin-page-foogallery-settings.js CHANGED
@@ -2,7 +2,7 @@ jQuery(document).ready(function($) {
2
  $.admin_tabs = {
3
 
4
  init : function() {
5
- $("a.nav-tab").click( function(e) {
6
  e.preventDefault();
7
 
8
  $this = $(this);
@@ -59,7 +59,7 @@ jQuery(document).ready(function($) {
59
  };
60
 
61
  FOOGALLERY.bindClearCssOptimizationButton = function() {
62
- $('.foogallery_clear_css_optimizations').click(function(e) {
63
  e.preventDefault();
64
 
65
  var $button = $(this),
@@ -88,7 +88,7 @@ jQuery(document).ready(function($) {
88
  };
89
 
90
  FOOGALLERY.bindTestThumbnailButton = function() {
91
- $('.foogallery_thumb_generation_test').click(function(e) {
92
  e.preventDefault();
93
 
94
  var $button = $(this),
@@ -117,7 +117,7 @@ jQuery(document).ready(function($) {
117
  };
118
 
119
  FOOGALLERY.bindApplyRetinaDefaults = function() {
120
- $('.foogallery_apply_retina_support').click(function(e) {
121
  e.preventDefault();
122
 
123
  var $button = $(this),
@@ -155,7 +155,7 @@ jQuery(document).ready(function($) {
155
  };
156
 
157
  FOOGALLERY.bindUninstallButton = function() {
158
- $('.foogallery_uninstall').click(function(e) {
159
  e.preventDefault();
160
 
161
  var $button = $(this),
@@ -184,7 +184,7 @@ jQuery(document).ready(function($) {
184
  };
185
 
186
  FOOGALLERY.bindClearHTMLCacheButton = function() {
187
- $('.foogallery_clear_html_cache').click(function(e) {
188
  e.preventDefault();
189
 
190
  var $button = $(this),
@@ -214,7 +214,7 @@ jQuery(document).ready(function($) {
214
 
215
  //find all generic foogallery ajax buttons and bind them
216
  FOOGALLERY.bindSettingsAjaxButtons = function () {
217
- $('.foogallery_settings_ajax').click(function(e) {
218
  e.preventDefault();
219
 
220
  var $button = $(this),
2
  $.admin_tabs = {
3
 
4
  init : function() {
5
+ $("a.nav-tab").on('click', function(e) {
6
  e.preventDefault();
7
 
8
  $this = $(this);
59
  };
60
 
61
  FOOGALLERY.bindClearCssOptimizationButton = function() {
62
+ $('.foogallery_clear_css_optimizations').on('click', function(e) {
63
  e.preventDefault();
64
 
65
  var $button = $(this),
88
  };
89
 
90
  FOOGALLERY.bindTestThumbnailButton = function() {
91
+ $('.foogallery_thumb_generation_test').on('click', function(e) {
92
  e.preventDefault();
93
 
94
  var $button = $(this),
117
  };
118
 
119
  FOOGALLERY.bindApplyRetinaDefaults = function() {
120
+ $('.foogallery_apply_retina_support').on('click', function(e) {
121
  e.preventDefault();
122
 
123
  var $button = $(this),
155
  };
156
 
157
  FOOGALLERY.bindUninstallButton = function() {
158
+ $('.foogallery_uninstall').on('click', function(e) {
159
  e.preventDefault();
160
 
161
  var $button = $(this),
184
  };
185
 
186
  FOOGALLERY.bindClearHTMLCacheButton = function() {
187
+ $('.foogallery_clear_html_cache').on('click', function(e) {
188
  e.preventDefault();
189
 
190
  var $button = $(this),
214
 
215
  //find all generic foogallery ajax buttons and bind them
216
  FOOGALLERY.bindSettingsAjaxButtons = function () {
217
+ $('.foogallery_settings_ajax').on('click',function(e) {
218
  e.preventDefault();
219
 
220
  var $button = $(this),
js/admin-uploader.js CHANGED
@@ -1,5 +1,5 @@
1
  jQuery(document).ready(function() {
2
- jQuery('.image-upload-button').click(function(e) {
3
  e.preventDefault();
4
  tb_show('', 'media-upload.php?type=image&amp;TB_iframe=true');
5
  return false;
1
  jQuery(document).ready(function() {
2
+ jQuery('.image-upload-button').on('click',function(e) {
3
  e.preventDefault();
4
  tb_show('', 'media-upload.php?type=image&amp;TB_iframe=true');
5
  return false;
js/foogallery.admin.min.js CHANGED
@@ -1,6 +1,6 @@
1
  /*
2
  * FooGallery - The Most Intuitive and Extensible Gallery Creation and Management Tool Ever Created for WordPress
3
- * @version 1.4.18
4
  * @link
5
  * @copyright Steven Usher & Brad Vincent 2015
6
  * @license Released under the GPLv3 license.
1
  /*
2
  * FooGallery - The Most Intuitive and Extensible Gallery Creation and Management Tool Ever Created for WordPress
3
+ * @version 1.4.24
4
  * @link
5
  * @copyright Steven Usher & Brad Vincent 2015
6
  * @license Released under the GPLv3 license.