Version Description
Please update in order to for FooGallery to work in WP 5.5+!
Download this release
Release Info
Developer | bradvin |
Plugin | 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
- README.txt +34 -19
- css/admin-foogallery-gallery-piles.css +93 -0
- extensions/albums/admin/class-columns.php +1 -1
- extensions/albums/admin/class-metaboxes.php +10 -6
- extensions/albums/album-stack.php +69 -60
- extensions/albums/class-albums-extension.php +7 -1
- extensions/albums/css/admin-foogallery-album.css +3 -110
- extensions/albums/functions.php +20 -10
- extensions/albums/js/admin-foogallery-album.js +1 -1
- extensions/default-templates/default/js/admin-gallery-default.js +1 -1
- extensions/default-templates/image-viewer/class-image-viewer-gallery-template.php +5 -1
- extensions/default-templates/image-viewer/js/admin-gallery-image-viewer.js +1 -1
- extensions/default-templates/shared/css/foogallery.css +267 -0
- extensions/default-templates/shared/css/foogallery.min.css +1 -1
- extensions/default-templates/shared/js/foogallery.js +1092 -506
- extensions/default-templates/shared/js/foogallery.min.js +5 -5
- extensions/default-templates/thumbnail/js/admin-gallery-thumbnail.js +1 -1
- foogallery.php +2 -2
- freemius/assets/css/admin/account.css +1 -1
- freemius/languages/freemius.pot +2524 -2524
- freemius/start.php +529 -529
- freemius/templates/forms/affiliation.php +508 -508
- includes/WPThumb/wpthumb.php +1 -1
- includes/admin/class-admin.php +21 -1
- includes/admin/class-columns.php +1 -1
- includes/admin/class-gallery-editor.php +19 -112
- includes/admin/class-settings.php +13 -2
- includes/admin/view-help.php +1 -1
- includes/class-foogallery-common-fields.php +1 -1
- includes/class-foogallery-datasource-media_library.php +23 -6
- includes/class-thumbnail-dimensions.php +10 -0
- includes/compatibility/class-foobox-compatibility.php +70 -0
- includes/foopluginbase/js/admin-settings.js +1 -1
- includes/render-functions.php +10 -0
- js/admin-foogallery.js +3 -3
- js/admin-page-foogallery-extensions.js +1 -1
- js/admin-page-foogallery-settings.js +7 -7
- js/admin-uploader.js +1 -1
- js/foogallery.admin.min.js +1 -1
README.txt
CHANGED
@@ -1,18 +1,18 @@
|
|
1 |
-
===
|
2 |
Contributors: bradvin, steveush, fooplugins
|
3 |
-
Donate link:
|
4 |
-
Tags: gallery,
|
5 |
Requires at least: 3.9
|
6 |
-
Tested up to: 5.
|
7 |
Stable tag: trunk
|
8 |
License: GPLv2 or later
|
9 |
-
License URI:
|
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 |
-
=
|
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](
|
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
|
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
|
210 |
-
<div
|
211 |
<div style="display: table-cell; vertical-align: middle; text-align: center;">
|
212 |
<img src="<?php echo $img_src; ?>"/>
|
213 |
-
<h3
|
214 |
-
|
215 |
-
|
|
|
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
|
|
|
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 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
}
|
23 |
-
|
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 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
|
|
|
|
41 |
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
|
|
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">←</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
|
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-
|
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 .
|
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' => '
|
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
|
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
|
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',
|
|
|
|
|
|
|
|
|
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
|
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.
|
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,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 |
-
|
1871 |
-
|
1872 |
-
|
1873 |
-
|
1874 |
-
|
1875 |
-
|
1876 |
-
|
1877 |
-
|
1878 |
-
|
1879 |
-
|
1880 |
-
|
1881 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
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.
|
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 {
|
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 {
|
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]
|
2767 |
-
|
2768 |
-
|
2769 |
-
|
2770 |
-
|
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
|
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.
|
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.
|
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.
|
3289 |
-
|
3290 |
-
|
3291 |
-
|
3292 |
-
|
3293 |
-
|
|
|
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.
|
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 {
|
3322 |
-
* @returns {
|
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
|
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.
|
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.
|
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,
|
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)
|
4026 |
-
// if we have a valid
|
4027 |
-
var
|
4028 |
-
|
4029 |
-
|
4030 |
-
|
4031 |
-
|
4032 |
-
|
4033 |
-
|
4034 |
-
|
|
|
|
|
|
|
|
|
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
|
4053 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
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)
|
4227 |
-
// if we have a valid
|
4228 |
-
var
|
4229 |
-
|
4230 |
-
|
4231 |
-
|
4232 |
-
|
4233 |
-
|
4234 |
-
|
4235 |
-
|
|
|
|
|
|
|
|
|
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.
|
4320 |
|
4321 |
/**
|
4322 |
* @summary A base class providing some helper methods for prototypal inheritance.
|
4323 |
-
* @
|
|
|
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 |
-
* @
|
4344 |
-
* @
|
|
|
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.
|
4459 |
|
4460 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4461 |
/**
|
4462 |
-
* @
|
4463 |
* @constructs
|
4464 |
-
* @param {string} type
|
4465 |
-
|
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
|
4486 |
/**
|
4487 |
* @summary The type of event.
|
4488 |
* @memberof FooGallery.utils.Event#
|
@@ -4490,7 +4624,7 @@
|
|
4490 |
* @type {string}
|
4491 |
* @readonly
|
4492 |
*/
|
4493 |
-
|
4494 |
/**
|
4495 |
* @summary The namespace of the event.
|
4496 |
* @memberof FooGallery.utils.Event#
|
@@ -4498,7 +4632,7 @@
|
|
4498 |
* @type {string}
|
4499 |
* @readonly
|
4500 |
*/
|
4501 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4539 |
/**
|
4540 |
-
* @
|
4541 |
* @constructs
|
4542 |
-
|
4543 |
-
*/
|
4544 |
construct: function(){
|
4545 |
/**
|
4546 |
-
* @summary
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4547 |
* @memberof FooGallery.utils.EventClass#
|
4548 |
-
* @name
|
4549 |
-
* @type {
|
4550 |
-
* @private
|
4551 |
*/
|
4552 |
-
this.
|
4553 |
},
|
4554 |
/**
|
4555 |
* @summary Destroy the current instance releasing used resources.
|
@@ -4557,131 +4727,151 @@
|
|
4557 |
* @function destroy
|
4558 |
*/
|
4559 |
destroy: function(){
|
4560 |
-
this.
|
4561 |
},
|
4562 |
/**
|
4563 |
-
* @summary Attach multiple event
|
4564 |
* @memberof FooGallery.utils.EventClass#
|
4565 |
* @function on
|
4566 |
-
* @param {
|
4567 |
-
* @param {*} [thisArg] - The value of `this` within the
|
4568 |
* @returns {this}
|
4569 |
*//**
|
4570 |
-
* @summary Attach an event
|
4571 |
* @memberof FooGallery.utils.EventClass#
|
4572 |
* @function on
|
4573 |
* @param {string} events - One or more space-separated event types.
|
4574 |
-
* @param {function}
|
4575 |
-
* @param {*} [thisArg] - The value of `this` within the `
|
4576 |
* @returns {this}
|
4577 |
*/
|
4578 |
-
on: function(events,
|
4579 |
var self = this;
|
4580 |
if (_is.object(events)){
|
4581 |
-
thisArg =
|
4582 |
Object.keys(events).forEach(function(key){
|
4583 |
-
|
4584 |
-
|
4585 |
-
|
|
|
|
|
4586 |
});
|
4587 |
-
} else if (_is.string(events) && _is.fn(
|
4588 |
-
thisArg = _is.undef(thisArg) ? this : thisArg;
|
4589 |
events.split(" ").forEach(function(type){
|
4590 |
-
self.
|
4591 |
});
|
4592 |
}
|
4593 |
|
4594 |
return self;
|
4595 |
},
|
4596 |
-
|
4597 |
-
|
4598 |
-
|
4599 |
-
|
4600 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
4601 |
|
4602 |
-
|
4603 |
-
|
|
|
|
|
|
|
4604 |
}
|
4605 |
-
var exists = self.
|
4606 |
-
return h.namespace === namespace && h.fn ===
|
4607 |
});
|
4608 |
if (!exists){
|
4609 |
-
self.
|
4610 |
-
namespace: namespace,
|
4611 |
-
fn:
|
4612 |
thisArg: thisArg
|
4613 |
});
|
|
|
4614 |
}
|
|
|
4615 |
},
|
4616 |
/**
|
4617 |
-
* @summary Remove multiple event
|
4618 |
* @memberof FooGallery.utils.EventClass#
|
4619 |
* @function off
|
4620 |
-
* @param {
|
4621 |
-
* @param {*} [thisArg] - The value of `this` within the `
|
4622 |
* @returns {this}
|
4623 |
*//**
|
4624 |
-
* @summary Remove an event
|
4625 |
* @memberof FooGallery.utils.EventClass#
|
4626 |
* @function off
|
4627 |
* @param {string} events - One or more space-separated event types.
|
4628 |
-
* @param {function}
|
4629 |
-
* @param {*} [thisArg] - The value of `this` within the `
|
4630 |
* @returns {this}
|
4631 |
*/
|
4632 |
-
off: function(events,
|
4633 |
var self = this;
|
4634 |
if (_is.object(events)){
|
4635 |
-
thisArg =
|
4636 |
Object.keys(events).forEach(function(key){
|
4637 |
key.split(" ").forEach(function(type){
|
4638 |
-
self.
|
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.
|
4646 |
});
|
4647 |
}
|
4648 |
|
4649 |
return self;
|
4650 |
},
|
4651 |
-
|
4652 |
-
|
4653 |
-
|
4654 |
-
|
4655 |
-
|
4656 |
-
|
4657 |
-
|
4658 |
-
|
4659 |
-
|
4660 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4661 |
}
|
4662 |
|
4663 |
types.forEach(function(type){
|
4664 |
-
if (!_is.array(self.
|
4665 |
-
self.
|
4666 |
-
if (
|
4667 |
-
return !(h.namespace === namespace && h.fn ===
|
4668 |
}
|
4669 |
-
if (namespace != null){
|
4670 |
-
return h.namespace !== namespace;
|
4671 |
}
|
4672 |
return false;
|
4673 |
});
|
4674 |
-
if (self.
|
4675 |
-
delete self.
|
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
|
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.
|
4693 |
} else if (_is.string(event)) {
|
4694 |
event.split(" ").forEach(function(type){
|
4695 |
-
var
|
4696 |
-
|
|
|
4697 |
});
|
4698 |
}
|
4699 |
return _is.empty(result) ? null : (result.length === 1 ? result[0] : result);
|
4700 |
},
|
4701 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4702 |
var self = this;
|
4703 |
-
|
4704 |
-
if (
|
4705 |
-
self.
|
4706 |
-
|
4707 |
-
|
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.
|
4721 |
|
4722 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4723 |
/**
|
4724 |
-
* @
|
4725 |
* @constructs
|
4726 |
-
|
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.
|
4822 |
|
|
|
|
|
|
|
|
|
|
|
|
|
4823 |
_.Timer = _.EventClass.extend(/** @lends FooGallery.utils.Timer */{
|
4824 |
/**
|
4825 |
-
* @
|
4826 |
* @constructs
|
4827 |
-
* @param {number} [interval=1000]
|
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.
|
5116 |
|
5117 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5118 |
/**
|
5119 |
-
* @
|
5120 |
* @constructs
|
5121 |
-
|
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,
|
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.
|
5545 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5546 |
_.FullscreenAPI = _.EventClass.extend(/** @lends FooGallery.utils.FullscreenAPI */{
|
5547 |
/**
|
5548 |
-
* @
|
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 {
|
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 {
|
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}
|
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 &&
|
6179 |
event.preventDefault();
|
6180 |
}
|
6181 |
-
if (!self.opt.allowPageScroll.y &&
|
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
|
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 (
|
10043 |
return i + 1;
|
10044 |
}
|
10045 |
}
|
@@ -10047,7 +10210,7 @@
|
|
10047 |
},
|
10048 |
contains: function (pageNumber, item) {
|
10049 |
var items = this.get(pageNumber);
|
10050 |
-
return
|
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.
|
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)+"…"),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)+"…"),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)+"…"),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)+"…"),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)+"…"),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)+"…"),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)+"…"),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)+"…"),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
|
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.
|
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.
|
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 "←"
|
372 |
-
msgstr ""
|
373 |
-
|
374 |
-
#: includes/class-freemius.php:18345
|
375 |
-
msgctxt "ASCII arrow right icon"
|
376 |
-
msgid "➤"
|
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 "←"
|
372 |
+
msgstr ""
|
373 |
+
|
374 |
+
#: includes/class-freemius.php:18345
|
375 |
+
msgctxt "ASCII arrow right icon"
|
376 |
+
msgid "➤"
|
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
|
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 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
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( __( '
|
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").
|
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 $
|
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 |
-
|
283 |
-
|
|
|
|
|
|
|
|
|
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
|
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
|
248 |
-
e.
|
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 |
-
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
3 |
e.preventDefault();
|
4 |
tb_show('', 'media-upload.php?type=image&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&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.
|
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.
|