Version Description
Date Updated : 2020-05-04 * Fix : Fixed bug where thumbs were not loading on mobile in Justified and Portfolio galleries * Update : FooGallery client side 1.4.12
Download this release
Release Info
Developer | bradvin |
Plugin | FooGallery – Image Gallery WordPress Plugin |
Version | 1.9.24 |
Comparing to | |
See all releases |
Code changes from version 1.9.11 to 1.9.24
- README.txt +32 -2
- css/admin-foogallery.css +65 -1
- extensions/albums/admin/class-metaboxes.php +0 -21
- extensions/albums/album-stack.php +2 -2
- extensions/default-templates/default/class-default-gallery-template.php +101 -101
- extensions/default-templates/image-viewer/class-image-viewer-gallery-template.php +1 -20
- extensions/default-templates/justified/class-justified-gallery-template.php +32 -23
- extensions/default-templates/masonry/class-masonry-gallery-template.php +16 -19
- extensions/default-templates/shared/css/foogallery.css +330 -45
- extensions/default-templates/shared/css/foogallery.min.css +1 -1
- extensions/default-templates/shared/js/foogallery.js +1843 -76
- extensions/default-templates/shared/js/foogallery.min.js +5 -4
- extensions/default-templates/simple-portfolio/class-simple-portfolio-gallery-template.php +64 -38
- extensions/default-templates/thumbnail/class-thumbnail-gallery-template.php +23 -33
- extensions/default-templates/thumbnail/gallery-thumbnail.php +6 -1
- foogallery.php +13 -3
- freemius/assets/css/admin/account.css +1 -1
- freemius/assets/css/admin/add-ons.css +2 -2
- freemius/assets/css/admin/common.css +2 -2
- freemius/assets/css/admin/connect.css +1 -1
- freemius/assets/css/admin/debug.css +1 -1
- freemius/assets/css/admin/dialog-boxes.css +1 -1
- freemius/assets/css/admin/plugins.css +1 -0
- freemius/assets/css/customizer.css +1 -1
- freemius/assets/img/foogallery.png +0 -0
- freemius/config.php +387 -387
- freemius/includes/class-freemius.php +1589 -281
- freemius/includes/class-fs-plugin-updater.php +32 -2
- freemius/includes/class-fs-storage.php +45 -40
- freemius/includes/customizer/class-fs-customizer-upsell-control.php +160 -156
- freemius/includes/entities/class-fs-entity.php +158 -148
- freemius/includes/entities/class-fs-payment.php +167 -167
- freemius/includes/entities/class-fs-plugin-license.php +33 -0
- freemius/includes/entities/class-fs-plugin-tag.php +59 -59
- freemius/includes/entities/class-fs-plugin.php +5 -0
- freemius/includes/entities/class-fs-pricing.php +156 -140
- freemius/includes/entities/class-fs-site.php +3 -3
- freemius/includes/entities/class-fs-subscription.php +147 -125
- freemius/includes/entities/class-fs-user.php +78 -78
- freemius/includes/fs-core-functions.php +282 -217
- freemius/includes/fs-essential-functions.php +5 -1
- freemius/includes/fs-plugin-info-dialog.php +27 -6
- freemius/includes/managers/class-fs-admin-menu-manager.php +53 -32
- freemius/includes/managers/class-fs-cache-manager.php +325 -325
- freemius/includes/managers/class-fs-option-manager.php +35 -11
- freemius/includes/managers/class-fs-plugin-manager.php +3 -3
- freemius/languages/freemius-cs_CZ.mo +0 -0
- freemius/languages/freemius-cs_CZ.po +2546 -0
- freemius/languages/freemius-da_DK.mo +0 -0
- freemius/languages/freemius-da_DK.po +727 -901
- freemius/languages/freemius-en.mo +0 -0
- freemius/languages/freemius-en.po +104 -96
README.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: bradvin, steveush, fooplugins
|
|
3 |
Donate link: http://fooplugins.com
|
4 |
Tags: gallery, image gallery, wordpress gallery plugin, responsive gallery, best gallery plugin
|
5 |
Requires at least: 3.9
|
6 |
-
Tested up to: 5.4
|
7 |
Stable tag: trunk
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
@@ -59,7 +59,7 @@ We have done the research and compared the best free gallery plugins out there,
|
|
59 |
* Polaroid gallery template - [demo](https://fooplugins.com/foogallery/wordpress-polaroid-gallery/)
|
60 |
* Grid gallery template - [demo](https://fooplugins.com/foogallery/wordpress-grid-gallery/)
|
61 |
* Slider gallery template - [demo](https://fooplugins.com/foogallery/wordpress-slider-gallery/)
|
62 |
-
*
|
63 |
* Filtered Galleries using Media Tags or Categories - [demo](https://fooplugins.com/foogallery/wordpress-filtered-gallery/)
|
64 |
* Media tags and media category management for attachments
|
65 |
* PRO image and media lightbox built in! [demo](https://fooplugins.com/foogallery/foogallery-pro-lightbox/)
|
@@ -130,6 +130,10 @@ FooGallery is hosted on [GitHub](https://github.com/fooplugins/foogallery).
|
|
130 |
|
131 |
== Frequently Asked Questions ==
|
132 |
|
|
|
|
|
|
|
|
|
133 |
= My galleries are not working. Thumbnails are greyed out and not loading when I scroll down the page. =
|
134 |
|
135 |
Lazy loading is not working on your gallery. This could be due to a conflict between our plugin and your theme.
|
@@ -202,7 +206,30 @@ Update now to get all the latest features, bug fixes and improvements!
|
|
202 |
|
203 |
== Changelog ==
|
204 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
205 |
= 1.9.11 =
|
|
|
206 |
* Fix : Fix for Simple Portfolio template not saving "None" for captions.
|
207 |
* Fix : Fixed albums when adding incorrect markup target="default"
|
208 |
* Fix : Updated thumbnail generation test logic to be more resilient, and improved admin message.
|
@@ -213,6 +240,7 @@ Update now to get all the latest features, bug fixes and improvements!
|
|
213 |
* Update : FooGallery client side 1.4.6 (including multiple bug fixes)
|
214 |
|
215 |
= 1.9.8 =
|
|
|
216 |
* New : Added RankMath compatibility - sitemap image indexing.
|
217 |
* New : Added new setting under Hover Effects : Invert Color. Invert the caption icon colors from dark to light.
|
218 |
* New : All hover and loading icons converted to SVG format.
|
@@ -222,11 +250,13 @@ Update now to get all the latest features, bug fixes and improvements!
|
|
222 |
* Update : FooGallery client side 1.4.0 (MAJOR UPDATE).
|
223 |
|
224 |
= 1.8.20 =
|
|
|
225 |
* Fix : Fix for Masonry template layout issue in Firefox
|
226 |
|
227 |
* Update : FooGallery client side 1.3.6
|
228 |
|
229 |
= 1.8.18 =
|
|
|
230 |
* New : Elementor compatibility - gallery previews in Elementor editor work, and added a FooGallery widget to the Elementor editor
|
231 |
|
232 |
* Fix : Images in Yoast SEO sitemaps pull correctly for all types of gallery embedding
|
3 |
Donate link: http://fooplugins.com
|
4 |
Tags: gallery, image gallery, wordpress gallery plugin, responsive gallery, best gallery plugin
|
5 |
Requires at least: 3.9
|
6 |
+
Tested up to: 5.4.1
|
7 |
Stable tag: trunk
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
59 |
* Polaroid gallery template - [demo](https://fooplugins.com/foogallery/wordpress-polaroid-gallery/)
|
60 |
* Grid gallery template - [demo](https://fooplugins.com/foogallery/wordpress-grid-gallery/)
|
61 |
* Slider gallery template - [demo](https://fooplugins.com/foogallery/wordpress-slider-gallery/)
|
62 |
+
* Video Support - [demo](https://fooplugins.com/foogallery/wordpress-video-gallery/)
|
63 |
* Filtered Galleries using Media Tags or Categories - [demo](https://fooplugins.com/foogallery/wordpress-filtered-gallery/)
|
64 |
* Media tags and media category management for attachments
|
65 |
* PRO image and media lightbox built in! [demo](https://fooplugins.com/foogallery/foogallery-pro-lightbox/)
|
130 |
|
131 |
== Frequently Asked Questions ==
|
132 |
|
133 |
+
= How do I turn off all the PRO Promotions in the admin? =
|
134 |
+
|
135 |
+
Goto FooGallery Settings -> Advanced Tab and check "Disable PRO Promotions" and then save your settings.
|
136 |
+
|
137 |
= My galleries are not working. Thumbnails are greyed out and not loading when I scroll down the page. =
|
138 |
|
139 |
Lazy loading is not working on your gallery. This could be due to a conflict between our plugin and your theme.
|
206 |
|
207 |
== Changelog ==
|
208 |
|
209 |
+
= 1.9.24 =
|
210 |
+
Date Updated : 2020-05-04
|
211 |
+
* Fix : Fixed bug where thumbs were not loading on mobile in Justified and Portfolio galleries
|
212 |
+
* Update : FooGallery client side 1.4.12
|
213 |
+
|
214 |
+
= 1.9.23 =
|
215 |
+
Date Updated : 2020-05-02
|
216 |
+
* New : Reworked hover effect settings to allow none
|
217 |
+
* New : Added new zoomed hover effect
|
218 |
+
* New : Added new transparent theme hover effect
|
219 |
+
* New : Added new advanced setting to add custom class to the gallery container
|
220 |
+
* New : Added global settings for upscaling small images when using larger thumbnail dimensions
|
221 |
+
* New : Added Pro feature promotions in gallery settings
|
222 |
+
* New : Added setting to force GD Image editor as the default
|
223 |
+
* New : Added info for active image editor to Settings -> Images tab
|
224 |
+
* New : Improved caption sanitization
|
225 |
+
* Fix : Fixed bug with Safari when editing a gallery, not loading thumbs
|
226 |
+
* Fix : Fixed gallery previews in certain situations
|
227 |
+
* Update : Freemius SDK 2.3.2
|
228 |
+
* Update : FooGallery client side 1.4.11
|
229 |
+
|
230 |
+
|
231 |
= 1.9.11 =
|
232 |
+
Date Updated : 2020-03-29
|
233 |
* Fix : Fix for Simple Portfolio template not saving "None" for captions.
|
234 |
* Fix : Fixed albums when adding incorrect markup target="default"
|
235 |
* Fix : Updated thumbnail generation test logic to be more resilient, and improved admin message.
|
240 |
* Update : FooGallery client side 1.4.6 (including multiple bug fixes)
|
241 |
|
242 |
= 1.9.8 =
|
243 |
+
Date Updated : 2020-03-08
|
244 |
* New : Added RankMath compatibility - sitemap image indexing.
|
245 |
* New : Added new setting under Hover Effects : Invert Color. Invert the caption icon colors from dark to light.
|
246 |
* New : All hover and loading icons converted to SVG format.
|
250 |
* Update : FooGallery client side 1.4.0 (MAJOR UPDATE).
|
251 |
|
252 |
= 1.8.20 =
|
253 |
+
Date Updated : 2019-11-22
|
254 |
* Fix : Fix for Masonry template layout issue in Firefox
|
255 |
|
256 |
* Update : FooGallery client side 1.3.6
|
257 |
|
258 |
= 1.8.18 =
|
259 |
+
Date Updated : 2019-10-23
|
260 |
* New : Elementor compatibility - gallery previews in Elementor editor work, and added a FooGallery widget to the Elementor editor
|
261 |
|
262 |
* Fix : Images in Yoast SEO sitemaps pull correctly for all types of gallery embedding
|
css/admin-foogallery.css
CHANGED
@@ -287,6 +287,65 @@
|
|
287 |
content: '';
|
288 |
}
|
289 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
290 |
/** <gallery settings styling overrides> **/
|
291 |
|
292 |
.foogallery-metabox-settings {
|
@@ -537,7 +596,8 @@ button[data-balloon]{overflow:visible}[data-balloon]{position:relative}[data-bal
|
|
537 |
max-height: 486px;
|
538 |
/*max-height: 324px;*/
|
539 |
/*max-height: 162px;*/
|
540 |
-
overflow:
|
|
|
541 |
list-style: none;
|
542 |
border: 1px solid #ccd0d4;
|
543 |
padding: 10px;
|
@@ -547,4 +607,8 @@ button[data-balloon]{overflow:visible}[data-balloon]{position:relative}[data-bal
|
|
547 |
content: '';
|
548 |
display: block;
|
549 |
clear: both;
|
|
|
|
|
|
|
|
|
550 |
}
|
287 |
content: '';
|
288 |
}
|
289 |
|
290 |
+
tr.foogallery_template_field[data-foogallery-hidden] {
|
291 |
+
display: none;
|
292 |
+
}
|
293 |
+
|
294 |
+
.foogallery_template_field_type-promo .foogallery-promo {
|
295 |
+
position: relative;
|
296 |
+
display: block;
|
297 |
+
line-height: 19px;
|
298 |
+
padding: 11px 10px 11px 40px;
|
299 |
+
font-size: 14px;
|
300 |
+
text-align: left;
|
301 |
+
margin: 5px 0 0 2px;
|
302 |
+
background-color: #f7fff6;
|
303 |
+
border-left: 4px solid #31be4d;
|
304 |
+
-webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
|
305 |
+
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
|
306 |
+
}
|
307 |
+
|
308 |
+
.foogallery_template_field_type-promo .foogallery-promo:before {
|
309 |
+
/* content: "\f313"; award */
|
310 |
+
content: "\f155"; /* star */
|
311 |
+
font: 400 30px/1 dashicons !important;
|
312 |
+
speak: none;
|
313 |
+
color: #31be4d;
|
314 |
+
display: inline-block;
|
315 |
+
-webkit-font-smoothing: antialiased;
|
316 |
+
-moz-osx-font-smoothing: grayscale;
|
317 |
+
position: absolute;
|
318 |
+
left: 5px;
|
319 |
+
margin-top: -5px;
|
320 |
+
height: 1em;
|
321 |
+
}
|
322 |
+
|
323 |
+
#post-body.columns-2 #postbox-container-1 .foogallery-promo {
|
324 |
+
padding-left: 11px;
|
325 |
+
margin-left: 5px;
|
326 |
+
}
|
327 |
+
|
328 |
+
#post-body.columns-2 #postbox-container-1 .foogallery-promo:before {
|
329 |
+
content: '';
|
330 |
+
}
|
331 |
+
|
332 |
+
.foogallery_template_field_type-promo .foogallery-promo .button-primary {
|
333 |
+
background: #1d7b30;
|
334 |
+
border-color: #1d7b30;
|
335 |
+
}
|
336 |
+
|
337 |
+
.foogallery_template_field_promo th .dashicons {
|
338 |
+
color: #31be4d;
|
339 |
+
}
|
340 |
+
|
341 |
+
.foogallery_metabox_field-radio label.foogallery-promo i {
|
342 |
+
font: 400 15px/1 dashicons !important;
|
343 |
+
speak: none;
|
344 |
+
color: #31be4d;
|
345 |
+
vertical-align: inherit;
|
346 |
+
padding-left: 2px;
|
347 |
+
}
|
348 |
+
|
349 |
/** <gallery settings styling overrides> **/
|
350 |
|
351 |
.foogallery-metabox-settings {
|
596 |
max-height: 486px;
|
597 |
/*max-height: 324px;*/
|
598 |
/*max-height: 162px;*/
|
599 |
+
overflow: scroll;
|
600 |
+
overflow-x: hidden;
|
601 |
list-style: none;
|
602 |
border: 1px solid #ccd0d4;
|
603 |
padding: 10px;
|
607 |
content: '';
|
608 |
display: block;
|
609 |
clear: both;
|
610 |
+
}
|
611 |
+
|
612 |
+
.foogallery-attachments-list-bar button.alignright {
|
613 |
+
margin-left: 5px;
|
614 |
}
|
extensions/albums/admin/class-metaboxes.php
CHANGED
@@ -17,9 +17,6 @@ if ( ! class_exists( 'FooGallery_Admin_Album_MetaBoxes' ) ) {
|
|
17 |
//save extra post data for a gallery
|
18 |
add_action( 'save_post', array( $this, 'save_album' ) );
|
19 |
|
20 |
-
//whitelist metaboxes for our album posttype
|
21 |
-
add_filter( 'foogallery-album_metabox_sanity', array( $this, 'whitelist_metaboxes' ) );
|
22 |
-
|
23 |
//add scripts used by metaboxes
|
24 |
add_action( 'admin_enqueue_scripts', array( $this, 'include_required_scripts' ) );
|
25 |
|
@@ -33,24 +30,6 @@ if ( ! class_exists( 'FooGallery_Admin_Album_MetaBoxes' ) ) {
|
|
33 |
add_action( 'foogallery_album_gallery_details_save', array( $this, 'gallery_details_save' ), 10, 3 );
|
34 |
}
|
35 |
|
36 |
-
public function whitelist_metaboxes() {
|
37 |
-
return array(
|
38 |
-
FOOGALLERY_CPT_GALLERY => array(
|
39 |
-
'whitelist' => apply_filters( 'foogallery_metabox_sanity_foogallery-album',
|
40 |
-
array(
|
41 |
-
'submitdiv',
|
42 |
-
'slugdiv',
|
43 |
-
'postimagediv',
|
44 |
-
'foogalleryalbum_galleries',
|
45 |
-
'foogalleryalbum_shortcode'
|
46 |
-
)
|
47 |
-
),
|
48 |
-
'contexts' => array( 'normal', 'advanced', 'side', ),
|
49 |
-
'priorities' => array( 'high', 'core', 'default', 'low', ),
|
50 |
-
)
|
51 |
-
);
|
52 |
-
}
|
53 |
-
|
54 |
public function add_meta_boxes( $post ) {
|
55 |
add_meta_box(
|
56 |
'foogalleryalbum_galleries',
|
17 |
//save extra post data for a gallery
|
18 |
add_action( 'save_post', array( $this, 'save_album' ) );
|
19 |
|
|
|
|
|
|
|
20 |
//add scripts used by metaboxes
|
21 |
add_action( 'admin_enqueue_scripts', array( $this, 'include_required_scripts' ) );
|
22 |
|
30 |
add_action( 'foogallery_album_gallery_details_save', array( $this, 'gallery_details_save' ), 10, 3 );
|
31 |
}
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
public function add_meta_boxes( $post ) {
|
34 |
add_meta_box(
|
35 |
'foogalleryalbum_galleries',
|
extensions/albums/album-stack.php
CHANGED
@@ -16,11 +16,11 @@ if ( !function_exists( 'foogallery_album_all_in_one_stack_render_gallery_attachm
|
|
16 |
echo '<li data-pile="' . esc_attr( $gallery->name ) . '">';
|
17 |
$args['link_attributes']['rel'] = 'lightbox[' . $gallery->ID . ']';
|
18 |
$args['link_attributes']['class'] = apply_filters( 'foogallery_album_stack_link_class_name', $lightbox );
|
19 |
-
echo $attachment
|
20 |
if ( $attachment->caption ) {
|
21 |
echo '<span class="tp-info"><span>' . wp_filter_nohtml_kses( $attachment->caption ) . '</span></span>';
|
22 |
}
|
23 |
-
echo $attachment
|
24 |
echo '</a>';
|
25 |
echo '</li>';
|
26 |
}
|
16 |
echo '<li data-pile="' . esc_attr( $gallery->name ) . '">';
|
17 |
$args['link_attributes']['rel'] = 'lightbox[' . $gallery->ID . ']';
|
18 |
$args['link_attributes']['class'] = apply_filters( 'foogallery_album_stack_link_class_name', $lightbox );
|
19 |
+
echo foogallery_attachment_html_anchor_opening( $attachment, $args );
|
20 |
if ( $attachment->caption ) {
|
21 |
echo '<span class="tp-info"><span>' . wp_filter_nohtml_kses( $attachment->caption ) . '</span></span>';
|
22 |
}
|
23 |
+
echo foogallery_attachment_html_image( $attachment, $args );
|
24 |
echo '</a>';
|
25 |
echo '</li>';
|
26 |
}
|
extensions/default-templates/default/class-default-gallery-template.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if ( !class_exists( 'FooGallery_Default_Gallery_Template' ) ) {
|
4 |
|
5 |
-
define('FOOGALLERY_DEFAULT_GALLERY_TEMPLATE_URL', plugin_dir_url( __FILE__ ));
|
6 |
|
7 |
class FooGallery_Default_Gallery_Template {
|
8 |
/**
|
@@ -15,116 +15,125 @@ if ( !class_exists( 'FooGallery_Default_Gallery_Template' ) ) {
|
|
15 |
|
16 |
add_filter( 'foogallery_gallery_templates_files', array( $this, 'register_myself' ) );
|
17 |
|
18 |
-
//build up any preview arguments
|
19 |
-
add_filter( 'foogallery_preview_arguments-default', array( $this, 'preview_arguments' ), 10, 2 );
|
20 |
-
|
21 |
//build up the thumb dimensions from some arguments
|
22 |
-
add_filter( 'foogallery_calculate_thumbnail_dimensions-default', array(
|
|
|
|
|
|
|
23 |
|
24 |
//build up the thumb dimensions on save
|
25 |
-
add_filter( 'foogallery_template_thumbnail_dimensions-default', array(
|
|
|
|
|
|
|
26 |
|
27 |
//build up the arguments needed for rendering this template
|
28 |
-
add_filter( 'foogallery_gallery_template_arguments-default', array(
|
|
|
|
|
|
|
29 |
}
|
30 |
|
31 |
/**
|
32 |
* Register myself so that all associated JS and CSS files can be found and automatically included
|
|
|
33 |
* @param $extensions
|
34 |
*
|
35 |
* @return array
|
36 |
*/
|
37 |
function register_myself( $extensions ) {
|
38 |
$extensions[] = __FILE__;
|
|
|
39 |
return $extensions;
|
40 |
}
|
41 |
|
42 |
/**
|
43 |
* Add our gallery template to the list of templates available for every gallery
|
|
|
44 |
* @param $gallery_templates
|
45 |
*
|
46 |
* @return array
|
47 |
*/
|
48 |
function add_template( $gallery_templates ) {
|
49 |
$gallery_templates[] = array(
|
50 |
-
'slug'
|
51 |
-
'name'
|
52 |
-
'preview_support'
|
53 |
'common_fields_support' => true,
|
54 |
-
'paging_support'
|
55 |
-
'lazyload_support'
|
56 |
-
'mandatory_classes'
|
57 |
-
'thumbnail_dimensions'
|
58 |
-
'filtering_support'
|
59 |
-
'fields'
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
'row_data'=> array(
|
71 |
-
|
72 |
-
'data-foogallery-preview'
|
73 |
)
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
array(
|
84 |
'id' => 'lightbox',
|
85 |
'title' => __( 'Lightbox', 'foogallery' ),
|
86 |
'desc' => __( 'Choose which lightbox you want to use. The lightbox will generally only work if you set the thumbnail link to "Full Size Image".', 'foogallery' ),
|
87 |
-
|
88 |
'type' => 'lightbox',
|
89 |
-
|
90 |
),
|
91 |
array(
|
92 |
-
'id'
|
93 |
-
'title'
|
94 |
-
'desc'
|
95 |
-
|
96 |
-
'type'
|
97 |
-
'default'
|
98 |
-
'choices'
|
99 |
-
'fg-gutter-0'
|
100 |
-
'fg-gutter-5'
|
101 |
'fg-gutter-10' => __( '10 pixels', 'foogallery' ),
|
102 |
'fg-gutter-15' => __( '15 pixels', 'foogallery' ),
|
103 |
'fg-gutter-20' => __( '20 pixels', 'foogallery' ),
|
104 |
'fg-gutter-25' => __( '25 pixels', 'foogallery' ),
|
105 |
),
|
106 |
-
|
107 |
-
|
108 |
-
'data-foogallery-preview'
|
109 |
-
|
110 |
),
|
111 |
array(
|
112 |
-
'id'
|
113 |
-
'title'
|
114 |
-
'desc'
|
115 |
-
|
116 |
-
'default'
|
117 |
-
'type'
|
118 |
-
'spacer'
|
119 |
-
'choices'
|
120 |
-
'fg-left'
|
121 |
'fg-center' => __( 'Center', 'foogallery' ),
|
122 |
-
'fg-right'
|
123 |
),
|
124 |
-
|
125 |
-
|
126 |
-
'data-foogallery-preview'
|
127 |
-
|
128 |
)
|
129 |
)
|
130 |
);
|
@@ -141,18 +150,6 @@ if ( !class_exists( 'FooGallery_Default_Gallery_Template' ) ) {
|
|
141 |
foogallery_enqueue_core_gallery_template_script();
|
142 |
}
|
143 |
|
144 |
-
/**
|
145 |
-
* Build up a arguments used in the preview of the gallery
|
146 |
-
* @param $args
|
147 |
-
* @param $post_data
|
148 |
-
*
|
149 |
-
* @return mixed
|
150 |
-
*/
|
151 |
-
function preview_arguments( $args, $post_data ) {
|
152 |
-
$args['thumbnail_dimensions'] = $post_data[FOOGALLERY_META_SETTINGS]['default_thumbnail_dimensions'];
|
153 |
-
return $args;
|
154 |
-
}
|
155 |
-
|
156 |
/**
|
157 |
* Builds thumb dimensions from arguments
|
158 |
*
|
@@ -162,14 +159,15 @@ if ( !class_exists( 'FooGallery_Default_Gallery_Template' ) ) {
|
|
162 |
* @return mixed
|
163 |
*/
|
164 |
function build_thumbnail_dimensions_from_arguments( $dimensions, $arguments ) {
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
|
|
173 |
}
|
174 |
|
175 |
/**
|
@@ -181,26 +179,28 @@ if ( !class_exists( 'FooGallery_Default_Gallery_Template' ) ) {
|
|
181 |
* @return mixed
|
182 |
*/
|
183 |
function get_thumbnail_dimensions( $dimensions, $foogallery ) {
|
184 |
-
$dimensions
|
185 |
-
'width'
|
186 |
'height' => get_option( 'thumbnail_size_h' )
|
187 |
) );
|
188 |
$dimensions['crop'] = true;
|
|
|
189 |
return $dimensions;
|
190 |
}
|
191 |
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
|
|
198 |
function build_gallery_template_arguments( $args ) {
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
|
203 |
-
|
204 |
-
|
205 |
}
|
206 |
}
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! class_exists( 'FooGallery_Default_Gallery_Template' ) ) {
|
4 |
|
5 |
+
define( 'FOOGALLERY_DEFAULT_GALLERY_TEMPLATE_URL', plugin_dir_url( __FILE__ ) );
|
6 |
|
7 |
class FooGallery_Default_Gallery_Template {
|
8 |
/**
|
15 |
|
16 |
add_filter( 'foogallery_gallery_templates_files', array( $this, 'register_myself' ) );
|
17 |
|
|
|
|
|
|
|
18 |
//build up the thumb dimensions from some arguments
|
19 |
+
add_filter( 'foogallery_calculate_thumbnail_dimensions-default', array(
|
20 |
+
$this,
|
21 |
+
'build_thumbnail_dimensions_from_arguments'
|
22 |
+
), 10, 2 );
|
23 |
|
24 |
//build up the thumb dimensions on save
|
25 |
+
add_filter( 'foogallery_template_thumbnail_dimensions-default', array(
|
26 |
+
$this,
|
27 |
+
'get_thumbnail_dimensions'
|
28 |
+
), 10, 2 );
|
29 |
|
30 |
//build up the arguments needed for rendering this template
|
31 |
+
add_filter( 'foogallery_gallery_template_arguments-default', array(
|
32 |
+
$this,
|
33 |
+
'build_gallery_template_arguments'
|
34 |
+
) );
|
35 |
}
|
36 |
|
37 |
/**
|
38 |
* Register myself so that all associated JS and CSS files can be found and automatically included
|
39 |
+
*
|
40 |
* @param $extensions
|
41 |
*
|
42 |
* @return array
|
43 |
*/
|
44 |
function register_myself( $extensions ) {
|
45 |
$extensions[] = __FILE__;
|
46 |
+
|
47 |
return $extensions;
|
48 |
}
|
49 |
|
50 |
/**
|
51 |
* Add our gallery template to the list of templates available for every gallery
|
52 |
+
*
|
53 |
* @param $gallery_templates
|
54 |
*
|
55 |
* @return array
|
56 |
*/
|
57 |
function add_template( $gallery_templates ) {
|
58 |
$gallery_templates[] = array(
|
59 |
+
'slug' => 'default',
|
60 |
+
'name' => __( 'Responsive Image Gallery', 'foogallery' ),
|
61 |
+
'preview_support' => true,
|
62 |
'common_fields_support' => true,
|
63 |
+
'paging_support' => true,
|
64 |
+
'lazyload_support' => true,
|
65 |
+
'mandatory_classes' => 'fg-default',
|
66 |
+
'thumbnail_dimensions' => true,
|
67 |
+
'filtering_support' => true,
|
68 |
+
'fields' => array(
|
69 |
+
array(
|
70 |
+
'id' => 'thumbnail_dimensions',
|
71 |
+
'title' => __( 'Thumbnail Size', 'foogallery' ),
|
72 |
+
'desc' => __( 'Choose the size of your thumbnails.', 'foogallery' ),
|
73 |
+
'section' => __( 'General', 'foogallery' ),
|
74 |
+
'type' => 'thumb_size_no_crop',
|
75 |
+
'default' => array(
|
76 |
+
'width' => get_option( 'thumbnail_size_w' ),
|
77 |
+
'height' => get_option( 'thumbnail_size_h' ),
|
78 |
+
),
|
79 |
+
'row_data' => array(
|
80 |
+
'data-foogallery-change-selector' => 'input',
|
81 |
+
'data-foogallery-preview' => 'shortcode'
|
82 |
)
|
83 |
+
),
|
84 |
+
array(
|
85 |
+
'id' => 'thumbnail_link',
|
86 |
+
'title' => __( 'Link To', 'foogallery' ),
|
87 |
+
'section' => __( 'General', 'foogallery' ),
|
88 |
+
'default' => 'image',
|
89 |
+
'type' => 'thumb_link',
|
90 |
+
'desc' => __( 'You can choose to link each thumbnail to the full size image, the image\'s attachment page, a custom URL, or you can choose to not link to anything.', 'foogallery' ),
|
91 |
+
),
|
92 |
array(
|
93 |
'id' => 'lightbox',
|
94 |
'title' => __( 'Lightbox', 'foogallery' ),
|
95 |
'desc' => __( 'Choose which lightbox you want to use. The lightbox will generally only work if you set the thumbnail link to "Full Size Image".', 'foogallery' ),
|
96 |
+
'section' => __( 'General', 'foogallery' ),
|
97 |
'type' => 'lightbox',
|
98 |
+
'default' => 'none'
|
99 |
),
|
100 |
array(
|
101 |
+
'id' => 'spacing',
|
102 |
+
'title' => __( 'Spacing', 'foogallery' ),
|
103 |
+
'desc' => __( 'The spacing or gap between thumbnails in the gallery.', 'foogallery' ),
|
104 |
+
'section' => __( 'General', 'foogallery' ),
|
105 |
+
'type' => 'select',
|
106 |
+
'default' => 'fg-gutter-10',
|
107 |
+
'choices' => array(
|
108 |
+
'fg-gutter-0' => __( 'none', 'foogallery' ),
|
109 |
+
'fg-gutter-5' => __( '5 pixels', 'foogallery' ),
|
110 |
'fg-gutter-10' => __( '10 pixels', 'foogallery' ),
|
111 |
'fg-gutter-15' => __( '15 pixels', 'foogallery' ),
|
112 |
'fg-gutter-20' => __( '20 pixels', 'foogallery' ),
|
113 |
'fg-gutter-25' => __( '25 pixels', 'foogallery' ),
|
114 |
),
|
115 |
+
'row_data' => array(
|
116 |
+
'data-foogallery-change-selector' => 'select',
|
117 |
+
'data-foogallery-preview' => 'shortcode'
|
118 |
+
)
|
119 |
),
|
120 |
array(
|
121 |
+
'id' => 'alignment',
|
122 |
+
'title' => __( 'Alignment', 'foogallery' ),
|
123 |
+
'desc' => __( 'The horizontal alignment of the thumbnails inside the gallery.', 'foogallery' ),
|
124 |
+
'section' => __( 'General', 'foogallery' ),
|
125 |
+
'default' => 'fg-center',
|
126 |
+
'type' => 'radio',
|
127 |
+
'spacer' => '<span class="spacer"></span>',
|
128 |
+
'choices' => array(
|
129 |
+
'fg-left' => __( 'Left', 'foogallery' ),
|
130 |
'fg-center' => __( 'Center', 'foogallery' ),
|
131 |
+
'fg-right' => __( 'Right', 'foogallery' ),
|
132 |
),
|
133 |
+
'row_data' => array(
|
134 |
+
'data-foogallery-change-selector' => 'input:radio',
|
135 |
+
'data-foogallery-preview' => 'shortcode'
|
136 |
+
)
|
137 |
)
|
138 |
)
|
139 |
);
|
150 |
foogallery_enqueue_core_gallery_template_script();
|
151 |
}
|
152 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
/**
|
154 |
* Builds thumb dimensions from arguments
|
155 |
*
|
159 |
* @return mixed
|
160 |
*/
|
161 |
function build_thumbnail_dimensions_from_arguments( $dimensions, $arguments ) {
|
162 |
+
if ( array_key_exists( 'thumbnail_dimensions', $arguments ) ) {
|
163 |
+
return array(
|
164 |
+
'height' => intval( $arguments['thumbnail_dimensions']['height'] ),
|
165 |
+
'width' => intval( $arguments['thumbnail_dimensions']['width'] ),
|
166 |
+
'crop' => '1'
|
167 |
+
);
|
168 |
+
}
|
169 |
+
|
170 |
+
return null;
|
171 |
}
|
172 |
|
173 |
/**
|
179 |
* @return mixed
|
180 |
*/
|
181 |
function get_thumbnail_dimensions( $dimensions, $foogallery ) {
|
182 |
+
$dimensions = $foogallery->get_meta( 'default_thumbnail_dimensions', array(
|
183 |
+
'width' => get_option( 'thumbnail_size_w' ),
|
184 |
'height' => get_option( 'thumbnail_size_h' )
|
185 |
) );
|
186 |
$dimensions['crop'] = true;
|
187 |
+
|
188 |
return $dimensions;
|
189 |
}
|
190 |
|
191 |
+
/**
|
192 |
+
* Build up the arguments needed for rendering this gallery template
|
193 |
+
*
|
194 |
+
* @param $args
|
195 |
+
*
|
196 |
+
* @return array
|
197 |
+
*/
|
198 |
function build_gallery_template_arguments( $args ) {
|
199 |
+
$args = foogallery_gallery_template_setting( 'thumbnail_dimensions', array() );
|
200 |
+
$args['crop'] = '1'; //we now force thumbs to be cropped
|
201 |
+
$args['link'] = foogallery_gallery_template_setting( 'thumbnail_link', 'image' );
|
202 |
|
203 |
+
return $args;
|
204 |
+
}
|
205 |
}
|
206 |
}
|
extensions/default-templates/image-viewer/class-image-viewer-gallery-template.php
CHANGED
@@ -23,9 +23,6 @@ if ( !class_exists( 'FooGallery_Image_Viewer_Gallery_Template' ) ) {
|
|
23 |
//override specific settings when saving the gallery
|
24 |
add_filter( 'foogallery_save_gallery_settings-image-viewer', array( $this, 'override_settings'), 10, 3 );
|
25 |
|
26 |
-
//build up any preview arguments
|
27 |
-
add_filter( 'foogallery_preview_arguments-image-viewer', array( $this, 'preview_arguments' ), 10, 2 );
|
28 |
-
|
29 |
//build up the thumb dimensions from some arguments
|
30 |
add_filter( 'foogallery_calculate_thumbnail_dimensions-image-viewer', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
31 |
|
@@ -132,7 +129,7 @@ if ( !class_exists( 'FooGallery_Image_Viewer_Gallery_Template' ) ) {
|
|
132 |
),
|
133 |
'row_data'=> array(
|
134 |
'data-foogallery-change-selector' => 'input:radio',
|
135 |
-
'data-foogallery-preview' => '
|
136 |
)
|
137 |
),
|
138 |
array(
|
@@ -265,22 +262,6 @@ if ( !class_exists( 'FooGallery_Image_Viewer_Gallery_Template' ) ) {
|
|
265 |
return $settings;
|
266 |
}
|
267 |
|
268 |
-
/**
|
269 |
-
* Build up a arguments used in the preview of the gallery
|
270 |
-
* @param $args
|
271 |
-
* @param $post_data
|
272 |
-
*
|
273 |
-
* @return mixed
|
274 |
-
*/
|
275 |
-
function preview_arguments( $args, $post_data ) {
|
276 |
-
$args['thumbnail_size'] = $post_data[FOOGALLERY_META_SETTINGS]['image-viewer_thumbnail_size'];
|
277 |
-
$args['text-prev'] = $post_data[FOOGALLERY_META_SETTINGS]['image-viewer_text-prev'];
|
278 |
-
$args['text-of'] = $post_data[FOOGALLERY_META_SETTINGS]['image-viewer_text-of'];
|
279 |
-
$args['text-next'] = $post_data[FOOGALLERY_META_SETTINGS]['image-viewer_text-next'];
|
280 |
-
$args['looping'] = $post_data[FOOGALLERY_META_SETTINGS]['image-viewer_looping'];
|
281 |
-
return $args;
|
282 |
-
}
|
283 |
-
|
284 |
/**
|
285 |
* Builds thumb dimensions from arguments
|
286 |
*
|
23 |
//override specific settings when saving the gallery
|
24 |
add_filter( 'foogallery_save_gallery_settings-image-viewer', array( $this, 'override_settings'), 10, 3 );
|
25 |
|
|
|
|
|
|
|
26 |
//build up the thumb dimensions from some arguments
|
27 |
add_filter( 'foogallery_calculate_thumbnail_dimensions-image-viewer', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
28 |
|
129 |
),
|
130 |
'row_data'=> array(
|
131 |
'data-foogallery-change-selector' => 'input:radio',
|
132 |
+
'data-foogallery-preview' => 'shortcode'
|
133 |
)
|
134 |
),
|
135 |
array(
|
262 |
return $settings;
|
263 |
}
|
264 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
265 |
/**
|
266 |
* Builds thumb dimensions from arguments
|
267 |
*
|
extensions/default-templates/justified/class-justified-gallery-template.php
CHANGED
@@ -18,14 +18,13 @@ if ( !class_exists( 'FooGallery_Justified_Gallery_Template' ) ) {
|
|
18 |
//add the data options needed for justified
|
19 |
add_filter( 'foogallery_build_container_data_options-justified', array( $this, 'add_justified_options' ), 10, 3 );
|
20 |
|
21 |
-
//build up any preview arguments
|
22 |
-
add_filter( 'foogallery_preview_arguments-justified', array( $this, 'preview_arguments' ), 10, 2 );
|
23 |
-
|
24 |
//build up the thumb dimensions from some arguments
|
25 |
add_filter( 'foogallery_calculate_thumbnail_dimensions-justified', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
26 |
|
27 |
//build up the arguments needed for rendering this template
|
28 |
add_filter( 'foogallery_gallery_template_arguments-justified', array( $this, 'build_gallery_template_arguments' ) );
|
|
|
|
|
29 |
}
|
30 |
|
31 |
/**
|
@@ -79,7 +78,7 @@ if ( !class_exists( 'FooGallery_Justified_Gallery_Template' ) ) {
|
|
79 |
'section' => __( 'General', 'foogallery' ),
|
80 |
'type' => 'number',
|
81 |
'class' => 'small-text',
|
82 |
-
'default' =>
|
83 |
'step' => '10',
|
84 |
'min' => '0',
|
85 |
'row_data'=> array(
|
@@ -95,7 +94,7 @@ if ( !class_exists( 'FooGallery_Justified_Gallery_Template' ) ) {
|
|
95 |
'section' => __( 'General', 'foogallery' ),
|
96 |
'type' => 'text',
|
97 |
'class' => 'small-text',
|
98 |
-
'default' => '
|
99 |
'row_data'=> array(
|
100 |
'data-foogallery-change-selector' => 'input',
|
101 |
'data-foogallery-value-selector' => 'input',
|
@@ -109,7 +108,7 @@ if ( !class_exists( 'FooGallery_Justified_Gallery_Template' ) ) {
|
|
109 |
'section' => __( 'General', 'foogallery' ),
|
110 |
'type' => 'number',
|
111 |
'class' => 'small-text',
|
112 |
-
'default' =>
|
113 |
'step' => '1',
|
114 |
'min' => '0',
|
115 |
'row_data'=> array(
|
@@ -141,7 +140,7 @@ if ( !class_exists( 'FooGallery_Justified_Gallery_Template' ) ) {
|
|
141 |
'section' => __( 'General', 'foogallery' ),
|
142 |
'type' => 'radio',
|
143 |
'spacer' => '<span class="spacer"></span>',
|
144 |
-
'default' => '
|
145 |
'choices' => array(
|
146 |
'hide' => __( 'Hide', 'foogallery' ),
|
147 |
'justify' => __( 'Justify', 'foogallery' ),
|
@@ -216,22 +215,6 @@ if ( !class_exists( 'FooGallery_Justified_Gallery_Template' ) ) {
|
|
216 |
return $options;
|
217 |
}
|
218 |
|
219 |
-
/**
|
220 |
-
* Build up a arguments used in the preview of the gallery
|
221 |
-
* @param $args
|
222 |
-
* @param $post_data
|
223 |
-
*
|
224 |
-
* @return mixed
|
225 |
-
*/
|
226 |
-
function preview_arguments( $args, $post_data ) {
|
227 |
-
$args['thumbnail_height'] = $post_data[FOOGALLERY_META_SETTINGS]['justified_thumb_height'];
|
228 |
-
$args['row_height'] = $post_data[FOOGALLERY_META_SETTINGS]['justified_row_height'];
|
229 |
-
$args['max_row_height'] = $post_data[FOOGALLERY_META_SETTINGS]['justified_max_row_height'];
|
230 |
-
$args['margins'] = $post_data[FOOGALLERY_META_SETTINGS]['justified_margins'];
|
231 |
-
$args['lastrow'] = $post_data[FOOGALLERY_META_SETTINGS]['justified_lastrow'];
|
232 |
-
return $args;
|
233 |
-
}
|
234 |
-
|
235 |
/**
|
236 |
* Builds thumb dimensions from arguments
|
237 |
*
|
@@ -268,5 +251,31 @@ if ( !class_exists( 'FooGallery_Justified_Gallery_Template' ) ) {
|
|
268 |
|
269 |
return $args;
|
270 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
271 |
}
|
272 |
}
|
18 |
//add the data options needed for justified
|
19 |
add_filter( 'foogallery_build_container_data_options-justified', array( $this, 'add_justified_options' ), 10, 3 );
|
20 |
|
|
|
|
|
|
|
21 |
//build up the thumb dimensions from some arguments
|
22 |
add_filter( 'foogallery_calculate_thumbnail_dimensions-justified', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
23 |
|
24 |
//build up the arguments needed for rendering this template
|
25 |
add_filter( 'foogallery_gallery_template_arguments-justified', array( $this, 'build_gallery_template_arguments' ) );
|
26 |
+
|
27 |
+
add_filter( 'foogallery_override_gallery_template_fields-justified', array( $this, 'adjust_default_field_values' ), 10, 2 );
|
28 |
}
|
29 |
|
30 |
/**
|
78 |
'section' => __( 'General', 'foogallery' ),
|
79 |
'type' => 'number',
|
80 |
'class' => 'small-text',
|
81 |
+
'default' => 200,
|
82 |
'step' => '10',
|
83 |
'min' => '0',
|
84 |
'row_data'=> array(
|
94 |
'section' => __( 'General', 'foogallery' ),
|
95 |
'type' => 'text',
|
96 |
'class' => 'small-text',
|
97 |
+
'default' => '150%',
|
98 |
'row_data'=> array(
|
99 |
'data-foogallery-change-selector' => 'input',
|
100 |
'data-foogallery-value-selector' => 'input',
|
108 |
'section' => __( 'General', 'foogallery' ),
|
109 |
'type' => 'number',
|
110 |
'class' => 'small-text',
|
111 |
+
'default' => 2,
|
112 |
'step' => '1',
|
113 |
'min' => '0',
|
114 |
'row_data'=> array(
|
140 |
'section' => __( 'General', 'foogallery' ),
|
141 |
'type' => 'radio',
|
142 |
'spacer' => '<span class="spacer"></span>',
|
143 |
+
'default' => 'justify',
|
144 |
'choices' => array(
|
145 |
'hide' => __( 'Hide', 'foogallery' ),
|
146 |
'justify' => __( 'Justify', 'foogallery' ),
|
215 |
return $options;
|
216 |
}
|
217 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
218 |
/**
|
219 |
* Builds thumb dimensions from arguments
|
220 |
*
|
251 |
|
252 |
return $args;
|
253 |
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Adjust the default values for the justified template
|
257 |
+
*
|
258 |
+
* @uses "foogallery_override_gallery_template_fields"
|
259 |
+
* @param $fields
|
260 |
+
* @param $template
|
261 |
+
*
|
262 |
+
* @return array
|
263 |
+
*/
|
264 |
+
function adjust_default_field_values( $fields, $template ) {
|
265 |
+
//update specific fields
|
266 |
+
foreach ($fields as &$field) {
|
267 |
+
if ( 'border_size' === $field['id'] ) {
|
268 |
+
$field['default'] = '';
|
269 |
+
} else if ( 'hover_effect_caption_visibility' == $field['id'] ) {
|
270 |
+
$field['default'] = 'fg-caption-always';
|
271 |
+
} else if ( 'hover_effect_icon' == $field['id'] ) {
|
272 |
+
$field['default'] = 'fg-hover-zoom2';
|
273 |
+
} else if ( 'caption_desc_source' == $field['id'] ) {
|
274 |
+
$field['default'] = 'none';
|
275 |
+
}
|
276 |
+
}
|
277 |
+
|
278 |
+
return $fields;
|
279 |
+
}
|
280 |
}
|
281 |
}
|
extensions/default-templates/masonry/class-masonry-gallery-template.php
CHANGED
@@ -21,9 +21,6 @@ if ( !class_exists( 'FooGallery_Masonry_Gallery_Template' ) ) {
|
|
21 |
//add the data options needed for masonry
|
22 |
add_filter( 'foogallery_build_container_data_options-masonry', array( $this, 'add_masonry_options' ), 10, 3 );
|
23 |
|
24 |
-
//build up any preview arguments
|
25 |
-
add_filter( 'foogallery_preview_arguments-masonry', array( $this, 'preview_arguments' ), 10, 2 );
|
26 |
-
|
27 |
//build up the thumb dimensions from some arguments
|
28 |
add_filter( 'foogallery_calculate_thumbnail_dimensions-masonry', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
29 |
|
@@ -139,7 +136,7 @@ if ( !class_exists( 'FooGallery_Masonry_Gallery_Template' ) ) {
|
|
139 |
'data-foogallery-show-when-field' => 'layout',
|
140 |
'data-foogallery-show-when-field-operator' => '!==',
|
141 |
'data-foogallery-show-when-field-value' => 'fixed',
|
142 |
-
'data-foogallery-preview' => '
|
143 |
)
|
144 |
),
|
145 |
array(
|
@@ -159,7 +156,7 @@ if ( !class_exists( 'FooGallery_Masonry_Gallery_Template' ) ) {
|
|
159 |
'data-foogallery-show-when-field' => 'layout',
|
160 |
'data-foogallery-show-when-field-value' => 'fixed',
|
161 |
'data-foogallery-change-selector' => 'input:radio',
|
162 |
-
'data-foogallery-preview' => '
|
163 |
)
|
164 |
),
|
165 |
array(
|
@@ -240,20 +237,6 @@ if ( !class_exists( 'FooGallery_Masonry_Gallery_Template' ) ) {
|
|
240 |
return $options;
|
241 |
}
|
242 |
|
243 |
-
/**
|
244 |
-
* Build up a arguments used in the preview of the gallery
|
245 |
-
* @param $args
|
246 |
-
* @param $post_data
|
247 |
-
*
|
248 |
-
* @return mixed
|
249 |
-
*/
|
250 |
-
function preview_arguments( $args, $post_data ) {
|
251 |
-
$args['thumbnail_width'] = $post_data[FOOGALLERY_META_SETTINGS]['masonry_thumbnail_width'];
|
252 |
-
$args['layout'] = $post_data[FOOGALLERY_META_SETTINGS]['masonry_layout'];
|
253 |
-
$args['gutter_width'] = $post_data[FOOGALLERY_META_SETTINGS]['masonry_gutter_width'];
|
254 |
-
return $args;
|
255 |
-
}
|
256 |
-
|
257 |
/**
|
258 |
* Builds thumb dimensions from arguments
|
259 |
*
|
@@ -302,7 +285,21 @@ if ( !class_exists( 'FooGallery_Masonry_Gallery_Template' ) ) {
|
|
302 |
//update specific fields
|
303 |
foreach ($fields as &$field) {
|
304 |
if ( 'hover_effect_caption_visibility' === $field['id'] ) {
|
|
|
305 |
$field['choices']['fg-captions-bottom'] = __( 'Below Thumbnail', 'foogallery' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
306 |
}
|
307 |
}
|
308 |
|
21 |
//add the data options needed for masonry
|
22 |
add_filter( 'foogallery_build_container_data_options-masonry', array( $this, 'add_masonry_options' ), 10, 3 );
|
23 |
|
|
|
|
|
|
|
24 |
//build up the thumb dimensions from some arguments
|
25 |
add_filter( 'foogallery_calculate_thumbnail_dimensions-masonry', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
26 |
|
136 |
'data-foogallery-show-when-field' => 'layout',
|
137 |
'data-foogallery-show-when-field-operator' => '!==',
|
138 |
'data-foogallery-show-when-field-value' => 'fixed',
|
139 |
+
'data-foogallery-preview' => 'shortcode'
|
140 |
)
|
141 |
),
|
142 |
array(
|
156 |
'data-foogallery-show-when-field' => 'layout',
|
157 |
'data-foogallery-show-when-field-value' => 'fixed',
|
158 |
'data-foogallery-change-selector' => 'input:radio',
|
159 |
+
'data-foogallery-preview' => 'shortcode'
|
160 |
)
|
161 |
),
|
162 |
array(
|
237 |
return $options;
|
238 |
}
|
239 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
240 |
/**
|
241 |
* Builds thumb dimensions from arguments
|
242 |
*
|
285 |
//update specific fields
|
286 |
foreach ($fields as &$field) {
|
287 |
if ( 'hover_effect_caption_visibility' === $field['id'] ) {
|
288 |
+
//add a new choice for captions to show below the thumbs
|
289 |
$field['choices']['fg-captions-bottom'] = __( 'Below Thumbnail', 'foogallery' );
|
290 |
+
$field['default'] = 'fg-captions-bottom';
|
291 |
+
} else if ( 'theme' === $field['id'] ) {
|
292 |
+
$field['default'] = 'fg-dark';
|
293 |
+
$field['choices'] = array(
|
294 |
+
'fg-light' => __( 'Light', 'foogallery' ),
|
295 |
+
'fg-dark' => __( 'Dark', 'foogallery' ),
|
296 |
+
'fg-transparent' => __( 'Transparent', 'foogallery' ),
|
297 |
+
'fg-custom' => __( 'Custom', 'foogallery' )
|
298 |
+
);
|
299 |
+
} else if ( 'drop_shadow' === $field['id'] ) {
|
300 |
+
$field['default'] = 'fg-shadow-small';
|
301 |
+
} else if ( 'hover_effect_icon' === $field['id'] ) {
|
302 |
+
$field['default'] = 'fg-hover-plus';
|
303 |
}
|
304 |
}
|
305 |
|
extensions/default-templates/shared/css/foogallery.css
CHANGED
@@ -85,12 +85,6 @@
|
|
85 |
z-index: 8;
|
86 |
visibility: hidden;
|
87 |
opacity: 0;
|
88 |
-
background-color: rgba(0,0,0,0.6);
|
89 |
-
color: #fff;
|
90 |
-
}
|
91 |
-
.foogallery.fg-light-overlays .fg-image-overlay {
|
92 |
-
background-color: rgba(255,255,255,0.8);
|
93 |
-
color: #333;
|
94 |
}
|
95 |
.foogallery .fg-image-wrap {
|
96 |
display: block;
|
@@ -139,6 +133,89 @@
|
|
139 |
background-color: #444;
|
140 |
box-shadow: inset 0 0 0 1px #333;
|
141 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
/* Border Size */
|
143 |
.foogallery.fg-border-thin .fg-item-inner {
|
144 |
border-width: 4px;
|
@@ -586,8 +663,6 @@
|
|
586 |
.foogallery .fg-caption {
|
587 |
visibility: hidden;
|
588 |
opacity: 0;
|
589 |
-
background-color: rgba(0,0,0,0.6);
|
590 |
-
color: #fff;
|
591 |
position: absolute;
|
592 |
z-index: 8;
|
593 |
width: 100%;
|
@@ -604,16 +679,6 @@
|
|
604 |
}
|
605 |
.foogallery .fg-caption a {
|
606 |
text-decoration: none;
|
607 |
-
color: #fff;
|
608 |
-
border-bottom: 1px solid #FFF;
|
609 |
-
}
|
610 |
-
.foogallery.fg-light-overlays .fg-caption {
|
611 |
-
background-color: rgba(255,255,255,0.8);
|
612 |
-
color: #333;
|
613 |
-
}
|
614 |
-
.foogallery.fg-light-overlays .fg-caption a {
|
615 |
-
color: #333;
|
616 |
-
border-bottom-color: #333;
|
617 |
}
|
618 |
|
619 |
.foogallery .fg-caption a:hover {
|
@@ -636,7 +701,7 @@
|
|
636 |
}
|
637 |
|
638 |
/* Always */
|
639 |
-
.foogallery.fg-caption-always .fg-caption .fg-caption-inner:before {
|
640 |
display: none;
|
641 |
}
|
642 |
.foogallery.fg-caption-always .fg-item.fg-loaded .fg-caption {
|
@@ -688,35 +753,35 @@
|
|
688 |
background-position: center center;
|
689 |
background-repeat: no-repeat;
|
690 |
}
|
691 |
-
.foogallery.fg-hover-zoom .fg-caption-inner:before,
|
692 |
-
.foogallery.fg-hover-zoom2 .fg-caption-inner:before,
|
693 |
-
.foogallery.fg-hover-zoom3 .fg-caption-inner:before,
|
694 |
-
.foogallery.fg-hover-plus .fg-caption-inner:before,
|
695 |
-
.foogallery.fg-hover-circle-plus .fg-caption-inner:before,
|
696 |
-
.foogallery.fg-hover-eye .fg-caption-inner:before,
|
697 |
-
.foogallery.fg-hover-external .fg-caption-inner:before,
|
698 |
-
.foogallery.fg-hover-tint .fg-caption-inner:before,
|
699 |
-
.foogallery.fg-video-default .fg-caption-inner:before,
|
700 |
-
.foogallery.fg-video-1 .fg-caption-inner:before,
|
701 |
-
.foogallery.fg-video-2 .fg-caption-inner:before,
|
702 |
-
.foogallery.fg-video-3 .fg-caption-inner:before,
|
703 |
-
.foogallery.fg-video-4 .fg-caption-inner:before {
|
704 |
display: inline-block;
|
705 |
}
|
706 |
|
707 |
-
.foogallery.fg-hover-zoom .fg-item-inner:hover .fg-image-overlay,
|
708 |
-
.foogallery.fg-hover-zoom2 .fg-item-inner:hover .fg-image-overlay,
|
709 |
-
.foogallery.fg-hover-zoom3 .fg-item-inner:hover .fg-image-overlay,
|
710 |
-
.foogallery.fg-hover-plus .fg-item-inner:hover .fg-image-overlay,
|
711 |
-
.foogallery.fg-hover-circle-plus .fg-item-inner:hover .fg-image-overlay,
|
712 |
-
.foogallery.fg-hover-eye .fg-item-inner:hover .fg-image-overlay,
|
713 |
-
.foogallery.fg-hover-external .fg-item-inner:hover .fg-image-overlay,
|
714 |
-
.foogallery.fg-hover-tint .fg-item-inner:hover .fg-image-overlay,
|
715 |
-
.foogallery.fg-video-default .fg-type-video .fg-item-inner:hover .fg-image-overlay,
|
716 |
-
.foogallery.fg-video-1 .fg-type-video .fg-item-inner:hover .fg-image-overlay,
|
717 |
-
.foogallery.fg-video-2 .fg-type-video .fg-item-inner:hover .fg-image-overlay,
|
718 |
-
.foogallery.fg-video-3 .fg-type-video .fg-item-inner:hover .fg-image-overlay,
|
719 |
-
.foogallery.fg-video-4 .fg-type-video .fg-item-inner:hover .fg-image-overlay {
|
720 |
visibility: visible;
|
721 |
opacity: 1;
|
722 |
}
|
@@ -859,6 +924,7 @@
|
|
859 |
.foogallery.fg-hover-grayscale .fg-image-overlay,
|
860 |
.foogallery.fg-hover-scale .fg-item,
|
861 |
.foogallery.fg-hover-scale .fg-image-overlay,
|
|
|
862 |
.foogallery.fg-hover-colorize .fg-image,
|
863 |
.foogallery.fg-hover-grayscale .fg-image {
|
864 |
transition-timing-function: ease;
|
@@ -996,6 +1062,31 @@
|
|
996 |
visibility: visible;
|
997 |
opacity: 1;
|
998 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
999 |
/* Slide */
|
1000 |
.foogallery.fg-hover-slide-up .fg-loaded .fg-image-overlay,
|
1001 |
.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,
|
@@ -1597,6 +1688,105 @@
|
|
1597 |
.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption-title+.fg-caption-desc {
|
1598 |
margin-top: 10px;
|
1599 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1600 |
/* Base Styles */
|
1601 |
.fg-justified {
|
1602 |
box-sizing: border-box;
|
@@ -1639,6 +1829,9 @@
|
|
1639 |
top: 50%;
|
1640 |
transform: translateY(-50%);
|
1641 |
}
|
|
|
|
|
|
|
1642 |
.fg-simple_portfolio {
|
1643 |
display: flex;
|
1644 |
flex-wrap: wrap;
|
@@ -1783,7 +1976,99 @@
|
|
1783 |
margin-top: 10px;
|
1784 |
}
|
1785 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1786 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1787 |
/* Polaroid */
|
1788 |
.foogallery.fg-preset.fg-polaroid .fg-item {
|
1789 |
-webkit-backface-visibility: hidden;
|
85 |
z-index: 8;
|
86 |
visibility: hidden;
|
87 |
opacity: 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
}
|
89 |
.foogallery .fg-image-wrap {
|
90 |
display: block;
|
133 |
background-color: #444;
|
134 |
box-shadow: inset 0 0 0 1px #333;
|
135 |
}
|
136 |
+
/* Caption & Overlay Colors */
|
137 |
+
.foogallery .fg-caption {
|
138 |
+
background-color: rgba(0,0,0,0.6);
|
139 |
+
color: #fff;
|
140 |
+
}
|
141 |
+
.foogallery .fg-caption a {
|
142 |
+
color: #fff;
|
143 |
+
border-bottom: 1px solid #FFF;
|
144 |
+
}
|
145 |
+
.foogallery.fg-light-overlays .fg-caption {
|
146 |
+
background-color: rgba(255,255,255,0.8);
|
147 |
+
color: #333;
|
148 |
+
}
|
149 |
+
.foogallery.fg-light-overlays .fg-caption a {
|
150 |
+
color: #333;
|
151 |
+
border-bottom-color: #333;
|
152 |
+
}
|
153 |
+
.foogallery.fg-transparent-overlays .fg-caption {
|
154 |
+
background-color: transparent;
|
155 |
+
color: #fff;
|
156 |
+
}
|
157 |
+
.foogallery.fg-transparent-overlays .fg-caption a {
|
158 |
+
color: #fff;
|
159 |
+
border-bottom-color: #fff;
|
160 |
+
}
|
161 |
+
|
162 |
+
.foogallery .fg-image-overlay {
|
163 |
+
background-color: rgba(0,0,0,0.6);
|
164 |
+
color: #fff;
|
165 |
+
}
|
166 |
+
.foogallery.fg-light-overlays .fg-image-overlay {
|
167 |
+
background-color: rgba(255,255,255,0.8);
|
168 |
+
color: #333;
|
169 |
+
}
|
170 |
+
.foogallery.fg-transparent-overlays .fg-image-overlay {
|
171 |
+
background-color: transparent;
|
172 |
+
color: #fff;
|
173 |
+
}
|
174 |
+
/* Colors */
|
175 |
+
.fg-exif-light .fg-item.fg-item-exif .fg-image-wrap:after {
|
176 |
+
background-color: #FFF;
|
177 |
+
color: #333;
|
178 |
+
}
|
179 |
+
.fg-exif-dark .fg-item.fg-item-exif .fg-image-wrap:after {
|
180 |
+
background-color: #333;
|
181 |
+
color: #FFF;
|
182 |
+
}
|
183 |
+
|
184 |
+
/* Rounded Corners */
|
185 |
+
.fg-exif-rounded .fg-item.fg-item-exif .fg-image-wrap:after {
|
186 |
+
border-radius: 3px;
|
187 |
+
}
|
188 |
+
|
189 |
+
/* Positions ~ Top, Right, Bottom & Left */
|
190 |
+
.fg-exif-bottom-right .fg-item.fg-item-exif .fg-image-wrap:after,
|
191 |
+
.fg-exif-bottom-left .fg-item.fg-item-exif .fg-image-wrap:after,
|
192 |
+
.fg-exif-top-right .fg-item.fg-item-exif .fg-image-wrap:after,
|
193 |
+
.fg-exif-top-left .fg-item.fg-item-exif .fg-image-wrap:after {
|
194 |
+
display: inline-block;
|
195 |
+
position: absolute;
|
196 |
+
content: 'EXIF';
|
197 |
+
font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
|
198 |
+
font-size: 11px;
|
199 |
+
line-height: 10px;
|
200 |
+
padding: 3px 4px;
|
201 |
+
z-index: 7;
|
202 |
+
}
|
203 |
+
.fg-exif-bottom-right .fg-item.fg-item-exif .fg-image-wrap:after {
|
204 |
+
bottom: 5px;
|
205 |
+
right: 5px;
|
206 |
+
}
|
207 |
+
.fg-exif-bottom-left .fg-item.fg-item-exif .fg-image-wrap:after {
|
208 |
+
bottom: 5px;
|
209 |
+
left: 5px;
|
210 |
+
}
|
211 |
+
.fg-exif-top-right .fg-item.fg-item-exif .fg-image-wrap:after {
|
212 |
+
top: 5px;
|
213 |
+
right: 5px;
|
214 |
+
}
|
215 |
+
.fg-exif-top-left .fg-item.fg-item-exif .fg-image-wrap:after {
|
216 |
+
top: 5px;
|
217 |
+
left: 5px;
|
218 |
+
}
|
219 |
/* Border Size */
|
220 |
.foogallery.fg-border-thin .fg-item-inner {
|
221 |
border-width: 4px;
|
663 |
.foogallery .fg-caption {
|
664 |
visibility: hidden;
|
665 |
opacity: 0;
|
|
|
|
|
666 |
position: absolute;
|
667 |
z-index: 8;
|
668 |
width: 100%;
|
679 |
}
|
680 |
.foogallery .fg-caption a {
|
681 |
text-decoration: none;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
682 |
}
|
683 |
|
684 |
.foogallery .fg-caption a:hover {
|
701 |
}
|
702 |
|
703 |
/* Always */
|
704 |
+
.foogallery.fg-caption-always .fg-item .fg-caption .fg-caption-inner:before {
|
705 |
display: none;
|
706 |
}
|
707 |
.foogallery.fg-caption-always .fg-item.fg-loaded .fg-caption {
|
753 |
background-position: center center;
|
754 |
background-repeat: no-repeat;
|
755 |
}
|
756 |
+
.foogallery.fg-hover-zoom:not(.fg-preset) .fg-caption-inner:before,
|
757 |
+
.foogallery.fg-hover-zoom2:not(.fg-preset) .fg-caption-inner:before,
|
758 |
+
.foogallery.fg-hover-zoom3:not(.fg-preset) .fg-caption-inner:before,
|
759 |
+
.foogallery.fg-hover-plus:not(.fg-preset) .fg-caption-inner:before,
|
760 |
+
.foogallery.fg-hover-circle-plus:not(.fg-preset) .fg-caption-inner:before,
|
761 |
+
.foogallery.fg-hover-eye:not(.fg-preset) .fg-caption-inner:before,
|
762 |
+
.foogallery.fg-hover-external:not(.fg-preset) .fg-caption-inner:before,
|
763 |
+
.foogallery.fg-hover-tint:not(.fg-preset) .fg-caption-inner:before,
|
764 |
+
.foogallery.fg-video-default:not(.fg-preset) .fg-caption-inner:before,
|
765 |
+
.foogallery.fg-video-1:not(.fg-preset) .fg-caption-inner:before,
|
766 |
+
.foogallery.fg-video-2:not(.fg-preset) .fg-caption-inner:before,
|
767 |
+
.foogallery.fg-video-3:not(.fg-preset) .fg-caption-inner:before,
|
768 |
+
.foogallery.fg-video-4:not(.fg-preset) .fg-caption-inner:before {
|
769 |
display: inline-block;
|
770 |
}
|
771 |
|
772 |
+
.foogallery.fg-hover-zoom:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,
|
773 |
+
.foogallery.fg-hover-zoom2:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,
|
774 |
+
.foogallery.fg-hover-zoom3:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,
|
775 |
+
.foogallery.fg-hover-plus:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,
|
776 |
+
.foogallery.fg-hover-circle-plus:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,
|
777 |
+
.foogallery.fg-hover-eye:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,
|
778 |
+
.foogallery.fg-hover-external:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,
|
779 |
+
.foogallery.fg-hover-tint:not(.fg-preset) .fg-item-inner:hover .fg-image-overlay,
|
780 |
+
.foogallery.fg-video-default:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,
|
781 |
+
.foogallery.fg-video-1:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,
|
782 |
+
.foogallery.fg-video-2:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,
|
783 |
+
.foogallery.fg-video-3:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay,
|
784 |
+
.foogallery.fg-video-4:not(.fg-preset) .fg-type-video .fg-item-inner:hover .fg-image-overlay {
|
785 |
visibility: visible;
|
786 |
opacity: 1;
|
787 |
}
|
924 |
.foogallery.fg-hover-grayscale .fg-image-overlay,
|
925 |
.foogallery.fg-hover-scale .fg-item,
|
926 |
.foogallery.fg-hover-scale .fg-image-overlay,
|
927 |
+
.foogallery.fg-hover-zoomed .fg-image,
|
928 |
.foogallery.fg-hover-colorize .fg-image,
|
929 |
.foogallery.fg-hover-grayscale .fg-image {
|
930 |
transition-timing-function: ease;
|
1062 |
visibility: visible;
|
1063 |
opacity: 1;
|
1064 |
}
|
1065 |
+
/* Zoomed */
|
1066 |
+
.foogallery.fg-hover-zoomed .fg-image {
|
1067 |
+
transition-property: transform;
|
1068 |
+
z-index: 4;
|
1069 |
+
}
|
1070 |
+
.foogallery.fg-hover-zoomed .fg-item:hover .fg-image {
|
1071 |
+
transform: scale(1.15);
|
1072 |
+
}
|
1073 |
+
.foogallery.fg-hover-zoomed .fg-image-wrap {
|
1074 |
+
overflow: hidden;
|
1075 |
+
}
|
1076 |
+
|
1077 |
+
.foogallery.fg-hover-zoomed .fg-image-overlay,
|
1078 |
+
.foogallery.fg-caption-hover.fg-hover-zoomed .fg-caption {
|
1079 |
+
display: block;
|
1080 |
+
left: 0;
|
1081 |
+
top: 0;
|
1082 |
+
bottom: 0;
|
1083 |
+
transition-property: visibility, opacity, background-color;
|
1084 |
+
}
|
1085 |
+
.foogallery.fg-hover-zoomed .fg-item-inner:hover .fg-image-overlay,
|
1086 |
+
.foogallery.fg-caption-hover.fg-hover-zoomed .fg-item-inner:hover .fg-caption {
|
1087 |
+
visibility: visible;
|
1088 |
+
opacity: 1;
|
1089 |
+
}
|
1090 |
/* Slide */
|
1091 |
.foogallery.fg-hover-slide-up .fg-loaded .fg-image-overlay,
|
1092 |
.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,
|
1688 |
.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption-title+.fg-caption-desc {
|
1689 |
margin-top: 10px;
|
1690 |
}
|
1691 |
+
|
1692 |
+
/* Transparent Theme */
|
1693 |
+
.fg-masonry.fg-transparent .fg-item-inner {
|
1694 |
+
background-color: transparent;
|
1695 |
+
color: #333;
|
1696 |
+
border-color: transparent;
|
1697 |
+
}
|
1698 |
+
|
1699 |
+
/* Captions */
|
1700 |
+
.fg-masonry.fg-transparent .fg-caption {
|
1701 |
+
color: #7f7f7f;
|
1702 |
+
}
|
1703 |
+
.fg-masonry.fg-transparent.fg-captions-bottom .fg-caption {
|
1704 |
+
border-width: 0;
|
1705 |
+
border-top-width: 10px;
|
1706 |
+
border-bottom-width: 10px;
|
1707 |
+
}
|
1708 |
+
.fg-masonry.fg-transparent .fg-caption a {
|
1709 |
+
color: #7f7f7f;
|
1710 |
+
border-bottom: 1px solid #7f7f7f;
|
1711 |
+
}
|
1712 |
+
.fg-masonry.fg-transparent .fg-caption a:hover {
|
1713 |
+
border-bottom: none;
|
1714 |
+
}
|
1715 |
+
.fg-masonry.fg-transparent .fg-caption-title,
|
1716 |
+
.fg-masonry.fg-transparent .fg-caption-title a {
|
1717 |
+
color: #333;
|
1718 |
+
}
|
1719 |
+
.fg-masonry.fg-transparent .fg-caption-title a {
|
1720 |
+
border-bottom: 1px solid #333;
|
1721 |
+
}
|
1722 |
+
|
1723 |
+
/* Rounded Corners */
|
1724 |
+
.fg-masonry.fg-transparent.fg-round-full .fg-item,
|
1725 |
+
.fg-masonry.fg-transparent.fg-round-full .fg-item-inner {
|
1726 |
+
border-radius: 15px;
|
1727 |
+
}
|
1728 |
+
.fg-masonry.fg-transparent.fg-round-full .fg-image-wrap,
|
1729 |
+
.fg-masonry.fg-transparent.fg-round-full .fg-image-overlay,
|
1730 |
+
.fg-masonry.fg-transparent.fg-round-full.fg-shadow-inset-small .fg-thumb:after,
|
1731 |
+
.fg-masonry.fg-transparent.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,
|
1732 |
+
.fg-masonry.fg-transparent.fg-round-full.fg-shadow-inset-large .fg-thumb:after {
|
1733 |
+
border-radius: 50%;
|
1734 |
+
overflow: hidden;
|
1735 |
+
}
|
1736 |
+
|
1737 |
+
.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,
|
1738 |
+
.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,
|
1739 |
+
.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,
|
1740 |
+
.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,
|
1741 |
+
.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,
|
1742 |
+
.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 {
|
1743 |
+
overflow: hidden;
|
1744 |
+
}
|
1745 |
+
.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,
|
1746 |
+
.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,
|
1747 |
+
.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,
|
1748 |
+
.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,
|
1749 |
+
.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 {
|
1750 |
+
border-radius: 5px;
|
1751 |
+
}
|
1752 |
+
.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,
|
1753 |
+
.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,
|
1754 |
+
.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,
|
1755 |
+
.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,
|
1756 |
+
.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 {
|
1757 |
+
border-radius: 10px;
|
1758 |
+
}
|
1759 |
+
.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,
|
1760 |
+
.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,
|
1761 |
+
.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,
|
1762 |
+
.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,
|
1763 |
+
.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 {
|
1764 |
+
border-radius: 15px;
|
1765 |
+
}
|
1766 |
+
|
1767 |
+
/* Shadows */
|
1768 |
+
.fg-masonry.fg-transparent.fg-shadow-inset-small .fg-thumb:after {
|
1769 |
+
box-shadow: inset 0 1px 4px 0 rgba(0,0,0,0.3);
|
1770 |
+
}
|
1771 |
+
.fg-masonry.fg-transparent.fg-shadow-inset-medium .fg-thumb:after {
|
1772 |
+
box-shadow: inset 0 1px 10px 0 rgba(0,0,0,0.3);
|
1773 |
+
}
|
1774 |
+
.fg-masonry.fg-transparent.fg-shadow-inset-large .fg-thumb:after {
|
1775 |
+
box-shadow: inset 0 1px 16px 0 rgba(0,0,0,0.3);
|
1776 |
+
}
|
1777 |
+
|
1778 |
+
.fg-masonry.fg-transparent.fg-shadow-outline .fg-item-inner {
|
1779 |
+
box-shadow: 0 0 0 1px rgba(128, 128, 128, 0.5);
|
1780 |
+
}
|
1781 |
+
.fg-masonry.fg-transparent.fg-shadow-small .fg-item-inner {
|
1782 |
+
box-shadow: 0 1px 4px 0 rgba(128, 128, 128, 0.5);
|
1783 |
+
}
|
1784 |
+
.fg-masonry.fg-transparent.fg-shadow-medium .fg-item-inner {
|
1785 |
+
box-shadow: 0 1px 10px 0 rgba(128, 128, 128, 0.5);
|
1786 |
+
}
|
1787 |
+
.fg-masonry.fg-transparent.fg-shadow-large .fg-item-inner {
|
1788 |
+
box-shadow: 0 1px 16px 0 rgba(128, 128, 128, 0.5);
|
1789 |
+
}
|
1790 |
/* Base Styles */
|
1791 |
.fg-justified {
|
1792 |
box-sizing: border-box;
|
1829 |
top: 50%;
|
1830 |
transform: translateY(-50%);
|
1831 |
}
|
1832 |
+
.fg-justified.fg-hover-zoomed .fg-item.fg-positioned:hover .fg-image {
|
1833 |
+
transform: translateY(-50%) scale(1.15);
|
1834 |
+
}
|
1835 |
.fg-simple_portfolio {
|
1836 |
display: flex;
|
1837 |
flex-wrap: wrap;
|
1976 |
margin-top: 10px;
|
1977 |
}
|
1978 |
|
1979 |
+
/* Transparent Theme */
|
1980 |
+
.fg-simple_portfolio.fg-transparent .fg-item-inner {
|
1981 |
+
background-color: transparent;
|
1982 |
+
color: #333;
|
1983 |
+
border-color: transparent;
|
1984 |
+
}
|
1985 |
+
|
1986 |
+
/* Captions */
|
1987 |
+
.fg-simple_portfolio.fg-transparent .fg-caption {
|
1988 |
+
color: #7f7f7f;
|
1989 |
+
}
|
1990 |
+
.fg-simple_portfolio.fg-transparent .fg-caption a {
|
1991 |
+
color: #7f7f7f;
|
1992 |
+
border-bottom: 1px solid #7f7f7f;
|
1993 |
+
}
|
1994 |
+
.fg-simple_portfolio.fg-transparent .fg-caption a:hover {
|
1995 |
+
border-bottom: none;
|
1996 |
+
}
|
1997 |
+
.fg-simple_portfolio.fg-transparent .fg-caption-title,
|
1998 |
+
.fg-simple_portfolio.fg-transparent .fg-caption-title a {
|
1999 |
+
color: #333;
|
2000 |
+
}
|
2001 |
+
.fg-simple_portfolio.fg-transparent .fg-caption-title a {
|
2002 |
+
border-bottom: 1px solid #333;
|
2003 |
+
}
|
2004 |
+
|
2005 |
+
/* Rounded Corners */
|
2006 |
+
.fg-simple_portfolio.fg-transparent.fg-round-full .fg-item,
|
2007 |
+
.fg-simple_portfolio.fg-transparent.fg-round-full .fg-item-inner {
|
2008 |
+
border-radius: 15px;
|
2009 |
+
}
|
2010 |
+
.fg-simple_portfolio.fg-transparent.fg-round-full .fg-image-wrap,
|
2011 |
+
.fg-simple_portfolio.fg-transparent.fg-round-full .fg-image-overlay,
|
2012 |
+
.fg-simple_portfolio.fg-transparent.fg-round-full.fg-shadow-inset-small .fg-thumb:after,
|
2013 |
+
.fg-simple_portfolio.fg-transparent.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,
|
2014 |
+
.fg-simple_portfolio.fg-transparent.fg-round-full.fg-shadow-inset-large .fg-thumb:after {
|
2015 |
+
border-radius: 50%;
|
2016 |
+
overflow: hidden;
|
2017 |
+
}
|
2018 |
+
|
2019 |
+
.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,
|
2020 |
+
.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,
|
2021 |
+
.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,
|
2022 |
+
.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,
|
2023 |
+
.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,
|
2024 |
+
.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 {
|
2025 |
+
overflow: hidden;
|
2026 |
+
}
|
2027 |
+
.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,
|
2028 |
+
.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,
|
2029 |
+
.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,
|
2030 |
+
.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,
|
2031 |
+
.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 {
|
2032 |
+
border-radius: 5px;
|
2033 |
+
}
|
2034 |
+
.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,
|
2035 |
+
.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,
|
2036 |
+
.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,
|
2037 |
+
.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,
|
2038 |
+
.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 {
|
2039 |
+
border-radius: 10px;
|
2040 |
+
}
|
2041 |
+
.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,
|
2042 |
+
.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,
|
2043 |
+
.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,
|
2044 |
+
.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,
|
2045 |
+
.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 {
|
2046 |
+
border-radius: 15px;
|
2047 |
+
}
|
2048 |
|
2049 |
+
/* Shadows */
|
2050 |
+
.fg-simple_portfolio.fg-transparent.fg-shadow-inset-small .fg-thumb:after {
|
2051 |
+
box-shadow: inset 0 1px 4px 0 rgba(0,0,0,0.3);
|
2052 |
+
}
|
2053 |
+
.fg-simple_portfolio.fg-transparent.fg-shadow-inset-medium .fg-thumb:after {
|
2054 |
+
box-shadow: inset 0 1px 10px 0 rgba(0,0,0,0.3);
|
2055 |
+
}
|
2056 |
+
.fg-simple_portfolio.fg-transparent.fg-shadow-inset-large .fg-thumb:after {
|
2057 |
+
box-shadow: inset 0 1px 16px 0 rgba(0,0,0,0.3);
|
2058 |
+
}
|
2059 |
+
|
2060 |
+
.fg-simple_portfolio.fg-transparent.fg-shadow-outline .fg-item-inner {
|
2061 |
+
box-shadow: 0 0 0 1px rgba(128, 128, 128, 0.5);
|
2062 |
+
}
|
2063 |
+
.fg-simple_portfolio.fg-transparent.fg-shadow-small .fg-item-inner {
|
2064 |
+
box-shadow: 0 1px 4px 0 rgba(128, 128, 128, 0.5);
|
2065 |
+
}
|
2066 |
+
.fg-simple_portfolio.fg-transparent.fg-shadow-medium .fg-item-inner {
|
2067 |
+
box-shadow: 0 1px 10px 0 rgba(128, 128, 128, 0.5);
|
2068 |
+
}
|
2069 |
+
.fg-simple_portfolio.fg-transparent.fg-shadow-large .fg-item-inner {
|
2070 |
+
box-shadow: 0 1px 16px 0 rgba(128, 128, 128, 0.5);
|
2071 |
+
}
|
2072 |
/* Polaroid */
|
2073 |
.foogallery.fg-preset.fg-polaroid .fg-item {
|
2074 |
-webkit-backface-visibility: hidden;
|
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;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-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-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;background-color:rgba(0,0,0,.6);color:#fff;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;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-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-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 .fg-caption-inner:before,.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-tint .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-video-1 .fg-caption-inner:before,.foogallery.fg-video-2 .fg-caption-inner:before,.foogallery.fg-video-3 .fg-caption-inner:before,.foogallery.fg-video-4 .fg-caption-inner:before,.foogallery.fg-video-default .fg-caption-inner:before{display:inline-block}.foogallery.fg-hover-circle-plus .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-external .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-eye .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-plus .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-tint .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-zoom .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-zoom2 .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-hover-zoom3 .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-1 .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-2 .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-3 .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-4 .fg-type-video .fg-item-inner:hover .fg-image-overlay,.foogallery.fg-video-default .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{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-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-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-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}.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}
|
extensions/default-templates/shared/js/foogallery.js
CHANGED
@@ -1,3 +1,1681 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
(function($, _){
|
2 |
|
3 |
/**
|
@@ -59,9 +1737,9 @@
|
|
59 |
);
|
60 |
/*!
|
61 |
* FooGallery.utils - Contains common utility methods and classes used in our plugins.
|
62 |
-
* @version 0.1.
|
63 |
* @link https://github.com/steveush/foo-utils#readme
|
64 |
-
* @copyright Steve Usher
|
65 |
* @license Released under the GPL-3.0 license.
|
66 |
*/
|
67 |
/**
|
@@ -112,7 +1790,7 @@
|
|
112 |
* @name version
|
113 |
* @type {string}
|
114 |
*/
|
115 |
-
version: '0.1.
|
116 |
};
|
117 |
|
118 |
/**
|
@@ -208,7 +1886,7 @@
|
|
208 |
})(jQuery);
|
209 |
(function ($, _){
|
210 |
// only register methods if this version is the current version
|
211 |
-
if (_.version !== '0.1.
|
212 |
|
213 |
/**
|
214 |
* @summary Contains common type checking utility methods.
|
@@ -562,7 +2240,7 @@
|
|
562 |
);
|
563 |
(function($, _, _is){
|
564 |
// only register methods if this version is the current version
|
565 |
-
if (_.version !== '0.1.
|
566 |
|
567 |
/**
|
568 |
* @memberof FooGallery.utils
|
@@ -1145,7 +2823,7 @@
|
|
1145 |
);
|
1146 |
(function(_, _is){
|
1147 |
// only register methods if this version is the current version
|
1148 |
-
if (_.version !== '0.1.
|
1149 |
|
1150 |
/**
|
1151 |
* @summary Contains common url utility methods.
|
@@ -1284,7 +2962,7 @@
|
|
1284 |
);
|
1285 |
(function (_, _is, _fn) {
|
1286 |
// only register methods if this version is the current version
|
1287 |
-
if (_.version !== '0.1.
|
1288 |
|
1289 |
/**
|
1290 |
* @summary Contains common string utility methods.
|
@@ -1319,6 +2997,32 @@
|
|
1319 |
});
|
1320 |
};
|
1321 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1322 |
/**
|
1323 |
* @summary Checks if the `target` contains the given `substr`.
|
1324 |
* @memberof FooGallery.utils.str
|
@@ -1599,7 +3303,7 @@
|
|
1599 |
);
|
1600 |
(function($, _, _is, _fn, _str){
|
1601 |
// only register methods if this version is the current version
|
1602 |
-
if (_.version !== '0.1.
|
1603 |
|
1604 |
/**
|
1605 |
* @summary Contains common object utility methods.
|
@@ -1931,7 +3635,7 @@
|
|
1931 |
);
|
1932 |
(function($, _, _is){
|
1933 |
// only register methods if this version is the current version
|
1934 |
-
if (_.version !== '0.1.
|
1935 |
|
1936 |
// any methods that have dependencies but don't fall into a specific subset or namespace can be added here
|
1937 |
|
@@ -2212,7 +3916,7 @@
|
|
2212 |
);
|
2213 |
(function($, _, _is){
|
2214 |
// only register methods if this version is the current version
|
2215 |
-
if (_.version !== '0.1.
|
2216 |
|
2217 |
/**
|
2218 |
* @summary Contains common utility methods and members for the CSS animation property.
|
@@ -2438,7 +4142,7 @@
|
|
2438 |
);
|
2439 |
(function($, _, _is, _animation){
|
2440 |
// only register methods if this version is the current version
|
2441 |
-
if (_.version !== '0.1.
|
2442 |
|
2443 |
/**
|
2444 |
* @summary Contains common utility methods and members for the CSS transition property.
|
@@ -2612,7 +4316,7 @@
|
|
2612 |
);
|
2613 |
(function ($, _, _is, _obj, _fn) {
|
2614 |
// only register methods if this version is the current version
|
2615 |
-
if (_.version !== '0.1.
|
2616 |
|
2617 |
/**
|
2618 |
* @summary A base class providing some helper methods for prototypal inheritance.
|
@@ -2751,7 +4455,7 @@
|
|
2751 |
);
|
2752 |
(function (_, _is, _str) {
|
2753 |
// only register methods if this version is the current version
|
2754 |
-
if (_.version !== '0.1.
|
2755 |
|
2756 |
_.Event = _.Class.extend(/** @lends FooGallery.utils.Event */{
|
2757 |
/**
|
@@ -3013,7 +4717,7 @@
|
|
3013 |
);
|
3014 |
(function($, _, _is){
|
3015 |
// only register methods if this version is the current version
|
3016 |
-
if (_.version !== '0.1.
|
3017 |
|
3018 |
_.Bounds = _.Class.extend(/** @lends FooGallery.utils.Bounds */{
|
3019 |
/**
|
@@ -3114,7 +4818,7 @@
|
|
3114 |
);
|
3115 |
(function($, _, _is, _fn, _obj){
|
3116 |
// only register methods if this version is the current version
|
3117 |
-
if (_.version !== '0.1.
|
3118 |
|
3119 |
_.Timer = _.EventClass.extend(/** @lends FooGallery.utils.Timer */{
|
3120 |
/**
|
@@ -3408,7 +5112,7 @@
|
|
3408 |
|
3409 |
(function($, _, _is, _fn){
|
3410 |
// only register methods if this version is the current version
|
3411 |
-
if (_.version !== '0.1.
|
3412 |
|
3413 |
_.Factory = _.Class.extend(/** @lends FooGallery.utils.Factory */{
|
3414 |
/**
|
@@ -3731,7 +5435,7 @@
|
|
3731 |
);
|
3732 |
(function(_, _fn, _str){
|
3733 |
// only register methods if this version is the current version
|
3734 |
-
if (_.version !== '0.1.
|
3735 |
|
3736 |
// this is done to handle Content Security in Chrome and other browsers blocking access to the localStorage object under certain configurations.
|
3737 |
// 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
|
@@ -3837,7 +5541,7 @@
|
|
3837 |
);
|
3838 |
(function($, _, _fn){
|
3839 |
// only register methods if this version is the current version
|
3840 |
-
if (_.version !== '0.1.
|
3841 |
|
3842 |
_.FullscreenAPI = _.EventClass.extend(/** @lends FooGallery.utils.FullscreenAPI */{
|
3843 |
/**
|
@@ -4229,12 +5933,37 @@
|
|
4229 |
return complete;
|
4230 |
};
|
4231 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4232 |
})(
|
4233 |
-
|
4234 |
-
|
4235 |
-
|
4236 |
-
|
4237 |
-
|
|
|
4238 |
);
|
4239 |
(function($, _, _utils, _is, _obj) {
|
4240 |
|
@@ -4971,6 +6700,9 @@
|
|
4971 |
create: false,
|
4972 |
children: false
|
4973 |
};
|
|
|
|
|
|
|
4974 |
},
|
4975 |
|
4976 |
// ################
|
@@ -5061,6 +6793,7 @@
|
|
5061 |
if (selector != null && !self.$el.is(selector)) {
|
5062 |
self.$el.addClass(self.opt.classes);
|
5063 |
}
|
|
|
5064 |
|
5065 |
// if the container currently has no children make them
|
5066 |
if (self.$el.children().not(self.sel.item.elem).length === 0) {
|
@@ -5350,6 +7083,7 @@
|
|
5350 |
* });
|
5351 |
*/
|
5352 |
self.raise("destroy");
|
|
|
5353 |
if (self._checkTimeout) clearTimeout(self._checkTimeout);
|
5354 |
self.$scrollParent.off(self.namespace);
|
5355 |
$(window).off(self.namespace);
|
@@ -5533,13 +7267,15 @@
|
|
5533 |
* @function
|
5534 |
* @name getCSSClass
|
5535 |
* @param {string} type - The specific type of CSS class to retrieve.
|
|
|
5536 |
* @returns {string}
|
5537 |
*/
|
5538 |
-
getCSSClass: function(type){
|
|
|
5539 |
var regex = type instanceof RegExp ? type : (_is.string(type) && this.opt.regex.hasOwnProperty(type) ? this.opt.regex[type] : null),
|
5540 |
className = (this.$el.prop("className") || ''),
|
5541 |
match = regex != null ? className.match(regex) : null;
|
5542 |
-
return match != null && match.length >= 2 ? match[1] :
|
5543 |
},
|
5544 |
|
5545 |
// ###############
|
@@ -7055,6 +8791,18 @@
|
|
7055 |
* @type {boolean}
|
7056 |
*/
|
7057 |
self.panelHide = self.opt.panelHide;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7058 |
/**
|
7059 |
* @summary The cached result of the last call to the {@link FooGallery.Item#getThumbUrl|getThumbUrl} method.
|
7060 |
* @memberof FooGallery.Item#
|
@@ -7330,6 +9078,10 @@
|
|
7330 |
self.description = data.description || data.captionDesc || self.description || self.alt;
|
7331 |
self.noLightbox = self.$anchor.hasClass(cls.noLightbox);
|
7332 |
self.panelHide = self.$anchor.hasClass(cls.panelHide);
|
|
|
|
|
|
|
|
|
7333 |
// if the caption or description are not set yet try fetching it from the html
|
7334 |
if (_is.empty(self.caption)) self.caption = $.trim(self.$caption.find(sel.caption.title).html());
|
7335 |
if (_is.empty(self.description)) self.description = $.trim(self.$caption.find(sel.caption.description).html());
|
@@ -7366,6 +9118,9 @@
|
|
7366 |
self._undo.placeholder = true;
|
7367 |
}
|
7368 |
self.$el.addClass(self.getTypeClass());
|
|
|
|
|
|
|
7369 |
if (self.isCreated && self.isAttached && !self.isLoading && !self.isLoaded && !self.isError) {
|
7370 |
self.$el.addClass(cls.idle);
|
7371 |
}
|
@@ -7456,8 +9211,8 @@
|
|
7456 |
* @returns {boolean}
|
7457 |
*/
|
7458 |
doCreateItem: function () {
|
7459 |
-
var self = this, o = self.tmpl.opt, cls = self.cls, attr = self.attr, type = self.getTypeClass();
|
7460 |
-
attr.elem["class"] = [cls.elem, type, cls.idle].join(" ");
|
7461 |
|
7462 |
attr.inner["class"] = cls.inner;
|
7463 |
|
@@ -7967,6 +9722,15 @@
|
|
7967 |
showCaptionDescription: true,
|
7968 |
noLightbox: false,
|
7969 |
panelHide: false,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7970 |
attr: {
|
7971 |
elem: {},
|
7972 |
inner: {},
|
@@ -7984,6 +9748,7 @@
|
|
7984 |
item: {
|
7985 |
elem: "fg-item",
|
7986 |
inner: "fg-item-inner",
|
|
|
7987 |
anchor: "fg-thumb",
|
7988 |
overlay: "fg-image-overlay",
|
7989 |
wrap: "fg-image-wrap",
|
@@ -8006,7 +9771,17 @@
|
|
8006 |
}
|
8007 |
}
|
8008 |
}, {
|
8009 |
-
item: {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8010 |
});
|
8011 |
|
8012 |
_.components.register("item", _.Item);
|
@@ -8860,8 +10635,6 @@
|
|
8860 |
this.$el = template.$el;
|
8861 |
this.options = $.extend(true, {}, _.Justified.defaults, options);
|
8862 |
this._items = [];
|
8863 |
-
this._lastRefresh = 0;
|
8864 |
-
this._refresh = null;
|
8865 |
},
|
8866 |
init: function(){
|
8867 |
var self = this;
|
@@ -8872,23 +10645,10 @@
|
|
8872 |
self.options.maxRowHeight = parseInt(self.options.maxRowHeight);
|
8873 |
}
|
8874 |
}
|
8875 |
-
$(window).on("resize.justified", {self: self}, self.onWindowResize);
|
8876 |
-
this._refresh = setInterval(function(){
|
8877 |
-
self.refresh();
|
8878 |
-
}, self.options.refreshInterval);
|
8879 |
},
|
8880 |
destroy: function(){
|
8881 |
-
if (this._refresh) clearInterval(this._refresh);
|
8882 |
-
$(window).off("resize.justified");
|
8883 |
this.$el.removeAttr("style");
|
8884 |
},
|
8885 |
-
refresh: function(){
|
8886 |
-
var maxWidth = this.getContainerWidth();
|
8887 |
-
if (maxWidth != this._lastRefresh){
|
8888 |
-
this.layout();
|
8889 |
-
this._lastRefresh = maxWidth;
|
8890 |
-
}
|
8891 |
-
},
|
8892 |
parse: function(){
|
8893 |
var self = this;
|
8894 |
return self._items = $.map(self.tmpl.getItems(), function(item, i){
|
@@ -8920,19 +10680,14 @@
|
|
8920 |
}
|
8921 |
return self.$el.width();
|
8922 |
},
|
8923 |
-
layout: function(
|
8924 |
-
|
8925 |
-
autoCorrect = _is.boolean(autoCorrect) ? autoCorrect : true;
|
8926 |
-
|
8927 |
-
if (refresh || this._items.length === 0){
|
8928 |
-
this.parse();
|
8929 |
-
}
|
8930 |
|
8931 |
var self = this,
|
8932 |
-
|
8933 |
-
|
8934 |
-
|
8935 |
-
|
8936 |
|
8937 |
$.each(rows, function(ri, row){
|
8938 |
if (row.visible){
|
@@ -8942,11 +10697,6 @@
|
|
8942 |
self.render(row);
|
8943 |
});
|
8944 |
self.$el.height(height);
|
8945 |
-
// if our layout caused the container width to get smaller
|
8946 |
-
// i.e. makes a scrollbar appear then layout again to account for it
|
8947 |
-
if (autoCorrect && self.getContainerWidth() < maxWidth){
|
8948 |
-
self.layout(false, false);
|
8949 |
-
}
|
8950 |
},
|
8951 |
render: function(row){
|
8952 |
for (var j = 0, jl = row.items.length, item; j < jl; j++){
|
@@ -9126,9 +10876,6 @@
|
|
9126 |
if (rows.length > 1) top += self.options.margins;
|
9127 |
self.lastRow(row, top, maxWidth, maxHeight);
|
9128 |
return rows;
|
9129 |
-
},
|
9130 |
-
onWindowResize: function(e){
|
9131 |
-
e.data.self.layout( true );
|
9132 |
}
|
9133 |
});
|
9134 |
|
@@ -9158,24 +10905,24 @@
|
|
9158 |
self.justified.init();
|
9159 |
},
|
9160 |
onFirstLoad: function(event, self){
|
9161 |
-
self.justified.layout(
|
9162 |
},
|
9163 |
onReady: function(event, self){
|
9164 |
-
self.justified.layout(
|
9165 |
},
|
9166 |
onDestroy: function(event, self){
|
9167 |
self.justified.destroy();
|
9168 |
},
|
9169 |
onLayout: function(event, self){
|
9170 |
-
self.justified.layout(
|
9171 |
},
|
9172 |
onAfterPageChange: function(event, self, current, prev, isFilter){
|
9173 |
if (!isFilter){
|
9174 |
-
self.justified.layout(
|
9175 |
}
|
9176 |
},
|
9177 |
onAfterFilterChange: function(event, self){
|
9178 |
-
self.justified.layout(
|
9179 |
}
|
9180 |
});
|
9181 |
|
@@ -9221,13 +10968,12 @@
|
|
9221 |
},
|
9222 |
onPostInit: function(event, self){
|
9223 |
self.checkCSS();
|
9224 |
-
$(window).on("resize" + self.namespace, {self: self}, _fn.debounce(function () {
|
9225 |
-
self.checkCSS();
|
9226 |
-
}, 50));
|
9227 |
},
|
9228 |
onDestroy: function(event, self){
|
9229 |
self.removeCSS();
|
9230 |
-
|
|
|
|
|
9231 |
},
|
9232 |
checkCSS: function(){
|
9233 |
var self = this, maxWidth = self.getContainerWidth(), current = maxWidth < self.template.columnWidth;
|
@@ -9561,7 +11307,7 @@
|
|
9561 |
FooGallery,
|
9562 |
FooGallery.utils.obj
|
9563 |
);
|
9564 |
-
(function ($, _, _utils, _obj) {
|
9565 |
|
9566 |
_.triggerPostLoad = function (e, tmpl, current, prev, isFilter) {
|
9567 |
if (e.type === "first-load" || (tmpl.initialized && ((e.type === "after-page-change" && !isFilter) || e.type === "after-filter-change"))) {
|
@@ -9591,15 +11337,35 @@
|
|
9591 |
_.autoDefaults = _obj.merge(_.autoDefaults, options);
|
9592 |
};
|
9593 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9594 |
_.load = _.reload = function(){
|
9595 |
// this automatically initializes all templates on page load
|
9596 |
$(function () {
|
|
|
9597 |
if (_.autoEnabled){
|
9598 |
$('[id^="foogallery-gallery-"]:not(.fg-ready)').foogallery(_.autoDefaults);
|
9599 |
}
|
9600 |
});
|
9601 |
|
9602 |
_utils.ready(function () {
|
|
|
9603 |
if (_.autoEnabled){
|
9604 |
$('[id^="foogallery-gallery-"].fg-ready').foogallery(_.autoDefaults);
|
9605 |
}
|
@@ -9609,8 +11375,9 @@
|
|
9609 |
_.load();
|
9610 |
|
9611 |
})(
|
9612 |
-
|
9613 |
-
|
9614 |
-
|
9615 |
-
|
|
|
9616 |
);
|
1 |
+
/**
|
2 |
+
* Copyright 2016 Google Inc. All Rights Reserved.
|
3 |
+
*
|
4 |
+
* Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.
|
5 |
+
*
|
6 |
+
* https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
(function() {
|
10 |
+
'use strict';
|
11 |
+
|
12 |
+
// Exit early if we're not running in a browser.
|
13 |
+
if (typeof window !== 'object') {
|
14 |
+
return;
|
15 |
+
}
|
16 |
+
|
17 |
+
// Exit early if all IntersectionObserver and IntersectionObserverEntry
|
18 |
+
// features are natively supported.
|
19 |
+
if ('IntersectionObserver' in window &&
|
20 |
+
'IntersectionObserverEntry' in window &&
|
21 |
+
'intersectionRatio' in window.IntersectionObserverEntry.prototype) {
|
22 |
+
|
23 |
+
// Minimal polyfill for Edge 15's lack of `isIntersecting`
|
24 |
+
// See: https://github.com/w3c/IntersectionObserver/issues/211
|
25 |
+
if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {
|
26 |
+
Object.defineProperty(window.IntersectionObserverEntry.prototype,
|
27 |
+
'isIntersecting', {
|
28 |
+
get: function () {
|
29 |
+
return this.intersectionRatio > 0;
|
30 |
+
}
|
31 |
+
});
|
32 |
+
}
|
33 |
+
return;
|
34 |
+
}
|
35 |
+
|
36 |
+
|
37 |
+
/**
|
38 |
+
* A local reference to the document.
|
39 |
+
*/
|
40 |
+
var document = window.document;
|
41 |
+
|
42 |
+
|
43 |
+
/**
|
44 |
+
* An IntersectionObserver registry. This registry exists to hold a strong
|
45 |
+
* reference to IntersectionObserver instances currently observing a target
|
46 |
+
* element. Without this registry, instances without another reference may be
|
47 |
+
* garbage collected.
|
48 |
+
*/
|
49 |
+
var registry = [];
|
50 |
+
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Creates the global IntersectionObserverEntry constructor.
|
54 |
+
* https://w3c.github.io/IntersectionObserver/#intersection-observer-entry
|
55 |
+
* @param {Object} entry A dictionary of instance properties.
|
56 |
+
* @constructor
|
57 |
+
*/
|
58 |
+
function IntersectionObserverEntry(entry) {
|
59 |
+
this.time = entry.time;
|
60 |
+
this.target = entry.target;
|
61 |
+
this.rootBounds = entry.rootBounds;
|
62 |
+
this.boundingClientRect = entry.boundingClientRect;
|
63 |
+
this.intersectionRect = entry.intersectionRect || getEmptyRect();
|
64 |
+
this.isIntersecting = !!entry.intersectionRect;
|
65 |
+
|
66 |
+
// Calculates the intersection ratio.
|
67 |
+
var targetRect = this.boundingClientRect;
|
68 |
+
var targetArea = targetRect.width * targetRect.height;
|
69 |
+
var intersectionRect = this.intersectionRect;
|
70 |
+
var intersectionArea = intersectionRect.width * intersectionRect.height;
|
71 |
+
|
72 |
+
// Sets intersection ratio.
|
73 |
+
if (targetArea) {
|
74 |
+
// Round the intersection ratio to avoid floating point math issues:
|
75 |
+
// https://github.com/w3c/IntersectionObserver/issues/324
|
76 |
+
this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));
|
77 |
+
} else {
|
78 |
+
// If area is zero and is intersecting, sets to 1, otherwise to 0
|
79 |
+
this.intersectionRatio = this.isIntersecting ? 1 : 0;
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Creates the global IntersectionObserver constructor.
|
86 |
+
* https://w3c.github.io/IntersectionObserver/#intersection-observer-interface
|
87 |
+
* @param {Function} callback The function to be invoked after intersection
|
88 |
+
* changes have queued. The function is not invoked if the queue has
|
89 |
+
* been emptied by calling the `takeRecords` method.
|
90 |
+
* @param {Object=} opt_options Optional configuration options.
|
91 |
+
* @constructor
|
92 |
+
*/
|
93 |
+
function IntersectionObserver(callback, opt_options) {
|
94 |
+
|
95 |
+
var options = opt_options || {};
|
96 |
+
|
97 |
+
if (typeof callback != 'function') {
|
98 |
+
throw new Error('callback must be a function');
|
99 |
+
}
|
100 |
+
|
101 |
+
if (options.root && options.root.nodeType != 1) {
|
102 |
+
throw new Error('root must be an Element');
|
103 |
+
}
|
104 |
+
|
105 |
+
// Binds and throttles `this._checkForIntersections`.
|
106 |
+
this._checkForIntersections = throttle(
|
107 |
+
this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);
|
108 |
+
|
109 |
+
// Private properties.
|
110 |
+
this._callback = callback;
|
111 |
+
this._observationTargets = [];
|
112 |
+
this._queuedEntries = [];
|
113 |
+
this._rootMarginValues = this._parseRootMargin(options.rootMargin);
|
114 |
+
|
115 |
+
// Public properties.
|
116 |
+
this.thresholds = this._initThresholds(options.threshold);
|
117 |
+
this.root = options.root || null;
|
118 |
+
this.rootMargin = this._rootMarginValues.map(function(margin) {
|
119 |
+
return margin.value + margin.unit;
|
120 |
+
}).join(' ');
|
121 |
+
}
|
122 |
+
|
123 |
+
|
124 |
+
/**
|
125 |
+
* The minimum interval within which the document will be checked for
|
126 |
+
* intersection changes.
|
127 |
+
*/
|
128 |
+
IntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;
|
129 |
+
|
130 |
+
|
131 |
+
/**
|
132 |
+
* The frequency in which the polyfill polls for intersection changes.
|
133 |
+
* this can be updated on a per instance basis and must be set prior to
|
134 |
+
* calling `observe` on the first target.
|
135 |
+
*/
|
136 |
+
IntersectionObserver.prototype.POLL_INTERVAL = null;
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Use a mutation observer on the root element
|
140 |
+
* to detect intersection changes.
|
141 |
+
*/
|
142 |
+
IntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;
|
143 |
+
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Starts observing a target element for intersection changes based on
|
147 |
+
* the thresholds values.
|
148 |
+
* @param {Element} target The DOM element to observe.
|
149 |
+
*/
|
150 |
+
IntersectionObserver.prototype.observe = function(target) {
|
151 |
+
var isTargetAlreadyObserved = this._observationTargets.some(function(item) {
|
152 |
+
return item.element == target;
|
153 |
+
});
|
154 |
+
|
155 |
+
if (isTargetAlreadyObserved) {
|
156 |
+
return;
|
157 |
+
}
|
158 |
+
|
159 |
+
if (!(target && target.nodeType == 1)) {
|
160 |
+
throw new Error('target must be an Element');
|
161 |
+
}
|
162 |
+
|
163 |
+
this._registerInstance();
|
164 |
+
this._observationTargets.push({element: target, entry: null});
|
165 |
+
this._monitorIntersections();
|
166 |
+
this._checkForIntersections();
|
167 |
+
};
|
168 |
+
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Stops observing a target element for intersection changes.
|
172 |
+
* @param {Element} target The DOM element to observe.
|
173 |
+
*/
|
174 |
+
IntersectionObserver.prototype.unobserve = function(target) {
|
175 |
+
this._observationTargets =
|
176 |
+
this._observationTargets.filter(function(item) {
|
177 |
+
|
178 |
+
return item.element != target;
|
179 |
+
});
|
180 |
+
if (!this._observationTargets.length) {
|
181 |
+
this._unmonitorIntersections();
|
182 |
+
this._unregisterInstance();
|
183 |
+
}
|
184 |
+
};
|
185 |
+
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Stops observing all target elements for intersection changes.
|
189 |
+
*/
|
190 |
+
IntersectionObserver.prototype.disconnect = function() {
|
191 |
+
this._observationTargets = [];
|
192 |
+
this._unmonitorIntersections();
|
193 |
+
this._unregisterInstance();
|
194 |
+
};
|
195 |
+
|
196 |
+
|
197 |
+
/**
|
198 |
+
* Returns any queue entries that have not yet been reported to the
|
199 |
+
* callback and clears the queue. This can be used in conjunction with the
|
200 |
+
* callback to obtain the absolute most up-to-date intersection information.
|
201 |
+
* @return {Array} The currently queued entries.
|
202 |
+
*/
|
203 |
+
IntersectionObserver.prototype.takeRecords = function() {
|
204 |
+
var records = this._queuedEntries.slice();
|
205 |
+
this._queuedEntries = [];
|
206 |
+
return records;
|
207 |
+
};
|
208 |
+
|
209 |
+
|
210 |
+
/**
|
211 |
+
* Accepts the threshold value from the user configuration object and
|
212 |
+
* returns a sorted array of unique threshold values. If a value is not
|
213 |
+
* between 0 and 1 and error is thrown.
|
214 |
+
* @private
|
215 |
+
* @param {Array|number=} opt_threshold An optional threshold value or
|
216 |
+
* a list of threshold values, defaulting to [0].
|
217 |
+
* @return {Array} A sorted list of unique and valid threshold values.
|
218 |
+
*/
|
219 |
+
IntersectionObserver.prototype._initThresholds = function(opt_threshold) {
|
220 |
+
var threshold = opt_threshold || [0];
|
221 |
+
if (!Array.isArray(threshold)) threshold = [threshold];
|
222 |
+
|
223 |
+
return threshold.sort().filter(function(t, i, a) {
|
224 |
+
if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {
|
225 |
+
throw new Error('threshold must be a number between 0 and 1 inclusively');
|
226 |
+
}
|
227 |
+
return t !== a[i - 1];
|
228 |
+
});
|
229 |
+
};
|
230 |
+
|
231 |
+
|
232 |
+
/**
|
233 |
+
* Accepts the rootMargin value from the user configuration object
|
234 |
+
* and returns an array of the four margin values as an object containing
|
235 |
+
* the value and unit properties. If any of the values are not properly
|
236 |
+
* formatted or use a unit other than px or %, and error is thrown.
|
237 |
+
* @private
|
238 |
+
* @param {string=} opt_rootMargin An optional rootMargin value,
|
239 |
+
* defaulting to '0px'.
|
240 |
+
* @return {Array<Object>} An array of margin objects with the keys
|
241 |
+
* value and unit.
|
242 |
+
*/
|
243 |
+
IntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {
|
244 |
+
var marginString = opt_rootMargin || '0px';
|
245 |
+
var margins = marginString.split(/\s+/).map(function(margin) {
|
246 |
+
var parts = /^(-?\d*\.?\d+)(px|%)$/.exec(margin);
|
247 |
+
if (!parts) {
|
248 |
+
throw new Error('rootMargin must be specified in pixels or percent');
|
249 |
+
}
|
250 |
+
return {value: parseFloat(parts[1]), unit: parts[2]};
|
251 |
+
});
|
252 |
+
|
253 |
+
// Handles shorthand.
|
254 |
+
margins[1] = margins[1] || margins[0];
|
255 |
+
margins[2] = margins[2] || margins[0];
|
256 |
+
margins[3] = margins[3] || margins[1];
|
257 |
+
|
258 |
+
return margins;
|
259 |
+
};
|
260 |
+
|
261 |
+
|
262 |
+
/**
|
263 |
+
* Starts polling for intersection changes if the polling is not already
|
264 |
+
* happening, and if the page's visibility state is visible.
|
265 |
+
* @private
|
266 |
+
*/
|
267 |
+
IntersectionObserver.prototype._monitorIntersections = function() {
|
268 |
+
if (!this._monitoringIntersections) {
|
269 |
+
this._monitoringIntersections = true;
|
270 |
+
|
271 |
+
// If a poll interval is set, use polling instead of listening to
|
272 |
+
// resize and scroll events or DOM mutations.
|
273 |
+
if (this.POLL_INTERVAL) {
|
274 |
+
this._monitoringInterval = setInterval(
|
275 |
+
this._checkForIntersections, this.POLL_INTERVAL);
|
276 |
+
}
|
277 |
+
else {
|
278 |
+
addEvent(window, 'resize', this._checkForIntersections, true);
|
279 |
+
addEvent(document, 'scroll', this._checkForIntersections, true);
|
280 |
+
|
281 |
+
if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {
|
282 |
+
this._domObserver = new MutationObserver(this._checkForIntersections);
|
283 |
+
this._domObserver.observe(document, {
|
284 |
+
attributes: true,
|
285 |
+
childList: true,
|
286 |
+
characterData: true,
|
287 |
+
subtree: true
|
288 |
+
});
|
289 |
+
}
|
290 |
+
}
|
291 |
+
}
|
292 |
+
};
|
293 |
+
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Stops polling for intersection changes.
|
297 |
+
* @private
|
298 |
+
*/
|
299 |
+
IntersectionObserver.prototype._unmonitorIntersections = function() {
|
300 |
+
if (this._monitoringIntersections) {
|
301 |
+
this._monitoringIntersections = false;
|
302 |
+
|
303 |
+
clearInterval(this._monitoringInterval);
|
304 |
+
this._monitoringInterval = null;
|
305 |
+
|
306 |
+
removeEvent(window, 'resize', this._checkForIntersections, true);
|
307 |
+
removeEvent(document, 'scroll', this._checkForIntersections, true);
|
308 |
+
|
309 |
+
if (this._domObserver) {
|
310 |
+
this._domObserver.disconnect();
|
311 |
+
this._domObserver = null;
|
312 |
+
}
|
313 |
+
}
|
314 |
+
};
|
315 |
+
|
316 |
+
|
317 |
+
/**
|
318 |
+
* Scans each observation target for intersection changes and adds them
|
319 |
+
* to the internal entries queue. If new entries are found, it
|
320 |
+
* schedules the callback to be invoked.
|
321 |
+
* @private
|
322 |
+
*/
|
323 |
+
IntersectionObserver.prototype._checkForIntersections = function() {
|
324 |
+
var rootIsInDom = this._rootIsInDom();
|
325 |
+
var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();
|
326 |
+
|
327 |
+
this._observationTargets.forEach(function(item) {
|
328 |
+
var target = item.element;
|
329 |
+
var targetRect = getBoundingClientRect(target);
|
330 |
+
var rootContainsTarget = this._rootContainsTarget(target);
|
331 |
+
var oldEntry = item.entry;
|
332 |
+
var intersectionRect = rootIsInDom && rootContainsTarget &&
|
333 |
+
this._computeTargetAndRootIntersection(target, rootRect);
|
334 |
+
|
335 |
+
var newEntry = item.entry = new IntersectionObserverEntry({
|
336 |
+
time: now(),
|
337 |
+
target: target,
|
338 |
+
boundingClientRect: targetRect,
|
339 |
+
rootBounds: rootRect,
|
340 |
+
intersectionRect: intersectionRect
|
341 |
+
});
|
342 |
+
|
343 |
+
if (!oldEntry) {
|
344 |
+
this._queuedEntries.push(newEntry);
|
345 |
+
} else if (rootIsInDom && rootContainsTarget) {
|
346 |
+
// If the new entry intersection ratio has crossed any of the
|
347 |
+
// thresholds, add a new entry.
|
348 |
+
if (this._hasCrossedThreshold(oldEntry, newEntry)) {
|
349 |
+
this._queuedEntries.push(newEntry);
|
350 |
+
}
|
351 |
+
} else {
|
352 |
+
// If the root is not in the DOM or target is not contained within
|
353 |
+
// root but the previous entry for this target had an intersection,
|
354 |
+
// add a new record indicating removal.
|
355 |
+
if (oldEntry && oldEntry.isIntersecting) {
|
356 |
+
this._queuedEntries.push(newEntry);
|
357 |
+
}
|
358 |
+
}
|
359 |
+
}, this);
|
360 |
+
|
361 |
+
if (this._queuedEntries.length) {
|
362 |
+
this._callback(this.takeRecords(), this);
|
363 |
+
}
|
364 |
+
};
|
365 |
+
|
366 |
+
|
367 |
+
/**
|
368 |
+
* Accepts a target and root rect computes the intersection between then
|
369 |
+
* following the algorithm in the spec.
|
370 |
+
* TODO(philipwalton): at this time clip-path is not considered.
|
371 |
+
* https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo
|
372 |
+
* @param {Element} target The target DOM element
|
373 |
+
* @param {Object} rootRect The bounding rect of the root after being
|
374 |
+
* expanded by the rootMargin value.
|
375 |
+
* @return {?Object} The final intersection rect object or undefined if no
|
376 |
+
* intersection is found.
|
377 |
+
* @private
|
378 |
+
*/
|
379 |
+
IntersectionObserver.prototype._computeTargetAndRootIntersection =
|
380 |
+
function(target, rootRect) {
|
381 |
+
|
382 |
+
// If the element isn't displayed, an intersection can't happen.
|
383 |
+
if (window.getComputedStyle(target).display == 'none') return;
|
384 |
+
|
385 |
+
var targetRect = getBoundingClientRect(target);
|
386 |
+
var intersectionRect = targetRect;
|
387 |
+
var parent = getParentNode(target);
|
388 |
+
var atRoot = false;
|
389 |
+
|
390 |
+
while (!atRoot) {
|
391 |
+
var parentRect = null;
|
392 |
+
var parentComputedStyle = parent.nodeType == 1 ?
|
393 |
+
window.getComputedStyle(parent) : {};
|
394 |
+
|
395 |
+
// If the parent isn't displayed, an intersection can't happen.
|
396 |
+
if (parentComputedStyle.display == 'none') return;
|
397 |
+
|
398 |
+
if (parent == this.root || parent == document) {
|
399 |
+
atRoot = true;
|
400 |
+
parentRect = rootRect;
|
401 |
+
} else {
|
402 |
+
// If the element has a non-visible overflow, and it's not the <body>
|
403 |
+
// or <html> element, update the intersection rect.
|
404 |
+
// Note: <body> and <html> cannot be clipped to a rect that's not also
|
405 |
+
// the document rect, so no need to compute a new intersection.
|
406 |
+
if (parent != document.body &&
|
407 |
+
parent != document.documentElement &&
|
408 |
+
parentComputedStyle.overflow != 'visible') {
|
409 |
+
parentRect = getBoundingClientRect(parent);
|
410 |
+
}
|
411 |
+
}
|
412 |
+
|
413 |
+
// If either of the above conditionals set a new parentRect,
|
414 |
+
// calculate new intersection data.
|
415 |
+
if (parentRect) {
|
416 |
+
intersectionRect = computeRectIntersection(parentRect, intersectionRect);
|
417 |
+
|
418 |
+
if (!intersectionRect) break;
|
419 |
+
}
|
420 |
+
parent = getParentNode(parent);
|
421 |
+
}
|
422 |
+
return intersectionRect;
|
423 |
+
};
|
424 |
+
|
425 |
+
|
426 |
+
/**
|
427 |
+
* Returns the root rect after being expanded by the rootMargin value.
|
428 |
+
* @return {Object} The expanded root rect.
|
429 |
+
* @private
|
430 |
+
*/
|
431 |
+
IntersectionObserver.prototype._getRootRect = function() {
|
432 |
+
var rootRect;
|
433 |
+
if (this.root) {
|
434 |
+
rootRect = getBoundingClientRect(this.root);
|
435 |
+
} else {
|
436 |
+
// Use <html>/<body> instead of window since scroll bars affect size.
|
437 |
+
var html = document.documentElement;
|
438 |
+
var body = document.body;
|
439 |
+
rootRect = {
|
440 |
+
top: 0,
|
441 |
+
left: 0,
|
442 |
+
right: html.clientWidth || body.clientWidth,
|
443 |
+
width: html.clientWidth || body.clientWidth,
|
444 |
+
bottom: html.clientHeight || body.clientHeight,
|
445 |
+
height: html.clientHeight || body.clientHeight
|
446 |
+
};
|
447 |
+
}
|
448 |
+
return this._expandRectByRootMargin(rootRect);
|
449 |
+
};
|
450 |
+
|
451 |
+
|
452 |
+
/**
|
453 |
+
* Accepts a rect and expands it by the rootMargin value.
|
454 |
+
* @param {Object} rect The rect object to expand.
|
455 |
+
* @return {Object} The expanded rect.
|
456 |
+
* @private
|
457 |
+
*/
|
458 |
+
IntersectionObserver.prototype._expandRectByRootMargin = function(rect) {
|
459 |
+
var margins = this._rootMarginValues.map(function(margin, i) {
|
460 |
+
return margin.unit == 'px' ? margin.value :
|
461 |
+
margin.value * (i % 2 ? rect.width : rect.height) / 100;
|
462 |
+
});
|
463 |
+
var newRect = {
|
464 |
+
top: rect.top - margins[0],
|
465 |
+
right: rect.right + margins[1],
|
466 |
+
bottom: rect.bottom + margins[2],
|
467 |
+
left: rect.left - margins[3]
|
468 |
+
};
|
469 |
+
newRect.width = newRect.right - newRect.left;
|
470 |
+
newRect.height = newRect.bottom - newRect.top;
|
471 |
+
|
472 |
+
return newRect;
|
473 |
+
};
|
474 |
+
|
475 |
+
|
476 |
+
/**
|
477 |
+
* Accepts an old and new entry and returns true if at least one of the
|
478 |
+
* threshold values has been crossed.
|
479 |
+
* @param {?IntersectionObserverEntry} oldEntry The previous entry for a
|
480 |
+
* particular target element or null if no previous entry exists.
|
481 |
+
* @param {IntersectionObserverEntry} newEntry The current entry for a
|
482 |
+
* particular target element.
|
483 |
+
* @return {boolean} Returns true if a any threshold has been crossed.
|
484 |
+
* @private
|
485 |
+
*/
|
486 |
+
IntersectionObserver.prototype._hasCrossedThreshold =
|
487 |
+
function(oldEntry, newEntry) {
|
488 |
+
|
489 |
+
// To make comparing easier, an entry that has a ratio of 0
|
490 |
+
// but does not actually intersect is given a value of -1
|
491 |
+
var oldRatio = oldEntry && oldEntry.isIntersecting ?
|
492 |
+
oldEntry.intersectionRatio || 0 : -1;
|
493 |
+
var newRatio = newEntry.isIntersecting ?
|
494 |
+
newEntry.intersectionRatio || 0 : -1;
|
495 |
+
|
496 |
+
// Ignore unchanged ratios
|
497 |
+
if (oldRatio === newRatio) return;
|
498 |
+
|
499 |
+
for (var i = 0; i < this.thresholds.length; i++) {
|
500 |
+
var threshold = this.thresholds[i];
|
501 |
+
|
502 |
+
// Return true if an entry matches a threshold or if the new ratio
|
503 |
+
// and the old ratio are on the opposite sides of a threshold.
|
504 |
+
if (threshold == oldRatio || threshold == newRatio ||
|
505 |
+
threshold < oldRatio !== threshold < newRatio) {
|
506 |
+
return true;
|
507 |
+
}
|
508 |
+
}
|
509 |
+
};
|
510 |
+
|
511 |
+
|
512 |
+
/**
|
513 |
+
* Returns whether or not the root element is an element and is in the DOM.
|
514 |
+
* @return {boolean} True if the root element is an element and is in the DOM.
|
515 |
+
* @private
|
516 |
+
*/
|
517 |
+
IntersectionObserver.prototype._rootIsInDom = function() {
|
518 |
+
return !this.root || containsDeep(document, this.root);
|
519 |
+
};
|
520 |
+
|
521 |
+
|
522 |
+
/**
|
523 |
+
* Returns whether or not the target element is a child of root.
|
524 |
+
* @param {Element} target The target element to check.
|
525 |
+
* @return {boolean} True if the target element is a child of root.
|
526 |
+
* @private
|
527 |
+
*/
|
528 |
+
IntersectionObserver.prototype._rootContainsTarget = function(target) {
|
529 |
+
return containsDeep(this.root || document, target);
|
530 |
+
};
|
531 |
+
|
532 |
+
|
533 |
+
/**
|
534 |
+
* Adds the instance to the global IntersectionObserver registry if it isn't
|
535 |
+
* already present.
|
536 |
+
* @private
|
537 |
+
*/
|
538 |
+
IntersectionObserver.prototype._registerInstance = function() {
|
539 |
+
if (registry.indexOf(this) < 0) {
|
540 |
+
registry.push(this);
|
541 |
+
}
|
542 |
+
};
|
543 |
+
|
544 |
+
|
545 |
+
/**
|
546 |
+
* Removes the instance from the global IntersectionObserver registry.
|
547 |
+
* @private
|
548 |
+
*/
|
549 |
+
IntersectionObserver.prototype._unregisterInstance = function() {
|
550 |
+
var index = registry.indexOf(this);
|
551 |
+
if (index != -1) registry.splice(index, 1);
|
552 |
+
};
|
553 |
+
|
554 |
+
|
555 |
+
/**
|
556 |
+
* Returns the result of the performance.now() method or null in browsers
|
557 |
+
* that don't support the API.
|
558 |
+
* @return {number} The elapsed time since the page was requested.
|
559 |
+
*/
|
560 |
+
function now() {
|
561 |
+
return window.performance && performance.now && performance.now();
|
562 |
+
}
|
563 |
+
|
564 |
+
|
565 |
+
/**
|
566 |
+
* Throttles a function and delays its execution, so it's only called at most
|
567 |
+
* once within a given time period.
|
568 |
+
* @param {Function} fn The function to throttle.
|
569 |
+
* @param {number} timeout The amount of time that must pass before the
|
570 |
+
* function can be called again.
|
571 |
+
* @return {Function} The throttled function.
|
572 |
+
*/
|
573 |
+
function throttle(fn, timeout) {
|
574 |
+
var timer = null;
|
575 |
+
return function () {
|
576 |
+
if (!timer) {
|
577 |
+
timer = setTimeout(function() {
|
578 |
+
fn();
|
579 |
+
timer = null;
|
580 |
+
}, timeout);
|
581 |
+
}
|
582 |
+
};
|
583 |
+
}
|
584 |
+
|
585 |
+
|
586 |
+
/**
|
587 |
+
* Adds an event handler to a DOM node ensuring cross-browser compatibility.
|
588 |
+
* @param {Node} node The DOM node to add the event handler to.
|
589 |
+
* @param {string} event The event name.
|
590 |
+
* @param {Function} fn The event handler to add.
|
591 |
+
* @param {boolean} opt_useCapture Optionally adds the even to the capture
|
592 |
+
* phase. Note: this only works in modern browsers.
|
593 |
+
*/
|
594 |
+
function addEvent(node, event, fn, opt_useCapture) {
|
595 |
+
if (typeof node.addEventListener == 'function') {
|
596 |
+
node.addEventListener(event, fn, opt_useCapture || false);
|
597 |
+
}
|
598 |
+
else if (typeof node.attachEvent == 'function') {
|
599 |
+
node.attachEvent('on' + event, fn);
|
600 |
+
}
|
601 |
+
}
|
602 |
+
|
603 |
+
|
604 |
+
/**
|
605 |
+
* Removes a previously added event handler from a DOM node.
|
606 |
+
* @param {Node} node The DOM node to remove the event handler from.
|
607 |
+
* @param {string} event The event name.
|
608 |
+
* @param {Function} fn The event handler to remove.
|
609 |
+
* @param {boolean} opt_useCapture If the event handler was added with this
|
610 |
+
* flag set to true, it should be set to true here in order to remove it.
|
611 |
+
*/
|
612 |
+
function removeEvent(node, event, fn, opt_useCapture) {
|
613 |
+
if (typeof node.removeEventListener == 'function') {
|
614 |
+
node.removeEventListener(event, fn, opt_useCapture || false);
|
615 |
+
}
|
616 |
+
else if (typeof node.detatchEvent == 'function') {
|
617 |
+
node.detatchEvent('on' + event, fn);
|
618 |
+
}
|
619 |
+
}
|
620 |
+
|
621 |
+
|
622 |
+
/**
|
623 |
+
* Returns the intersection between two rect objects.
|
624 |
+
* @param {Object} rect1 The first rect.
|
625 |
+
* @param {Object} rect2 The second rect.
|
626 |
+
* @return {?Object} The intersection rect or undefined if no intersection
|
627 |
+
* is found.
|
628 |
+
*/
|
629 |
+
function computeRectIntersection(rect1, rect2) {
|
630 |
+
var top = Math.max(rect1.top, rect2.top);
|
631 |
+
var bottom = Math.min(rect1.bottom, rect2.bottom);
|
632 |
+
var left = Math.max(rect1.left, rect2.left);
|
633 |
+
var right = Math.min(rect1.right, rect2.right);
|
634 |
+
var width = right - left;
|
635 |
+
var height = bottom - top;
|
636 |
+
|
637 |
+
return (width >= 0 && height >= 0) && {
|
638 |
+
top: top,
|
639 |
+
bottom: bottom,
|
640 |
+
left: left,
|
641 |
+
right: right,
|
642 |
+
width: width,
|
643 |
+
height: height
|
644 |
+
};
|
645 |
+
}
|
646 |
+
|
647 |
+
|
648 |
+
/**
|
649 |
+
* Shims the native getBoundingClientRect for compatibility with older IE.
|
650 |
+
* @param {Element} el The element whose bounding rect to get.
|
651 |
+
* @return {Object} The (possibly shimmed) rect of the element.
|
652 |
+
*/
|
653 |
+
function getBoundingClientRect(el) {
|
654 |
+
var rect;
|
655 |
+
|
656 |
+
try {
|
657 |
+
rect = el.getBoundingClientRect();
|
658 |
+
} catch (err) {
|
659 |
+
// Ignore Windows 7 IE11 "Unspecified error"
|
660 |
+
// https://github.com/w3c/IntersectionObserver/pull/205
|
661 |
+
}
|
662 |
+
|
663 |
+
if (!rect) return getEmptyRect();
|
664 |
+
|
665 |
+
// Older IE
|
666 |
+
if (!(rect.width && rect.height)) {
|
667 |
+
rect = {
|
668 |
+
top: rect.top,
|
669 |
+
right: rect.right,
|
670 |
+
bottom: rect.bottom,
|
671 |
+
left: rect.left,
|
672 |
+
width: rect.right - rect.left,
|
673 |
+
height: rect.bottom - rect.top
|
674 |
+
};
|
675 |
+
}
|
676 |
+
return rect;
|
677 |
+
}
|
678 |
+
|
679 |
+
|
680 |
+
/**
|
681 |
+
* Returns an empty rect object. An empty rect is returned when an element
|
682 |
+
* is not in the DOM.
|
683 |
+
* @return {Object} The empty rect.
|
684 |
+
*/
|
685 |
+
function getEmptyRect() {
|
686 |
+
return {
|
687 |
+
top: 0,
|
688 |
+
bottom: 0,
|
689 |
+
left: 0,
|
690 |
+
right: 0,
|
691 |
+
width: 0,
|
692 |
+
height: 0
|
693 |
+
};
|
694 |
+
}
|
695 |
+
|
696 |
+
/**
|
697 |
+
* Checks to see if a parent element contains a child element (including inside
|
698 |
+
* shadow DOM).
|
699 |
+
* @param {Node} parent The parent element.
|
700 |
+
* @param {Node} child The child element.
|
701 |
+
* @return {boolean} True if the parent node contains the child node.
|
702 |
+
*/
|
703 |
+
function containsDeep(parent, child) {
|
704 |
+
var node = child;
|
705 |
+
while (node) {
|
706 |
+
if (node == parent) return true;
|
707 |
+
|
708 |
+
node = getParentNode(node);
|
709 |
+
}
|
710 |
+
return false;
|
711 |
+
}
|
712 |
+
|
713 |
+
|
714 |
+
/**
|
715 |
+
* Gets the parent node of an element or its host element if the parent node
|
716 |
+
* is a shadow root.
|
717 |
+
* @param {Node} node The node whose parent to get.
|
718 |
+
* @return {Node|null} The parent node or null if no parent exists.
|
719 |
+
*/
|
720 |
+
function getParentNode(node) {
|
721 |
+
var parent = node.parentNode;
|
722 |
+
|
723 |
+
if (parent && parent.nodeType == 11 && parent.host) {
|
724 |
+
// If the parent is a shadow root, return the host element.
|
725 |
+
return parent.host;
|
726 |
+
}
|
727 |
+
|
728 |
+
if (parent && parent.assignedSlot) {
|
729 |
+
// If the parent is distributed in a <slot>, return the parent of a slot.
|
730 |
+
return parent.assignedSlot.parentNode;
|
731 |
+
}
|
732 |
+
|
733 |
+
return parent;
|
734 |
+
}
|
735 |
+
|
736 |
+
|
737 |
+
// Exposes the constructors globally.
|
738 |
+
window.IntersectionObserver = IntersectionObserver;
|
739 |
+
window.IntersectionObserverEntry = IntersectionObserverEntry;
|
740 |
+
|
741 |
+
}());
|
742 |
+
// @see https://github.com/que-etc/resize-observer-polyfill
|
743 |
+
(function (global, factory) {
|
744 |
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
745 |
+
typeof define === 'function' && define.amd ? define(factory) :
|
746 |
+
(global.ResizeObserver = factory());
|
747 |
+
}(this, (function () { 'use strict';
|
748 |
+
|
749 |
+
/**
|
750 |
+
* A collection of shims that provide minimal functionality of the ES6 collections.
|
751 |
+
*
|
752 |
+
* These implementations are not meant to be used outside of the ResizeObserver
|
753 |
+
* modules as they cover only a limited range of use cases.
|
754 |
+
*/
|
755 |
+
/* eslint-disable require-jsdoc, valid-jsdoc */
|
756 |
+
var MapShim = (function () {
|
757 |
+
if (typeof Map !== 'undefined') {
|
758 |
+
return Map;
|
759 |
+
}
|
760 |
+
/**
|
761 |
+
* Returns index in provided array that matches the specified key.
|
762 |
+
*
|
763 |
+
* @param {Array<Array>} arr
|
764 |
+
* @param {*} key
|
765 |
+
* @returns {number}
|
766 |
+
*/
|
767 |
+
function getIndex(arr, key) {
|
768 |
+
var result = -1;
|
769 |
+
arr.some(function (entry, index) {
|
770 |
+
if (entry[0] === key) {
|
771 |
+
result = index;
|
772 |
+
return true;
|
773 |
+
}
|
774 |
+
return false;
|
775 |
+
});
|
776 |
+
return result;
|
777 |
+
}
|
778 |
+
return /** @class */ (function () {
|
779 |
+
function class_1() {
|
780 |
+
this.__entries__ = [];
|
781 |
+
}
|
782 |
+
Object.defineProperty(class_1.prototype, "size", {
|
783 |
+
/**
|
784 |
+
* @returns {boolean}
|
785 |
+
*/
|
786 |
+
get: function () {
|
787 |
+
return this.__entries__.length;
|
788 |
+
},
|
789 |
+
enumerable: true,
|
790 |
+
configurable: true
|
791 |
+
});
|
792 |
+
/**
|
793 |
+
* @param {*} key
|
794 |
+
* @returns {*}
|
795 |
+
*/
|
796 |
+
class_1.prototype.get = function (key) {
|
797 |
+
var index = getIndex(this.__entries__, key);
|
798 |
+
var entry = this.__entries__[index];
|
799 |
+
return entry && entry[1];
|
800 |
+
};
|
801 |
+
/**
|
802 |
+
* @param {*} key
|
803 |
+
* @param {*} value
|
804 |
+
* @returns {void}
|
805 |
+
*/
|
806 |
+
class_1.prototype.set = function (key, value) {
|
807 |
+
var index = getIndex(this.__entries__, key);
|
808 |
+
if (~index) {
|
809 |
+
this.__entries__[index][1] = value;
|
810 |
+
}
|
811 |
+
else {
|
812 |
+
this.__entries__.push([key, value]);
|
813 |
+
}
|
814 |
+
};
|
815 |
+
/**
|
816 |
+
* @param {*} key
|
817 |
+
* @returns {void}
|
818 |
+
*/
|
819 |
+
class_1.prototype.delete = function (key) {
|
820 |
+
var entries = this.__entries__;
|
821 |
+
var index = getIndex(entries, key);
|
822 |
+
if (~index) {
|
823 |
+
entries.splice(index, 1);
|
824 |
+
}
|
825 |
+
};
|
826 |
+
/**
|
827 |
+
* @param {*} key
|
828 |
+
* @returns {void}
|
829 |
+
*/
|
830 |
+
class_1.prototype.has = function (key) {
|
831 |
+
return !!~getIndex(this.__entries__, key);
|
832 |
+
};
|
833 |
+
/**
|
834 |
+
* @returns {void}
|
835 |
+
*/
|
836 |
+
class_1.prototype.clear = function () {
|
837 |
+
this.__entries__.splice(0);
|
838 |
+
};
|
839 |
+
/**
|
840 |
+
* @param {Function} callback
|
841 |
+
* @param {*} [ctx=null]
|
842 |
+
* @returns {void}
|
843 |
+
*/
|
844 |
+
class_1.prototype.forEach = function (callback, ctx) {
|
845 |
+
if (ctx === void 0) { ctx = null; }
|
846 |
+
for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {
|
847 |
+
var entry = _a[_i];
|
848 |
+
callback.call(ctx, entry[1], entry[0]);
|
849 |
+
}
|
850 |
+
};
|
851 |
+
return class_1;
|
852 |
+
}());
|
853 |
+
})();
|
854 |
+
|
855 |
+
/**
|
856 |
+
* Detects whether window and document objects are available in current environment.
|
857 |
+
*/
|
858 |
+
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;
|
859 |
+
|
860 |
+
// Returns global object of a current environment.
|
861 |
+
var global$1 = (function () {
|
862 |
+
if (typeof global !== 'undefined' && global.Math === Math) {
|
863 |
+
return global;
|
864 |
+
}
|
865 |
+
if (typeof self !== 'undefined' && self.Math === Math) {
|
866 |
+
return self;
|
867 |
+
}
|
868 |
+
if (typeof window !== 'undefined' && window.Math === Math) {
|
869 |
+
return window;
|
870 |
+
}
|
871 |
+
// eslint-disable-next-line no-new-func
|
872 |
+
return Function('return this')();
|
873 |
+
})();
|
874 |
+
|
875 |
+
/**
|
876 |
+
* A shim for the requestAnimationFrame which falls back to the setTimeout if
|
877 |
+
* first one is not supported.
|
878 |
+
*
|
879 |
+
* @returns {number} Requests' identifier.
|
880 |
+
*/
|
881 |
+
var requestAnimationFrame$1 = (function () {
|
882 |
+
if (typeof requestAnimationFrame === 'function') {
|
883 |
+
// It's required to use a bounded function because IE sometimes throws
|
884 |
+
// an "Invalid calling object" error if rAF is invoked without the global
|
885 |
+
// object on the left hand side.
|
886 |
+
return requestAnimationFrame.bind(global$1);
|
887 |
+
}
|
888 |
+
return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };
|
889 |
+
})();
|
890 |
+
|
891 |
+
// Defines minimum timeout before adding a trailing call.
|
892 |
+
var trailingTimeout = 2;
|
893 |
+
/**
|
894 |
+
* Creates a wrapper function which ensures that provided callback will be
|
895 |
+
* invoked only once during the specified delay period.
|
896 |
+
*
|
897 |
+
* @param {Function} callback - Function to be invoked after the delay period.
|
898 |
+
* @param {number} delay - Delay after which to invoke callback.
|
899 |
+
* @returns {Function}
|
900 |
+
*/
|
901 |
+
function throttle (callback, delay) {
|
902 |
+
var leadingCall = false, trailingCall = false, lastCallTime = 0;
|
903 |
+
/**
|
904 |
+
* Invokes the original callback function and schedules new invocation if
|
905 |
+
* the "proxy" was called during current request.
|
906 |
+
*
|
907 |
+
* @returns {void}
|
908 |
+
*/
|
909 |
+
function resolvePending() {
|
910 |
+
if (leadingCall) {
|
911 |
+
leadingCall = false;
|
912 |
+
callback();
|
913 |
+
}
|
914 |
+
if (trailingCall) {
|
915 |
+
proxy();
|
916 |
+
}
|
917 |
+
}
|
918 |
+
/**
|
919 |
+
* Callback invoked after the specified delay. It will further postpone
|
920 |
+
* invocation of the original function delegating it to the
|
921 |
+
* requestAnimationFrame.
|
922 |
+
*
|
923 |
+
* @returns {void}
|
924 |
+
*/
|
925 |
+
function timeoutCallback() {
|
926 |
+
requestAnimationFrame$1(resolvePending);
|
927 |
+
}
|
928 |
+
/**
|
929 |
+
* Schedules invocation of the original function.
|
930 |
+
*
|
931 |
+
* @returns {void}
|
932 |
+
*/
|
933 |
+
function proxy() {
|
934 |
+
var timeStamp = Date.now();
|
935 |
+
if (leadingCall) {
|
936 |
+
// Reject immediately following calls.
|
937 |
+
if (timeStamp - lastCallTime < trailingTimeout) {
|
938 |
+
return;
|
939 |
+
}
|
940 |
+
// Schedule new call to be in invoked when the pending one is resolved.
|
941 |
+
// This is important for "transitions" which never actually start
|
942 |
+
// immediately so there is a chance that we might miss one if change
|
943 |
+
// happens amids the pending invocation.
|
944 |
+
trailingCall = true;
|
945 |
+
}
|
946 |
+
else {
|
947 |
+
leadingCall = true;
|
948 |
+
trailingCall = false;
|
949 |
+
setTimeout(timeoutCallback, delay);
|
950 |
+
}
|
951 |
+
lastCallTime = timeStamp;
|
952 |
+
}
|
953 |
+
return proxy;
|
954 |
+
}
|
955 |
+
|
956 |
+
// Minimum delay before invoking the update of observers.
|
957 |
+
var REFRESH_DELAY = 20;
|
958 |
+
// A list of substrings of CSS properties used to find transition events that
|
959 |
+
// might affect dimensions of observed elements.
|
960 |
+
var transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];
|
961 |
+
// Check if MutationObserver is available.
|
962 |
+
var mutationObserverSupported = typeof MutationObserver !== 'undefined';
|
963 |
+
/**
|
964 |
+
* Singleton controller class which handles updates of ResizeObserver instances.
|
965 |
+
*/
|
966 |
+
var ResizeObserverController = /** @class */ (function () {
|
967 |
+
/**
|
968 |
+
* Creates a new instance of ResizeObserverController.
|
969 |
+
*
|
970 |
+
* @private
|
971 |
+
*/
|
972 |
+
function ResizeObserverController() {
|
973 |
+
/**
|
974 |
+
* Indicates whether DOM listeners have been added.
|
975 |
+
*
|
976 |
+
* @private {boolean}
|
977 |
+
*/
|
978 |
+
this.connected_ = false;
|
979 |
+
/**
|
980 |
+
* Tells that controller has subscribed for Mutation Events.
|
981 |
+
*
|
982 |
+
* @private {boolean}
|
983 |
+
*/
|
984 |
+
this.mutationEventsAdded_ = false;
|
985 |
+
/**
|
986 |
+
* Keeps reference to the instance of MutationObserver.
|
987 |
+
*
|
988 |
+
* @private {MutationObserver}
|
989 |
+
*/
|
990 |
+
this.mutationsObserver_ = null;
|
991 |
+
/**
|
992 |
+
* A list of connected observers.
|
993 |
+
*
|
994 |
+
* @private {Array<ResizeObserverSPI>}
|
995 |
+
*/
|
996 |
+
this.observers_ = [];
|
997 |
+
this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);
|
998 |
+
this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);
|
999 |
+
}
|
1000 |
+
/**
|
1001 |
+
* Adds observer to observers list.
|
1002 |
+
*
|
1003 |
+
* @param {ResizeObserverSPI} observer - Observer to be added.
|
1004 |
+
* @returns {void}
|
1005 |
+
*/
|
1006 |
+
ResizeObserverController.prototype.addObserver = function (observer) {
|
1007 |
+
if (!~this.observers_.indexOf(observer)) {
|
1008 |
+
this.observers_.push(observer);
|
1009 |
+
}
|
1010 |
+
// Add listeners if they haven't been added yet.
|
1011 |
+
if (!this.connected_) {
|
1012 |
+
this.connect_();
|
1013 |
+
}
|
1014 |
+
};
|
1015 |
+
/**
|
1016 |
+
* Removes observer from observers list.
|
1017 |
+
*
|
1018 |
+
* @param {ResizeObserverSPI} observer - Observer to be removed.
|
1019 |
+
* @returns {void}
|
1020 |
+
*/
|
1021 |
+
ResizeObserverController.prototype.removeObserver = function (observer) {
|
1022 |
+
var observers = this.observers_;
|
1023 |
+
var index = observers.indexOf(observer);
|
1024 |
+
// Remove observer if it's present in registry.
|
1025 |
+
if (~index) {
|
1026 |
+
observers.splice(index, 1);
|
1027 |
+
}
|
1028 |
+
// Remove listeners if controller has no connected observers.
|
1029 |
+
if (!observers.length && this.connected_) {
|
1030 |
+
this.disconnect_();
|
1031 |
+
}
|
1032 |
+
};
|
1033 |
+
/**
|
1034 |
+
* Invokes the update of observers. It will continue running updates insofar
|
1035 |
+
* it detects changes.
|
1036 |
+
*
|
1037 |
+
* @returns {void}
|
1038 |
+
*/
|
1039 |
+
ResizeObserverController.prototype.refresh = function () {
|
1040 |
+
var changesDetected = this.updateObservers_();
|
1041 |
+
// Continue running updates if changes have been detected as there might
|
1042 |
+
// be future ones caused by CSS transitions.
|
1043 |
+
if (changesDetected) {
|
1044 |
+
this.refresh();
|
1045 |
+
}
|
1046 |
+
};
|
1047 |
+
/**
|
1048 |
+
* Updates every observer from observers list and notifies them of queued
|
1049 |
+
* entries.
|
1050 |
+
*
|
1051 |
+
* @private
|
1052 |
+
* @returns {boolean} Returns "true" if any observer has detected changes in
|
1053 |
+
* dimensions of it's elements.
|
1054 |
+
*/
|
1055 |
+
ResizeObserverController.prototype.updateObservers_ = function () {
|
1056 |
+
// Collect observers that have active observations.
|
1057 |
+
var activeObservers = this.observers_.filter(function (observer) {
|
1058 |
+
return observer.gatherActive(), observer.hasActive();
|
1059 |
+
});
|
1060 |
+
// Deliver notifications in a separate cycle in order to avoid any
|
1061 |
+
// collisions between observers, e.g. when multiple instances of
|
1062 |
+
// ResizeObserver are tracking the same element and the callback of one
|
1063 |
+
// of them changes content dimensions of the observed target. Sometimes
|
1064 |
+
// this may result in notifications being blocked for the rest of observers.
|
1065 |
+
activeObservers.forEach(function (observer) { return observer.broadcastActive(); });
|
1066 |
+
return activeObservers.length > 0;
|
1067 |
+
};
|
1068 |
+
/**
|
1069 |
+
* Initializes DOM listeners.
|
1070 |
+
*
|
1071 |
+
* @private
|
1072 |
+
* @returns {void}
|
1073 |
+
*/
|
1074 |
+
ResizeObserverController.prototype.connect_ = function () {
|
1075 |
+
// Do nothing if running in a non-browser environment or if listeners
|
1076 |
+
// have been already added.
|
1077 |
+
if (!isBrowser || this.connected_) {
|
1078 |
+
return;
|
1079 |
+
}
|
1080 |
+
// Subscription to the "Transitionend" event is used as a workaround for
|
1081 |
+
// delayed transitions. This way it's possible to capture at least the
|
1082 |
+
// final state of an element.
|
1083 |
+
document.addEventListener('transitionend', this.onTransitionEnd_);
|
1084 |
+
window.addEventListener('resize', this.refresh);
|
1085 |
+
if (mutationObserverSupported) {
|
1086 |
+
this.mutationsObserver_ = new MutationObserver(this.refresh);
|
1087 |
+
this.mutationsObserver_.observe(document, {
|
1088 |
+
attributes: true,
|
1089 |
+
childList: true,
|
1090 |
+
characterData: true,
|
1091 |
+
subtree: true
|
1092 |
+
});
|
1093 |
+
}
|
1094 |
+
else {
|
1095 |
+
document.addEventListener('DOMSubtreeModified', this.refresh);
|
1096 |
+
this.mutationEventsAdded_ = true;
|
1097 |
+
}
|
1098 |
+
this.connected_ = true;
|
1099 |
+
};
|
1100 |
+
/**
|
1101 |
+
* Removes DOM listeners.
|
1102 |
+
*
|
1103 |
+
* @private
|
1104 |
+
* @returns {void}
|
1105 |
+
*/
|
1106 |
+
ResizeObserverController.prototype.disconnect_ = function () {
|
1107 |
+
// Do nothing if running in a non-browser environment or if listeners
|
1108 |
+
// have been already removed.
|
1109 |
+
if (!isBrowser || !this.connected_) {
|
1110 |
+
return;
|
1111 |
+
}
|
1112 |
+
document.removeEventListener('transitionend', this.onTransitionEnd_);
|
1113 |
+
window.removeEventListener('resize', this.refresh);
|
1114 |
+
if (this.mutationsObserver_) {
|
1115 |
+
this.mutationsObserver_.disconnect();
|
1116 |
+
}
|
1117 |
+
if (this.mutationEventsAdded_) {
|
1118 |
+
document.removeEventListener('DOMSubtreeModified', this.refresh);
|
1119 |
+
}
|
1120 |
+
this.mutationsObserver_ = null;
|
1121 |
+
this.mutationEventsAdded_ = false;
|
1122 |
+
this.connected_ = false;
|
1123 |
+
};
|
1124 |
+
/**
|
1125 |
+
* "Transitionend" event handler.
|
1126 |
+
*
|
1127 |
+
* @private
|
1128 |
+
* @param {TransitionEvent} event
|
1129 |
+
* @returns {void}
|
1130 |
+
*/
|
1131 |
+
ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {
|
1132 |
+
var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;
|
1133 |
+
// Detect whether transition may affect dimensions of an element.
|
1134 |
+
var isReflowProperty = transitionKeys.some(function (key) {
|
1135 |
+
return !!~propertyName.indexOf(key);
|
1136 |
+
});
|
1137 |
+
if (isReflowProperty) {
|
1138 |
+
this.refresh();
|
1139 |
+
}
|
1140 |
+
};
|
1141 |
+
/**
|
1142 |
+
* Returns instance of the ResizeObserverController.
|
1143 |
+
*
|
1144 |
+
* @returns {ResizeObserverController}
|
1145 |
+
*/
|
1146 |
+
ResizeObserverController.getInstance = function () {
|
1147 |
+
if (!this.instance_) {
|
1148 |
+
this.instance_ = new ResizeObserverController();
|
1149 |
+
}
|
1150 |
+
return this.instance_;
|
1151 |
+
};
|
1152 |
+
/**
|
1153 |
+
* Holds reference to the controller's instance.
|
1154 |
+
*
|
1155 |
+
* @private {ResizeObserverController}
|
1156 |
+
*/
|
1157 |
+
ResizeObserverController.instance_ = null;
|
1158 |
+
return ResizeObserverController;
|
1159 |
+
}());
|
1160 |
+
|
1161 |
+
/**
|
1162 |
+
* Defines non-writable/enumerable properties of the provided target object.
|
1163 |
+
*
|
1164 |
+
* @param {Object} target - Object for which to define properties.
|
1165 |
+
* @param {Object} props - Properties to be defined.
|
1166 |
+
* @returns {Object} Target object.
|
1167 |
+
*/
|
1168 |
+
var defineConfigurable = (function (target, props) {
|
1169 |
+
for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {
|
1170 |
+
var key = _a[_i];
|
1171 |
+
Object.defineProperty(target, key, {
|
1172 |
+
value: props[key],
|
1173 |
+
enumerable: false,
|
1174 |
+
writable: false,
|
1175 |
+
configurable: true
|
1176 |
+
});
|
1177 |
+
}
|
1178 |
+
return target;
|
1179 |
+
});
|
1180 |
+
|
1181 |
+
/**
|
1182 |
+
* Returns the global object associated with provided element.
|
1183 |
+
*
|
1184 |
+
* @param {Object} target
|
1185 |
+
* @returns {Object}
|
1186 |
+
*/
|
1187 |
+
var getWindowOf = (function (target) {
|
1188 |
+
// Assume that the element is an instance of Node, which means that it
|
1189 |
+
// has the "ownerDocument" property from which we can retrieve a
|
1190 |
+
// corresponding global object.
|
1191 |
+
var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;
|
1192 |
+
// Return the local global object if it's not possible extract one from
|
1193 |
+
// provided element.
|
1194 |
+
return ownerGlobal || global$1;
|
1195 |
+
});
|
1196 |
+
|
1197 |
+
// Placeholder of an empty content rectangle.
|
1198 |
+
var emptyRect = createRectInit(0, 0, 0, 0);
|
1199 |
+
/**
|
1200 |
+
* Converts provided string to a number.
|
1201 |
+
*
|
1202 |
+
* @param {number|string} value
|
1203 |
+
* @returns {number}
|
1204 |
+
*/
|
1205 |
+
function toFloat(value) {
|
1206 |
+
return parseFloat(value) || 0;
|
1207 |
+
}
|
1208 |
+
/**
|
1209 |
+
* Extracts borders size from provided styles.
|
1210 |
+
*
|
1211 |
+
* @param {CSSStyleDeclaration} styles
|
1212 |
+
* @param {...string} positions - Borders positions (top, right, ...)
|
1213 |
+
* @returns {number}
|
1214 |
+
*/
|
1215 |
+
function getBordersSize(styles) {
|
1216 |
+
var positions = [];
|
1217 |
+
for (var _i = 1; _i < arguments.length; _i++) {
|
1218 |
+
positions[_i - 1] = arguments[_i];
|
1219 |
+
}
|
1220 |
+
return positions.reduce(function (size, position) {
|
1221 |
+
var value = styles['border-' + position + '-width'];
|
1222 |
+
return size + toFloat(value);
|
1223 |
+
}, 0);
|
1224 |
+
}
|
1225 |
+
/**
|
1226 |
+
* Extracts paddings sizes from provided styles.
|
1227 |
+
*
|
1228 |
+
* @param {CSSStyleDeclaration} styles
|
1229 |
+
* @returns {Object} Paddings box.
|
1230 |
+
*/
|
1231 |
+
function getPaddings(styles) {
|
1232 |
+
var positions = ['top', 'right', 'bottom', 'left'];
|
1233 |
+
var paddings = {};
|
1234 |
+
for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {
|
1235 |
+
var position = positions_1[_i];
|
1236 |
+
var value = styles['padding-' + position];
|
1237 |
+
paddings[position] = toFloat(value);
|
1238 |
+
}
|
1239 |
+
return paddings;
|
1240 |
+
}
|
1241 |
+
/**
|
1242 |
+
* Calculates content rectangle of provided SVG element.
|
1243 |
+
*
|
1244 |
+
* @param {SVGGraphicsElement} target - Element content rectangle of which needs
|
1245 |
+
* to be calculated.
|
1246 |
+
* @returns {DOMRectInit}
|
1247 |
+
*/
|
1248 |
+
function getSVGContentRect(target) {
|
1249 |
+
var bbox = target.getBBox();
|
1250 |
+
return createRectInit(0, 0, bbox.width, bbox.height);
|
1251 |
+
}
|
1252 |
+
/**
|
1253 |
+
* Calculates content rectangle of provided HTMLElement.
|
1254 |
+
*
|
1255 |
+
* @param {HTMLElement} target - Element for which to calculate the content rectangle.
|
1256 |
+
* @returns {DOMRectInit}
|
1257 |
+
*/
|
1258 |
+
function getHTMLElementContentRect(target) {
|
1259 |
+
// Client width & height properties can't be
|
1260 |
+
// used exclusively as they provide rounded values.
|
1261 |
+
var clientWidth = target.clientWidth, clientHeight = target.clientHeight;
|
1262 |
+
// By this condition we can catch all non-replaced inline, hidden and
|
1263 |
+
// detached elements. Though elements with width & height properties less
|
1264 |
+
// than 0.5 will be discarded as well.
|
1265 |
+
//
|
1266 |
+
// Without it we would need to implement separate methods for each of
|
1267 |
+
// those cases and it's not possible to perform a precise and performance
|
1268 |
+
// effective test for hidden elements. E.g. even jQuery's ':visible' filter
|
1269 |
+
// gives wrong results for elements with width & height less than 0.5.
|
1270 |
+
if (!clientWidth && !clientHeight) {
|
1271 |
+
return emptyRect;
|
1272 |
+
}
|
1273 |
+
var styles = getWindowOf(target).getComputedStyle(target);
|
1274 |
+
var paddings = getPaddings(styles);
|
1275 |
+
var horizPad = paddings.left + paddings.right;
|
1276 |
+
var vertPad = paddings.top + paddings.bottom;
|
1277 |
+
// Computed styles of width & height are being used because they are the
|
1278 |
+
// only dimensions available to JS that contain non-rounded values. It could
|
1279 |
+
// be possible to utilize the getBoundingClientRect if only it's data wasn't
|
1280 |
+
// affected by CSS transformations let alone paddings, borders and scroll bars.
|
1281 |
+
var width = toFloat(styles.width), height = toFloat(styles.height);
|
1282 |
+
// Width & height include paddings and borders when the 'border-box' box
|
1283 |
+
// model is applied (except for IE).
|
1284 |
+
if (styles.boxSizing === 'border-box') {
|
1285 |
+
// Following conditions are required to handle Internet Explorer which
|
1286 |
+
// doesn't include paddings and borders to computed CSS dimensions.
|
1287 |
+
//
|
1288 |
+
// We can say that if CSS dimensions + paddings are equal to the "client"
|
1289 |
+
// properties then it's either IE, and thus we don't need to subtract
|
1290 |
+
// anything, or an element merely doesn't have paddings/borders styles.
|
1291 |
+
if (Math.round(width + horizPad) !== clientWidth) {
|
1292 |
+
width -= getBordersSize(styles, 'left', 'right') + horizPad;
|
1293 |
+
}
|
1294 |
+
if (Math.round(height + vertPad) !== clientHeight) {
|
1295 |
+
height -= getBordersSize(styles, 'top', 'bottom') + vertPad;
|
1296 |
+
}
|
1297 |
+
}
|
1298 |
+
// Following steps can't be applied to the document's root element as its
|
1299 |
+
// client[Width/Height] properties represent viewport area of the window.
|
1300 |
+
// Besides, it's as well not necessary as the <html> itself neither has
|
1301 |
+
// rendered scroll bars nor it can be clipped.
|
1302 |
+
if (!isDocumentElement(target)) {
|
1303 |
+
// In some browsers (only in Firefox, actually) CSS width & height
|
1304 |
+
// include scroll bars size which can be removed at this step as scroll
|
1305 |
+
// bars are the only difference between rounded dimensions + paddings
|
1306 |
+
// and "client" properties, though that is not always true in Chrome.
|
1307 |
+
var vertScrollbar = Math.round(width + horizPad) - clientWidth;
|
1308 |
+
var horizScrollbar = Math.round(height + vertPad) - clientHeight;
|
1309 |
+
// Chrome has a rather weird rounding of "client" properties.
|
1310 |
+
// E.g. for an element with content width of 314.2px it sometimes gives
|
1311 |
+
// the client width of 315px and for the width of 314.7px it may give
|
1312 |
+
// 314px. And it doesn't happen all the time. So just ignore this delta
|
1313 |
+
// as a non-relevant.
|
1314 |
+
if (Math.abs(vertScrollbar) !== 1) {
|
1315 |
+
width -= vertScrollbar;
|
1316 |
+
}
|
1317 |
+
if (Math.abs(horizScrollbar) !== 1) {
|
1318 |
+
height -= horizScrollbar;
|
1319 |
+
}
|
1320 |
+
}
|
1321 |
+
return createRectInit(paddings.left, paddings.top, width, height);
|
1322 |
+
}
|
1323 |
+
/**
|
1324 |
+
* Checks whether provided element is an instance of the SVGGraphicsElement.
|
1325 |
+
*
|
1326 |
+
* @param {Element} target - Element to be checked.
|
1327 |
+
* @returns {boolean}
|
1328 |
+
*/
|
1329 |
+
var isSVGGraphicsElement = (function () {
|
1330 |
+
// Some browsers, namely IE and Edge, don't have the SVGGraphicsElement
|
1331 |
+
// interface.
|
1332 |
+
if (typeof SVGGraphicsElement !== 'undefined') {
|
1333 |
+
return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };
|
1334 |
+
}
|
1335 |
+
// If it's so, then check that element is at least an instance of the
|
1336 |
+
// SVGElement and that it has the "getBBox" method.
|
1337 |
+
// eslint-disable-next-line no-extra-parens
|
1338 |
+
return function (target) { return (target instanceof getWindowOf(target).SVGElement &&
|
1339 |
+
typeof target.getBBox === 'function'); };
|
1340 |
+
})();
|
1341 |
+
/**
|
1342 |
+
* Checks whether provided element is a document element (<html>).
|
1343 |
+
*
|
1344 |
+
* @param {Element} target - Element to be checked.
|
1345 |
+
* @returns {boolean}
|
1346 |
+
*/
|
1347 |
+
function isDocumentElement(target) {
|
1348 |
+
return target === getWindowOf(target).document.documentElement;
|
1349 |
+
}
|
1350 |
+
/**
|
1351 |
+
* Calculates an appropriate content rectangle for provided html or svg element.
|
1352 |
+
*
|
1353 |
+
* @param {Element} target - Element content rectangle of which needs to be calculated.
|
1354 |
+
* @returns {DOMRectInit}
|
1355 |
+
*/
|
1356 |
+
function getContentRect(target) {
|
1357 |
+
if (!isBrowser) {
|
1358 |
+
return emptyRect;
|
1359 |
+
}
|
1360 |
+
if (isSVGGraphicsElement(target)) {
|
1361 |
+
return getSVGContentRect(target);
|
1362 |
+
}
|
1363 |
+
return getHTMLElementContentRect(target);
|
1364 |
+
}
|
1365 |
+
/**
|
1366 |
+
* Creates rectangle with an interface of the DOMRectReadOnly.
|
1367 |
+
* Spec: https://drafts.fxtf.org/geometry/#domrectreadonly
|
1368 |
+
*
|
1369 |
+
* @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.
|
1370 |
+
* @returns {DOMRectReadOnly}
|
1371 |
+
*/
|
1372 |
+
function createReadOnlyRect(_a) {
|
1373 |
+
var x = _a.x, y = _a.y, width = _a.width, height = _a.height;
|
1374 |
+
// If DOMRectReadOnly is available use it as a prototype for the rectangle.
|
1375 |
+
var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;
|
1376 |
+
var rect = Object.create(Constr.prototype);
|
1377 |
+
// Rectangle's properties are not writable and non-enumerable.
|
1378 |
+
defineConfigurable(rect, {
|
1379 |
+
x: x, y: y, width: width, height: height,
|
1380 |
+
top: y,
|
1381 |
+
right: x + width,
|
1382 |
+
bottom: height + y,
|
1383 |
+
left: x
|
1384 |
+
});
|
1385 |
+
return rect;
|
1386 |
+
}
|
1387 |
+
/**
|
1388 |
+
* Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.
|
1389 |
+
* Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit
|
1390 |
+
*
|
1391 |
+
* @param {number} x - X coordinate.
|
1392 |
+
* @param {number} y - Y coordinate.
|
1393 |
+
* @param {number} width - Rectangle's width.
|
1394 |
+
* @param {number} height - Rectangle's height.
|
1395 |
+
* @returns {DOMRectInit}
|
1396 |
+
*/
|
1397 |
+
function createRectInit(x, y, width, height) {
|
1398 |
+
return { x: x, y: y, width: width, height: height };
|
1399 |
+
}
|
1400 |
+
|
1401 |
+
/**
|
1402 |
+
* Class that is responsible for computations of the content rectangle of
|
1403 |
+
* provided DOM element and for keeping track of it's changes.
|
1404 |
+
*/
|
1405 |
+
var ResizeObservation = /** @class */ (function () {
|
1406 |
+
/**
|
1407 |
+
* Creates an instance of ResizeObservation.
|
1408 |
+
*
|
1409 |
+
* @param {Element} target - Element to be observed.
|
1410 |
+
*/
|
1411 |
+
function ResizeObservation(target) {
|
1412 |
+
/**
|
1413 |
+
* Broadcasted width of content rectangle.
|
1414 |
+
*
|
1415 |
+
* @type {number}
|
1416 |
+
*/
|
1417 |
+
this.broadcastWidth = 0;
|
1418 |
+
/**
|
1419 |
+
* Broadcasted height of content rectangle.
|
1420 |
+
*
|
1421 |
+
* @type {number}
|
1422 |
+
*/
|
1423 |
+
this.broadcastHeight = 0;
|
1424 |
+
/**
|
1425 |
+
* Reference to the last observed content rectangle.
|
1426 |
+
*
|
1427 |
+
* @private {DOMRectInit}
|
1428 |
+
*/
|
1429 |
+
this.contentRect_ = createRectInit(0, 0, 0, 0);
|
1430 |
+
this.target = target;
|
1431 |
+
}
|
1432 |
+
/**
|
1433 |
+
* Updates content rectangle and tells whether it's width or height properties
|
1434 |
+
* have changed since the last broadcast.
|
1435 |
+
*
|
1436 |
+
* @returns {boolean}
|
1437 |
+
*/
|
1438 |
+
ResizeObservation.prototype.isActive = function () {
|
1439 |
+
var rect = getContentRect(this.target);
|
1440 |
+
this.contentRect_ = rect;
|
1441 |
+
return (rect.width !== this.broadcastWidth ||
|
1442 |
+
rect.height !== this.broadcastHeight);
|
1443 |
+
};
|
1444 |
+
/**
|
1445 |
+
* Updates 'broadcastWidth' and 'broadcastHeight' properties with a data
|
1446 |
+
* from the corresponding properties of the last observed content rectangle.
|
1447 |
+
*
|
1448 |
+
* @returns {DOMRectInit} Last observed content rectangle.
|
1449 |
+
*/
|
1450 |
+
ResizeObservation.prototype.broadcastRect = function () {
|
1451 |
+
var rect = this.contentRect_;
|
1452 |
+
this.broadcastWidth = rect.width;
|
1453 |
+
this.broadcastHeight = rect.height;
|
1454 |
+
return rect;
|
1455 |
+
};
|
1456 |
+
return ResizeObservation;
|
1457 |
+
}());
|
1458 |
+
|
1459 |
+
var ResizeObserverEntry = /** @class */ (function () {
|
1460 |
+
/**
|
1461 |
+
* Creates an instance of ResizeObserverEntry.
|
1462 |
+
*
|
1463 |
+
* @param {Element} target - Element that is being observed.
|
1464 |
+
* @param {DOMRectInit} rectInit - Data of the element's content rectangle.
|
1465 |
+
*/
|
1466 |
+
function ResizeObserverEntry(target, rectInit) {
|
1467 |
+
var contentRect = createReadOnlyRect(rectInit);
|
1468 |
+
// According to the specification following properties are not writable
|
1469 |
+
// and are also not enumerable in the native implementation.
|
1470 |
+
//
|
1471 |
+
// Property accessors are not being used as they'd require to define a
|
1472 |
+
// private WeakMap storage which may cause memory leaks in browsers that
|
1473 |
+
// don't support this type of collections.
|
1474 |
+
defineConfigurable(this, { target: target, contentRect: contentRect });
|
1475 |
+
}
|
1476 |
+
return ResizeObserverEntry;
|
1477 |
+
}());
|
1478 |
+
|
1479 |
+
var ResizeObserverSPI = /** @class */ (function () {
|
1480 |
+
/**
|
1481 |
+
* Creates a new instance of ResizeObserver.
|
1482 |
+
*
|
1483 |
+
* @param {ResizeObserverCallback} callback - Callback function that is invoked
|
1484 |
+
* when one of the observed elements changes it's content dimensions.
|
1485 |
+
* @param {ResizeObserverController} controller - Controller instance which
|
1486 |
+
* is responsible for the updates of observer.
|
1487 |
+
* @param {ResizeObserver} callbackCtx - Reference to the public
|
1488 |
+
* ResizeObserver instance which will be passed to callback function.
|
1489 |
+
*/
|
1490 |
+
function ResizeObserverSPI(callback, controller, callbackCtx) {
|
1491 |
+
/**
|
1492 |
+
* Collection of resize observations that have detected changes in dimensions
|
1493 |
+
* of elements.
|
1494 |
+
*
|
1495 |
+
* @private {Array<ResizeObservation>}
|
1496 |
+
*/
|
1497 |
+
this.activeObservations_ = [];
|
1498 |
+
/**
|
1499 |
+
* Registry of the ResizeObservation instances.
|
1500 |
+
*
|
1501 |
+
* @private {Map<Element, ResizeObservation>}
|
1502 |
+
*/
|
1503 |
+
this.observations_ = new MapShim();
|
1504 |
+
if (typeof callback !== 'function') {
|
1505 |
+
throw new TypeError('The callback provided as parameter 1 is not a function.');
|
1506 |
+
}
|
1507 |
+
this.callback_ = callback;
|
1508 |
+
this.controller_ = controller;
|
1509 |
+
this.callbackCtx_ = callbackCtx;
|
1510 |
+
}
|
1511 |
+
/**
|
1512 |
+
* Starts observing provided element.
|
1513 |
+
*
|
1514 |
+
* @param {Element} target - Element to be observed.
|
1515 |
+
* @returns {void}
|
1516 |
+
*/
|
1517 |
+
ResizeObserverSPI.prototype.observe = function (target) {
|
1518 |
+
if (!arguments.length) {
|
1519 |
+
throw new TypeError('1 argument required, but only 0 present.');
|
1520 |
+
}
|
1521 |
+
// Do nothing if current environment doesn't have the Element interface.
|
1522 |
+
if (typeof Element === 'undefined' || !(Element instanceof Object)) {
|
1523 |
+
return;
|
1524 |
+
}
|
1525 |
+
if (!(target instanceof getWindowOf(target).Element)) {
|
1526 |
+
throw new TypeError('parameter 1 is not of type "Element".');
|
1527 |
+
}
|
1528 |
+
var observations = this.observations_;
|
1529 |
+
// Do nothing if element is already being observed.
|
1530 |
+
if (observations.has(target)) {
|
1531 |
+
return;
|
1532 |
+
}
|
1533 |
+
observations.set(target, new ResizeObservation(target));
|
1534 |
+
this.controller_.addObserver(this);
|
1535 |
+
// Force the update of observations.
|
1536 |
+
this.controller_.refresh();
|
1537 |
+
};
|
1538 |
+
/**
|
1539 |
+
* Stops observing provided element.
|
1540 |
+
*
|
1541 |
+
* @param {Element} target - Element to stop observing.
|
1542 |
+
* @returns {void}
|
1543 |
+
*/
|
1544 |
+
ResizeObserverSPI.prototype.unobserve = function (target) {
|
1545 |
+
if (!arguments.length) {
|
1546 |
+
throw new TypeError('1 argument required, but only 0 present.');
|
1547 |
+
}
|
1548 |
+
// Do nothing if current environment doesn't have the Element interface.
|
1549 |
+
if (typeof Element === 'undefined' || !(Element instanceof Object)) {
|
1550 |
+
return;
|
1551 |
+
}
|
1552 |
+
if (!(target instanceof getWindowOf(target).Element)) {
|
1553 |
+
throw new TypeError('parameter 1 is not of type "Element".');
|
1554 |
+
}
|
1555 |
+
var observations = this.observations_;
|
1556 |
+
// Do nothing if element is not being observed.
|
1557 |
+
if (!observations.has(target)) {
|
1558 |
+
return;
|
1559 |
+
}
|
1560 |
+
observations.delete(target);
|
1561 |
+
if (!observations.size) {
|
1562 |
+
this.controller_.removeObserver(this);
|
1563 |
+
}
|
1564 |
+
};
|
1565 |
+
/**
|
1566 |
+
* Stops observing all elements.
|
1567 |
+
*
|
1568 |
+
* @returns {void}
|
1569 |
+
*/
|
1570 |
+
ResizeObserverSPI.prototype.disconnect = function () {
|
1571 |
+
this.clearActive();
|
1572 |
+
this.observations_.clear();
|
1573 |
+
this.controller_.removeObserver(this);
|
1574 |
+
};
|
1575 |
+
/**
|
1576 |
+
* Collects observation instances the associated element of which has changed
|
1577 |
+
* it's content rectangle.
|
1578 |
+
*
|
1579 |
+
* @returns {void}
|
1580 |
+
*/
|
1581 |
+
ResizeObserverSPI.prototype.gatherActive = function () {
|
1582 |
+
var _this = this;
|
1583 |
+
this.clearActive();
|
1584 |
+
this.observations_.forEach(function (observation) {
|
1585 |
+
if (observation.isActive()) {
|
1586 |
+
_this.activeObservations_.push(observation);
|
1587 |
+
}
|
1588 |
+
});
|
1589 |
+
};
|
1590 |
+
/**
|
1591 |
+
* Invokes initial callback function with a list of ResizeObserverEntry
|
1592 |
+
* instances collected from active resize observations.
|
1593 |
+
*
|
1594 |
+
* @returns {void}
|
1595 |
+
*/
|
1596 |
+
ResizeObserverSPI.prototype.broadcastActive = function () {
|
1597 |
+
// Do nothing if observer doesn't have active observations.
|
1598 |
+
if (!this.hasActive()) {
|
1599 |
+
return;
|
1600 |
+
}
|
1601 |
+
var ctx = this.callbackCtx_;
|
1602 |
+
// Create ResizeObserverEntry instance for every active observation.
|
1603 |
+
var entries = this.activeObservations_.map(function (observation) {
|
1604 |
+
return new ResizeObserverEntry(observation.target, observation.broadcastRect());
|
1605 |
+
});
|
1606 |
+
this.callback_.call(ctx, entries, ctx);
|
1607 |
+
this.clearActive();
|
1608 |
+
};
|
1609 |
+
/**
|
1610 |
+
* Clears the collection of active observations.
|
1611 |
+
*
|
1612 |
+
* @returns {void}
|
1613 |
+
*/
|
1614 |
+
ResizeObserverSPI.prototype.clearActive = function () {
|
1615 |
+
this.activeObservations_.splice(0);
|
1616 |
+
};
|
1617 |
+
/**
|
1618 |
+
* Tells whether observer has active observations.
|
1619 |
+
*
|
1620 |
+
* @returns {boolean}
|
1621 |
+
*/
|
1622 |
+
ResizeObserverSPI.prototype.hasActive = function () {
|
1623 |
+
return this.activeObservations_.length > 0;
|
1624 |
+
};
|
1625 |
+
return ResizeObserverSPI;
|
1626 |
+
}());
|
1627 |
+
|
1628 |
+
// Registry of internal observers. If WeakMap is not available use current shim
|
1629 |
+
// for the Map collection as it has all required methods and because WeakMap
|
1630 |
+
// can't be fully polyfilled anyway.
|
1631 |
+
var observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();
|
1632 |
+
/**
|
1633 |
+
* ResizeObserver API. Encapsulates the ResizeObserver SPI implementation
|
1634 |
+
* exposing only those methods and properties that are defined in the spec.
|
1635 |
+
*/
|
1636 |
+
var ResizeObserver = /** @class */ (function () {
|
1637 |
+
/**
|
1638 |
+
* Creates a new instance of ResizeObserver.
|
1639 |
+
*
|
1640 |
+
* @param {ResizeObserverCallback} callback - Callback that is invoked when
|
1641 |
+
* dimensions of the observed elements change.
|
1642 |
+
*/
|
1643 |
+
function ResizeObserver(callback) {
|
1644 |
+
if (!(this instanceof ResizeObserver)) {
|
1645 |
+
throw new TypeError('Cannot call a class as a function.');
|
1646 |
+
}
|
1647 |
+
if (!arguments.length) {
|
1648 |
+
throw new TypeError('1 argument required, but only 0 present.');
|
1649 |
+
}
|
1650 |
+
var controller = ResizeObserverController.getInstance();
|
1651 |
+
var observer = new ResizeObserverSPI(callback, controller, this);
|
1652 |
+
observers.set(this, observer);
|
1653 |
+
}
|
1654 |
+
return ResizeObserver;
|
1655 |
+
}());
|
1656 |
+
// Expose public methods of ResizeObserver.
|
1657 |
+
[
|
1658 |
+
'observe',
|
1659 |
+
'unobserve',
|
1660 |
+
'disconnect'
|
1661 |
+
].forEach(function (method) {
|
1662 |
+
ResizeObserver.prototype[method] = function () {
|
1663 |
+
var _a;
|
1664 |
+
return (_a = observers.get(this))[method].apply(_a, arguments);
|
1665 |
+
};
|
1666 |
+
});
|
1667 |
+
|
1668 |
+
var index = (function () {
|
1669 |
+
// Export existing implementation if available.
|
1670 |
+
if (typeof global$1.ResizeObserver !== 'undefined') {
|
1671 |
+
return global$1.ResizeObserver;
|
1672 |
+
}
|
1673 |
+
return ResizeObserver;
|
1674 |
+
})();
|
1675 |
+
|
1676 |
+
return index;
|
1677 |
+
|
1678 |
+
})));
|
1679 |
(function($, _){
|
1680 |
|
1681 |
/**
|
1737 |
);
|
1738 |
/*!
|
1739 |
* FooGallery.utils - Contains common utility methods and classes used in our plugins.
|
1740 |
+
* @version 0.1.8
|
1741 |
* @link https://github.com/steveush/foo-utils#readme
|
1742 |
+
* @copyright Steve Usher 2020
|
1743 |
* @license Released under the GPL-3.0 license.
|
1744 |
*/
|
1745 |
/**
|
1790 |
* @name version
|
1791 |
* @type {string}
|
1792 |
*/
|
1793 |
+
version: '0.1.8'
|
1794 |
};
|
1795 |
|
1796 |
/**
|
1886 |
})(jQuery);
|
1887 |
(function ($, _){
|
1888 |
// only register methods if this version is the current version
|
1889 |
+
if (_.version !== '0.1.8') return;
|
1890 |
|
1891 |
/**
|
1892 |
* @summary Contains common type checking utility methods.
|
2240 |
);
|
2241 |
(function($, _, _is){
|
2242 |
// only register methods if this version is the current version
|
2243 |
+
if (_.version !== '0.1.8') return;
|
2244 |
|
2245 |
/**
|
2246 |
* @memberof FooGallery.utils
|
2823 |
);
|
2824 |
(function(_, _is){
|
2825 |
// only register methods if this version is the current version
|
2826 |
+
if (_.version !== '0.1.8') return;
|
2827 |
|
2828 |
/**
|
2829 |
* @summary Contains common url utility methods.
|
2962 |
);
|
2963 |
(function (_, _is, _fn) {
|
2964 |
// only register methods if this version is the current version
|
2965 |
+
if (_.version !== '0.1.8') return;
|
2966 |
|
2967 |
/**
|
2968 |
* @summary Contains common string utility methods.
|
2997 |
});
|
2998 |
};
|
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}
|
3006 |
+
* @example {@run true}
|
3007 |
+
* // alias the FooGallery.utils.str namespace
|
3008 |
+
* var _str = FooGallery.utils.str;
|
3009 |
+
*
|
3010 |
+
* console.log( _str.kebab( "max-width" ) ); // => "max-width"
|
3011 |
+
* console.log( _str.kebab( "max--width" ) ); // => "max-width"
|
3012 |
+
* console.log( _str.kebab( "max Width" ) ); // => "max-width"
|
3013 |
+
* console.log( _str.kebab( "Max_width" ) ); // => "max-width"
|
3014 |
+
* console.log( _str.kebab( "MaxWidth" ) ); // => "max-width"
|
3015 |
+
* console.log( _str.kebab( "Non-alphanumeric ch@racters are converted to dashes!" ) ); // => "non-alphanumeric-ch-racters-are-converted-to-dashes"
|
3016 |
+
*/
|
3017 |
+
_.str.kebab = function(target){
|
3018 |
+
if (_is.empty(target)) return target;
|
3019 |
+
return target
|
3020 |
+
.match(/[A-Z]{2,}(?=[A-Z][a-z0-9]*|\b)|[A-Z]?[a-z0-9]*|[A-Z]|[0-9]+/g)
|
3021 |
+
.filter(Boolean)
|
3022 |
+
.map(function(x){ return x.toLowerCase(); })
|
3023 |
+
.join('-');
|
3024 |
+
};
|
3025 |
+
|
3026 |
/**
|
3027 |
* @summary Checks if the `target` contains the given `substr`.
|
3028 |
* @memberof FooGallery.utils.str
|
3303 |
);
|
3304 |
(function($, _, _is, _fn, _str){
|
3305 |
// only register methods if this version is the current version
|
3306 |
+
if (_.version !== '0.1.8') return;
|
3307 |
|
3308 |
/**
|
3309 |
* @summary Contains common object utility methods.
|
3635 |
);
|
3636 |
(function($, _, _is){
|
3637 |
// only register methods if this version is the current version
|
3638 |
+
if (_.version !== '0.1.8') return;
|
3639 |
|
3640 |
// any methods that have dependencies but don't fall into a specific subset or namespace can be added here
|
3641 |
|
3916 |
);
|
3917 |
(function($, _, _is){
|
3918 |
// only register methods if this version is the current version
|
3919 |
+
if (_.version !== '0.1.8') return;
|
3920 |
|
3921 |
/**
|
3922 |
* @summary Contains common utility methods and members for the CSS animation property.
|
4142 |
);
|
4143 |
(function($, _, _is, _animation){
|
4144 |
// only register methods if this version is the current version
|
4145 |
+
if (_.version !== '0.1.8') return;
|
4146 |
|
4147 |
/**
|
4148 |
* @summary Contains common utility methods and members for the CSS transition property.
|
4316 |
);
|
4317 |
(function ($, _, _is, _obj, _fn) {
|
4318 |
// only register methods if this version is the current version
|
4319 |
+
if (_.version !== '0.1.8') return;
|
4320 |
|
4321 |
/**
|
4322 |
* @summary A base class providing some helper methods for prototypal inheritance.
|
4455 |
);
|
4456 |
(function (_, _is, _str) {
|
4457 |
// only register methods if this version is the current version
|
4458 |
+
if (_.version !== '0.1.8') return;
|
4459 |
|
4460 |
_.Event = _.Class.extend(/** @lends FooGallery.utils.Event */{
|
4461 |
/**
|
4717 |
);
|
4718 |
(function($, _, _is){
|
4719 |
// only register methods if this version is the current version
|
4720 |
+
if (_.version !== '0.1.8') return;
|
4721 |
|
4722 |
_.Bounds = _.Class.extend(/** @lends FooGallery.utils.Bounds */{
|
4723 |
/**
|
4818 |
);
|
4819 |
(function($, _, _is, _fn, _obj){
|
4820 |
// only register methods if this version is the current version
|
4821 |
+
if (_.version !== '0.1.8') return;
|
4822 |
|
4823 |
_.Timer = _.EventClass.extend(/** @lends FooGallery.utils.Timer */{
|
4824 |
/**
|
5112 |
|
5113 |
(function($, _, _is, _fn){
|
5114 |
// only register methods if this version is the current version
|
5115 |
+
if (_.version !== '0.1.8') return;
|
5116 |
|
5117 |
_.Factory = _.Class.extend(/** @lends FooGallery.utils.Factory */{
|
5118 |
/**
|
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
|
5541 |
);
|
5542 |
(function($, _, _fn){
|
5543 |
// only register methods if this version is the current version
|
5544 |
+
if (_.version !== '0.1.8') return;
|
5545 |
|
5546 |
_.FullscreenAPI = _.EventClass.extend(/** @lends FooGallery.utils.FullscreenAPI */{
|
5547 |
/**
|
5933 |
return complete;
|
5934 |
};
|
5935 |
|
5936 |
+
/**
|
5937 |
+
* @summary A string array of supported EXIF properties.
|
5938 |
+
* @memberof FooGallery
|
5939 |
+
* @name supportedExifProperties
|
5940 |
+
* @type {string[]}
|
5941 |
+
*/
|
5942 |
+
_.supportedExifProperties = ["aperture","camera","date","exposure","focalLength","iso","orientation"];
|
5943 |
+
|
5944 |
+
/**
|
5945 |
+
* @memberof FooGallery.utils.is
|
5946 |
+
* @function exif
|
5947 |
+
* @param {*} value - The value to check.
|
5948 |
+
* @returns {boolean} `true` if the `value` contains any supported and valid EXIF properties.
|
5949 |
+
*/
|
5950 |
+
_is.exif = function(value){
|
5951 |
+
if (_is.object(value)){
|
5952 |
+
var keys = Object.keys(value);
|
5953 |
+
return keys.length > 0 && keys.some(function(key){
|
5954 |
+
return _.supportedExifProperties.indexOf(key) !== -1 && !_is.empty(value[key]);
|
5955 |
+
});
|
5956 |
+
}
|
5957 |
+
return false;
|
5958 |
+
};
|
5959 |
+
|
5960 |
})(
|
5961 |
+
FooGallery.$,
|
5962 |
+
FooGallery,
|
5963 |
+
FooGallery.utils,
|
5964 |
+
FooGallery.utils.is,
|
5965 |
+
FooGallery.utils.fn,
|
5966 |
+
FooGallery.utils.str
|
5967 |
);
|
5968 |
(function($, _, _utils, _is, _obj) {
|
5969 |
|
6700 |
create: false,
|
6701 |
children: false
|
6702 |
};
|
6703 |
+
self.robserver = new ResizeObserver(_fn.throttle(function () {
|
6704 |
+
if (self.$el.is(":visible")) self.layout();
|
6705 |
+
}, 250));
|
6706 |
},
|
6707 |
|
6708 |
// ################
|
6793 |
if (selector != null && !self.$el.is(selector)) {
|
6794 |
self.$el.addClass(self.opt.classes);
|
6795 |
}
|
6796 |
+
self.robserver.observe(self.$el.get(0));
|
6797 |
|
6798 |
// if the container currently has no children make them
|
6799 |
if (self.$el.children().not(self.sel.item.elem).length === 0) {
|
7083 |
* });
|
7084 |
*/
|
7085 |
self.raise("destroy");
|
7086 |
+
self.robserver.disconnect();
|
7087 |
if (self._checkTimeout) clearTimeout(self._checkTimeout);
|
7088 |
self.$scrollParent.off(self.namespace);
|
7089 |
$(window).off(self.namespace);
|
7267 |
* @function
|
7268 |
* @name getCSSClass
|
7269 |
* @param {string} type - The specific type of CSS class to retrieve.
|
7270 |
+
* @param {string} [def=""] - The default value to return if no CSS class is found.
|
7271 |
* @returns {string}
|
7272 |
*/
|
7273 |
+
getCSSClass: function(type, def){
|
7274 |
+
def = _is.empty(def) ? "" : def;
|
7275 |
var regex = type instanceof RegExp ? type : (_is.string(type) && this.opt.regex.hasOwnProperty(type) ? this.opt.regex[type] : null),
|
7276 |
className = (this.$el.prop("className") || ''),
|
7277 |
match = regex != null ? className.match(regex) : null;
|
7278 |
+
return match != null && match.length >= 2 ? match[1] : def;
|
7279 |
},
|
7280 |
|
7281 |
// ###############
|
8791 |
* @type {boolean}
|
8792 |
*/
|
8793 |
self.panelHide = self.opt.panelHide;
|
8794 |
+
/**
|
8795 |
+
* @memberof FooGallery.Item#
|
8796 |
+
* @name exif
|
8797 |
+
* @type {Object}
|
8798 |
+
*/
|
8799 |
+
self.exif = self.opt.exif;
|
8800 |
+
/**
|
8801 |
+
* @memberof FooGallery.Item#
|
8802 |
+
* @name hasExif
|
8803 |
+
* @type {boolean}
|
8804 |
+
*/
|
8805 |
+
self.hasExif = _is.exif(self.exif);
|
8806 |
/**
|
8807 |
* @summary The cached result of the last call to the {@link FooGallery.Item#getThumbUrl|getThumbUrl} method.
|
8808 |
* @memberof FooGallery.Item#
|
9078 |
self.description = data.description || data.captionDesc || self.description || self.alt;
|
9079 |
self.noLightbox = self.$anchor.hasClass(cls.noLightbox);
|
9080 |
self.panelHide = self.$anchor.hasClass(cls.panelHide);
|
9081 |
+
if (_is.exif(data.exif)){
|
9082 |
+
self.exif = _obj.extend(self.exif, data.exif);
|
9083 |
+
self.hasExif = true;
|
9084 |
+
}
|
9085 |
// if the caption or description are not set yet try fetching it from the html
|
9086 |
if (_is.empty(self.caption)) self.caption = $.trim(self.$caption.find(sel.caption.title).html());
|
9087 |
if (_is.empty(self.description)) self.description = $.trim(self.$caption.find(sel.caption.description).html());
|
9118 |
self._undo.placeholder = true;
|
9119 |
}
|
9120 |
self.$el.addClass(self.getTypeClass());
|
9121 |
+
if (self.hasExif){
|
9122 |
+
self.$el.addClass(cls.exif);
|
9123 |
+
}
|
9124 |
if (self.isCreated && self.isAttached && !self.isLoading && !self.isLoaded && !self.isError) {
|
9125 |
self.$el.addClass(cls.idle);
|
9126 |
}
|
9211 |
* @returns {boolean}
|
9212 |
*/
|
9213 |
doCreateItem: function () {
|
9214 |
+
var self = this, o = self.tmpl.opt, cls = self.cls, attr = self.attr, type = self.getTypeClass(), exif = self.hasExif ? cls.exif : "";
|
9215 |
+
attr.elem["class"] = [cls.elem, type, exif, cls.idle].join(" ");
|
9216 |
|
9217 |
attr.inner["class"] = cls.inner;
|
9218 |
|
9722 |
showCaptionDescription: true,
|
9723 |
noLightbox: false,
|
9724 |
panelHide: false,
|
9725 |
+
exif: {
|
9726 |
+
aperture: null,
|
9727 |
+
camera: null,
|
9728 |
+
date: null,
|
9729 |
+
exposure: null,
|
9730 |
+
focalLength: null,
|
9731 |
+
iso: null,
|
9732 |
+
orientation: null
|
9733 |
+
},
|
9734 |
attr: {
|
9735 |
elem: {},
|
9736 |
inner: {},
|
9748 |
item: {
|
9749 |
elem: "fg-item",
|
9750 |
inner: "fg-item-inner",
|
9751 |
+
exif: "fg-item-exif",
|
9752 |
anchor: "fg-thumb",
|
9753 |
overlay: "fg-image-overlay",
|
9754 |
wrap: "fg-image-wrap",
|
9771 |
}
|
9772 |
}
|
9773 |
}, {
|
9774 |
+
item: {
|
9775 |
+
exif: {
|
9776 |
+
aperture: "Aperture",
|
9777 |
+
camera: "Camera",
|
9778 |
+
date: "Date",
|
9779 |
+
exposure: "Exposure",
|
9780 |
+
focalLength: "Focal Length",
|
9781 |
+
iso: "ISO",
|
9782 |
+
orientation: "Orientation"
|
9783 |
+
}
|
9784 |
+
}
|
9785 |
});
|
9786 |
|
9787 |
_.components.register("item", _.Item);
|
10635 |
this.$el = template.$el;
|
10636 |
this.options = $.extend(true, {}, _.Justified.defaults, options);
|
10637 |
this._items = [];
|
|
|
|
|
10638 |
},
|
10639 |
init: function(){
|
10640 |
var self = this;
|
10645 |
self.options.maxRowHeight = parseInt(self.options.maxRowHeight);
|
10646 |
}
|
10647 |
}
|
|
|
|
|
|
|
|
|
10648 |
},
|
10649 |
destroy: function(){
|
|
|
|
|
10650 |
this.$el.removeAttr("style");
|
10651 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10652 |
parse: function(){
|
10653 |
var self = this;
|
10654 |
return self._items = $.map(self.tmpl.getItems(), function(item, i){
|
10680 |
}
|
10681 |
return self.$el.width();
|
10682 |
},
|
10683 |
+
layout: function(){
|
10684 |
+
this.parse();
|
|
|
|
|
|
|
|
|
|
|
10685 |
|
10686 |
var self = this,
|
10687 |
+
height = 0,
|
10688 |
+
maxWidth = self.getContainerWidth(),
|
10689 |
+
maxHeight = self.getMaxRowHeight(),
|
10690 |
+
rows = self.rows(maxWidth, maxHeight);
|
10691 |
|
10692 |
$.each(rows, function(ri, row){
|
10693 |
if (row.visible){
|
10697 |
self.render(row);
|
10698 |
});
|
10699 |
self.$el.height(height);
|
|
|
|
|
|
|
|
|
|
|
10700 |
},
|
10701 |
render: function(row){
|
10702 |
for (var j = 0, jl = row.items.length, item; j < jl; j++){
|
10876 |
if (rows.length > 1) top += self.options.margins;
|
10877 |
self.lastRow(row, top, maxWidth, maxHeight);
|
10878 |
return rows;
|
|
|
|
|
|
|
10879 |
}
|
10880 |
});
|
10881 |
|
10905 |
self.justified.init();
|
10906 |
},
|
10907 |
onFirstLoad: function(event, self){
|
10908 |
+
self.justified.layout();
|
10909 |
},
|
10910 |
onReady: function(event, self){
|
10911 |
+
self.justified.layout();
|
10912 |
},
|
10913 |
onDestroy: function(event, self){
|
10914 |
self.justified.destroy();
|
10915 |
},
|
10916 |
onLayout: function(event, self){
|
10917 |
+
self.justified.layout();
|
10918 |
},
|
10919 |
onAfterPageChange: function(event, self, current, prev, isFilter){
|
10920 |
if (!isFilter){
|
10921 |
+
self.justified.layout();
|
10922 |
}
|
10923 |
},
|
10924 |
onAfterFilterChange: function(event, self){
|
10925 |
+
self.justified.layout();
|
10926 |
}
|
10927 |
});
|
10928 |
|
10968 |
},
|
10969 |
onPostInit: function(event, self){
|
10970 |
self.checkCSS();
|
|
|
|
|
|
|
10971 |
},
|
10972 |
onDestroy: function(event, self){
|
10973 |
self.removeCSS();
|
10974 |
+
},
|
10975 |
+
onLayout: function(event, self){
|
10976 |
+
self.checkCSS();
|
10977 |
},
|
10978 |
checkCSS: function(){
|
10979 |
var self = this, maxWidth = self.getContainerWidth(), current = maxWidth < self.template.columnWidth;
|
11307 |
FooGallery,
|
11308 |
FooGallery.utils.obj
|
11309 |
);
|
11310 |
+
(function ($, _, _utils, _obj, _is) {
|
11311 |
|
11312 |
_.triggerPostLoad = function (e, tmpl, current, prev, isFilter) {
|
11313 |
if (e.type === "first-load" || (tmpl.initialized && ((e.type === "after-page-change" && !isFilter) || e.type === "after-filter-change"))) {
|
11337 |
_.autoDefaults = _obj.merge(_.autoDefaults, options);
|
11338 |
};
|
11339 |
|
11340 |
+
_.globalsMerged = false;
|
11341 |
+
|
11342 |
+
_.mergeGlobals = function(){
|
11343 |
+
if (_.globalsMerged === true) return;
|
11344 |
+
if (window.FooGallery_il8n && _is.object(window.FooGallery_il8n)){
|
11345 |
+
var il8n = window.FooGallery_il8n;
|
11346 |
+
for (var factory in il8n){
|
11347 |
+
if (!il8n.hasOwnProperty(factory) || !(_[factory] instanceof _utils.Factory) || !_is.object(il8n[factory])) continue;
|
11348 |
+
for (var component in il8n[factory]){
|
11349 |
+
if (il8n[factory].hasOwnProperty(component)){
|
11350 |
+
_[factory].configure(component, null, null, il8n[factory][component]);
|
11351 |
+
}
|
11352 |
+
}
|
11353 |
+
}
|
11354 |
+
_.globalsMerged = true;
|
11355 |
+
}
|
11356 |
+
};
|
11357 |
+
|
11358 |
_.load = _.reload = function(){
|
11359 |
// this automatically initializes all templates on page load
|
11360 |
$(function () {
|
11361 |
+
_.mergeGlobals();
|
11362 |
if (_.autoEnabled){
|
11363 |
$('[id^="foogallery-gallery-"]:not(.fg-ready)').foogallery(_.autoDefaults);
|
11364 |
}
|
11365 |
});
|
11366 |
|
11367 |
_utils.ready(function () {
|
11368 |
+
_.mergeGlobals();
|
11369 |
if (_.autoEnabled){
|
11370 |
$('[id^="foogallery-gallery-"].fg-ready').foogallery(_.autoDefaults);
|
11371 |
}
|
11375 |
_.load();
|
11376 |
|
11377 |
})(
|
11378 |
+
FooGallery.$,
|
11379 |
+
FooGallery,
|
11380 |
+
FooGallery.utils,
|
11381 |
+
FooGallery.utils.obj,
|
11382 |
+
FooGallery.utils.is
|
11383 |
);
|
extensions/default-templates/shared/js/foogallery.min.js
CHANGED
@@ -1,11 +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(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.7"};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.7"===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.7"===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.7"===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.7"===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.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.7"===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.7"===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.7"===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.7"===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.7"===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.7"===a.version&&(a.Event=a.Class.extend({construct:function(a){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.7"===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.7"===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.7"===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.7"===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.7"===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,e){if(e=d.jq(e)?e:a(e),e.length>0){var f=e.data(b.DATA_TEMPLATE);if(f instanceof b.Template)return f.destroy(!0).then(function(){return b.template.make(c,e).initialize()})}return b.template.make(c,e).initialize()},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}}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.is,FooGallery.utils.fn),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:"core";if("core"===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])){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),
|
10 |
-
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.initializing=!1,h.initialized=!1,h.destroying=!1,h.destroyed=!1,h._undo={classes:"",style:"",create:!1,children:!1}},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),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._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;null!==a._initialize&&a.raise("layout")},getContainerWidth:function(){var a=this;return a.$el.is(":visible")?a.$el.width():a.$el.parents(":visible:first").innerWidth()},getCSSClass:function(a){var b=a instanceof RegExp?a:d.string(a)&&this.opt.regex.hasOwnProperty(a)?this.opt.regex[a]:null,c=this.$el.prop("className")||"",e=null!=b?c.match(b):null;return null!=e&&e.length>=2?e[1]:""},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){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._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,f=e.tmpl.opt,g=e.cls,h=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(h.inner),e.$anchor=e.$inner.children(h.anchor).on("click.foogallery",{self:e},e.onAnchorClick),e.$image=e.$anchor.find(h.image),e.$caption=e.$inner.children(h.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(h.loading),e.isLoaded=e.$el.is(h.loaded),e.isError=e.$el.is(h.error);var i=e.$anchor.attr("data-type",e.type).data();e.id=i.id||e.id,e.productId=i.productId||e.productId,e.tags=i.tags||e.tags,e.href=i.href||e.$anchor.attr("href")||e.href,e.src=e.$image.attr(f.src)||e.src,e.srcset=e.$image.attr(f.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=i.title||i.captionTitle||e.caption||e.title,e.description=i.description||i.captionDesc||e.description||e.alt,e.noLightbox=e.$anchor.hasClass(g.noLightbox),e.panelHide=e.$anchor.hasClass(g.panelHide),d.empty(e.caption)&&(e.caption=a.trim(e.$caption.find(h.caption.title).html())),d.empty(e.description)&&(e.description=a.trim(e.$caption.find(h.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(h.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(h.caption.description).html(e.description.substr(0,e.maxDescriptionLength)+"…"),e.$overlay=e.$anchor.children(h.overlay),0===e.$overlay.length&&(e.$overlay=a("<span/>",{class:g.overlay}),e.$anchor.append(e.$overlay),e._undo.overlay=!0),e.$wrap=e.$anchor.children(h.wrap),0===e.$wrap.length&&(e.$wrap=a("<span/>",{class:g.wrap}),e.$anchor.append(e.$wrap.append(e.$image)),e._undo.wrap=!0),0===e.$el.children(h.loader).length&&(e.$el.append(a("<div/>",{class:g.loader})),e._undo.loader=!0);var j=e.$image.get(0);return d.empty(j.src)&&(j.src=b.EMPTY_IMAGE,e._undo.placeholder=!0),e.$el.addClass(e.getTypeClass()),!e.isCreated||!e.isAttached||e.isLoading||e.isLoaded||e.isError||e.$el.addClass(g.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();g.elem.class=[f.elem,h,f.idle].join(" "),g.inner.class=f.inner;var i=[f.anchor];c.noLightbox&&i.push(f.noLightbox),c.panelHide&&i.push(f.panelHide),g.anchor.class=i.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 j=a("<div/>").attr(g.inner).appendTo(c.$caption),k=c.showCaptionTitle&&!d.empty(c.caption),l=c.showCaptionDescription&&!d.empty(c.description);if(k||l){if(g.title.class=f.title,g.description.class=f.description,k){var m=a("<div/>").attr(g.title),n=c.caption;d.number(c.maxCaptionLength)&&c.maxCaptionLength>0&&d.string(c.caption)&&c.caption.length>c.maxCaptionLength&&(n=c.caption.substr(0,c.maxCaptionLength)+"…"),m.get(0).innerHTML=n,j.append(m)}if(l){var o=a("<div/>").attr(g.description),p=c.description;d.number(c.maxDescriptionLength)&&c.maxDescriptionLength>0&&d.string(c.description)&&c.description.length>c.maxDescriptionLength&&(p=c.description.substr(0,c.maxDescriptionLength)+"…"),o.get(0).innerHTML=p,j.append(o)}}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,attr:{elem:{},inner:{},anchor:{},image:{},caption:{elem:{},inner:{},title:{},description:{}}}}},{item:{elem:"fg-item",inner:"fg-item-inner",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:{}}),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)
|
11 |
-
;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=[],this._lastRefresh=0,this._refresh=null},init:function(){var b=this;d.string(b.options.maxRowHeight)&&(b.options.maxRowHeight.indexOf("%")?b.options.maxRowHeight=b.options.rowHeight*(parseInt(b.options.maxRowHeight)/100):b.options.maxRowHeight=parseInt(b.options.maxRowHeight)),a(window).on("resize.justified",{self:b},b.onWindowResize),this._refresh=setInterval(function(){b.refresh()},b.options.refreshInterval)},destroy:function(){this._refresh&&clearInterval(this._refresh),a(window).off("resize.justified"),this.$el.removeAttr("style")},refresh:function(){var a=this.getContainerWidth();a!=this._lastRefresh&&(this.layout(),this._lastRefresh=a)},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(b,c){b=!!d.boolean(b)&&b,c=!d.boolean(c)||c,(b||0===this._items.length)&&this.parse();var e=this,f=0,g=e.getContainerWidth(),h=e.getMaxRowHeight(),i=e.rows(g,h);a.each(i,function(a,b){b.visible&&(a>0&&(f+=e.options.margins),f+=b.height),e.render(b)}),e.$el.height(f),c&&e.getContainerWidth()<g&&e.layout(!1,!1)},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},onWindowResize:function(a){a.data.self.layout(!0)}}),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(!0)},onReady:function(a,b){b.justified.layout(!0)},onDestroy:function(a,b){b.justified.destroy()},onLayout:function(a,b){b.justified.layout(!0)},onAfterPageChange:function(a,b,c,d,e){e||b.justified.layout(!0)},onAfterFilterChange:function(a,b){b.justified.layout(!0)}}),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(b,c){c.checkCSS(),a(window).on("resize"+c.namespace,{self:c},e.debounce(function(){c.checkCSS()},50))},onDestroy:function(b,c){c.removeCSS(),a(window).off("resize"+c.namespace)},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%; 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",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){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.load=b.reload=function(){a(function(){b.autoEnabled&&a('[id^="foogallery-gallery-"]:not(.fg-ready)').foogallery(b.autoDefaults)}),c.ready(function(){b.autoEnabled&&a('[id^="foogallery-gallery-"].fg-ready').foogallery(b.autoDefaults)})},b.load()}(FooGallery.$,FooGallery,FooGallery.utils,FooGallery.utils.obj);
|
|
1 |
/*
|
2 |
* FooGallery - The Most Intuitive and Extensible Gallery Creation and Management Tool Ever Created for WordPress
|
3 |
+
* @version 1.4.12
|
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,e){if(e=d.jq(e)?e:a(e),e.length>0){var f=e.data(b.DATA_TEMPLATE);if(f instanceof b.Template)return f.destroy(!0).then(function(){return b.template.make(c,e).initialize()})}return b.template.make(c,e).initialize()},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:"core";if("core"===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])){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(f,h){var i=this;i._super(),i.namespace=".foogallery-"+ ++g,i.$el=d.jq(h)?h:a(h),i.$scrollParent=null,i.opt=f,i.template=f.template,i.id=i.$el.prop("id")||f.id,i.cls=f.cls,i.il8n=f.il8n,i.sel=c.selectify(i.cls),i.items=b.components.make("items",i),i.pages=d.undef(b.paging)?null:b.paging.make(f.paging.type,i),i.filter=d.undef(b.filtering)?null:b.filtering.make(f.filtering.type,i),i.state=b.components.make("state",i),i._initialize=null,i._checkTimeout=null,i.initializing=!1,i.initialized=!1,i.destroying=!1,i.destroyed=!1,i._undo={classes:"",style:"",create:!1,children:!1},i.robserver=new ResizeObserver(e.throttle(function(){i.$el.is(":visible")&&i.layout()},250))},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;null!==a._initialize&&a.raise("layout")},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){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})),
|
11 |
+
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.title,e.description=j.description||j.captionDesc||e.description||e.alt,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%; 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",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)}}),
|
12 |
+
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);
|
extensions/default-templates/simple-portfolio/class-simple-portfolio-gallery-template.php
CHANGED
@@ -15,7 +15,7 @@ if ( !class_exists( 'FooGallery_Simple_Portfolio_Gallery_Template' ) ) {
|
|
15 |
add_filter( 'foogallery_located_template-simple_portfolio', array( $this, 'enqueue_dependencies' ) );
|
16 |
|
17 |
//add extra fields to the templates
|
18 |
-
add_filter( 'foogallery_override_gallery_template_fields-simple_portfolio', array( $this, 'add_common_thumbnail_fields' ),
|
19 |
|
20 |
//add the data options needed for simple portfolio
|
21 |
add_filter( 'foogallery_build_container_data_options-simple_portfolio', array( $this, 'add_data_options' ), 10, 3 );
|
@@ -23,9 +23,6 @@ if ( !class_exists( 'FooGallery_Simple_Portfolio_Gallery_Template' ) ) {
|
|
23 |
//override specific settings when saving the gallery
|
24 |
add_filter( 'foogallery_save_gallery_settings-simple_portfolio', array( $this, 'override_settings'), 10, 3 );
|
25 |
|
26 |
-
//build up any preview arguments
|
27 |
-
add_filter( 'foogallery_preview_arguments-simple_portfolio', array( $this, 'preview_arguments' ), 10, 2 );
|
28 |
-
|
29 |
//build up the thumb dimensions from some arguments
|
30 |
add_filter( 'foogallery_calculate_thumbnail_dimensions-simple_portfolio', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
31 |
|
@@ -34,6 +31,8 @@ if ( !class_exists( 'FooGallery_Simple_Portfolio_Gallery_Template' ) ) {
|
|
34 |
|
35 |
//build up the arguments needed for rendering this template
|
36 |
add_filter( 'foogallery_gallery_template_arguments-simple_portfolio', array( $this, 'build_gallery_template_arguments' ) );
|
|
|
|
|
37 |
}
|
38 |
|
39 |
/**
|
@@ -138,25 +137,7 @@ if ( !class_exists( 'FooGallery_Simple_Portfolio_Gallery_Template' ) ) {
|
|
138 |
'data-foogallery-value-selector' => 'input:checked',
|
139 |
'data-foogallery-preview' => 'shortcode',
|
140 |
)
|
141 |
-
)
|
142 |
-
array(
|
143 |
-
'id' => 'caption_position',
|
144 |
-
'title' => __('Caption Position', 'foogallery'),
|
145 |
-
'desc' => __('Where the captions are displayed in relation to the thumbnail.', 'foogallery'),
|
146 |
-
'section' => __( 'Captions', 'foogallery' ),
|
147 |
-
'default' => '',
|
148 |
-
'type' => 'radio',
|
149 |
-
'spacer' => '<span class="spacer"></span>',
|
150 |
-
'choices' => array(
|
151 |
-
'' => __( 'Below', 'foogallery' ),
|
152 |
-
'fg-captions-top' => __( 'Above', 'foogallery' )
|
153 |
-
),
|
154 |
-
'row_data'=> array(
|
155 |
-
'data-foogallery-change-selector' => 'input:radio',
|
156 |
-
'data-foogallery-value-selector' => 'input:checked',
|
157 |
-
'data-foogallery-preview' => 'class'
|
158 |
-
)
|
159 |
-
),
|
160 |
),
|
161 |
);
|
162 |
|
@@ -182,8 +163,37 @@ if ( !class_exists( 'FooGallery_Simple_Portfolio_Gallery_Template' ) ) {
|
|
182 |
* @return array
|
183 |
*/
|
184 |
function add_common_thumbnail_fields( $fields, $template ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
//update specific fields
|
186 |
foreach ($fields as &$field) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
187 |
if ( 'hover_effect_caption_visibility' === $field['id'] ) {
|
188 |
$field['default'] = 'fg-caption-always';
|
189 |
$field['choices'] = array(
|
@@ -192,16 +202,26 @@ if ( !class_exists( 'FooGallery_Simple_Portfolio_Gallery_Template' ) ) {
|
|
192 |
$field['row_data'] = array(
|
193 |
'data-foogallery-change-selector' => 'input:radio',
|
194 |
'data-foogallery-hidden' => true,
|
195 |
-
'data-foogallery-preview' => '
|
196 |
);
|
197 |
} else if ( 'hover_effect_help' == $field['id'] ||
|
198 |
'captions_help' == $field['id']) {
|
199 |
$field['row_data'] = array(
|
200 |
'data-foogallery-hidden' => true
|
201 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
202 |
}
|
203 |
}
|
204 |
|
|
|
|
|
205 |
return $fields;
|
206 |
}
|
207 |
|
@@ -246,20 +266,6 @@ if ( !class_exists( 'FooGallery_Simple_Portfolio_Gallery_Template' ) ) {
|
|
246 |
return $settings;
|
247 |
}
|
248 |
|
249 |
-
/**
|
250 |
-
* Build up a arguments used in the preview of the gallery
|
251 |
-
* @param $args
|
252 |
-
* @param $post_data
|
253 |
-
*
|
254 |
-
* @return mixed
|
255 |
-
*/
|
256 |
-
function preview_arguments( $args, $post_data ) {
|
257 |
-
$args['thumbnail_dimensions'] = $post_data[FOOGALLERY_META_SETTINGS]['simple_portfolio_thumbnail_dimensions'];
|
258 |
-
$args['gutter'] = $post_data[FOOGALLERY_META_SETTINGS]['simple_portfolio_gutter'];
|
259 |
-
$args['align'] = $post_data[FOOGALLERY_META_SETTINGS]['simple_portfolio_align'];
|
260 |
-
return $args;
|
261 |
-
}
|
262 |
-
|
263 |
/**
|
264 |
* Builds thumb dimensions from arguments
|
265 |
*
|
@@ -329,5 +335,25 @@ if ( !class_exists( 'FooGallery_Simple_Portfolio_Gallery_Template' ) ) {
|
|
329 |
|
330 |
return $args;
|
331 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
332 |
}
|
333 |
}
|
15 |
add_filter( 'foogallery_located_template-simple_portfolio', array( $this, 'enqueue_dependencies' ) );
|
16 |
|
17 |
//add extra fields to the templates
|
18 |
+
add_filter( 'foogallery_override_gallery_template_fields-simple_portfolio', array( $this, 'add_common_thumbnail_fields' ), 101, 2 );
|
19 |
|
20 |
//add the data options needed for simple portfolio
|
21 |
add_filter( 'foogallery_build_container_data_options-simple_portfolio', array( $this, 'add_data_options' ), 10, 3 );
|
23 |
//override specific settings when saving the gallery
|
24 |
add_filter( 'foogallery_save_gallery_settings-simple_portfolio', array( $this, 'override_settings'), 10, 3 );
|
25 |
|
|
|
|
|
|
|
26 |
//build up the thumb dimensions from some arguments
|
27 |
add_filter( 'foogallery_calculate_thumbnail_dimensions-simple_portfolio', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
28 |
|
31 |
|
32 |
//build up the arguments needed for rendering this template
|
33 |
add_filter( 'foogallery_gallery_template_arguments-simple_portfolio', array( $this, 'build_gallery_template_arguments' ) );
|
34 |
+
|
35 |
+
add_filter( 'foogallery_build_class_attribute', array( $this, 'override_class_attributes' ), 99, 2 );
|
36 |
}
|
37 |
|
38 |
/**
|
137 |
'data-foogallery-value-selector' => 'input:checked',
|
138 |
'data-foogallery-preview' => 'shortcode',
|
139 |
)
|
140 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
),
|
142 |
);
|
143 |
|
163 |
* @return array
|
164 |
*/
|
165 |
function add_common_thumbnail_fields( $fields, $template ) {
|
166 |
+
$new_fields[] = array(
|
167 |
+
'id' => 'caption_position',
|
168 |
+
'title' => __('Caption Position', 'foogallery'),
|
169 |
+
'desc' => __('Where the captions are displayed in relation to the thumbnail.', 'foogallery'),
|
170 |
+
'section' => __( 'Captions', 'foogallery' ),
|
171 |
+
'default' => '',
|
172 |
+
'type' => 'radio',
|
173 |
+
'spacer' => '<span class="spacer"></span>',
|
174 |
+
'choices' => array(
|
175 |
+
'' => __( 'Below', 'foogallery' ),
|
176 |
+
'fg-captions-top' => __( 'Above', 'foogallery' )
|
177 |
+
),
|
178 |
+
'row_data'=> array(
|
179 |
+
'data-foogallery-change-selector' => 'input:radio',
|
180 |
+
'data-foogallery-value-selector' => 'input:checked',
|
181 |
+
'data-foogallery-preview' => 'shortcode'
|
182 |
+
)
|
183 |
+
);
|
184 |
+
|
185 |
+
$index_of_captions_field = 0;
|
186 |
+
$index = 0;
|
187 |
+
|
188 |
//update specific fields
|
189 |
foreach ($fields as &$field) {
|
190 |
+
|
191 |
+
if ( $index_of_captions_field === 0 && __( 'Captions', 'foogallery' ) === $field['section'] ) {
|
192 |
+
$index_of_captions_field = $index;
|
193 |
+
}
|
194 |
+
|
195 |
+
$index++;
|
196 |
+
|
197 |
if ( 'hover_effect_caption_visibility' === $field['id'] ) {
|
198 |
$field['default'] = 'fg-caption-always';
|
199 |
$field['choices'] = array(
|
202 |
$field['row_data'] = array(
|
203 |
'data-foogallery-change-selector' => 'input:radio',
|
204 |
'data-foogallery-hidden' => true,
|
205 |
+
'data-foogallery-preview' => 'shortcode'
|
206 |
);
|
207 |
} else if ( 'hover_effect_help' == $field['id'] ||
|
208 |
'captions_help' == $field['id']) {
|
209 |
$field['row_data'] = array(
|
210 |
'data-foogallery-hidden' => true
|
211 |
);
|
212 |
+
} else if ( 'theme' === $field['id'] ) {
|
213 |
+
$field['default'] = 'fg-dark';
|
214 |
+
$field['choices'] = array(
|
215 |
+
'fg-light' => __( 'Light', 'foogallery' ),
|
216 |
+
'fg-dark' => __( 'Dark', 'foogallery' ),
|
217 |
+
'fg-transparent' => __( 'Transparent', 'foogallery' ),
|
218 |
+
'fg-custom' => __( 'Custom', 'foogallery' )
|
219 |
+
);
|
220 |
}
|
221 |
}
|
222 |
|
223 |
+
array_splice( $fields, $index_of_captions_field, 0, $new_fields );
|
224 |
+
|
225 |
return $fields;
|
226 |
}
|
227 |
|
266 |
return $settings;
|
267 |
}
|
268 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
269 |
/**
|
270 |
* Builds thumb dimensions from arguments
|
271 |
*
|
335 |
|
336 |
return $args;
|
337 |
}
|
338 |
+
|
339 |
+
/**
|
340 |
+
* Override the classes for the captions visibility
|
341 |
+
*
|
342 |
+
* @param $classes array
|
343 |
+
* @param $gallery FooGallery
|
344 |
+
*
|
345 |
+
* @return array
|
346 |
+
*/
|
347 |
+
function override_class_attributes( $classes, $gallery ) {
|
348 |
+
if ( 'simple_portfolio' === $gallery->gallery_template ) {
|
349 |
+
if ( ( $key = array_search( 'fg-caption-hover', $classes ) ) !== false) {
|
350 |
+
unset( $classes[$key] );
|
351 |
+
}
|
352 |
+
|
353 |
+
$classes[] = 'fg-caption-always';
|
354 |
+
}
|
355 |
+
|
356 |
+
return $classes;
|
357 |
+
}
|
358 |
}
|
359 |
}
|
extensions/default-templates/thumbnail/class-thumbnail-gallery-template.php
CHANGED
@@ -14,9 +14,6 @@ if ( !class_exists( 'FooGallery_Thumbnail_Gallery_Template' ) ) {
|
|
14 |
|
15 |
add_filter( 'foogallery_located_template-thumbnail', array( $this, 'enqueue_dependencies' ) );
|
16 |
|
17 |
-
//build up any preview arguments
|
18 |
-
add_filter( 'foogallery_preview_arguments-thumbnail', array( $this, 'preview_arguments' ), 10, 2 );
|
19 |
-
|
20 |
//build up the thumb dimensions from some arguments
|
21 |
add_filter( 'foogallery_calculate_thumbnail_dimensions-thumbnail', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
22 |
|
@@ -104,7 +101,7 @@ if ( !class_exists( 'FooGallery_Thumbnail_Gallery_Template' ) ) {
|
|
104 |
),
|
105 |
'row_data'=> array(
|
106 |
'data-foogallery-change-selector' => 'select',
|
107 |
-
'data-foogallery-preview' => '
|
108 |
)
|
109 |
),
|
110 |
array(
|
@@ -115,18 +112,6 @@ if ( !class_exists( 'FooGallery_Thumbnail_Gallery_Template' ) ) {
|
|
115 |
'type' => 'checkbox',
|
116 |
'desc' => __( 'You can link your thumbnails to Custom URL\'s (if they are set on your attachments). Fallback will be to the full size image.', 'foogallery' )
|
117 |
),
|
118 |
-
// array(
|
119 |
-
// 'id' => 'exclude_featured_image',
|
120 |
-
// 'title' => __( 'Exclude Featured Image', 'foogallery' ),
|
121 |
-
// 'section' => __( 'General', 'foogallery' ),
|
122 |
-
// 'default' => '',
|
123 |
-
// 'type' => 'checkbox',
|
124 |
-
// 'desc' => __( 'You can exclude the featured image from the images shown in the lightbox.', 'foogallery' ),
|
125 |
-
// 'row_data'=> array(
|
126 |
-
// 'data-foogallery-change-selector' => 'input',
|
127 |
-
// 'data-foogallery-preview' => 'shortcode'
|
128 |
-
// )
|
129 |
-
// ),
|
130 |
array(
|
131 |
'id' => 'lightbox',
|
132 |
'title' => __( 'Lightbox', 'foogallery' ),
|
@@ -134,7 +119,29 @@ if ( !class_exists( 'FooGallery_Thumbnail_Gallery_Template' ) ) {
|
|
134 |
'desc' => __( 'Choose which lightbox you want to use.', 'foogallery' ),
|
135 |
'type' => 'lightbox',
|
136 |
'default' => 'none',
|
|
|
|
|
|
|
|
|
|
|
137 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
138 |
array(
|
139 |
'id' => 'caption_title',
|
140 |
'title' => __('Override Title', 'foogallery'),
|
@@ -172,23 +179,6 @@ if ( !class_exists( 'FooGallery_Thumbnail_Gallery_Template' ) ) {
|
|
172 |
foogallery_enqueue_core_gallery_template_script();
|
173 |
}
|
174 |
|
175 |
-
/**
|
176 |
-
* Build up a arguments used in the preview of the gallery
|
177 |
-
* @param $args
|
178 |
-
* @param $post_data
|
179 |
-
*
|
180 |
-
* @return mixed
|
181 |
-
*/
|
182 |
-
function preview_arguments( $args, $post_data ) {
|
183 |
-
$args['thumbnail_dimensions'] = $post_data[FOOGALLERY_META_SETTINGS]['thumbnail_thumbnail_dimensions'];
|
184 |
-
$args['caption_title'] = $post_data[FOOGALLERY_META_SETTINGS]['thumbnail_caption_title'];
|
185 |
-
$args['caption_description'] = $post_data[FOOGALLERY_META_SETTINGS]['thumbnail_caption_description'];
|
186 |
-
// if ( isset( $post_data[FOOGALLERY_META_SETTINGS]['thumbnail_exclude_featured_image'] ) ) {
|
187 |
-
// $args['exclude_featured_image'] = $post_data[ FOOGALLERY_META_SETTINGS ]['thumbnail_exclude_featured_image'];
|
188 |
-
// }
|
189 |
-
return $args;
|
190 |
-
}
|
191 |
-
|
192 |
/**
|
193 |
* Builds thumb dimensions from arguments
|
194 |
*
|
14 |
|
15 |
add_filter( 'foogallery_located_template-thumbnail', array( $this, 'enqueue_dependencies' ) );
|
16 |
|
|
|
|
|
|
|
17 |
//build up the thumb dimensions from some arguments
|
18 |
add_filter( 'foogallery_calculate_thumbnail_dimensions-thumbnail', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
19 |
|
101 |
),
|
102 |
'row_data'=> array(
|
103 |
'data-foogallery-change-selector' => 'select',
|
104 |
+
'data-foogallery-preview' => 'shortcode'
|
105 |
)
|
106 |
),
|
107 |
array(
|
112 |
'type' => 'checkbox',
|
113 |
'desc' => __( 'You can link your thumbnails to Custom URL\'s (if they are set on your attachments). Fallback will be to the full size image.', 'foogallery' )
|
114 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
array(
|
116 |
'id' => 'lightbox',
|
117 |
'title' => __( 'Lightbox', 'foogallery' ),
|
119 |
'desc' => __( 'Choose which lightbox you want to use.', 'foogallery' ),
|
120 |
'type' => 'lightbox',
|
121 |
'default' => 'none',
|
122 |
+
'row_data'=> array(
|
123 |
+
'data-foogallery-change-selector' => 'select',
|
124 |
+
'data-foogallery-preview' => 'shortcode',
|
125 |
+
'data-foogallery-value-selector' => 'select'
|
126 |
+
)
|
127 |
),
|
128 |
+
array(
|
129 |
+
'id' => 'exclude_featured_image',
|
130 |
+
'title' => __( 'Exclude Featured Image', 'foogallery' ),
|
131 |
+
'section' => __( 'General', 'foogallery' ),
|
132 |
+
'default' => '',
|
133 |
+
'type' => 'checkbox',
|
134 |
+
'desc' => __( 'You can exclude the featured image from the images shown in the lightbox.', 'foogallery' ),
|
135 |
+
'row_data'=> array(
|
136 |
+
'data-foogallery-hidden' => true,
|
137 |
+
'data-foogallery-show-when-field' => 'lightbox',
|
138 |
+
'data-foogallery-show-when-field-operator' => '===',
|
139 |
+
'data-foogallery-show-when-field-value' => 'foogallery',
|
140 |
+
'data-foogallery-change-selector' => 'input',
|
141 |
+
'data-foogallery-preview' => 'shortcode',
|
142 |
+
'data-foogallery-value-selector' => 'input:checked',
|
143 |
+
)
|
144 |
+
),
|
145 |
array(
|
146 |
'id' => 'caption_title',
|
147 |
'title' => __('Override Title', 'foogallery'),
|
179 |
foogallery_enqueue_core_gallery_template_script();
|
180 |
}
|
181 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
/**
|
183 |
* Builds thumb dimensions from arguments
|
184 |
*
|
extensions/default-templates/thumbnail/gallery-thumbnail.php
CHANGED
@@ -18,15 +18,19 @@ $args['override_caption_title'] = foogallery_gallery_template_setting( 'caption_
|
|
18 |
$args['override_caption_desc'] = foogallery_gallery_template_setting( 'caption_description', '' );
|
19 |
|
20 |
$thumb_url = $featured_attachment->url;
|
21 |
-
if ( foogallery_gallery_template_setting( 'link_custom_url', '' )
|
22 |
if ( !empty( $featured_attachment->custom_url ) ) {
|
23 |
$thumb_url = $featured_attachment->custom_url;
|
24 |
}
|
25 |
$args['link'] = 'custom';
|
26 |
}
|
|
|
27 |
$args['link_attributes'] = array(
|
28 |
'rel' => 'lightbox[' . $current_foogallery->ID . ']'
|
29 |
);
|
|
|
|
|
|
|
30 |
$foogallery_single_thumbnail_classes = foogallery_build_class_attribute_safe( $current_foogallery, 'foogallery-single-thumbnail', 'foogallery-lightbox-' . $lightbox, $position );
|
31 |
$foogallery_single_thumbnail_attributes = foogallery_build_container_attributes_safe( $current_foogallery, array( 'class' => $foogallery_single_thumbnail_classes ) );
|
32 |
?>
|
@@ -36,6 +40,7 @@ $foogallery_single_thumbnail_attributes = foogallery_build_container_attributes_
|
|
36 |
<?php
|
37 |
unset( $args['override_caption_title'] );
|
38 |
unset( $args['override_caption_desc'] );
|
|
|
39 |
foreach ( foogallery_current_gallery_attachments_for_rendering() as $attachment ) {
|
40 |
if ( $attachment->url !== $featured_attachment->url ) {
|
41 |
echo foogallery_attachment_html( $attachment, $args );
|
18 |
$args['override_caption_desc'] = foogallery_gallery_template_setting( 'caption_description', '' );
|
19 |
|
20 |
$thumb_url = $featured_attachment->url;
|
21 |
+
if ( foogallery_gallery_template_setting( 'link_custom_url', '' ) === 'on' ) {
|
22 |
if ( !empty( $featured_attachment->custom_url ) ) {
|
23 |
$thumb_url = $featured_attachment->custom_url;
|
24 |
}
|
25 |
$args['link'] = 'custom';
|
26 |
}
|
27 |
+
|
28 |
$args['link_attributes'] = array(
|
29 |
'rel' => 'lightbox[' . $current_foogallery->ID . ']'
|
30 |
);
|
31 |
+
if ( foogallery_gallery_template_setting( 'exclude_featured_image', '' ) === 'on' ) {
|
32 |
+
$args['link_attributes']['class']= 'fg-panel-hide';
|
33 |
+
}
|
34 |
$foogallery_single_thumbnail_classes = foogallery_build_class_attribute_safe( $current_foogallery, 'foogallery-single-thumbnail', 'foogallery-lightbox-' . $lightbox, $position );
|
35 |
$foogallery_single_thumbnail_attributes = foogallery_build_container_attributes_safe( $current_foogallery, array( 'class' => $foogallery_single_thumbnail_classes ) );
|
36 |
?>
|
40 |
<?php
|
41 |
unset( $args['override_caption_title'] );
|
42 |
unset( $args['override_caption_desc'] );
|
43 |
+
unset( $args['link_attributes'] );
|
44 |
foreach ( foogallery_current_gallery_attachments_for_rendering() as $attachment ) {
|
45 |
if ( $attachment->url !== $featured_attachment->url ) {
|
46 |
echo foogallery_attachment_html( $attachment, $args );
|
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.
|
@@ -157,7 +157,17 @@ if ( function_exists( 'foogallery_fs' ) ) {
|
|
157 |
new FooGallery_Default_Templates();
|
158 |
//init the default media library datasource
|
159 |
new FooGallery_Datasource_MediaLibrary();
|
160 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
161 |
//init Gutenberg!
|
162 |
new FooGallery_Gutenberg();
|
163 |
//init advanced settings
|
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.24
|
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.24' );
|
29 |
define( 'FOOGALLERY_SETTINGS_VERSION', '2' );
|
30 |
require_once FOOGALLERY_PATH . 'includes/constants.php';
|
31 |
// Create a helper function for easy SDK access.
|
157 |
new FooGallery_Default_Templates();
|
158 |
//init the default media library datasource
|
159 |
new FooGallery_Datasource_MediaLibrary();
|
160 |
+
$pro_code_included = false;
|
161 |
+
|
162 |
+
if ( !$pro_code_included ) {
|
163 |
+
add_filter( 'foogallery_extensions_for_view', array( $this, 'add_foogallery_pro_extension' ) );
|
164 |
+
//only include if in admin
|
165 |
+
if ( is_admin() ) {
|
166 |
+
//include PRO promotion
|
167 |
+
new FooGallery_Pro_Promotion();
|
168 |
+
}
|
169 |
+
}
|
170 |
+
|
171 |
//init Gutenberg!
|
172 |
new FooGallery_Gutenberg();
|
173 |
//init advanced settings
|
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_account .postbox,#fs_account .widefat{max-width:
|
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_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/assets/css/admin/add-ons.css
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:0.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:0.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}
|
2 |
-
#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:0.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid white;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
|
1 |
+
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:0.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:0.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}
|
2 |
+
#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:0.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid white;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
|
freemius/assets/css/admin/common.css
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media (max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}
|
2 |
-
.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 500px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}.fs-submenu-item.pricing.upgrade-mode{color:greenyellow}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
|
1 |
+
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}.fs-switch{position:relative;display:inline-block;color:#ccc;text-shadow:0 1px 1px rgba(255,255,255,0.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);background:#ececec;box-shadow:0 0 4px rgba(0,0,0,0.1),inset 0 1px 3px 0 rgba(0,0,0,0.1);cursor:pointer}.fs-switch span{display:inline-block;width:35px;text-transform:uppercase}.fs-switch .fs-toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.3);border-radius:4px;background:#fff;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ececec), color-stop(1, #fff));background-image:-webkit-linear-gradient(top, #ececec, #fff);background-image:-moz-linear-gradient(top, #ececec, #fff);background-image:-ms-linear-gradient(top, #ececec, #fff);background-image:-o-linear-gradient(top, #ececec, #fff);background-image:linear-gradient(top, bottom, #ececec, #fff);box-shadow:inset 0 1px 0 0 rgba(255,255,255,0.5);z-index:999;-moz-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-o-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-ms-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-webkit-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1)}.fs-switch.fs-off .fs-toggle{left:2%}.fs-switch.fs-on .fs-toggle{left:54%}.fs-switch.fs-round{top:8px;padding:4px 25px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round .fs-toggle{top:0;width:24px;height:24px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round.fs-off .fs-toggle{left:-1px}.fs-switch.fs-round.fs-on{background:#0085ba}.fs-switch.fs-round.fs-on .fs-toggle{left:25px}.fs-switch.fs-small.fs-round{padding:1px 19px}.fs-switch.fs-small.fs-round .fs-toggle{top:0;width:18px;height:18px;-moz-border-radius:18px;-webkit-border-radius:18px;border-radius:18px}.fs-switch.fs-small.fs-round.fs-on .fs-toggle{left:19px}.fs-switch-feedback{margin-left:10px}.fs-switch-feedback.success{color:#71ae00}.rtl .fs-switch-feedback{margin-left:0;margin-right:10px}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media (max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}
|
2 |
+
.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 500px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}.fs-submenu-item.pricing.upgrade-mode{color:greenyellow}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain;margin-bottom:-2px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
|
freemius/assets/css/admin/connect.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.3);box-shadow:0px 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions .fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li
|
1 |
+
#fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.3);box-shadow:0px 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions .fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li .fs-switch{float:right}#fs_connect .fs-permissions ul li .fs-permission-description{margin-left:55px}#fs_connect .fs-permissions ul li .fs-permission-description span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{height:auto;margin:20px 20px 10px 20px}@media screen and (max-width: 479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-freemium-licensing{padding:8px;background:#777;color:#fff}#fs_connect .fs-freemium-licensing p{text-align:center;display:block;margin:0;padding:0}#fs_connect .fs-freemium-licensing a{color:#C2EEFF;text-decoration:underline}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:0.85em;padding:5px;background:rgba(0,0,0,0.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:rgba(0,0,0,0.8);color:#fff;font-family:'arial', serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);line-height:1.3em;font-weight:bold;text-align:left}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right}.fs-tooltip-trigger .fs-tooltip::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,0.8) transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}#fs_marketing_optin{display:none;margin-top:10px;border:1px solid #ccc;padding:10px;line-height:1.5em}#fs_marketing_optin .fs-message{display:block;margin-bottom:5px;font-size:1.05em;font-weight:600}#fs_marketing_optin.error{border:1px solid #d3135a;background:#fee}#fs_marketing_optin.error .fs-message{color:#d3135a}#fs_marketing_optin .fs-input-container{margin-top:5px}#fs_marketing_optin .fs-input-container label{margin-top:5px;display:block}#fs_marketing_optin .fs-input-container label input{float:left;margin:1px 0 0 0}#fs_marketing_optin .fs-input-container label:first-child{display:block;margin-bottom:2px}#fs_marketing_optin .fs-input-label{display:block;margin-left:20px}#fs_marketing_optin .fs-input-label .underlined{text-decoration:underline}.rtl #fs_marketing_optin .fs-input-container label input{float:right}.rtl #fs_marketing_optin .fs-input-label{margin-left:0;margin-right:20px}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li .fs-switch{float:left}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}#fs_theme_connect_wrapper{position:fixed;top:0;height:100%;width:100%;z-index:99990;background:rgba(0,0,0,0.75);text-align:center;overflow-y:auto}#fs_theme_connect_wrapper:before{content:"";display:inline-block;vertical-align:middle;height:100%}#fs_theme_connect_wrapper>button.close{color:white;cursor:pointer;height:40px;width:40px;position:absolute;right:0;border:0;background-color:transparent;top:32px}#fs_theme_connect_wrapper #fs_connect{top:0;text-align:left;display:inline-block;vertical-align:middle;margin-top:52px;margin-bottom:20px}#fs_theme_connect_wrapper #fs_connect .fs-terms{background:rgba(140,140,140,0.64)}#fs_theme_connect_wrapper #fs_connect .fs-terms,#fs_theme_connect_wrapper #fs_connect .fs-terms a{color:#c5c5c5}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}
|
freemius/assets/css/admin/debug.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.
|
1 |
+
.fs-switch-label{font-size:20px;line-height:31px;margin:0 5px}#fs_log_book table{font-family:Consolas,Monaco,monospace;font-size:12px}#fs_log_book table th{color:#ccc}#fs_log_book table tr{background:#232525}#fs_log_book table tr.alternate{background:#2b2b2b}#fs_log_book table tr td.fs-col--logger{color:#5a7435}#fs_log_book table tr td.fs-col--type{color:#ffc861}#fs_log_book table tr td.fs-col--function{color:#a7b7b1;font-weight:bold}#fs_log_book table tr td.fs-col--message,#fs_log_book table tr td.fs-col--message a{color:#9a73ac !important}#fs_log_book table tr td.fs-col--file{color:#d07922}#fs_log_book table tr td.fs-col--timestamp{color:#6596be}
|
freemius/assets/css/admin/dialog-boxes.css
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eeeeee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:0.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}
|
2 |
.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:0.3;-o-transform:0.3;-ms-transform:0.3;-webkit-transform:0.3;transform:0.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.1) !important}
|
1 |
+
.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .dashicons{vertical-align:middle}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eeeeee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:0.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-modal.fs-modal-user-change .fs-modal-body input#fs_other_email_address{width:100%}.fs-user-change-options-container table{width:100%;border-collapse:collapse}.fs-user-change-options-container table tr{display:block;margin-bottom:2px}.fs-user-change-options-container table .fs-email-address-container td{display:inline-block}.fs-user-change-options-container table .fs-email-address-container input[type="radio"]{margin-bottom:0;margin-top:0}.fs-user-change-options-container table .fs-other-email-address-container{width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div{display:table;width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div label,.fs-user-change-options-container table .fs-other-email-address-container>div>div{display:table-cell}.fs-user-change-options-container table .fs-other-email-address-container>div label{width:1%;padding-left:3px;padding-right:3px}.fs-user-change-options-container table .fs-other-email-address-container>div>div{width:auto}.fs-user-change-options-container table .fs-other-email-address-container>div>div input{width:100%}.fs-modal.fs-modal-developer-license-debug-mode .fs-modal-body input.fs-license-or-user-key{width:100%}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}
|
2 |
.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:0.3;-o-transform:0.3;-ms-transform:0.3;-webkit-transform:0.3;transform:0.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.1) !important}
|
freemius/assets/css/admin/plugins.css
ADDED
@@ -0,0 +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}.wp-list-table.plugins .plugin-title span.fs-tag{display:inline-block;margin-left:5px;line-height:10px}
|
freemius/assets/css/customizer.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:#000;color:#fff;font-family:'arial', serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);line-height:1.3em;font-weight:bold;text-align:left}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{text-align:right}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#000 transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{right:21px;left:auto}#fs_customizer_upsell .dashicons-editor-help:hover .fs-feature-desc{visibility:visible;opacity:1}#fs_customizer_upsell .button-primary{display:block;text-align:center;margin-top:10px}#fs_customizer_support{display:block !important}#fs_customizer_support .button{float:right}#fs_customizer_support .button-group{width:100%;display:block;margin-top:10px}#fs_customizer_support .button-group .button{float:none;width:50%;text-align:center}
|
1 |
+
#fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:#000;color:#fff;font-family:'arial', serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);line-height:1.3em;font-weight:bold;text-align:left}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{text-align:right}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#000 transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{right:21px;left:auto}#fs_customizer_upsell .dashicons-editor-help:hover .fs-feature-desc{visibility:visible;opacity:1}#fs_customizer_upsell .button-primary{display:block;text-align:center;margin-top:10px}#fs_customizer_support{display:block !important}#fs_customizer_support .button{float:right}#fs_customizer_support .button-group{width:100%;display:block;margin-top:10px}#fs_customizer_support .button-group .button{float:none;width:50%;text-align:center}#customize-theme-controls #accordion-section-freemius_upsell{border-top:1px solid #0085ba !important;border-bottom:1px solid #0085ba !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title{color:#fff;background-color:#0085ba;border-left:4px solid #0085ba;transition:.15s background-color ease-in-out, .15s border-color ease-in-out;outline:none;border-bottom:none !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:hover{background-color:#008ec2;border-left-color:#0073aa}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:after{color:#fff}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title{border-left:none;border-right:4px solid #0085ba}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title:hover{border-right-color:#0073aa}
|
freemius/assets/img/foogallery.png
DELETED
Binary file
|
freemius/config.php
CHANGED
@@ -1,388 +1,388 @@
|
|
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.4
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
if ( ! defined( 'WP_FS__SLUG' ) ) {
|
14 |
-
define( 'WP_FS__SLUG', 'freemius' );
|
15 |
-
}
|
16 |
-
if ( ! defined( 'WP_FS__DEV_MODE' ) ) {
|
17 |
-
define( 'WP_FS__DEV_MODE', false );
|
18 |
-
}
|
19 |
-
|
20 |
-
#--------------------------------------------------------------------------------
|
21 |
-
#region API Connectivity Issues Simulation
|
22 |
-
#--------------------------------------------------------------------------------
|
23 |
-
|
24 |
-
if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY' ) ) {
|
25 |
-
define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY', false );
|
26 |
-
}
|
27 |
-
if ( ! defined( 'WP_FS__SIMULATE_NO_CURL' ) ) {
|
28 |
-
define( 'WP_FS__SIMULATE_NO_CURL', false );
|
29 |
-
}
|
30 |
-
if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE' ) ) {
|
31 |
-
define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE', false );
|
32 |
-
}
|
33 |
-
if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL' ) ) {
|
34 |
-
define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL', false );
|
35 |
-
}
|
36 |
-
if ( WP_FS__SIMULATE_NO_CURL ) {
|
37 |
-
define( 'FS_SDK__SIMULATE_NO_CURL', true );
|
38 |
-
}
|
39 |
-
if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE ) {
|
40 |
-
define( 'FS_SDK__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE', true );
|
41 |
-
}
|
42 |
-
if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL ) {
|
43 |
-
define( 'FS_SDK__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL', true );
|
44 |
-
}
|
45 |
-
|
46 |
-
#endregion
|
47 |
-
|
48 |
-
if ( ! defined( 'WP_FS__SIMULATE_FREEMIUS_OFF' ) ) {
|
49 |
-
define( 'WP_FS__SIMULATE_FREEMIUS_OFF', false );
|
50 |
-
}
|
51 |
-
|
52 |
-
if ( ! defined( 'WP_FS__PING_API_ON_IP_OR_HOST_CHANGES' ) ) {
|
53 |
-
/**
|
54 |
-
* @since 1.1.7.3
|
55 |
-
* @author Vova Feldman (@svovaf)
|
56 |
-
*
|
57 |
-
* I'm not sure if shared servers periodically change IP, or the subdomain of the
|
58 |
-
* admin dashboard. Also, I've seen sites that have strange loop of switching
|
59 |
-
* between domains on a daily basis. Therefore, to eliminate the risk of
|
60 |
-
* multiple unwanted connectivity test pings, temporary ignore domain or
|
61 |
-
* server IP changes.
|
62 |
-
*/
|
63 |
-
define( 'WP_FS__PING_API_ON_IP_OR_HOST_CHANGES', false );
|
64 |
-
}
|
65 |
-
|
66 |
-
/**
|
67 |
-
* If your dev environment supports custom public network IP setup
|
68 |
-
* like VVV, please update WP_FS__LOCALHOST_IP with your public IP
|
69 |
-
* and uncomment it during dev.
|
70 |
-
*/
|
71 |
-
if ( ! defined( 'WP_FS__LOCALHOST_IP' ) ) {
|
72 |
-
// VVV default public network IP.
|
73 |
-
define( 'WP_FS__VVV_DEFAULT_PUBLIC_IP', '192.168.50.4' );
|
74 |
-
|
75 |
-
// define( 'WP_FS__LOCALHOST_IP', WP_FS__VVV_DEFAULT_PUBLIC_IP );
|
76 |
-
}
|
77 |
-
|
78 |
-
/**
|
79 |
-
* If true and running with secret key, the opt-in process
|
80 |
-
* will skip the email activation process which is invoked
|
81 |
-
* when the email of the context user already exist in Freemius
|
82 |
-
* database (as a security precaution, to prevent sharing user
|
83 |
-
* secret with unauthorized entity).
|
84 |
-
*
|
85 |
-
* IMPORTANT:
|
86 |
-
* AS A SECURITY PRECAUTION, WE VALIDATE THE TIMESTAMP OF THE OPT-IN REQUEST.
|
87 |
-
* THEREFORE, MAKE SURE THAT WHEN USING THIS PARAMETER,YOUR TESTING ENVIRONMENT'S
|
88 |
-
* CLOCK IS SYNCED.
|
89 |
-
*/
|
90 |
-
if ( ! defined( 'WP_FS__SKIP_EMAIL_ACTIVATION' ) ) {
|
91 |
-
define( 'WP_FS__SKIP_EMAIL_ACTIVATION', false );
|
92 |
-
}
|
93 |
-
|
94 |
-
|
95 |
-
#--------------------------------------------------------------------------------
|
96 |
-
#region Directories
|
97 |
-
#--------------------------------------------------------------------------------
|
98 |
-
|
99 |
-
if ( ! defined( 'WP_FS__DIR' ) ) {
|
100 |
-
define( 'WP_FS__DIR', dirname( __FILE__ ) );
|
101 |
-
}
|
102 |
-
if ( ! defined( 'WP_FS__DIR_INCLUDES' ) ) {
|
103 |
-
define( 'WP_FS__DIR_INCLUDES', WP_FS__DIR . '/includes' );
|
104 |
-
}
|
105 |
-
if ( ! defined( 'WP_FS__DIR_TEMPLATES' ) ) {
|
106 |
-
define( 'WP_FS__DIR_TEMPLATES', WP_FS__DIR . '/templates' );
|
107 |
-
}
|
108 |
-
if ( ! defined( 'WP_FS__DIR_ASSETS' ) ) {
|
109 |
-
define( 'WP_FS__DIR_ASSETS', WP_FS__DIR . '/assets' );
|
110 |
-
}
|
111 |
-
if ( ! defined( 'WP_FS__DIR_CSS' ) ) {
|
112 |
-
define( 'WP_FS__DIR_CSS', WP_FS__DIR_ASSETS . '/css' );
|
113 |
-
}
|
114 |
-
if ( ! defined( 'WP_FS__DIR_JS' ) ) {
|
115 |
-
define( 'WP_FS__DIR_JS', WP_FS__DIR_ASSETS . '/js' );
|
116 |
-
}
|
117 |
-
if ( ! defined( 'WP_FS__DIR_IMG' ) ) {
|
118 |
-
define( 'WP_FS__DIR_IMG', WP_FS__DIR_ASSETS . '/img' );
|
119 |
-
}
|
120 |
-
if ( ! defined( 'WP_FS__DIR_SDK' ) ) {
|
121 |
-
define( 'WP_FS__DIR_SDK', WP_FS__DIR_INCLUDES . '/sdk' );
|
122 |
-
}
|
123 |
-
|
124 |
-
#endregion
|
125 |
-
|
126 |
-
/**
|
127 |
-
* Domain / URL / Address
|
128 |
-
*/
|
129 |
-
define( 'WP_FS__ROOT_DOMAIN_PRODUCTION', 'freemius.com' );
|
130 |
-
define( 'WP_FS__DOMAIN_PRODUCTION', 'wp.freemius.com' );
|
131 |
-
define( 'WP_FS__ADDRESS_PRODUCTION', 'https://' . WP_FS__DOMAIN_PRODUCTION );
|
132 |
-
|
133 |
-
if ( ! defined( 'WP_FS__DOMAIN_LOCALHOST' ) ) {
|
134 |
-
define( 'WP_FS__DOMAIN_LOCALHOST', 'wp.freemius' );
|
135 |
-
}
|
136 |
-
if ( ! defined( 'WP_FS__ADDRESS_LOCALHOST' ) ) {
|
137 |
-
define( 'WP_FS__ADDRESS_LOCALHOST', 'http://' . WP_FS__DOMAIN_LOCALHOST . ':8080' );
|
138 |
-
}
|
139 |
-
|
140 |
-
if ( ! defined( 'WP_FS__TESTING_DOMAIN' ) ) {
|
141 |
-
define( 'WP_FS__TESTING_DOMAIN', 'fswp' );
|
142 |
-
}
|
143 |
-
|
144 |
-
#--------------------------------------------------------------------------------
|
145 |
-
#region HTTP
|
146 |
-
#--------------------------------------------------------------------------------
|
147 |
-
|
148 |
-
if ( ! defined( 'WP_FS__IS_HTTP_REQUEST' ) ) {
|
149 |
-
define( 'WP_FS__IS_HTTP_REQUEST', isset( $_SERVER['HTTP_HOST'] ) );
|
150 |
-
}
|
151 |
-
|
152 |
-
if ( ! defined( 'WP_FS__IS_HTTPS' ) ) {
|
153 |
-
define( 'WP_FS__IS_HTTPS', ( WP_FS__IS_HTTP_REQUEST &&
|
154 |
-
// Checks if CloudFlare's HTTPS (Flexible SSL support).
|
155 |
-
isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) &&
|
156 |
-
'https' === strtolower( $_SERVER['HTTP_X_FORWARDED_PROTO'] )
|
157 |
-
) ||
|
158 |
-
// Check if HTTPS request.
|
159 |
-
( isset( $_SERVER['HTTPS'] ) && 'on' == $_SERVER['HTTPS'] ) ||
|
160 |
-
( isset( $_SERVER['SERVER_PORT'] ) && 443 == $_SERVER['SERVER_PORT'] )
|
161 |
-
);
|
162 |
-
}
|
163 |
-
|
164 |
-
if ( ! defined( 'WP_FS__IS_POST_REQUEST' ) ) {
|
165 |
-
define( 'WP_FS__IS_POST_REQUEST', ( WP_FS__IS_HTTP_REQUEST &&
|
166 |
-
strtoupper( $_SERVER['REQUEST_METHOD'] ) == 'POST' ) );
|
167 |
-
}
|
168 |
-
|
169 |
-
if ( ! defined( 'WP_FS__REMOTE_ADDR' ) ) {
|
170 |
-
define( 'WP_FS__REMOTE_ADDR', fs_get_ip() );
|
171 |
-
}
|
172 |
-
|
173 |
-
if ( ! defined( 'WP_FS__IS_LOCALHOST' ) ) {
|
174 |
-
if ( defined( 'WP_FS__LOCALHOST_IP' ) ) {
|
175 |
-
define( 'WP_FS__IS_LOCALHOST', ( WP_FS__LOCALHOST_IP === WP_FS__REMOTE_ADDR ) );
|
176 |
-
} else {
|
177 |
-
define( 'WP_FS__IS_LOCALHOST', WP_FS__IS_HTTP_REQUEST &&
|
178 |
-
is_string( WP_FS__REMOTE_ADDR ) &&
|
179 |
-
( substr( WP_FS__REMOTE_ADDR, 0, 4 ) === '127.' ||
|
180 |
-
WP_FS__REMOTE_ADDR === '::1' )
|
181 |
-
);
|
182 |
-
}
|
183 |
-
}
|
184 |
-
|
185 |
-
if ( ! defined( 'WP_FS__IS_LOCALHOST_FOR_SERVER' ) ) {
|
186 |
-
define( 'WP_FS__IS_LOCALHOST_FOR_SERVER', ( ! WP_FS__IS_HTTP_REQUEST ||
|
187 |
-
false !== strpos( $_SERVER['HTTP_HOST'], 'localhost' ) ) );
|
188 |
-
}
|
189 |
-
|
190 |
-
#endregion
|
191 |
-
|
192 |
-
if ( ! defined( 'WP_FS__IS_PRODUCTION_MODE' ) ) {
|
193 |
-
// By default, run with Freemius production servers.
|
194 |
-
define( 'WP_FS__IS_PRODUCTION_MODE', true );
|
195 |
-
}
|
196 |
-
|
197 |
-
if ( ! defined( 'WP_FS__ADDRESS' ) ) {
|
198 |
-
define( 'WP_FS__ADDRESS', ( WP_FS__IS_PRODUCTION_MODE ? WP_FS__ADDRESS_PRODUCTION : WP_FS__ADDRESS_LOCALHOST ) );
|
199 |
-
}
|
200 |
-
|
201 |
-
|
202 |
-
#--------------------------------------------------------------------------------
|
203 |
-
#region API
|
204 |
-
#--------------------------------------------------------------------------------
|
205 |
-
|
206 |
-
if ( ! defined( 'WP_FS__API_ADDRESS_LOCALHOST' ) ) {
|
207 |
-
define( 'WP_FS__API_ADDRESS_LOCALHOST', 'http://api.freemius-local.com:8080' );
|
208 |
-
}
|
209 |
-
if ( ! defined( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST' ) ) {
|
210 |
-
define( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST', 'http://sandbox-api.freemius:8080' );
|
211 |
-
}
|
212 |
-
|
213 |
-
// Set API address for local testing.
|
214 |
-
if ( ! WP_FS__IS_PRODUCTION_MODE ) {
|
215 |
-
if ( ! defined( 'FS_API__ADDRESS' ) ) {
|
216 |
-
define( 'FS_API__ADDRESS', WP_FS__API_ADDRESS_LOCALHOST );
|
217 |
-
}
|
218 |
-
if ( ! defined( 'FS_API__SANDBOX_ADDRESS' ) ) {
|
219 |
-
define( 'FS_API__SANDBOX_ADDRESS', WP_FS__API_SANDBOX_ADDRESS_LOCALHOST );
|
220 |
-
}
|
221 |
-
}
|
222 |
-
|
223 |
-
#endregion
|
224 |
-
|
225 |
-
#--------------------------------------------------------------------------------
|
226 |
-
#region Checkout
|
227 |
-
#--------------------------------------------------------------------------------
|
228 |
-
|
229 |
-
if ( ! defined( 'FS_CHECKOUT__ADDRESS_PRODUCTION' ) ) {
|
230 |
-
define( 'FS_CHECKOUT__ADDRESS_PRODUCTION', 'https://checkout.freemius.com' );
|
231 |
-
}
|
232 |
-
|
233 |
-
if ( ! defined( 'FS_CHECKOUT__ADDRESS_LOCALHOST' ) ) {
|
234 |
-
define( 'FS_CHECKOUT__ADDRESS_LOCALHOST', 'http://checkout.freemius-local.com:8080' );
|
235 |
-
}
|
236 |
-
|
237 |
-
if ( ! defined( 'FS_CHECKOUT__ADDRESS' ) ) {
|
238 |
-
define( 'FS_CHECKOUT__ADDRESS', ( WP_FS__IS_PRODUCTION_MODE ? FS_CHECKOUT__ADDRESS_PRODUCTION : FS_CHECKOUT__ADDRESS_LOCALHOST ) );
|
239 |
-
}
|
240 |
-
|
241 |
-
#endregion
|
242 |
-
|
243 |
-
define( 'WP_FS___OPTION_PREFIX', 'fs' . ( WP_FS__IS_PRODUCTION_MODE ? '' : '_dbg' ) . '_' );
|
244 |
-
|
245 |
-
if ( ! defined( 'WP_FS__ACCOUNTS_OPTION_NAME' ) ) {
|
246 |
-
define( 'WP_FS__ACCOUNTS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'accounts' );
|
247 |
-
}
|
248 |
-
if ( ! defined( 'WP_FS__API_CACHE_OPTION_NAME' ) ) {
|
249 |
-
define( 'WP_FS__API_CACHE_OPTION_NAME', WP_FS___OPTION_PREFIX . 'api_cache' );
|
250 |
-
}
|
251 |
-
if ( ! defined( 'WP_FS__GDPR_OPTION_NAME' ) ) {
|
252 |
-
define( 'WP_FS__GDPR_OPTION_NAME', WP_FS___OPTION_PREFIX . 'gdpr' );
|
253 |
-
}
|
254 |
-
define( 'WP_FS__OPTIONS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'options' );
|
255 |
-
|
256 |
-
/**
|
257 |
-
* Module types
|
258 |
-
*
|
259 |
-
* @since 1.2.2
|
260 |
-
*/
|
261 |
-
define( 'WP_FS__MODULE_TYPE_PLUGIN', 'plugin' );
|
262 |
-
define( 'WP_FS__MODULE_TYPE_THEME', 'theme' );
|
263 |
-
|
264 |
-
/**
|
265 |
-
* Billing Frequencies
|
266 |
-
*/
|
267 |
-
define( 'WP_FS__PERIOD_ANNUALLY', 'annual' );
|
268 |
-
define( 'WP_FS__PERIOD_MONTHLY', 'monthly' );
|
269 |
-
define( 'WP_FS__PERIOD_LIFETIME', 'lifetime' );
|
270 |
-
|
271 |
-
/**
|
272 |
-
* Plans
|
273 |
-
*/
|
274 |
-
define( 'WP_FS__PLAN_DEFAULT_PAID', false );
|
275 |
-
define( 'WP_FS__PLAN_FREE', 'free' );
|
276 |
-
define( 'WP_FS__PLAN_TRIAL', 'trial' );
|
277 |
-
|
278 |
-
/**
|
279 |
-
* Times in seconds
|
280 |
-
*/
|
281 |
-
if ( ! defined( 'WP_FS__TIME_5_MIN_IN_SEC' ) ) {
|
282 |
-
define( 'WP_FS__TIME_5_MIN_IN_SEC', 300 );
|
283 |
-
}
|
284 |
-
if ( ! defined( 'WP_FS__TIME_10_MIN_IN_SEC' ) ) {
|
285 |
-
define( 'WP_FS__TIME_10_MIN_IN_SEC', 600 );
|
286 |
-
}
|
287 |
-
// define( 'WP_FS__TIME_15_MIN_IN_SEC', 900 );
|
288 |
-
if ( ! defined( 'WP_FS__TIME_12_HOURS_IN_SEC' ) ) {
|
289 |
-
define( 'WP_FS__TIME_12_HOURS_IN_SEC', 43200 );
|
290 |
-
}
|
291 |
-
if ( ! defined( 'WP_FS__TIME_24_HOURS_IN_SEC' ) ) {
|
292 |
-
define( 'WP_FS__TIME_24_HOURS_IN_SEC', WP_FS__TIME_12_HOURS_IN_SEC * 2 );
|
293 |
-
}
|
294 |
-
if ( ! defined( 'WP_FS__TIME_WEEK_IN_SEC' ) ) {
|
295 |
-
define( 'WP_FS__TIME_WEEK_IN_SEC', 7 * WP_FS__TIME_24_HOURS_IN_SEC );
|
296 |
-
}
|
297 |
-
|
298 |
-
#--------------------------------------------------------------------------------
|
299 |
-
#region Debugging
|
300 |
-
#--------------------------------------------------------------------------------
|
301 |
-
|
302 |
-
if ( ! defined( 'WP_FS__DEBUG_SDK' ) ) {
|
303 |
-
$debug_mode = get_option( 'fs_debug_mode', null );
|
304 |
-
|
305 |
-
if ( $debug_mode === null ) {
|
306 |
-
$debug_mode = false;
|
307 |
-
add_option( 'fs_debug_mode', $debug_mode );
|
308 |
-
}
|
309 |
-
|
310 |
-
define( 'WP_FS__DEBUG_SDK', is_numeric( $debug_mode ) ? ( 0 < $debug_mode ) : WP_FS__DEV_MODE );
|
311 |
-
}
|
312 |
-
|
313 |
-
if ( ! defined( 'WP_FS__ECHO_DEBUG_SDK' ) ) {
|
314 |
-
define( 'WP_FS__ECHO_DEBUG_SDK', WP_FS__DEV_MODE && ! empty( $_GET['fs_dbg_echo'] ) );
|
315 |
-
}
|
316 |
-
if ( ! defined( 'WP_FS__LOG_DATETIME_FORMAT' ) ) {
|
317 |
-
define( 'WP_FS__LOG_DATETIME_FORMAT', 'Y-m-d H:i:s' );
|
318 |
-
}
|
319 |
-
if ( ! defined( 'FS_API__LOGGER_ON' ) ) {
|
320 |
-
define( 'FS_API__LOGGER_ON', WP_FS__DEBUG_SDK );
|
321 |
-
}
|
322 |
-
|
323 |
-
if ( WP_FS__ECHO_DEBUG_SDK ) {
|
324 |
-
error_reporting( E_ALL );
|
325 |
-
}
|
326 |
-
|
327 |
-
#endregion
|
328 |
-
|
329 |
-
if ( ! defined( 'WP_FS__SCRIPT_START_TIME' ) ) {
|
330 |
-
define( 'WP_FS__SCRIPT_START_TIME', time() );
|
331 |
-
}
|
332 |
-
if ( ! defined( 'WP_FS__DEFAULT_PRIORITY' ) ) {
|
333 |
-
define( 'WP_FS__DEFAULT_PRIORITY', 10 );
|
334 |
-
}
|
335 |
-
if ( ! defined( 'WP_FS__LOWEST_PRIORITY' ) ) {
|
336 |
-
define( 'WP_FS__LOWEST_PRIORITY', 999999999 );
|
337 |
-
}
|
338 |
-
|
339 |
-
#--------------------------------------------------------------------------------
|
340 |
-
#region Multisite Network
|
341 |
-
#--------------------------------------------------------------------------------
|
342 |
-
|
343 |
-
/**
|
344 |
-
* Do not use this define directly, it will have the wrong value
|
345 |
-
* during plugin uninstall/deletion when the inclusion of the plugin
|
346 |
-
* is triggered due to registration with register_uninstall_hook().
|
347 |
-
*
|
348 |
-
* Instead, use fs_is_network_admin().
|
349 |
-
*
|
350 |
-
* @author Vova Feldman (@svovaf)
|
351 |
-
*/
|
352 |
-
if ( ! defined( 'WP_FS__IS_NETWORK_ADMIN' ) ) {
|
353 |
-
define( 'WP_FS__IS_NETWORK_ADMIN',
|
354 |
-
is_multisite() &&
|
355 |
-
( is_network_admin() ||
|
356 |
-
( ( defined( 'DOING_AJAX' ) && DOING_AJAX &&
|
357 |
-
( isset( $_REQUEST['_fs_network_admin'] ) /*||
|
358 |
-
( ! empty( $_REQUEST['action'] ) && 'delete-plugin' === $_REQUEST['action'] )*/ )
|
359 |
-
) ||
|
360 |
-
// Plugin uninstall.
|
361 |
-
defined( 'WP_UNINSTALL_PLUGIN' ) )
|
362 |
-
)
|
363 |
-
);
|
364 |
-
}
|
365 |
-
|
366 |
-
/**
|
367 |
-
* Do not use this define directly, it will have the wrong value
|
368 |
-
* during plugin uninstall/deletion when the inclusion of the plugin
|
369 |
-
* is triggered due to registration with register_uninstall_hook().
|
370 |
-
*
|
371 |
-
* Instead, use fs_is_blog_admin().
|
372 |
-
*
|
373 |
-
* @author Vova Feldman (@svovaf)
|
374 |
-
*/
|
375 |
-
if ( ! defined( 'WP_FS__IS_BLOG_ADMIN' ) ) {
|
376 |
-
define( 'WP_FS__IS_BLOG_ADMIN', is_blog_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX && isset( $_REQUEST['_fs_blog_admin'] ) ) );
|
377 |
-
}
|
378 |
-
|
379 |
-
if ( ! defined( 'WP_FS__SHOW_NETWORK_EVEN_WHEN_DELEGATED' ) ) {
|
380 |
-
// Set to true to show network level settings even if delegated to site admins.
|
381 |
-
define( 'WP_FS__SHOW_NETWORK_EVEN_WHEN_DELEGATED', false );
|
382 |
-
}
|
383 |
-
|
384 |
-
#endregion
|
385 |
-
|
386 |
-
if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
|
387 |
-
define( 'WP_FS__DEMO_MODE', false );
|
388 |
}
|
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.4
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
if ( ! defined( 'WP_FS__SLUG' ) ) {
|
14 |
+
define( 'WP_FS__SLUG', 'freemius' );
|
15 |
+
}
|
16 |
+
if ( ! defined( 'WP_FS__DEV_MODE' ) ) {
|
17 |
+
define( 'WP_FS__DEV_MODE', false );
|
18 |
+
}
|
19 |
+
|
20 |
+
#--------------------------------------------------------------------------------
|
21 |
+
#region API Connectivity Issues Simulation
|
22 |
+
#--------------------------------------------------------------------------------
|
23 |
+
|
24 |
+
if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY' ) ) {
|
25 |
+
define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY', false );
|
26 |
+
}
|
27 |
+
if ( ! defined( 'WP_FS__SIMULATE_NO_CURL' ) ) {
|
28 |
+
define( 'WP_FS__SIMULATE_NO_CURL', false );
|
29 |
+
}
|
30 |
+
if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE' ) ) {
|
31 |
+
define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE', false );
|
32 |
+
}
|
33 |
+
if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL' ) ) {
|
34 |
+
define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL', false );
|
35 |
+
}
|
36 |
+
if ( WP_FS__SIMULATE_NO_CURL ) {
|
37 |
+
define( 'FS_SDK__SIMULATE_NO_CURL', true );
|
38 |
+
}
|
39 |
+
if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE ) {
|
40 |
+
define( 'FS_SDK__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE', true );
|
41 |
+
}
|
42 |
+
if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL ) {
|
43 |
+
define( 'FS_SDK__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL', true );
|
44 |
+
}
|
45 |
+
|
46 |
+
#endregion
|
47 |
+
|
48 |
+
if ( ! defined( 'WP_FS__SIMULATE_FREEMIUS_OFF' ) ) {
|
49 |
+
define( 'WP_FS__SIMULATE_FREEMIUS_OFF', false );
|
50 |
+
}
|
51 |
+
|
52 |
+
if ( ! defined( 'WP_FS__PING_API_ON_IP_OR_HOST_CHANGES' ) ) {
|
53 |
+
/**
|
54 |
+
* @since 1.1.7.3
|
55 |
+
* @author Vova Feldman (@svovaf)
|
56 |
+
*
|
57 |
+
* I'm not sure if shared servers periodically change IP, or the subdomain of the
|
58 |
+
* admin dashboard. Also, I've seen sites that have strange loop of switching
|
59 |
+
* between domains on a daily basis. Therefore, to eliminate the risk of
|
60 |
+
* multiple unwanted connectivity test pings, temporary ignore domain or
|
61 |
+
* server IP changes.
|
62 |
+
*/
|
63 |
+
define( 'WP_FS__PING_API_ON_IP_OR_HOST_CHANGES', false );
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* If your dev environment supports custom public network IP setup
|
68 |
+
* like VVV, please update WP_FS__LOCALHOST_IP with your public IP
|
69 |
+
* and uncomment it during dev.
|
70 |
+
*/
|
71 |
+
if ( ! defined( 'WP_FS__LOCALHOST_IP' ) ) {
|
72 |
+
// VVV default public network IP.
|
73 |
+
define( 'WP_FS__VVV_DEFAULT_PUBLIC_IP', '192.168.50.4' );
|
74 |
+
|
75 |
+
// define( 'WP_FS__LOCALHOST_IP', WP_FS__VVV_DEFAULT_PUBLIC_IP );
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* If true and running with secret key, the opt-in process
|
80 |
+
* will skip the email activation process which is invoked
|
81 |
+
* when the email of the context user already exist in Freemius
|
82 |
+
* database (as a security precaution, to prevent sharing user
|
83 |
+
* secret with unauthorized entity).
|
84 |
+
*
|
85 |
+
* IMPORTANT:
|
86 |
+
* AS A SECURITY PRECAUTION, WE VALIDATE THE TIMESTAMP OF THE OPT-IN REQUEST.
|
87 |
+
* THEREFORE, MAKE SURE THAT WHEN USING THIS PARAMETER,YOUR TESTING ENVIRONMENT'S
|
88 |
+
* CLOCK IS SYNCED.
|
89 |
+
*/
|
90 |
+
if ( ! defined( 'WP_FS__SKIP_EMAIL_ACTIVATION' ) ) {
|
91 |
+
define( 'WP_FS__SKIP_EMAIL_ACTIVATION', false );
|
92 |
+
}
|
93 |
+
|
94 |
+
|
95 |
+
#--------------------------------------------------------------------------------
|
96 |
+
#region Directories
|
97 |
+
#--------------------------------------------------------------------------------
|
98 |
+
|
99 |
+
if ( ! defined( 'WP_FS__DIR' ) ) {
|
100 |
+
define( 'WP_FS__DIR', dirname( __FILE__ ) );
|
101 |
+
}
|
102 |
+
if ( ! defined( 'WP_FS__DIR_INCLUDES' ) ) {
|
103 |
+
define( 'WP_FS__DIR_INCLUDES', WP_FS__DIR . '/includes' );
|
104 |
+
}
|
105 |
+
if ( ! defined( 'WP_FS__DIR_TEMPLATES' ) ) {
|
106 |
+
define( 'WP_FS__DIR_TEMPLATES', WP_FS__DIR . '/templates' );
|
107 |
+
}
|
108 |
+
if ( ! defined( 'WP_FS__DIR_ASSETS' ) ) {
|
109 |
+
define( 'WP_FS__DIR_ASSETS', WP_FS__DIR . '/assets' );
|
110 |
+
}
|
111 |
+
if ( ! defined( 'WP_FS__DIR_CSS' ) ) {
|
112 |
+
define( 'WP_FS__DIR_CSS', WP_FS__DIR_ASSETS . '/css' );
|
113 |
+
}
|
114 |
+
if ( ! defined( 'WP_FS__DIR_JS' ) ) {
|
115 |
+
define( 'WP_FS__DIR_JS', WP_FS__DIR_ASSETS . '/js' );
|
116 |
+
}
|
117 |
+
if ( ! defined( 'WP_FS__DIR_IMG' ) ) {
|
118 |
+
define( 'WP_FS__DIR_IMG', WP_FS__DIR_ASSETS . '/img' );
|
119 |
+
}
|
120 |
+
if ( ! defined( 'WP_FS__DIR_SDK' ) ) {
|
121 |
+
define( 'WP_FS__DIR_SDK', WP_FS__DIR_INCLUDES . '/sdk' );
|
122 |
+
}
|
123 |
+
|
124 |
+
#endregion
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Domain / URL / Address
|
128 |
+
*/
|
129 |
+
define( 'WP_FS__ROOT_DOMAIN_PRODUCTION', 'freemius.com' );
|
130 |
+
define( 'WP_FS__DOMAIN_PRODUCTION', 'wp.freemius.com' );
|
131 |
+
define( 'WP_FS__ADDRESS_PRODUCTION', 'https://' . WP_FS__DOMAIN_PRODUCTION );
|
132 |
+
|
133 |
+
if ( ! defined( 'WP_FS__DOMAIN_LOCALHOST' ) ) {
|
134 |
+
define( 'WP_FS__DOMAIN_LOCALHOST', 'wp.freemius' );
|
135 |
+
}
|
136 |
+
if ( ! defined( 'WP_FS__ADDRESS_LOCALHOST' ) ) {
|
137 |
+
define( 'WP_FS__ADDRESS_LOCALHOST', 'http://' . WP_FS__DOMAIN_LOCALHOST . ':8080' );
|
138 |
+
}
|
139 |
+
|
140 |
+
if ( ! defined( 'WP_FS__TESTING_DOMAIN' ) ) {
|
141 |
+
define( 'WP_FS__TESTING_DOMAIN', 'fswp' );
|
142 |
+
}
|
143 |
+
|
144 |
+
#--------------------------------------------------------------------------------
|
145 |
+
#region HTTP
|
146 |
+
#--------------------------------------------------------------------------------
|
147 |
+
|
148 |
+
if ( ! defined( 'WP_FS__IS_HTTP_REQUEST' ) ) {
|
149 |
+
define( 'WP_FS__IS_HTTP_REQUEST', isset( $_SERVER['HTTP_HOST'] ) );
|
150 |
+
}
|
151 |
+
|
152 |
+
if ( ! defined( 'WP_FS__IS_HTTPS' ) ) {
|
153 |
+
define( 'WP_FS__IS_HTTPS', ( WP_FS__IS_HTTP_REQUEST &&
|
154 |
+
// Checks if CloudFlare's HTTPS (Flexible SSL support).
|
155 |
+
isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) &&
|
156 |
+
'https' === strtolower( $_SERVER['HTTP_X_FORWARDED_PROTO'] )
|
157 |
+
) ||
|
158 |
+
// Check if HTTPS request.
|
159 |
+
( isset( $_SERVER['HTTPS'] ) && 'on' == $_SERVER['HTTPS'] ) ||
|
160 |
+
( isset( $_SERVER['SERVER_PORT'] ) && 443 == $_SERVER['SERVER_PORT'] )
|
161 |
+
);
|
162 |
+
}
|
163 |
+
|
164 |
+
if ( ! defined( 'WP_FS__IS_POST_REQUEST' ) ) {
|
165 |
+
define( 'WP_FS__IS_POST_REQUEST', ( WP_FS__IS_HTTP_REQUEST &&
|
166 |
+
strtoupper( $_SERVER['REQUEST_METHOD'] ) == 'POST' ) );
|
167 |
+
}
|
168 |
+
|
169 |
+
if ( ! defined( 'WP_FS__REMOTE_ADDR' ) ) {
|
170 |
+
define( 'WP_FS__REMOTE_ADDR', fs_get_ip() );
|
171 |
+
}
|
172 |
+
|
173 |
+
if ( ! defined( 'WP_FS__IS_LOCALHOST' ) ) {
|
174 |
+
if ( defined( 'WP_FS__LOCALHOST_IP' ) ) {
|
175 |
+
define( 'WP_FS__IS_LOCALHOST', ( WP_FS__LOCALHOST_IP === WP_FS__REMOTE_ADDR ) );
|
176 |
+
} else {
|
177 |
+
define( 'WP_FS__IS_LOCALHOST', WP_FS__IS_HTTP_REQUEST &&
|
178 |
+
is_string( WP_FS__REMOTE_ADDR ) &&
|
179 |
+
( substr( WP_FS__REMOTE_ADDR, 0, 4 ) === '127.' ||
|
180 |
+
WP_FS__REMOTE_ADDR === '::1' )
|
181 |
+
);
|
182 |
+
}
|
183 |
+
}
|
184 |
+
|
185 |
+
if ( ! defined( 'WP_FS__IS_LOCALHOST_FOR_SERVER' ) ) {
|
186 |
+
define( 'WP_FS__IS_LOCALHOST_FOR_SERVER', ( ! WP_FS__IS_HTTP_REQUEST ||
|
187 |
+
false !== strpos( $_SERVER['HTTP_HOST'], 'localhost' ) ) );
|
188 |
+
}
|
189 |
+
|
190 |
+
#endregion
|
191 |
+
|
192 |
+
if ( ! defined( 'WP_FS__IS_PRODUCTION_MODE' ) ) {
|
193 |
+
// By default, run with Freemius production servers.
|
194 |
+
define( 'WP_FS__IS_PRODUCTION_MODE', true );
|
195 |
+
}
|
196 |
+
|
197 |
+
if ( ! defined( 'WP_FS__ADDRESS' ) ) {
|
198 |
+
define( 'WP_FS__ADDRESS', ( WP_FS__IS_PRODUCTION_MODE ? WP_FS__ADDRESS_PRODUCTION : WP_FS__ADDRESS_LOCALHOST ) );
|
199 |
+
}
|
200 |
+
|
201 |
+
|
202 |
+
#--------------------------------------------------------------------------------
|
203 |
+
#region API
|
204 |
+
#--------------------------------------------------------------------------------
|
205 |
+
|
206 |
+
if ( ! defined( 'WP_FS__API_ADDRESS_LOCALHOST' ) ) {
|
207 |
+
define( 'WP_FS__API_ADDRESS_LOCALHOST', 'http://api.freemius-local.com:8080' );
|
208 |
+
}
|
209 |
+
if ( ! defined( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST' ) ) {
|
210 |
+
define( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST', 'http://sandbox-api.freemius:8080' );
|
211 |
+
}
|
212 |
+
|
213 |
+
// Set API address for local testing.
|
214 |
+
if ( ! WP_FS__IS_PRODUCTION_MODE ) {
|
215 |
+
if ( ! defined( 'FS_API__ADDRESS' ) ) {
|
216 |
+
define( 'FS_API__ADDRESS', WP_FS__API_ADDRESS_LOCALHOST );
|
217 |
+
}
|
218 |
+
if ( ! defined( 'FS_API__SANDBOX_ADDRESS' ) ) {
|
219 |
+
define( 'FS_API__SANDBOX_ADDRESS', WP_FS__API_SANDBOX_ADDRESS_LOCALHOST );
|
220 |
+
}
|
221 |
+
}
|
222 |
+
|
223 |
+
#endregion
|
224 |
+
|
225 |
+
#--------------------------------------------------------------------------------
|
226 |
+
#region Checkout
|
227 |
+
#--------------------------------------------------------------------------------
|
228 |
+
|
229 |
+
if ( ! defined( 'FS_CHECKOUT__ADDRESS_PRODUCTION' ) ) {
|
230 |
+
define( 'FS_CHECKOUT__ADDRESS_PRODUCTION', 'https://checkout.freemius.com' );
|
231 |
+
}
|
232 |
+
|
233 |
+
if ( ! defined( 'FS_CHECKOUT__ADDRESS_LOCALHOST' ) ) {
|
234 |
+
define( 'FS_CHECKOUT__ADDRESS_LOCALHOST', 'http://checkout.freemius-local.com:8080' );
|
235 |
+
}
|
236 |
+
|
237 |
+
if ( ! defined( 'FS_CHECKOUT__ADDRESS' ) ) {
|
238 |
+
define( 'FS_CHECKOUT__ADDRESS', ( WP_FS__IS_PRODUCTION_MODE ? FS_CHECKOUT__ADDRESS_PRODUCTION : FS_CHECKOUT__ADDRESS_LOCALHOST ) );
|
239 |
+
}
|
240 |
+
|
241 |
+
#endregion
|
242 |
+
|
243 |
+
define( 'WP_FS___OPTION_PREFIX', 'fs' . ( WP_FS__IS_PRODUCTION_MODE ? '' : '_dbg' ) . '_' );
|
244 |
+
|
245 |
+
if ( ! defined( 'WP_FS__ACCOUNTS_OPTION_NAME' ) ) {
|
246 |
+
define( 'WP_FS__ACCOUNTS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'accounts' );
|
247 |
+
}
|
248 |
+
if ( ! defined( 'WP_FS__API_CACHE_OPTION_NAME' ) ) {
|
249 |
+
define( 'WP_FS__API_CACHE_OPTION_NAME', WP_FS___OPTION_PREFIX . 'api_cache' );
|
250 |
+
}
|
251 |
+
if ( ! defined( 'WP_FS__GDPR_OPTION_NAME' ) ) {
|
252 |
+
define( 'WP_FS__GDPR_OPTION_NAME', WP_FS___OPTION_PREFIX . 'gdpr' );
|
253 |
+
}
|
254 |
+
define( 'WP_FS__OPTIONS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'options' );
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Module types
|
258 |
+
*
|
259 |
+
* @since 1.2.2
|
260 |
+
*/
|
261 |
+
define( 'WP_FS__MODULE_TYPE_PLUGIN', 'plugin' );
|
262 |
+
define( 'WP_FS__MODULE_TYPE_THEME', 'theme' );
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Billing Frequencies
|
266 |
+
*/
|
267 |
+
define( 'WP_FS__PERIOD_ANNUALLY', 'annual' );
|
268 |
+
define( 'WP_FS__PERIOD_MONTHLY', 'monthly' );
|
269 |
+
define( 'WP_FS__PERIOD_LIFETIME', 'lifetime' );
|
270 |
+
|
271 |
+
/**
|
272 |
+
* Plans
|
273 |
+
*/
|
274 |
+
define( 'WP_FS__PLAN_DEFAULT_PAID', false );
|
275 |
+
define( 'WP_FS__PLAN_FREE', 'free' );
|
276 |
+
define( 'WP_FS__PLAN_TRIAL', 'trial' );
|
277 |
+
|
278 |
+
/**
|
279 |
+
* Times in seconds
|
280 |
+
*/
|
281 |
+
if ( ! defined( 'WP_FS__TIME_5_MIN_IN_SEC' ) ) {
|
282 |
+
define( 'WP_FS__TIME_5_MIN_IN_SEC', 300 );
|
283 |
+
}
|
284 |
+
if ( ! defined( 'WP_FS__TIME_10_MIN_IN_SEC' ) ) {
|
285 |
+
define( 'WP_FS__TIME_10_MIN_IN_SEC', 600 );
|
286 |
+
}
|
287 |
+
// define( 'WP_FS__TIME_15_MIN_IN_SEC', 900 );
|
288 |
+
if ( ! defined( 'WP_FS__TIME_12_HOURS_IN_SEC' ) ) {
|
289 |
+
define( 'WP_FS__TIME_12_HOURS_IN_SEC', 43200 );
|
290 |
+
}
|
291 |
+
if ( ! defined( 'WP_FS__TIME_24_HOURS_IN_SEC' ) ) {
|
292 |
+
define( 'WP_FS__TIME_24_HOURS_IN_SEC', WP_FS__TIME_12_HOURS_IN_SEC * 2 );
|
293 |
+
}
|
294 |
+
if ( ! defined( 'WP_FS__TIME_WEEK_IN_SEC' ) ) {
|
295 |
+
define( 'WP_FS__TIME_WEEK_IN_SEC', 7 * WP_FS__TIME_24_HOURS_IN_SEC );
|
296 |
+
}
|
297 |
+
|
298 |
+
#--------------------------------------------------------------------------------
|
299 |
+
#region Debugging
|
300 |
+
#--------------------------------------------------------------------------------
|
301 |
+
|
302 |
+
if ( ! defined( 'WP_FS__DEBUG_SDK' ) ) {
|
303 |
+
$debug_mode = get_option( 'fs_debug_mode', null );
|
304 |
+
|
305 |
+
if ( $debug_mode === null ) {
|
306 |
+
$debug_mode = false;
|
307 |
+
add_option( 'fs_debug_mode', $debug_mode );
|
308 |
+
}
|
309 |
+
|
310 |
+
define( 'WP_FS__DEBUG_SDK', is_numeric( $debug_mode ) ? ( 0 < $debug_mode ) : WP_FS__DEV_MODE );
|
311 |
+
}
|
312 |
+
|
313 |
+
if ( ! defined( 'WP_FS__ECHO_DEBUG_SDK' ) ) {
|
314 |
+
define( 'WP_FS__ECHO_DEBUG_SDK', WP_FS__DEV_MODE && ! empty( $_GET['fs_dbg_echo'] ) );
|
315 |
+
}
|
316 |
+
if ( ! defined( 'WP_FS__LOG_DATETIME_FORMAT' ) ) {
|
317 |
+
define( 'WP_FS__LOG_DATETIME_FORMAT', 'Y-m-d H:i:s' );
|
318 |
+
}
|
319 |
+
if ( ! defined( 'FS_API__LOGGER_ON' ) ) {
|
320 |
+
define( 'FS_API__LOGGER_ON', WP_FS__DEBUG_SDK );
|
321 |
+
}
|
322 |
+
|
323 |
+
if ( WP_FS__ECHO_DEBUG_SDK ) {
|
324 |
+
error_reporting( E_ALL );
|
325 |
+
}
|
326 |
+
|
327 |
+
#endregion
|
328 |
+
|
329 |
+
if ( ! defined( 'WP_FS__SCRIPT_START_TIME' ) ) {
|
330 |
+
define( 'WP_FS__SCRIPT_START_TIME', time() );
|
331 |
+
}
|
332 |
+
if ( ! defined( 'WP_FS__DEFAULT_PRIORITY' ) ) {
|
333 |
+
define( 'WP_FS__DEFAULT_PRIORITY', 10 );
|
334 |
+
}
|
335 |
+
if ( ! defined( 'WP_FS__LOWEST_PRIORITY' ) ) {
|
336 |
+
define( 'WP_FS__LOWEST_PRIORITY', 999999999 );
|
337 |
+
}
|
338 |
+
|
339 |
+
#--------------------------------------------------------------------------------
|
340 |
+
#region Multisite Network
|
341 |
+
#--------------------------------------------------------------------------------
|
342 |
+
|
343 |
+
/**
|
344 |
+
* Do not use this define directly, it will have the wrong value
|
345 |
+
* during plugin uninstall/deletion when the inclusion of the plugin
|
346 |
+
* is triggered due to registration with register_uninstall_hook().
|
347 |
+
*
|
348 |
+
* Instead, use fs_is_network_admin().
|
349 |
+
*
|
350 |
+
* @author Vova Feldman (@svovaf)
|
351 |
+
*/
|
352 |
+
if ( ! defined( 'WP_FS__IS_NETWORK_ADMIN' ) ) {
|
353 |
+
define( 'WP_FS__IS_NETWORK_ADMIN',
|
354 |
+
is_multisite() &&
|
355 |
+
( is_network_admin() ||
|
356 |
+
( ( defined( 'DOING_AJAX' ) && DOING_AJAX &&
|
357 |
+
( isset( $_REQUEST['_fs_network_admin'] ) /*||
|
358 |
+
( ! empty( $_REQUEST['action'] ) && 'delete-plugin' === $_REQUEST['action'] )*/ )
|
359 |
+
) ||
|
360 |
+
// Plugin uninstall.
|
361 |
+
defined( 'WP_UNINSTALL_PLUGIN' ) )
|
362 |
+
)
|
363 |
+
);
|
364 |
+
}
|
365 |
+
|
366 |
+
/**
|
367 |
+
* Do not use this define directly, it will have the wrong value
|
368 |
+
* during plugin uninstall/deletion when the inclusion of the plugin
|
369 |
+
* is triggered due to registration with register_uninstall_hook().
|
370 |
+
*
|
371 |
+
* Instead, use fs_is_blog_admin().
|
372 |
+
*
|
373 |
+
* @author Vova Feldman (@svovaf)
|
374 |
+
*/
|
375 |
+
if ( ! defined( 'WP_FS__IS_BLOG_ADMIN' ) ) {
|
376 |
+
define( 'WP_FS__IS_BLOG_ADMIN', is_blog_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX && isset( $_REQUEST['_fs_blog_admin'] ) ) );
|
377 |
+
}
|
378 |
+
|
379 |
+
if ( ! defined( 'WP_FS__SHOW_NETWORK_EVEN_WHEN_DELEGATED' ) ) {
|
380 |
+
// Set to true to show network level settings even if delegated to site admins.
|
381 |
+
define( 'WP_FS__SHOW_NETWORK_EVEN_WHEN_DELEGATED', false );
|
382 |
+
}
|
383 |
+
|
384 |
+
#endregion
|
385 |
+
|
386 |
+
if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
|
387 |
+
define( 'WP_FS__DEMO_MODE', false );
|
388 |
}
|
freemius/includes/class-freemius.php
CHANGED
@@ -164,6 +164,15 @@
|
|
164 |
*/
|
165 |
private $_has_addons;
|
166 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
167 |
/**
|
168 |
* @since 1.1.6
|
169 |
* @var string[]bool.
|
@@ -334,6 +343,14 @@
|
|
334 |
*/
|
335 |
private $_dynamically_added_top_level_page_hook_name = '';
|
336 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
337 |
#region Uninstall Reasons IDs
|
338 |
|
339 |
const REASON_NO_LONGER_NEEDED = 1;
|
@@ -484,13 +501,13 @@
|
|
484 |
);
|
485 |
|
486 |
if ( 'true' === fs_request_get( 'fs_clear_api_cache' ) ||
|
487 |
-
|
488 |
) {
|
489 |
FS_Api::clear_cache();
|
490 |
$this->_cache->clear();
|
491 |
}
|
492 |
|
493 |
-
$this->
|
494 |
|
495 |
/**
|
496 |
* Starting from version 2.0.0, `FS_Site` entities no longer have the `plan` property and have `plan_id`
|
@@ -702,6 +719,52 @@
|
|
702 |
$this->_menu->has_menu();
|
703 |
}
|
704 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
705 |
/**
|
706 |
* Check if the context module is free wp.org theme.
|
707 |
*
|
@@ -734,12 +797,11 @@
|
|
734 |
* @since 1.2.2.7 Even if the menu item was specified to be hidden, when it is the context page, then show the submenu item so the user will have the right context page.
|
735 |
*
|
736 |
* @param string $slug
|
737 |
-
* @param bool $
|
738 |
-
* or hidden.
|
739 |
*
|
740 |
* @return bool
|
741 |
*/
|
742 |
-
function is_submenu_item_visible( $slug, $
|
743 |
if ( $this->is_admin_page( $slug ) ) {
|
744 |
/**
|
745 |
* It is the current context page, so show the submenu item
|
@@ -754,7 +816,7 @@
|
|
754 |
return false;
|
755 |
}
|
756 |
|
757 |
-
if ( ! $
|
758 |
/**
|
759 |
* wp.org themes are limited to a single submenu item, and
|
760 |
* sub-submenu items are most likely not allowed (never verified).
|
@@ -980,7 +1042,7 @@
|
|
980 |
}
|
981 |
|
982 |
if ( isset( $this->_storage->subscription ) && is_object( $this->_storage->subscription ) ) {
|
983 |
-
$this->_storage->subscriptions = array( $this->_storage->subscription );
|
984 |
}
|
985 |
}
|
986 |
|
@@ -1453,11 +1515,11 @@
|
|
1453 |
* @author Vova Feldman (@svovaf)
|
1454 |
* @since 1.0.9
|
1455 |
*/
|
1456 |
-
private function
|
1457 |
$this->_logger->entrance();
|
1458 |
|
1459 |
if ( is_admin() ) {
|
1460 |
-
add_action( '
|
1461 |
|
1462 |
if ( $this->is_plugin() ) {
|
1463 |
if ( self::is_plugin_install_page() && true !== fs_request_get_bool( 'fs_allow_updater_and_dialog' ) ) {
|
@@ -1498,34 +1560,6 @@
|
|
1498 |
} else {
|
1499 |
add_action( 'after_switch_theme', array( &$this, '_activate_theme_event_hook' ), 10, 2 );
|
1500 |
|
1501 |
-
/**
|
1502 |
-
* Include the required hooks to capture the theme settings' page tabs
|
1503 |
-
* and cache them.
|
1504 |
-
*
|
1505 |
-
* @author Vova Feldman (@svovaf)
|
1506 |
-
* @since 1.2.2.7
|
1507 |
-
*/
|
1508 |
-
if ( ! $this->_cache->has_valid( 'tabs' ) ) {
|
1509 |
-
add_action( 'admin_footer', array( &$this, '_tabs_capture' ) );
|
1510 |
-
// Add license activation AJAX callback.
|
1511 |
-
$this->add_ajax_action( 'store_tabs', array( &$this, '_store_tabs_ajax_action' ) );
|
1512 |
-
|
1513 |
-
add_action( 'admin_enqueue_scripts', array( &$this, '_store_tabs_styles' ), 9999999 );
|
1514 |
-
}
|
1515 |
-
|
1516 |
-
add_action(
|
1517 |
-
'admin_footer',
|
1518 |
-
array( &$this, '_add_freemius_tabs' ),
|
1519 |
-
/**
|
1520 |
-
* The tabs JS code must be executed after the tabs capture logic (_tabs_capture()).
|
1521 |
-
* That's why the priority is 11 while the tabs capture logic is added
|
1522 |
-
* with priority 10.
|
1523 |
-
*
|
1524 |
-
* @author Vova Feldman (@svovaf)
|
1525 |
-
*/
|
1526 |
-
11
|
1527 |
-
);
|
1528 |
-
|
1529 |
add_action( 'admin_footer', array( &$this, '_style_premium_theme' ) );
|
1530 |
}
|
1531 |
|
@@ -1545,7 +1579,10 @@
|
|
1545 |
*
|
1546 |
* @author Vova Feldman (@svovaf)
|
1547 |
*/
|
1548 |
-
if ( $this->is_plugin() &&
|
|
|
|
|
|
|
1549 |
add_action( 'plugins_loaded', array( &$this, '_plugins_loaded' ) );
|
1550 |
} else {
|
1551 |
// If was activated before, then it was already loaded before.
|
@@ -1602,9 +1639,11 @@
|
|
1602 |
add_action( 'admin_init', array( &$this, '_add_license_activation' ) );
|
1603 |
add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
|
1604 |
add_action( 'admin_init', array( &$this, '_add_beta_mode_update_handler' ) );
|
|
|
1605 |
|
1606 |
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
|
1607 |
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
|
|
|
1608 |
|
1609 |
if ( $this->_is_network_active && fs_is_network_admin() ) {
|
1610 |
$this->add_ajax_action( 'network_activate', array( &$this, '_network_activate_ajax_action' ) );
|
@@ -1646,6 +1685,65 @@
|
|
1646 |
}
|
1647 |
}
|
1648 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1649 |
/**
|
1650 |
* Makes Freemius-related updates unavailable on the "Add Plugins" admin page (/plugin-install.php) so that
|
1651 |
* they won't interfere with the .org plugins' functionalities on that page (e.g. updating of a .org plugin).
|
@@ -1908,7 +2006,7 @@
|
|
1908 |
* @since 2.0.0
|
1909 |
*/
|
1910 |
function _hook_action_links_and_register_account_hooks() {
|
1911 |
-
|
1912 |
|
1913 |
if ( self::is_plugins_page() && $this->is_plugin() ) {
|
1914 |
$this->hook_plugin_action_links();
|
@@ -2250,6 +2348,10 @@
|
|
2250 |
|
2251 |
if ( ! isset( $caller_map[ $caller_file_hash ] ) ) {
|
2252 |
foreach ( $all_plugins_paths as $plugin_path ) {
|
|
|
|
|
|
|
|
|
2253 |
if ( false !== strpos( $caller_file_path, fs_normalize_path( dirname( $plugin_path ) . '/' ) ) ) {
|
2254 |
$caller_map[ $caller_file_hash ] = fs_normalize_path( $plugin_path );
|
2255 |
break;
|
@@ -2928,7 +3030,7 @@
|
|
2928 |
* @return bool
|
2929 |
*/
|
2930 |
function is_activation_page() {
|
2931 |
-
if ( $this->_menu->
|
2932 |
return true;
|
2933 |
}
|
2934 |
|
@@ -4630,22 +4732,7 @@
|
|
4630 |
|
4631 |
$this->parse_settings( $plugin_info );
|
4632 |
|
4633 |
-
|
4634 |
-
$this->add_ajax_action(
|
4635 |
-
'delete_theme_update_data',
|
4636 |
-
array( &$this, '_delete_theme_update_data_action' )
|
4637 |
-
);
|
4638 |
-
}
|
4639 |
-
|
4640 |
-
if ( ! self::is_ajax() ) {
|
4641 |
-
if ( ! $this->is_addon() || $this->is_only_premium() ) {
|
4642 |
-
add_action(
|
4643 |
-
( $this->_is_network_active && fs_is_network_admin() ? 'network_' : '' ) . 'admin_menu',
|
4644 |
-
array( &$this, '_prepare_admin_menu' ),
|
4645 |
-
WP_FS__LOWEST_PRIORITY
|
4646 |
-
);
|
4647 |
-
}
|
4648 |
-
}
|
4649 |
|
4650 |
if ( $this->should_stop_execution() ) {
|
4651 |
return;
|
@@ -4803,6 +4890,7 @@
|
|
4803 |
if (
|
4804 |
$this->_parent->is_registered() &&
|
4805 |
! $this->is_registered() &&
|
|
|
4806 |
/**
|
4807 |
* If not registered for add-on and the following conditions for the add-on are met, activate add-on account.
|
4808 |
* * Network active and in network admin - network activate add-on account.
|
@@ -5320,6 +5408,62 @@
|
|
5320 |
}
|
5321 |
}
|
5322 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5323 |
/**
|
5324 |
* Parse plugin's settings (as defined by the plugin dev).
|
5325 |
*
|
@@ -5396,6 +5540,7 @@
|
|
5396 |
'is_live' => $this->get_bool_option( $plugin_info, 'is_live', true ),
|
5397 |
'affiliate_moderation' => $this->get_option( $plugin_info, 'has_affiliation' ),
|
5398 |
'bundle_id' => $this->get_option( $plugin_info, 'bundle_id', null ),
|
|
|
5399 |
) );
|
5400 |
|
5401 |
if ( $plugin->is_updated() ) {
|
@@ -5467,6 +5612,14 @@
|
|
5467 |
|
5468 |
$this->_is_trial_require_payment = $this->get_bool_option( $plugin_info['trial'], 'is_require_payment', false );
|
5469 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5470 |
}
|
5471 |
|
5472 |
/**
|
@@ -5819,12 +5972,16 @@
|
|
5819 |
* @return Freemius[]
|
5820 |
*/
|
5821 |
function get_installed_addons() {
|
|
|
|
|
|
|
|
|
|
|
5822 |
$installed_addons = array();
|
|
|
5823 |
foreach ( self::$_instances as $instance ) {
|
5824 |
-
if ( $instance->
|
5825 |
-
|
5826 |
-
$installed_addons[] = $instance;
|
5827 |
-
}
|
5828 |
}
|
5829 |
}
|
5830 |
|
@@ -5874,7 +6031,25 @@
|
|
5874 |
* @return bool
|
5875 |
*/
|
5876 |
function is_addon() {
|
5877 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5878 |
}
|
5879 |
|
5880 |
/**
|
@@ -6631,6 +6806,8 @@
|
|
6631 |
} else {
|
6632 |
$this->sync_install();
|
6633 |
}
|
|
|
|
|
6634 |
}
|
6635 |
}
|
6636 |
}
|
@@ -6843,6 +7020,8 @@
|
|
6843 |
} else {
|
6844 |
$this->sync_install( array(), true );
|
6845 |
}
|
|
|
|
|
6846 |
}
|
6847 |
}
|
6848 |
|
@@ -6937,8 +7116,7 @@
|
|
6937 |
|
6938 |
$this->_add_upgrade_action_link();
|
6939 |
|
6940 |
-
if ( ! $this->
|
6941 |
-
! ( ! $this->_is_network_active && fs_is_network_admin() ) &&
|
6942 |
(
|
6943 |
( true === $this->_storage->require_license_activation ) ||
|
6944 |
// Not registered nor anonymous.
|
@@ -6948,7 +7126,7 @@
|
|
6948 |
)
|
6949 |
) {
|
6950 |
if ( ! $this->is_pending_activation() ) {
|
6951 |
-
if ( ! $this->_menu->
|
6952 |
/**
|
6953 |
* If a user visits any other admin page before activating the premium-only theme with a valid
|
6954 |
* license, reactivate the previous theme.
|
@@ -7015,8 +7193,8 @@
|
|
7015 |
}
|
7016 |
}
|
7017 |
|
7018 |
-
if ( $this->
|
7019 |
-
$this->
|
7020 |
) {
|
7021 |
$this->_show_theme_activation_optin_dialog();
|
7022 |
}
|
@@ -7781,7 +7959,7 @@
|
|
7781 |
*
|
7782 |
* @return array
|
7783 |
*/
|
7784 |
-
|
7785 |
$sites = array();
|
7786 |
$all_sites = self::get_sites();
|
7787 |
|
@@ -7911,6 +8089,10 @@
|
|
7911 |
foreach ( $sites as $site ) {
|
7912 |
$blog_id = self::get_site_blog_id( $site );
|
7913 |
|
|
|
|
|
|
|
|
|
7914 |
$install_id = $this->_delete_site( true, $blog_id );
|
7915 |
|
7916 |
// Clear all storage data.
|
@@ -8688,26 +8870,28 @@
|
|
8688 |
$include_themes = true,
|
8689 |
$include_blog_data = true
|
8690 |
) {
|
8691 |
-
if (
|
8692 |
-
|
8693 |
-
|
8694 |
-
|
8695 |
-
|
8696 |
-
$
|
8697 |
-
|
8698 |
-
$
|
|
|
|
|
8699 |
}
|
8700 |
}
|
8701 |
-
}
|
8702 |
|
8703 |
-
|
8704 |
-
|
8705 |
-
|
8706 |
-
|
8707 |
-
|
8708 |
-
|
8709 |
-
|
8710 |
-
|
|
|
8711 |
}
|
8712 |
}
|
8713 |
}
|
@@ -9063,6 +9247,21 @@
|
|
9063 |
}
|
9064 |
}
|
9065 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9066 |
/**
|
9067 |
* Update install only if changed.
|
9068 |
*
|
@@ -9346,6 +9545,8 @@
|
|
9346 |
$fs = self::get_instance_by_file( $plugin_file );
|
9347 |
|
9348 |
if ( is_object( $fs ) ) {
|
|
|
|
|
9349 |
self::require_plugin_essentials();
|
9350 |
|
9351 |
if ( is_plugin_active( $fs->_free_plugin_basename ) ||
|
@@ -9397,10 +9598,12 @@
|
|
9397 |
* @author Vova Feldman (@svovaf)
|
9398 |
* @since 1.0.1
|
9399 |
*
|
|
|
|
|
9400 |
* @return array
|
9401 |
*/
|
9402 |
-
function get_plugin_data() {
|
9403 |
-
if ( ! isset( $this->_plugin_data ) ) {
|
9404 |
self::require_plugin_essentials();
|
9405 |
|
9406 |
if ( $this->is_plugin() ) {
|
@@ -9505,6 +9708,18 @@
|
|
9505 |
null;
|
9506 |
}
|
9507 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9508 |
/**
|
9509 |
* @author Vova Feldman (@svovaf)
|
9510 |
* @since 1.2.1.5
|
@@ -9527,6 +9742,32 @@
|
|
9527 |
$this->_plugin->id;
|
9528 |
}
|
9529 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9530 |
/**
|
9531 |
* @author Vova Feldman (@svovaf)
|
9532 |
* @since 1.0.1
|
@@ -9626,12 +9867,14 @@
|
|
9626 |
* @author Vova Feldman (@svovaf)
|
9627 |
* @since 1.0.0
|
9628 |
*
|
|
|
|
|
9629 |
* @return string
|
9630 |
*/
|
9631 |
-
function get_plugin_version() {
|
9632 |
$this->_logger->entrance();
|
9633 |
|
9634 |
-
$plugin_data = $this->get_plugin_data();
|
9635 |
|
9636 |
$this->_logger->departure( 'Version = ' . $plugin_data['Version'] );
|
9637 |
|
@@ -9756,7 +9999,7 @@
|
|
9756 |
* @return array[number]FS_User
|
9757 |
*/
|
9758 |
static function get_all_users() {
|
9759 |
-
$users = self
|
9760 |
|
9761 |
if ( ! is_array( $users ) ) {
|
9762 |
$users = array();
|
@@ -9800,7 +10043,7 @@
|
|
9800 |
$option_name = $module_type . '_' . $option_name;
|
9801 |
}
|
9802 |
|
9803 |
-
return self
|
9804 |
}
|
9805 |
|
9806 |
/**
|
@@ -9848,6 +10091,54 @@
|
|
9848 |
self::$_accounts->set_option( $option_name, $option_value, $store, $network_level_or_blog_id );
|
9849 |
}
|
9850 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9851 |
/**
|
9852 |
* @author Vova Feldman (@svovaf)
|
9853 |
* @since 1.0.6
|
@@ -10031,7 +10322,7 @@
|
|
10031 |
* @return FS_Plugin_Tag[]
|
10032 |
*/
|
10033 |
private static function get_all_updates() {
|
10034 |
-
$updates = self
|
10035 |
|
10036 |
if ( ! is_array( $updates ) ) {
|
10037 |
$updates = array();
|
@@ -10047,7 +10338,7 @@
|
|
10047 |
* @return array<number,FS_Plugin[]>|false
|
10048 |
*/
|
10049 |
private static function get_all_addons() {
|
10050 |
-
$addons = self
|
10051 |
|
10052 |
if ( ! is_array( $addons ) ) {
|
10053 |
$addons = array();
|
@@ -10060,7 +10351,7 @@
|
|
10060 |
* @author Vova Feldman (@svovaf)
|
10061 |
* @since 1.0.6
|
10062 |
*
|
10063 |
-
* @return
|
10064 |
*/
|
10065 |
private static function get_all_account_addons() {
|
10066 |
$addons = self::$_accounts->get_option( 'account_addons', array() );
|
@@ -10161,7 +10452,7 @@
|
|
10161 |
* @author Vova Feldman (@svovaf)
|
10162 |
* @since 1.0.6
|
10163 |
*
|
10164 |
-
* @return
|
10165 |
*/
|
10166 |
function get_account_addons() {
|
10167 |
$this->_logger->entrance();
|
@@ -10305,7 +10596,7 @@
|
|
10305 |
|
10306 |
if ( ! fs_is_network_admin() ) {
|
10307 |
// Get blog-level activated installations.
|
10308 |
-
$sites = self
|
10309 |
} else {
|
10310 |
$sites = null;
|
10311 |
|
@@ -10314,7 +10605,7 @@
|
|
10314 |
) {
|
10315 |
if ( FS_Site::is_valid_id( $addon_storage->network_install_blog_id ) ) {
|
10316 |
// Get network-level activated installations.
|
10317 |
-
$sites = self
|
10318 |
'sites',
|
10319 |
array(),
|
10320 |
$addon_storage->network_install_blog_id
|
@@ -10324,9 +10615,10 @@
|
|
10324 |
}
|
10325 |
|
10326 |
$addon_info = array(
|
10327 |
-
'is_connected'
|
10328 |
-
'slug'
|
10329 |
-
'title'
|
|
|
10330 |
);
|
10331 |
|
10332 |
if ( ! $is_installed ) {
|
@@ -10372,14 +10664,14 @@
|
|
10372 |
|
10373 |
$addon_info['site'] = $site;
|
10374 |
|
10375 |
-
$plugins_data = self
|
10376 |
if ( isset( $plugins_data[ $slug ] ) ) {
|
10377 |
$plugin_data = $plugins_data[ $slug ];
|
10378 |
|
10379 |
$addon_info['version'] = $plugin_data->version;
|
10380 |
}
|
10381 |
|
10382 |
-
$all_plans = self
|
10383 |
if ( isset( $all_plans[ $slug ] ) ) {
|
10384 |
$plans = $all_plans[ $slug ];
|
10385 |
|
@@ -10392,7 +10684,7 @@
|
|
10392 |
}
|
10393 |
}
|
10394 |
|
10395 |
-
$licenses = self
|
10396 |
if ( is_array( $licenses ) && isset( $licenses[ $addon_id ] ) ) {
|
10397 |
foreach ( $licenses[ $addon_id ] as $license ) {
|
10398 |
if ( $license->id == $site->license_id ) {
|
@@ -10406,7 +10698,9 @@
|
|
10406 |
if ( isset( $addon_storage->subscriptions ) &&
|
10407 |
! empty( $addon_storage->subscriptions )
|
10408 |
) {
|
10409 |
-
|
|
|
|
|
10410 |
if ( $subscription->license_id == $site->license_id ) {
|
10411 |
$addon_info['subscription'] = $subscription;
|
10412 |
break;
|
@@ -10497,7 +10791,7 @@
|
|
10497 |
function is_premium() {
|
10498 |
/**
|
10499 |
* `$this->_plugin` will be `false` when `is_activation_mode` calls this method directly from the
|
10500 |
-
* `
|
10501 |
*
|
10502 |
* @author Leo Fajardo (@leorw)
|
10503 |
* @since 2.2.3
|
@@ -10594,13 +10888,26 @@
|
|
10594 |
return false;
|
10595 |
}
|
10596 |
|
10597 |
-
|
10598 |
-
|
|
|
10599 |
|
10600 |
-
|
10601 |
-
|
10602 |
-
|
10603 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10604 |
*
|
10605 |
* @return bool
|
10606 |
*/
|
@@ -10729,10 +11036,26 @@
|
|
10729 |
* @author Vova Feldman (@svovaf)
|
10730 |
* @since 1.1.7.3
|
10731 |
*
|
|
|
|
|
10732 |
* @return bool
|
10733 |
*/
|
10734 |
-
function has_any_license() {
|
10735 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10736 |
}
|
10737 |
|
10738 |
/**
|
@@ -10878,7 +11201,9 @@
|
|
10878 |
|
10879 |
if ( $license instanceof FS_Plugin_License ) {
|
10880 |
$this->_licenses[] = $license;
|
10881 |
-
|
|
|
|
|
10882 |
$this->_store_licenses();
|
10883 |
|
10884 |
return $license;
|
@@ -11103,7 +11428,22 @@
|
|
11103 |
|
11104 |
// Update current license.
|
11105 |
if ( is_object( $this->_license ) ) {
|
11106 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11107 |
}
|
11108 |
|
11109 |
return $this->_licenses;
|
@@ -11443,6 +11783,21 @@
|
|
11443 |
return true;
|
11444 |
}
|
11445 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11446 |
/**
|
11447 |
* Activate a given license on a collection of blogs/sites that are not yet opted-in.
|
11448 |
*
|
@@ -11458,7 +11813,7 @@
|
|
11458 |
private function activate_license_on_many_sites(
|
11459 |
FS_User $user,
|
11460 |
$license_key,
|
11461 |
-
array $site_ids
|
11462 |
) {
|
11463 |
$sites = array();
|
11464 |
foreach ( $site_ids as $site_id ) {
|
@@ -11482,30 +11837,43 @@
|
|
11482 |
}
|
11483 |
|
11484 |
$installs = array();
|
11485 |
-
foreach ( $result->installs as $install ) {
|
11486 |
-
$installs[] = new FS_Site( $install );
|
11487 |
-
}
|
11488 |
|
11489 |
-
|
11490 |
-
|
11491 |
|
11492 |
-
|
11493 |
|
11494 |
-
|
11495 |
-
$address = trailingslashit( fs_strip_url_protocol( $install->url ) );
|
11496 |
-
$blog_id = $address_to_blog_map[ $address ];
|
11497 |
|
11498 |
-
$this->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11499 |
|
11500 |
-
$
|
11501 |
|
11502 |
-
|
11503 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11504 |
}
|
11505 |
-
}
|
11506 |
|
11507 |
-
|
11508 |
-
|
|
|
11509 |
}
|
11510 |
|
11511 |
return true;
|
@@ -11524,7 +11892,15 @@
|
|
11524 |
function _update_site_license( $new_license ) {
|
11525 |
$this->_logger->entrance();
|
11526 |
|
11527 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11528 |
|
11529 |
if ( ! is_object( $new_license ) ) {
|
11530 |
$this->_site->license_id = null;
|
@@ -11559,6 +11935,241 @@
|
|
11559 |
return $this->_license;
|
11560 |
}
|
11561 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11562 |
/**
|
11563 |
* Sync site's subscription.
|
11564 |
*
|
@@ -11616,7 +12227,7 @@
|
|
11616 |
return null;
|
11617 |
}
|
11618 |
|
11619 |
-
foreach ( $this->_storage->subscriptions as $subscription ) {
|
11620 |
if ( $subscription->license_id == $license_id ) {
|
11621 |
return $subscription;
|
11622 |
}
|
@@ -11642,7 +12253,7 @@
|
|
11642 |
return;
|
11643 |
}
|
11644 |
|
11645 |
-
$subscriptions = $this->_storage->subscriptions;
|
11646 |
|
11647 |
$updated_subscription = false;
|
11648 |
foreach ( $subscriptions as $key => $existing_subscription ) {
|
@@ -11737,7 +12348,7 @@
|
|
11737 |
}
|
11738 |
|
11739 |
$current_plan_order = - 1;
|
11740 |
-
$required_plan_order =
|
11741 |
for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
|
11742 |
if ( $plan === $this->_plans[ $i ]->name ) {
|
11743 |
$required_plan_order = $i;
|
@@ -11755,9 +12366,11 @@
|
|
11755 |
* @author Vova Feldman (@svovaf)
|
11756 |
* @since 1.2.1.7
|
11757 |
*
|
|
|
|
|
11758 |
* @return bool
|
11759 |
*/
|
11760 |
-
function is_single_plan() {
|
11761 |
$this->_logger->entrance();
|
11762 |
|
11763 |
if ( ! $this->is_registered() ||
|
@@ -11767,7 +12380,18 @@
|
|
11767 |
return true;
|
11768 |
}
|
11769 |
|
11770 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11771 |
}
|
11772 |
|
11773 |
/**
|
@@ -11881,6 +12505,77 @@
|
|
11881 |
fs_require_template( 'forms/resend-key.php', $vars );
|
11882 |
}
|
11883 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11884 |
/**
|
11885 |
* Displays a subscription cancellation dialog box when the user clicks on the "Deactivate License"
|
11886 |
* link on the "Account" page or deactivates a plugin and there's an active subscription that is
|
@@ -11899,6 +12594,10 @@
|
|
11899 |
// Subscription cancellation dialog box is currently not supported for multisite networks.
|
11900 |
return array();
|
11901 |
}
|
|
|
|
|
|
|
|
|
11902 |
|
11903 |
$license = $this->_get_license();
|
11904 |
|
@@ -11986,8 +12685,18 @@
|
|
11986 |
return;
|
11987 |
}
|
11988 |
|
11989 |
-
if (
|
11990 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11991 |
return;
|
11992 |
}
|
11993 |
|
@@ -12013,6 +12722,55 @@
|
|
12013 |
$this->add_ajax_action( 'resend_license_key', array( &$this, '_resend_license_key_ajax_action' ) );
|
12014 |
}
|
12015 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12016 |
/**
|
12017 |
* @author Leo Fajardo (@leorw)
|
12018 |
* @since 2.0.2
|
@@ -12118,7 +12876,9 @@
|
|
12118 |
array(),
|
12119 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
12120 |
fs_request_get( 'blog_id', null ),
|
12121 |
-
fs_request_get( 'module_id', null, 'post' )
|
|
|
|
|
12122 |
);
|
12123 |
|
12124 |
echo json_encode( $result );
|
@@ -12126,6 +12886,86 @@
|
|
12126 |
exit;
|
12127 |
}
|
12128 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12129 |
/**
|
12130 |
* A helper method to activate migrated licenses. If the product is network activated and integrated, the method will network activate the license.
|
12131 |
*
|
@@ -12149,7 +12989,9 @@
|
|
12149 |
$is_marketing_allowed = null,
|
12150 |
$plugin_id = null
|
12151 |
) {
|
12152 |
-
|
|
|
|
|
12153 |
$license_key,
|
12154 |
$this->is_network_active() ?
|
12155 |
$this->get_sites_for_network_level_optin() :
|
@@ -12158,6 +13000,11 @@
|
|
12158 |
null,
|
12159 |
$plugin_id
|
12160 |
);
|
|
|
|
|
|
|
|
|
|
|
12161 |
}
|
12162 |
|
12163 |
/**
|
@@ -12171,6 +13018,7 @@
|
|
12171 |
* @param null|bool $is_marketing_allowed
|
12172 |
* @param null|int $blog_id
|
12173 |
* @param null|number $plugin_id
|
|
|
12174 |
*
|
12175 |
* @return array {
|
12176 |
* @var bool $success
|
@@ -12183,7 +13031,9 @@
|
|
12183 |
$sites = array(),
|
12184 |
$is_marketing_allowed = null,
|
12185 |
$blog_id = null,
|
12186 |
-
$plugin_id = null
|
|
|
|
|
12187 |
) {
|
12188 |
$this->_logger->entrance();
|
12189 |
|
@@ -12198,12 +13048,27 @@
|
|
12198 |
$this :
|
12199 |
$this->get_addon_instance( $plugin_id );
|
12200 |
|
|
|
|
|
12201 |
$error = false;
|
12202 |
$next_page = false;
|
12203 |
|
12204 |
$has_valid_blog_id = is_numeric( $blog_id );
|
12205 |
|
12206 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12207 |
if ( fs_is_network_admin() && ! $has_valid_blog_id ) {
|
12208 |
// If no specific blog ID was provided, activate the license for all sites in the network.
|
12209 |
$blog_2_install_map = array();
|
@@ -12214,7 +13079,7 @@
|
|
12214 |
continue;
|
12215 |
}
|
12216 |
|
12217 |
-
$install = $
|
12218 |
|
12219 |
if ( is_object( $install ) ) {
|
12220 |
$blog_2_install_map[ $site['blog_id'] ] = $install;
|
@@ -12223,10 +13088,8 @@
|
|
12223 |
}
|
12224 |
}
|
12225 |
|
12226 |
-
$user = $this->get_current_or_network_user();
|
12227 |
-
|
12228 |
if ( ! empty( $blog_2_install_map ) ) {
|
12229 |
-
$result = $
|
12230 |
|
12231 |
if ( true !== $result ) {
|
12232 |
$error = FS_Api::is_api_error_object( $result ) ?
|
@@ -12236,7 +13099,7 @@
|
|
12236 |
}
|
12237 |
|
12238 |
if ( empty( $error ) && ! empty( $site_ids ) ) {
|
12239 |
-
$result = $
|
12240 |
|
12241 |
if ( true !== $result ) {
|
12242 |
$error = FS_Api::is_api_error_object( $result ) ?
|
@@ -12252,31 +13115,67 @@
|
|
12252 |
*
|
12253 |
* @author Leo Fajardo (@leorw)
|
12254 |
*/
|
12255 |
-
$
|
12256 |
}
|
12257 |
|
12258 |
-
|
|
|
|
|
|
|
12259 |
|
12260 |
-
|
12261 |
-
'license_key' => $fs->apply_filters( 'license_key', $license_key )
|
12262 |
-
);
|
12263 |
|
12264 |
-
|
12265 |
|
12266 |
-
|
12267 |
-
|
12268 |
-
|
12269 |
-
|
12270 |
-
|
12271 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12272 |
}
|
12273 |
}
|
12274 |
|
12275 |
if ( empty( $error ) ) {
|
12276 |
-
$
|
12277 |
|
12278 |
$fs->_sync_license( true, $has_valid_blog_id );
|
12279 |
|
|
|
|
|
12280 |
$next_page = $fs->is_addon() ?
|
12281 |
$fs->get_parent_instance()->get_account_url() :
|
12282 |
$fs->get_account_url();
|
@@ -12325,17 +13224,17 @@
|
|
12325 |
continue;
|
12326 |
}
|
12327 |
|
12328 |
-
if ( $
|
12329 |
// Site was already connected before.
|
12330 |
continue;
|
12331 |
}
|
12332 |
|
12333 |
-
if ( $
|
12334 |
// Site's connection was delegated.
|
12335 |
continue;
|
12336 |
}
|
12337 |
|
12338 |
-
if ( $
|
12339 |
// Site connection was already skipped.
|
12340 |
continue;
|
12341 |
}
|
@@ -12344,43 +13243,101 @@
|
|
12344 |
}
|
12345 |
|
12346 |
if ( ! empty( $pending_sites ) ) {
|
12347 |
-
if ( $
|
12348 |
-
$
|
12349 |
} else {
|
12350 |
-
$
|
12351 |
}
|
12352 |
}
|
12353 |
}
|
12354 |
}
|
12355 |
}
|
12356 |
|
12357 |
-
if ( false === $error && true === $
|
12358 |
-
$
|
12359 |
}
|
12360 |
|
12361 |
-
$result = array(
|
12362 |
-
'success' => ( false === $error )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12363 |
);
|
12364 |
|
12365 |
-
|
12366 |
-
$
|
12367 |
-
|
12368 |
-
|
12369 |
-
|
12370 |
-
|
12371 |
-
|
12372 |
-
|
12373 |
-
*
|
12374 |
-
* @author Leo Fajardo (@leorw)
|
12375 |
-
* @since 2.2.4
|
12376 |
-
*/
|
12377 |
-
$this->purge_valid_user_licenses_cache();
|
12378 |
}
|
12379 |
|
12380 |
-
$
|
|
|
|
|
|
|
|
|
|
|
12381 |
}
|
12382 |
|
12383 |
-
return $
|
12384 |
}
|
12385 |
|
12386 |
/**
|
@@ -13409,9 +14366,8 @@
|
|
13409 |
$page_param = $this->_menu->get_slug( $page );
|
13410 |
|
13411 |
if ( empty( $page ) &&
|
13412 |
-
$this->is_theme() &&
|
13413 |
// Show the opt-in as an overlay for free wp.org themes or themes without any settings page.
|
13414 |
-
|
13415 |
) {
|
13416 |
$params[ $this->get_unique_affix() . '_show_optin' ] = 'true';
|
13417 |
|
@@ -13841,10 +14797,12 @@
|
|
13841 |
*
|
13842 |
* @param int $blog_id
|
13843 |
* @param FS_Site $install
|
|
|
|
|
13844 |
*/
|
13845 |
function switch_to_blog( $blog_id, FS_Site $install = null ) {
|
13846 |
if ( $blog_id == $this->_context_is_network_or_blog_id ) {
|
13847 |
-
return;
|
13848 |
}
|
13849 |
|
13850 |
switch_to_blog( $blog_id );
|
@@ -13858,9 +14816,10 @@
|
|
13858 |
$install :
|
13859 |
$this->get_install_by_blog_id( $blog_id );
|
13860 |
|
13861 |
-
$this->_user
|
13862 |
-
$this->_licenses
|
13863 |
-
$this->_license
|
|
|
13864 |
|
13865 |
if ( is_object( $this->_site ) ) {
|
13866 |
// Try to fetch user from install.
|
@@ -13905,6 +14864,8 @@
|
|
13905 |
|
13906 |
unset( $this->_site_api );
|
13907 |
unset( $this->_user_api );
|
|
|
|
|
13908 |
}
|
13909 |
|
13910 |
/**
|
@@ -14350,6 +15311,18 @@
|
|
14350 |
return ( $this->_menu->get_slug( $page ) === fs_request_get( 'page', '', 'get' ) );
|
14351 |
}
|
14352 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14353 |
/**
|
14354 |
* Get module's main admin setting page URL.
|
14355 |
*
|
@@ -14370,8 +15343,22 @@
|
|
14370 |
* @since 1.2.2.7
|
14371 |
*
|
14372 |
* @return bool
|
|
|
|
|
14373 |
*/
|
14374 |
function is_theme_settings_page() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14375 |
return fs_starts_with(
|
14376 |
fs_request_get( 'page', '', 'get' ),
|
14377 |
$this->_menu->get_slug()
|
@@ -14791,7 +15778,7 @@
|
|
14791 |
/**
|
14792 |
* This is a special fault tolerance mechanism to handle a scenario that the user data is missing.
|
14793 |
*/
|
14794 |
-
$user = $this->
|
14795 |
}
|
14796 |
|
14797 |
$this->_user = ( $user instanceof FS_User ) ?
|
@@ -14831,13 +15818,19 @@
|
|
14831 |
* @author Vova Feldman (@svovaf)
|
14832 |
* @since 2.0.0
|
14833 |
*
|
|
|
|
|
14834 |
* @return \FS_User|mixed
|
14835 |
*/
|
14836 |
-
private function
|
|
|
|
|
|
|
|
|
14837 |
$api = $this->get_api_site_scope();
|
14838 |
|
14839 |
$uid = $this->get_anonymous_id();
|
14840 |
-
$request_path = "/users/{$
|
14841 |
|
14842 |
$result = $api->get( $request_path, false, WP_FS__TIME_10_MIN_IN_SEC );
|
14843 |
|
@@ -14993,6 +15986,13 @@
|
|
14993 |
'is_uninstalled' => false,
|
14994 |
) );
|
14995 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14996 |
if ( true === $network_level_or_blog_id ) {
|
14997 |
if ( ! isset( $override_with['sites'] ) ) {
|
14998 |
$params['sites'] = $this->get_sites_for_network_level_optin();
|
@@ -15088,9 +16088,12 @@
|
|
15088 |
if ( ! $is_uninstall ) {
|
15089 |
$fs_user = Freemius::_get_user_by_email( $email );
|
15090 |
if ( is_object( $fs_user ) && ! $this->is_pending_activation() ) {
|
15091 |
-
return $this->
|
|
|
15092 |
false,
|
15093 |
$trial_plan_id,
|
|
|
|
|
15094 |
$sites
|
15095 |
);
|
15096 |
}
|
@@ -15257,6 +16260,9 @@
|
|
15257 |
( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
|
15258 |
$decoded->is_marketing_allowed :
|
15259 |
null ),
|
|
|
|
|
|
|
15260 |
$decoded->install_id,
|
15261 |
$decoded->install_public_key,
|
15262 |
$decoded->install_secret_key,
|
@@ -15270,6 +16276,9 @@
|
|
15270 |
( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
|
15271 |
$decoded->is_marketing_allowed :
|
15272 |
null ),
|
|
|
|
|
|
|
15273 |
$decoded->installs,
|
15274 |
false
|
15275 |
);
|
@@ -15361,7 +16370,7 @@
|
|
15361 |
);
|
15362 |
|
15363 |
if ( is_numeric( $first_install->license_id ) ) {
|
15364 |
-
$this->
|
15365 |
}
|
15366 |
|
15367 |
$this->_admin_notices->remove_sticky( 'connect_account' );
|
@@ -15496,6 +16505,7 @@
|
|
15496 |
fs_request_get( 'user_public_key' ),
|
15497 |
fs_request_get( 'user_secret_key' ),
|
15498 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
|
|
15499 |
$pending_sites_info['blog_ids'],
|
15500 |
$pending_sites_info['license_key'],
|
15501 |
$pending_sites_info['trial_plan_id']
|
@@ -15506,6 +16516,7 @@
|
|
15506 |
fs_request_get( 'user_public_key' ),
|
15507 |
fs_request_get( 'user_secret_key' ),
|
15508 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
|
|
15509 |
fs_request_get( 'install_id' ),
|
15510 |
fs_request_get( 'install_public_key' ),
|
15511 |
fs_request_get( 'install_secret_key' ),
|
@@ -15561,13 +16572,12 @@
|
|
15561 |
* @param string $user_public_key
|
15562 |
* @param string $user_secret_key
|
15563 |
* @param bool|null $is_marketing_allowed
|
|
|
15564 |
* @param number $install_id
|
15565 |
* @param string $install_public_key
|
15566 |
* @param string $install_secret_key
|
15567 |
* @param bool $redirect
|
15568 |
-
* @param bool $auto_install
|
15569 |
-
* redirect (or return a URL) to the account page with a special parameter to
|
15570 |
-
* trigger the auto installation processes.
|
15571 |
*
|
15572 |
* @return string If redirect is `false`, returns the next page the user should be redirected to.
|
15573 |
*/
|
@@ -15576,6 +16586,7 @@
|
|
15576 |
$user_public_key,
|
15577 |
$user_secret_key,
|
15578 |
$is_marketing_allowed,
|
|
|
15579 |
$install_id,
|
15580 |
$install_public_key,
|
15581 |
$install_secret_key,
|
@@ -15617,6 +16628,10 @@
|
|
15617 |
$this->disable_opt_in_notice_and_lock_user();
|
15618 |
}
|
15619 |
|
|
|
|
|
|
|
|
|
15620 |
return $this->setup_account(
|
15621 |
$this->_user,
|
15622 |
$this->_site,
|
@@ -15635,6 +16650,7 @@
|
|
15635 |
* @param string $user_public_key
|
15636 |
* @param string $user_secret_key
|
15637 |
* @param bool|null $is_marketing_allowed
|
|
|
15638 |
* @param array $site_ids
|
15639 |
* @param bool $license_key
|
15640 |
* @param bool $trial_plan_id
|
@@ -15647,6 +16663,7 @@
|
|
15647 |
$user_public_key,
|
15648 |
$user_secret_key,
|
15649 |
$is_marketing_allowed,
|
|
|
15650 |
$site_ids,
|
15651 |
$license_key = false,
|
15652 |
$trial_plan_id = false,
|
@@ -15658,6 +16675,10 @@
|
|
15658 |
$this->disable_opt_in_notice_and_lock_user();
|
15659 |
}
|
15660 |
|
|
|
|
|
|
|
|
|
15661 |
$sites = array();
|
15662 |
foreach ( $site_ids as $site_id ) {
|
15663 |
$sites[] = $this->get_site_info( array( 'blog_id' => $site_id ) );
|
@@ -15676,11 +16697,10 @@
|
|
15676 |
* @param string $user_public_key
|
15677 |
* @param string $user_secret_key
|
15678 |
* @param bool|null $is_marketing_allowed
|
|
|
15679 |
* @param object[] $installs
|
15680 |
* @param bool $redirect
|
15681 |
-
* @param bool $auto_install
|
15682 |
-
* redirect (or return a URL) to the account page with a special parameter to
|
15683 |
-
* trigger the auto installation processes.
|
15684 |
*
|
15685 |
* @return string If redirect is `false`, returns the next page the user should be redirected to.
|
15686 |
*/
|
@@ -15689,6 +16709,7 @@
|
|
15689 |
$user_public_key,
|
15690 |
$user_secret_key,
|
15691 |
$is_marketing_allowed,
|
|
|
15692 |
array $installs,
|
15693 |
$redirect = true,
|
15694 |
$auto_install = false
|
@@ -15699,6 +16720,10 @@
|
|
15699 |
$this->disable_opt_in_notice_and_lock_user();
|
15700 |
}
|
15701 |
|
|
|
|
|
|
|
|
|
15702 |
$install_ids = array();
|
15703 |
|
15704 |
foreach ( $installs as $install ) {
|
@@ -15808,6 +16833,8 @@
|
|
15808 |
*/
|
15809 |
$license_key = fs_request_get( 'license_secret_key' );
|
15810 |
|
|
|
|
|
15811 |
$this->install_with_current_user( $license_key );
|
15812 |
}
|
15813 |
}
|
@@ -15852,7 +16879,7 @@
|
|
15852 |
*
|
15853 |
* @return \FS_Site|object|string If redirect is `false`, returns the next page the user should be redirected to, or the API error object if failed to install. If $setup_account is set to `false`, return the newly created install.
|
15854 |
*/
|
15855 |
-
|
15856 |
FS_User $user,
|
15857 |
$license_key = false,
|
15858 |
$trial_plan_id = false,
|
@@ -15941,6 +16968,10 @@
|
|
15941 |
|
15942 |
if ( ! empty( $license_key ) ) {
|
15943 |
$extra_install_params['license_key'] = $this->apply_filters( 'license_key', $license_key );
|
|
|
|
|
|
|
|
|
15944 |
} else if ( FS_Plugin_Plan::is_valid_id( $trial_plan_id ) ) {
|
15945 |
$extra_install_params['trial_plan_id'] = $trial_plan_id;
|
15946 |
}
|
@@ -15962,7 +16993,7 @@
|
|
15962 |
! $this->is_api_result_object( $result, 'installs' )
|
15963 |
) {
|
15964 |
if ( ! empty( $args['license_key'] ) ) {
|
15965 |
-
// Pass
|
15966 |
$args['license_key'] = $license_key;
|
15967 |
}
|
15968 |
|
@@ -16339,7 +17370,7 @@
|
|
16339 |
*/
|
16340 |
private function add_menu_action() {
|
16341 |
if ( $this->is_activation_mode() ) {
|
16342 |
-
if ( $this->
|
16343 |
$this->override_plugin_menu_with_activation();
|
16344 |
} else {
|
16345 |
/**
|
@@ -16361,7 +17392,7 @@
|
|
16361 |
}
|
16362 |
} else if (
|
16363 |
fs_request_is_action( 'sync_user' ) &&
|
16364 |
-
( ! $this->has_settings_menu() || $this->
|
16365 |
) {
|
16366 |
$this->_handle_account_user_sync();
|
16367 |
}
|
@@ -16609,7 +17640,7 @@
|
|
16609 |
// Didn't ask to hide the pricing page.
|
16610 |
$this->is_page_visible( 'pricing' ) &&
|
16611 |
// Don't have a valid active license or has more than one plan.
|
16612 |
-
( ! $this->is_paying() || ! $this->is_single_plan() )
|
16613 |
);
|
16614 |
}
|
16615 |
|
@@ -16627,12 +17658,13 @@
|
|
16627 |
return false;
|
16628 |
}
|
16629 |
|
16630 |
-
if ( $this->
|
16631 |
-
|
16632 |
-
|
16633 |
-
|
16634 |
-
|
16635 |
-
if ( $is_activation_mode
|
|
|
16636 |
return false;
|
16637 |
}
|
16638 |
|
@@ -16712,17 +17744,19 @@
|
|
16712 |
}
|
16713 |
|
16714 |
if ( $add_submenu_items ) {
|
16715 |
-
|
16716 |
-
|
16717 |
-
$this->
|
16718 |
-
|
16719 |
-
|
16720 |
-
|
16721 |
-
|
16722 |
-
|
16723 |
-
|
16724 |
-
|
16725 |
-
|
|
|
|
|
16726 |
|
16727 |
if ( $this->has_addons() ) {
|
16728 |
$this->add_submenu_item(
|
@@ -16741,7 +17775,7 @@
|
|
16741 |
if ( $add_submenu_items ||
|
16742 |
( $is_activation_mode && $this->is_only_premium() && $this->is_admin_page( 'pricing' ) )
|
16743 |
) {
|
16744 |
-
if (
|
16745 |
$show_pricing = (
|
16746 |
$this->is_submenu_item_visible( 'pricing' ) &&
|
16747 |
$this->is_pricing_page_visible()
|
@@ -17106,6 +18140,24 @@
|
|
17106 |
|
17107 |
#endregion ------------------------------------------------------------------
|
17108 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17109 |
|
17110 |
#--------------------------------------------------------------------------------
|
17111 |
#region Actions / Hooks / Filters
|
@@ -17482,37 +18534,44 @@
|
|
17482 |
private function _store_site( $store = true, $network_level_or_blog_id = null, FS_Site $site = null ) {
|
17483 |
$this->_logger->entrance();
|
17484 |
|
17485 |
-
if (
|
|
|
|
|
|
|
|
|
17486 |
$this->_logger->error( "Empty install ID, can't store site." );
|
17487 |
|
17488 |
return;
|
17489 |
}
|
17490 |
|
17491 |
-
$site_clone
|
17492 |
-
$encrypted_site = clone $site_clone;
|
17493 |
|
17494 |
$sites = self::get_all_sites( $this->_module_type, $network_level_or_blog_id );
|
17495 |
|
17496 |
-
$
|
|
|
17497 |
|
17498 |
-
|
17499 |
-
|
17500 |
-
|
17501 |
-
|
17502 |
-
|
17503 |
-
|
17504 |
-
|
17505 |
-
|
17506 |
-
|
17507 |
-
|
17508 |
-
|
17509 |
-
|
17510 |
-
|
17511 |
-
|
17512 |
-
|
|
|
|
|
|
|
17513 |
}
|
17514 |
|
17515 |
-
$sites[ $this->_slug ] = $
|
17516 |
|
17517 |
$this->set_account_option( 'sites', $sites, $store, $network_level_or_blog_id );
|
17518 |
}
|
@@ -17722,6 +18781,10 @@
|
|
17722 |
* @since 2.2.4
|
17723 |
*/
|
17724 |
private function purge_valid_user_licenses_cache() {
|
|
|
|
|
|
|
|
|
17725 |
$this->get_api_user_scope()->purge_cache( $this->get_valid_user_licenses_endpoint() );
|
17726 |
}
|
17727 |
|
@@ -18380,6 +19443,88 @@
|
|
18380 |
return self::is_active_valid_license( $this->_license );
|
18381 |
}
|
18382 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18383 |
/**
|
18384 |
* Check if a given license is active & valid (not expired).
|
18385 |
*
|
@@ -18694,7 +19839,7 @@
|
|
18694 |
} else {
|
18695 |
// Authentication params are broken.
|
18696 |
$this->_admin_notices->add(
|
18697 |
-
$this->get_text_inline( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.', 'wrong-authentication-param-message' ),
|
18698 |
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
|
18699 |
'error'
|
18700 |
);
|
@@ -18861,12 +20006,32 @@
|
|
18861 |
$this->get_network_install_blog_id()
|
18862 |
);
|
18863 |
} else {
|
18864 |
-
if ( is_object( $this->_license )
|
18865 |
-
|
18866 |
-
$
|
18867 |
-
|
18868 |
-
|
18869 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18870 |
}
|
18871 |
}
|
18872 |
|
@@ -18890,7 +20055,7 @@
|
|
18890 |
|
18891 |
$hmm_text = $this->get_text_x_inline( 'Hmm', 'something somebody says when they are thinking about what you have just said.', 'hmm' ) . '...';
|
18892 |
|
18893 |
-
if ( $this->has_paid_plan() ) {
|
18894 |
switch ( $plan_change ) {
|
18895 |
case 'none':
|
18896 |
if ( ! $background && is_admin() ) {
|
@@ -18983,6 +20148,9 @@
|
|
18983 |
'license_expired',
|
18984 |
$hmm_text
|
18985 |
);
|
|
|
|
|
|
|
18986 |
$this->_admin_notices->remove_sticky( 'plan_upgraded' );
|
18987 |
break;
|
18988 |
case 'trial_started':
|
@@ -19037,7 +20205,8 @@
|
|
19037 |
* @author Vova Feldman (@svovaf)
|
19038 |
* @since 1.0.5
|
19039 |
*
|
19040 |
-
* @param bool
|
|
|
19041 |
*/
|
19042 |
protected function _activate_license( $background = false, $premium_license = null ) {
|
19043 |
$this->_logger->entrance();
|
@@ -19231,7 +20400,11 @@
|
|
19231 |
|
19232 |
if ( $show_notice ) {
|
19233 |
$this->_admin_notices->add(
|
19234 |
-
sprintf( $this->
|
|
|
|
|
|
|
|
|
19235 |
$this->get_text_inline( 'O.K', 'ok' )
|
19236 |
);
|
19237 |
}
|
@@ -19844,7 +21017,7 @@
|
|
19844 |
|
19845 |
$api = $this->get_api_site_or_plugin_scope();
|
19846 |
|
19847 |
-
$path = $this->add_show_pending( '/addons.json?enriched=true' );
|
19848 |
|
19849 |
/**
|
19850 |
* @since 1.2.1
|
@@ -20038,6 +21211,39 @@
|
|
20038 |
return true;
|
20039 |
}
|
20040 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20041 |
/**
|
20042 |
* Handle user name update.
|
20043 |
*
|
@@ -20151,7 +21357,7 @@
|
|
20151 |
* @return string
|
20152 |
*/
|
20153 |
function get_after_activation_url( $filter, $params = array(), $network = null ) {
|
20154 |
-
if ( $this->
|
20155 |
( fs_request_has( 'pending_activation' ) ||
|
20156 |
// For cases when the first time path is set, even though it's a WP.org theme.
|
20157 |
fs_request_get_bool( $this->get_unique_affix() . '_show_optin' ) )
|
@@ -20206,8 +21412,9 @@
|
|
20206 |
// Alias.
|
20207 |
$oops_text = $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...';
|
20208 |
|
20209 |
-
$is_network_action
|
20210 |
-
$blog_id
|
|
|
20211 |
|
20212 |
if ( is_numeric( $blog_id ) ) {
|
20213 |
$this->switch_to_blog( $blog_id );
|
@@ -20219,7 +21426,7 @@
|
|
20219 |
case 'opt_in':
|
20220 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
20221 |
|
20222 |
-
if ( $
|
20223 |
if ( $is_network_action && ! empty( $blog_id ) ) {
|
20224 |
if ( ! $this->is_registered() ) {
|
20225 |
$this->install_with_user(
|
@@ -20242,7 +21449,7 @@
|
|
20242 |
case 'toggle_tracking':
|
20243 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
20244 |
|
20245 |
-
if ( $
|
20246 |
if ( $is_network_action && ! empty( $blog_id ) ) {
|
20247 |
if ( $this->is_registered() ) {
|
20248 |
if ( $this->is_tracking_prohibited() ) {
|
@@ -20277,8 +21484,20 @@
|
|
20277 |
case 'delete_account':
|
20278 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
20279 |
|
20280 |
-
|
20281 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20282 |
$this->delete_network_account_event();
|
20283 |
} else {
|
20284 |
$this->delete_account_event();
|
@@ -20294,7 +21513,12 @@
|
|
20294 |
} else {
|
20295 |
if ( $this->is_addon_activated( $plugin_id ) ) {
|
20296 |
$fs_addon = self::get_instance_by_id( $plugin_id );
|
20297 |
-
|
|
|
|
|
|
|
|
|
|
|
20298 |
|
20299 |
fs_redirect( $this->_get_admin_page_url( 'account' ) );
|
20300 |
}
|
@@ -20894,6 +22118,26 @@
|
|
20894 |
return $this->_plugin_api;
|
20895 |
}
|
20896 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20897 |
/**
|
20898 |
* Get site API scope object (fallback to public plugin scope when not registered).
|
20899 |
*
|
@@ -21227,7 +22471,7 @@
|
|
21227 |
function _show_theme_activation_optin_dialog() {
|
21228 |
fs_enqueue_local_style( 'fs_connect', '/admin/connect.css' );
|
21229 |
|
21230 |
-
add_action( 'admin_footer
|
21231 |
}
|
21232 |
|
21233 |
/**
|
@@ -21235,6 +22479,12 @@
|
|
21235 |
* @since 1.2.2
|
21236 |
*/
|
21237 |
function _add_fs_theme_activation_dialog() {
|
|
|
|
|
|
|
|
|
|
|
|
|
21238 |
$vars = array( 'id' => $this->_module_id );
|
21239 |
fs_require_once_template( 'connect.php', $vars );
|
21240 |
}
|
@@ -21322,7 +22572,7 @@
|
|
21322 |
$add_upgrade_link = (
|
21323 |
$add_action_links ||
|
21324 |
( $is_activation_mode && $this->is_only_premium() )
|
21325 |
-
) && ! WP_FS__DEMO_MODE;
|
21326 |
|
21327 |
$add_addons_link = ( $add_action_links && $this->has_addons() );
|
21328 |
|
@@ -21411,6 +22661,20 @@
|
|
21411 |
|
21412 |
$this->_logger->entrance();
|
21413 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21414 |
if ( fs_is_network_admin() ) {
|
21415 |
if ( ! $this->_is_network_active ) {
|
21416 |
// Don't add tracking links when browsing the network WP Admin and the plugin is not network active.
|
@@ -21461,6 +22725,10 @@
|
|
21461 |
return;
|
21462 |
}
|
21463 |
|
|
|
|
|
|
|
|
|
21464 |
$link_text_id = '';
|
21465 |
$url = '#';
|
21466 |
|
@@ -21470,8 +22738,6 @@
|
|
21470 |
} else {
|
21471 |
$link_text_id = $this->get_text_inline( 'Opt In', 'opt-in' );
|
21472 |
}
|
21473 |
-
|
21474 |
-
add_action( 'admin_footer', array( &$this, '_add_optout_dialog' ) );
|
21475 |
} else if ( $this->is_anonymous() || $this->is_activation_mode() ) {
|
21476 |
/**
|
21477 |
* Show opt-in link only if skipped or in activation mode.
|
@@ -21488,6 +22754,8 @@
|
|
21488 |
$url = $this->get_activation_url( $params );
|
21489 |
}
|
21490 |
|
|
|
|
|
21491 |
if ( ! empty( $link_text_id ) && $this->is_plugin() && self::is_plugins_page() ) {
|
21492 |
$this->add_plugin_action_link(
|
21493 |
$link_text_id,
|
@@ -22177,7 +23445,7 @@
|
|
22177 |
function _tabs_capture() {
|
22178 |
$this->_logger->entrance();
|
22179 |
|
22180 |
-
if ( ! $this->
|
22181 |
! $this->is_matching_url( $this->main_menu_url() )
|
22182 |
) {
|
22183 |
return;
|
@@ -22232,7 +23500,7 @@
|
|
22232 |
function _store_tabs_styles() {
|
22233 |
$this->_logger->entrance();
|
22234 |
|
22235 |
-
if ( ! $this->
|
22236 |
! $this->is_matching_url( $this->main_menu_url() )
|
22237 |
) {
|
22238 |
return;
|
@@ -22306,18 +23574,23 @@
|
|
22306 |
return false;
|
22307 |
}
|
22308 |
|
22309 |
-
if (
|
22310 |
// Only add tabs to themes for now.
|
22311 |
return false;
|
22312 |
}
|
22313 |
|
22314 |
-
if ( ! $this->has_paid_plan() && ! $this->has_addons() ) {
|
22315 |
// Only add tabs to monetizing themes.
|
22316 |
return false;
|
22317 |
}
|
22318 |
|
22319 |
-
if ( ! $this->
|
22320 |
-
// Only add tabs if browsing one of the
|
|
|
|
|
|
|
|
|
|
|
22321 |
return false;
|
22322 |
}
|
22323 |
|
@@ -23004,8 +24277,8 @@
|
|
23004 |
}
|
23005 |
|
23006 |
$modules = array_merge(
|
23007 |
-
array_values( self
|
23008 |
-
array_values( self
|
23009 |
);
|
23010 |
|
23011 |
foreach ( $modules as $module ) {
|
@@ -23110,10 +24383,45 @@
|
|
23110 |
*
|
23111 |
* @author Vova Feldman (@svovaf)
|
23112 |
*/
|
23113 |
-
self::shoot_ajax_success( array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23114 |
}
|
23115 |
|
23116 |
-
|
23117 |
}
|
23118 |
|
23119 |
/**
|
@@ -23149,8 +24457,8 @@
|
|
23149 |
}
|
23150 |
|
23151 |
$modules = array_merge(
|
23152 |
-
array_values( self
|
23153 |
-
array_values( self
|
23154 |
);
|
23155 |
|
23156 |
foreach ( $modules as $key => $module ) {
|
164 |
*/
|
165 |
private $_has_addons;
|
166 |
|
167 |
+
/**
|
168 |
+
* @since 2.4.5
|
169 |
+
* @var string Navigation type: 'menu' or 'tabs'.
|
170 |
+
*/
|
171 |
+
private $_navigation;
|
172 |
+
|
173 |
+
const NAVIGATION_MENU = 'menu';
|
174 |
+
const NAVIGATION_TABS = 'tabs';
|
175 |
+
|
176 |
/**
|
177 |
* @since 1.1.6
|
178 |
* @var string[]bool.
|
343 |
*/
|
344 |
private $_dynamically_added_top_level_page_hook_name = '';
|
345 |
|
346 |
+
/**
|
347 |
+
* @author Leo Fajardo (@leorw)
|
348 |
+
* @since 2.3.1
|
349 |
+
*
|
350 |
+
* @var bool
|
351 |
+
*/
|
352 |
+
private $is_whitelabeled;
|
353 |
+
|
354 |
#region Uninstall Reasons IDs
|
355 |
|
356 |
const REASON_NO_LONGER_NEEDED = 1;
|
501 |
);
|
502 |
|
503 |
if ( 'true' === fs_request_get( 'fs_clear_api_cache' ) ||
|
504 |
+
fs_request_is_action( 'restart_freemius' )
|
505 |
) {
|
506 |
FS_Api::clear_cache();
|
507 |
$this->_cache->clear();
|
508 |
}
|
509 |
|
510 |
+
$this->register_constructor_hooks();
|
511 |
|
512 |
/**
|
513 |
* Starting from version 2.0.0, `FS_Site` entities no longer have the `plan` property and have `plan_id`
|
719 |
$this->_menu->has_menu();
|
720 |
}
|
721 |
|
722 |
+
/**
|
723 |
+
* If `true` the opt-in should be shown as a modal dialog box on the themes.php page. WordPress.org themes guidelines prohibit from redirecting the user from the themes.php page after activating a theme.
|
724 |
+
*
|
725 |
+
* @author Vova Feldman (@svovaf)
|
726 |
+
* @since 2.4.5
|
727 |
+
*
|
728 |
+
* @return bool
|
729 |
+
*/
|
730 |
+
function show_opt_in_on_themes_page() {
|
731 |
+
if ( ! $this->is_free_wp_org_theme() ) {
|
732 |
+
return false;
|
733 |
+
}
|
734 |
+
|
735 |
+
if ( ! $this->has_settings_menu() ) {
|
736 |
+
return true;
|
737 |
+
}
|
738 |
+
|
739 |
+
return $this->show_settings_with_tabs();
|
740 |
+
}
|
741 |
+
|
742 |
+
/**
|
743 |
+
* If `true` the opt-in should be shown on the product's main setting page.
|
744 |
+
*
|
745 |
+
* @author Vova Feldman (@svovaf)
|
746 |
+
* @since 2.4.5
|
747 |
+
*
|
748 |
+
* @return bool
|
749 |
+
*
|
750 |
+
* @uses show_opt_in_on_themes_page();
|
751 |
+
*/
|
752 |
+
function show_opt_in_on_setting_page() {
|
753 |
+
return ! $this->show_opt_in_on_themes_page();
|
754 |
+
}
|
755 |
+
|
756 |
+
/**
|
757 |
+
* If `true` the settings should be shown using tabs.
|
758 |
+
*
|
759 |
+
* @author Vova Feldman (@svovaf)
|
760 |
+
* @since 2.4.5
|
761 |
+
*
|
762 |
+
* @return bool
|
763 |
+
*/
|
764 |
+
function show_settings_with_tabs() {
|
765 |
+
return ( self::NAVIGATION_TABS === $this->_navigation );
|
766 |
+
}
|
767 |
+
|
768 |
/**
|
769 |
* Check if the context module is free wp.org theme.
|
770 |
*
|
797 |
* @since 1.2.2.7 Even if the menu item was specified to be hidden, when it is the context page, then show the submenu item so the user will have the right context page.
|
798 |
*
|
799 |
* @param string $slug
|
800 |
+
* @param bool $is_tabs_visibility_check This is used to decide if the associated tab should be shown or hidden.
|
|
|
801 |
*
|
802 |
* @return bool
|
803 |
*/
|
804 |
+
function is_submenu_item_visible( $slug, $is_tabs_visibility_check = false ) {
|
805 |
if ( $this->is_admin_page( $slug ) ) {
|
806 |
/**
|
807 |
* It is the current context page, so show the submenu item
|
816 |
return false;
|
817 |
}
|
818 |
|
819 |
+
if ( ! $is_tabs_visibility_check && $this->show_settings_with_tabs() ) {
|
820 |
/**
|
821 |
* wp.org themes are limited to a single submenu item, and
|
822 |
* sub-submenu items are most likely not allowed (never verified).
|
1042 |
}
|
1043 |
|
1044 |
if ( isset( $this->_storage->subscription ) && is_object( $this->_storage->subscription ) ) {
|
1045 |
+
$this->_storage->subscriptions = array( fs_get_entity( $this->_storage->subscription, FS_Subscription::get_class_name() ) );
|
1046 |
}
|
1047 |
}
|
1048 |
|
1515 |
* @author Vova Feldman (@svovaf)
|
1516 |
* @since 1.0.9
|
1517 |
*/
|
1518 |
+
private function register_constructor_hooks() {
|
1519 |
$this->_logger->entrance();
|
1520 |
|
1521 |
if ( is_admin() ) {
|
1522 |
+
add_action( 'admin_init', array( &$this, '_hook_action_links_and_register_account_hooks' ) );
|
1523 |
|
1524 |
if ( $this->is_plugin() ) {
|
1525 |
if ( self::is_plugin_install_page() && true !== fs_request_get_bool( 'fs_allow_updater_and_dialog' ) ) {
|
1560 |
} else {
|
1561 |
add_action( 'after_switch_theme', array( &$this, '_activate_theme_event_hook' ), 10, 2 );
|
1562 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1563 |
add_action( 'admin_footer', array( &$this, '_style_premium_theme' ) );
|
1564 |
}
|
1565 |
|
1579 |
*
|
1580 |
* @author Vova Feldman (@svovaf)
|
1581 |
*/
|
1582 |
+
if ( $this->is_plugin() &&
|
1583 |
+
$this->is_activation_mode( false ) &&
|
1584 |
+
0 == did_action( 'plugins_loaded' )
|
1585 |
+
) {
|
1586 |
add_action( 'plugins_loaded', array( &$this, '_plugins_loaded' ) );
|
1587 |
} else {
|
1588 |
// If was activated before, then it was already loaded before.
|
1639 |
add_action( 'admin_init', array( &$this, '_add_license_activation' ) );
|
1640 |
add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
|
1641 |
add_action( 'admin_init', array( &$this, '_add_beta_mode_update_handler' ) );
|
1642 |
+
add_action( 'admin_init', array( &$this, '_add_user_change_option' ) );
|
1643 |
|
1644 |
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
|
1645 |
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
|
1646 |
+
$this->add_ajax_action( 'set_data_debug_mode', array( &$this, '_set_data_debug_mode' ) );
|
1647 |
|
1648 |
if ( $this->_is_network_active && fs_is_network_admin() ) {
|
1649 |
$this->add_ajax_action( 'network_activate', array( &$this, '_network_activate_ajax_action' ) );
|
1685 |
}
|
1686 |
}
|
1687 |
|
1688 |
+
/**
|
1689 |
+
* Register the required hooks right after the settings parse is completed.
|
1690 |
+
*
|
1691 |
+
* @author Vova Feldman (@svovaf)
|
1692 |
+
* @since 2.3.1
|
1693 |
+
*/
|
1694 |
+
private function register_after_settings_parse_hooks() {
|
1695 |
+
if ( is_admin() &&
|
1696 |
+
$this->is_theme() &&
|
1697 |
+
$this->is_premium() &&
|
1698 |
+
! $this->has_active_valid_license()
|
1699 |
+
) {
|
1700 |
+
$this->add_ajax_action(
|
1701 |
+
'delete_theme_update_data',
|
1702 |
+
array( &$this, '_delete_theme_update_data_action' )
|
1703 |
+
);
|
1704 |
+
}
|
1705 |
+
|
1706 |
+
if ( $this->show_settings_with_tabs() ) {
|
1707 |
+
/**
|
1708 |
+
* Include the required hooks to capture the theme settings' page tabs
|
1709 |
+
* and cache them.
|
1710 |
+
*
|
1711 |
+
* @author Vova Feldman (@svovaf)
|
1712 |
+
* @since 1.2.2.7
|
1713 |
+
*/
|
1714 |
+
if ( ! $this->_cache->has_valid( 'tabs' ) ) {
|
1715 |
+
add_action( 'admin_footer', array( &$this, '_tabs_capture' ) );
|
1716 |
+
// Add license activation AJAX callback.
|
1717 |
+
$this->add_ajax_action( 'store_tabs', array( &$this, '_store_tabs_ajax_action' ) );
|
1718 |
+
|
1719 |
+
add_action( 'admin_enqueue_scripts', array( &$this, '_store_tabs_styles' ), 9999999 );
|
1720 |
+
}
|
1721 |
+
|
1722 |
+
add_action(
|
1723 |
+
'admin_footer',
|
1724 |
+
array( &$this, '_add_freemius_tabs' ),
|
1725 |
+
/**
|
1726 |
+
* The tabs JS code must be executed after the tabs capture logic (_tabs_capture()).
|
1727 |
+
* That's why the priority is 11 while the tabs capture logic is added
|
1728 |
+
* with priority 10.
|
1729 |
+
*
|
1730 |
+
* @author Vova Feldman (@svovaf)
|
1731 |
+
*/
|
1732 |
+
11
|
1733 |
+
);
|
1734 |
+
}
|
1735 |
+
|
1736 |
+
if ( ! self::is_ajax() ) {
|
1737 |
+
if ( ! $this->is_addon() || $this->is_only_premium() ) {
|
1738 |
+
add_action(
|
1739 |
+
( $this->_is_network_active && fs_is_network_admin() ? 'network_' : '' ) . 'admin_menu',
|
1740 |
+
array( &$this, '_prepare_admin_menu' ),
|
1741 |
+
WP_FS__LOWEST_PRIORITY
|
1742 |
+
);
|
1743 |
+
}
|
1744 |
+
}
|
1745 |
+
}
|
1746 |
+
|
1747 |
/**
|
1748 |
* Makes Freemius-related updates unavailable on the "Add Plugins" admin page (/plugin-install.php) so that
|
1749 |
* they won't interfere with the .org plugins' functionalities on that page (e.g. updating of a .org plugin).
|
2006 |
* @since 2.0.0
|
2007 |
*/
|
2008 |
function _hook_action_links_and_register_account_hooks() {
|
2009 |
+
$this->_add_tracking_links();
|
2010 |
|
2011 |
if ( self::is_plugins_page() && $this->is_plugin() ) {
|
2012 |
$this->hook_plugin_action_links();
|
2348 |
|
2349 |
if ( ! isset( $caller_map[ $caller_file_hash ] ) ) {
|
2350 |
foreach ( $all_plugins_paths as $plugin_path ) {
|
2351 |
+
if ( empty( $plugin_path ) ) {
|
2352 |
+
continue;
|
2353 |
+
}
|
2354 |
+
|
2355 |
if ( false !== strpos( $caller_file_path, fs_normalize_path( dirname( $plugin_path ) . '/' ) ) ) {
|
2356 |
$caller_map[ $caller_file_hash ] = fs_normalize_path( $plugin_path );
|
2357 |
break;
|
3030 |
* @return bool
|
3031 |
*/
|
3032 |
function is_activation_page() {
|
3033 |
+
if ( $this->_menu->is_activation_page( $this->show_opt_in_on_themes_page() ) ) {
|
3034 |
return true;
|
3035 |
}
|
3036 |
|
4732 |
|
4733 |
$this->parse_settings( $plugin_info );
|
4734 |
|
4735 |
+
$this->register_after_settings_parse_hooks();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4736 |
|
4737 |
if ( $this->should_stop_execution() ) {
|
4738 |
return;
|
4890 |
if (
|
4891 |
$this->_parent->is_registered() &&
|
4892 |
! $this->is_registered() &&
|
4893 |
+
$this->has_free_plan() &&
|
4894 |
/**
|
4895 |
* If not registered for add-on and the following conditions for the add-on are met, activate add-on account.
|
4896 |
* * Network active and in network admin - network activate add-on account.
|
5408 |
}
|
5409 |
}
|
5410 |
|
5411 |
+
/**
|
5412 |
+
* @author Vova Feldman (@svovaf)
|
5413 |
+
* @since 2.3.2
|
5414 |
+
*
|
5415 |
+
* @return bool
|
5416 |
+
*/
|
5417 |
+
function is_extensions_tracking_allowed() {
|
5418 |
+
return (true === $this->_storage->get( 'is_extensions_tracking_allowed', true ) );
|
5419 |
+
}
|
5420 |
+
|
5421 |
+
/**
|
5422 |
+
* @author Vova Feldman (@svovaf)
|
5423 |
+
* @since 2.3.2
|
5424 |
+
*/
|
5425 |
+
function _update_tracking_permission_callback() {
|
5426 |
+
$this->_logger->entrance();
|
5427 |
+
|
5428 |
+
$this->check_ajax_referer( 'update_tracking_permission' );
|
5429 |
+
|
5430 |
+
$is_enabled = fs_request_get_bool( 'is_enabled', null );
|
5431 |
+
|
5432 |
+
if ( ! is_bool( $is_enabled ) ) {
|
5433 |
+
self::shoot_ajax_failure();
|
5434 |
+
}
|
5435 |
+
|
5436 |
+
$permission = fs_request_get( 'permission' );
|
5437 |
+
|
5438 |
+
switch ( $permission ) {
|
5439 |
+
case 'extensions':
|
5440 |
+
$this->update_extensions_tracking_flag( $is_enabled );
|
5441 |
+
break;
|
5442 |
+
default:
|
5443 |
+
$permission = 'no_match';
|
5444 |
+
}
|
5445 |
+
|
5446 |
+
if ( 'no_match' === $permission ) {
|
5447 |
+
self::shoot_ajax_failure();
|
5448 |
+
}
|
5449 |
+
|
5450 |
+
self::shoot_ajax_success( array(
|
5451 |
+
'permissions' => array(
|
5452 |
+
$permission => $is_enabled,
|
5453 |
+
)
|
5454 |
+
) );
|
5455 |
+
}
|
5456 |
+
|
5457 |
+
/**
|
5458 |
+
* @author Leo Fajardo (@leorw)
|
5459 |
+
* @since 2.3.2
|
5460 |
+
*
|
5461 |
+
* @param bool $is_enabled
|
5462 |
+
*/
|
5463 |
+
private function update_extensions_tracking_flag( $is_enabled ) {
|
5464 |
+
$this->_storage->store( 'is_extensions_tracking_allowed', $is_enabled );
|
5465 |
+
}
|
5466 |
+
|
5467 |
/**
|
5468 |
* Parse plugin's settings (as defined by the plugin dev).
|
5469 |
*
|
5540 |
'is_live' => $this->get_bool_option( $plugin_info, 'is_live', true ),
|
5541 |
'affiliate_moderation' => $this->get_option( $plugin_info, 'has_affiliation' ),
|
5542 |
'bundle_id' => $this->get_option( $plugin_info, 'bundle_id', null ),
|
5543 |
+
'bundle_public_key' => $this->get_option( $plugin_info, 'bundle_public_key', null ),
|
5544 |
) );
|
5545 |
|
5546 |
if ( $plugin->is_updated() ) {
|
5612 |
|
5613 |
$this->_is_trial_require_payment = $this->get_bool_option( $plugin_info['trial'], 'is_require_payment', false );
|
5614 |
}
|
5615 |
+
|
5616 |
+
$this->_navigation = $this->get_option(
|
5617 |
+
$plugin_info,
|
5618 |
+
'navigation',
|
5619 |
+
$this->is_free_wp_org_theme() ?
|
5620 |
+
self::NAVIGATION_TABS :
|
5621 |
+
self::NAVIGATION_MENU
|
5622 |
+
);
|
5623 |
}
|
5624 |
|
5625 |
/**
|
5972 |
* @return Freemius[]
|
5973 |
*/
|
5974 |
function get_installed_addons() {
|
5975 |
+
if ( $this->is_addon() ) {
|
5976 |
+
// Add-on cannot have add-ons.
|
5977 |
+
return array();
|
5978 |
+
}
|
5979 |
+
|
5980 |
$installed_addons = array();
|
5981 |
+
|
5982 |
foreach ( self::$_instances as $instance ) {
|
5983 |
+
if ( $instance->is_addon_of( $this->_plugin->id ) ) {
|
5984 |
+
$installed_addons[] = $instance;
|
|
|
|
|
5985 |
}
|
5986 |
}
|
5987 |
|
6031 |
* @return bool
|
6032 |
*/
|
6033 |
function is_addon() {
|
6034 |
+
return (
|
6035 |
+
isset( $this->_plugin->parent_plugin_id ) &&
|
6036 |
+
is_numeric( $this->_plugin->parent_plugin_id )
|
6037 |
+
);
|
6038 |
+
}
|
6039 |
+
|
6040 |
+
/**
|
6041 |
+
* @author Vova Feldman (@svovaf)
|
6042 |
+
* @since 2.3.2
|
6043 |
+
*
|
6044 |
+
* @param number $parent_product_id
|
6045 |
+
*
|
6046 |
+
* @return bool
|
6047 |
+
*/
|
6048 |
+
function is_addon_of( $parent_product_id ) {
|
6049 |
+
return (
|
6050 |
+
$this->is_addon() &&
|
6051 |
+
$parent_product_id == $this->_plugin->parent_plugin_id
|
6052 |
+
);
|
6053 |
}
|
6054 |
|
6055 |
/**
|
6806 |
} else {
|
6807 |
$this->sync_install();
|
6808 |
}
|
6809 |
+
|
6810 |
+
$this->maybe_sync_install_user();
|
6811 |
}
|
6812 |
}
|
6813 |
}
|
7020 |
} else {
|
7021 |
$this->sync_install( array(), true );
|
7022 |
}
|
7023 |
+
|
7024 |
+
$this->maybe_sync_install_user();
|
7025 |
}
|
7026 |
}
|
7027 |
|
7116 |
|
7117 |
$this->_add_upgrade_action_link();
|
7118 |
|
7119 |
+
if ( ! ( ! $this->_is_network_active && fs_is_network_admin() ) &&
|
|
|
7120 |
(
|
7121 |
( true === $this->_storage->require_license_activation ) ||
|
7122 |
// Not registered nor anonymous.
|
7126 |
)
|
7127 |
) {
|
7128 |
if ( ! $this->is_pending_activation() ) {
|
7129 |
+
if ( ! $this->_menu->is_activation_page( $this->show_opt_in_on_themes_page() ) ) {
|
7130 |
/**
|
7131 |
* If a user visits any other admin page before activating the premium-only theme with a valid
|
7132 |
* license, reactivate the previous theme.
|
7193 |
}
|
7194 |
}
|
7195 |
|
7196 |
+
if ( $this->show_opt_in_on_themes_page() &&
|
7197 |
+
$this->is_activation_page()
|
7198 |
) {
|
7199 |
$this->_show_theme_activation_optin_dialog();
|
7200 |
}
|
7959 |
*
|
7960 |
* @return array
|
7961 |
*/
|
7962 |
+
function get_sites_for_network_level_optin() {
|
7963 |
$sites = array();
|
7964 |
$all_sites = self::get_sites();
|
7965 |
|
8089 |
foreach ( $sites as $site ) {
|
8090 |
$blog_id = self::get_site_blog_id( $site );
|
8091 |
|
8092 |
+
if ( $this->is_site_delegated_connection( $blog_id ) ) {
|
8093 |
+
continue;
|
8094 |
+
}
|
8095 |
+
|
8096 |
$install_id = $this->_delete_site( true, $blog_id );
|
8097 |
|
8098 |
// Clear all storage data.
|
8870 |
$include_themes = true,
|
8871 |
$include_blog_data = true
|
8872 |
) {
|
8873 |
+
if ( $this->is_extensions_tracking_allowed() ) {
|
8874 |
+
if ( ! defined( 'WP_FS__TRACK_PLUGINS' ) || false !== WP_FS__TRACK_PLUGINS ) {
|
8875 |
+
/**
|
8876 |
+
* @since 1.1.8 Also send plugin updates.
|
8877 |
+
*/
|
8878 |
+
if ( $include_plugins && ! isset( $override['plugins'] ) ) {
|
8879 |
+
$plugins = $this->get_plugins_data_for_api();
|
8880 |
+
if ( ! empty( $plugins ) ) {
|
8881 |
+
$override['plugins'] = $plugins;
|
8882 |
+
}
|
8883 |
}
|
8884 |
}
|
|
|
8885 |
|
8886 |
+
if ( ! defined( 'WP_FS__TRACK_THEMES' ) || false !== WP_FS__TRACK_THEMES ) {
|
8887 |
+
/**
|
8888 |
+
* @since 1.1.8 Also send themes updates.
|
8889 |
+
*/
|
8890 |
+
if ( $include_themes && ! isset( $override['themes'] ) ) {
|
8891 |
+
$themes = $this->get_themes_data_for_api();
|
8892 |
+
if ( ! empty( $themes ) ) {
|
8893 |
+
$override['themes'] = $themes;
|
8894 |
+
}
|
8895 |
}
|
8896 |
}
|
8897 |
}
|
9247 |
}
|
9248 |
}
|
9249 |
|
9250 |
+
/**
|
9251 |
+
* Syncs the install owner's data if needed (i.e., if the install owner is different from the loaded user).
|
9252 |
+
*
|
9253 |
+
* @author Leo Fajardo (@leorw)
|
9254 |
+
* @since 2.3.2
|
9255 |
+
*/
|
9256 |
+
private function maybe_sync_install_user() {
|
9257 |
+
if ( $this->_user->id == $this->_site->user_id ) {
|
9258 |
+
return;
|
9259 |
+
}
|
9260 |
+
|
9261 |
+
// Fetch user data and store if found.
|
9262 |
+
$this->sync_user_by_current_install();
|
9263 |
+
}
|
9264 |
+
|
9265 |
/**
|
9266 |
* Update install only if changed.
|
9267 |
*
|
9545 |
$fs = self::get_instance_by_file( $plugin_file );
|
9546 |
|
9547 |
if ( is_object( $fs ) ) {
|
9548 |
+
$fs->remove_sdk_reference();
|
9549 |
+
|
9550 |
self::require_plugin_essentials();
|
9551 |
|
9552 |
if ( is_plugin_active( $fs->_free_plugin_basename ) ||
|
9598 |
* @author Vova Feldman (@svovaf)
|
9599 |
* @since 1.0.1
|
9600 |
*
|
9601 |
+
* @param bool $reparse_plugin_metadata
|
9602 |
+
*
|
9603 |
* @return array
|
9604 |
*/
|
9605 |
+
function get_plugin_data( $reparse_plugin_metadata = false ) {
|
9606 |
+
if ( ! isset( $this->_plugin_data ) || $reparse_plugin_metadata ) {
|
9607 |
self::require_plugin_essentials();
|
9608 |
|
9609 |
if ( $this->is_plugin() ) {
|
9708 |
null;
|
9709 |
}
|
9710 |
|
9711 |
+
/**
|
9712 |
+
* @author Vova Feldman (@svovaf)
|
9713 |
+
* @since 2.3.1
|
9714 |
+
*
|
9715 |
+
* @return string|null Bundle public key.
|
9716 |
+
*/
|
9717 |
+
function get_bundle_public_key() {
|
9718 |
+
return isset( $this->_plugin->bundle_public_key ) ?
|
9719 |
+
$this->_plugin->bundle_public_key :
|
9720 |
+
null;
|
9721 |
+
}
|
9722 |
+
|
9723 |
/**
|
9724 |
* @author Vova Feldman (@svovaf)
|
9725 |
* @since 1.2.1.5
|
9742 |
$this->_plugin->id;
|
9743 |
}
|
9744 |
|
9745 |
+
/**
|
9746 |
+
* @author Vova Feldman (@svovaf)
|
9747 |
+
* @since 2.3.1
|
9748 |
+
*
|
9749 |
+
* @return string
|
9750 |
+
*/
|
9751 |
+
function get_usage_tracking_terms_url() {
|
9752 |
+
return $this->apply_filters(
|
9753 |
+
'usage_tracking_terms_url',
|
9754 |
+
"https://freemius.com/wordpress/usage-tracking/{$this->_plugin->id}/{$this->_slug}/"
|
9755 |
+
);
|
9756 |
+
}
|
9757 |
+
|
9758 |
+
/**
|
9759 |
+
* @author Vova Feldman (@svovaf)
|
9760 |
+
* @since 2.3.1
|
9761 |
+
*
|
9762 |
+
* @return string
|
9763 |
+
*/
|
9764 |
+
function get_eula_url() {
|
9765 |
+
return $this->apply_filters(
|
9766 |
+
'eula_url',
|
9767 |
+
"https://freemius.com/terms/{$this->_plugin->id}/{$this->_slug}/"
|
9768 |
+
);
|
9769 |
+
}
|
9770 |
+
|
9771 |
/**
|
9772 |
* @author Vova Feldman (@svovaf)
|
9773 |
* @since 1.0.1
|
9867 |
* @author Vova Feldman (@svovaf)
|
9868 |
* @since 1.0.0
|
9869 |
*
|
9870 |
+
* @param bool $reparse_plugin_metadata
|
9871 |
+
*
|
9872 |
* @return string
|
9873 |
*/
|
9874 |
+
function get_plugin_version( $reparse_plugin_metadata = false ) {
|
9875 |
$this->_logger->entrance();
|
9876 |
|
9877 |
+
$plugin_data = $this->get_plugin_data( $reparse_plugin_metadata );
|
9878 |
|
9879 |
$this->_logger->departure( 'Version = ' . $plugin_data['Version'] );
|
9880 |
|
9999 |
* @return array[number]FS_User
|
10000 |
*/
|
10001 |
static function get_all_users() {
|
10002 |
+
$users = self::maybe_get_entities_account_option( 'users', array() );
|
10003 |
|
10004 |
if ( ! is_array( $users ) ) {
|
10005 |
$users = array();
|
10043 |
$option_name = $module_type . '_' . $option_name;
|
10044 |
}
|
10045 |
|
10046 |
+
return self::maybe_get_entities_account_option( $option_name, array(), $network_level_or_blog_id );
|
10047 |
}
|
10048 |
|
10049 |
/**
|
10091 |
self::$_accounts->set_option( $option_name, $option_value, $store, $network_level_or_blog_id );
|
10092 |
}
|
10093 |
|
10094 |
+
/**
|
10095 |
+
* This method can also return non-entity or non-entities collection option like the `user_id_license_ids_map` option.
|
10096 |
+
*
|
10097 |
+
* @author Leo Fajardo (@leorw)
|
10098 |
+
* @since 2.3.1
|
10099 |
+
*
|
10100 |
+
* @param string $option_name
|
10101 |
+
* @param mixed $default
|
10102 |
+
* @param null|bool|int $network_level_or_blog_id When an integer, use the given blog storage. When `true` use the multisite storage (if there's a network). When `false`, use the current context blog storage. When `null`, the decision which storage to use (MS vs. Current S) will be handled internally and determined based on the $option (based on self::$_SITE_LEVEL_PARAMS).
|
10103 |
+
*
|
10104 |
+
* @return mixed|FS_Plugin[]|FS_User[]|FS_Site[]|FS_Plugin_License[]|FS_Plugin_Plan[]|FS_Plugin_Tag[]
|
10105 |
+
*/
|
10106 |
+
private static function maybe_get_entities_account_option( $option_name, $default = null, $network_level_or_blog_id = null ) {
|
10107 |
+
$option = self::$_accounts->get_option( $option_name, $default, $network_level_or_blog_id );
|
10108 |
+
|
10109 |
+
$class_name = '';
|
10110 |
+
|
10111 |
+
switch ( $option_name ) {
|
10112 |
+
case 'plugins':
|
10113 |
+
case 'themes':
|
10114 |
+
case 'addons':
|
10115 |
+
$class_name = FS_Plugin::get_class_name();
|
10116 |
+
break;
|
10117 |
+
case 'users':
|
10118 |
+
$class_name = FS_User::get_class_name();
|
10119 |
+
break;
|
10120 |
+
case 'sites':
|
10121 |
+
$class_name = FS_Site::get_class_name();
|
10122 |
+
break;
|
10123 |
+
case 'licenses':
|
10124 |
+
case 'all_licenses':
|
10125 |
+
$class_name = FS_Plugin_License::get_class_name();
|
10126 |
+
break;
|
10127 |
+
case 'plans':
|
10128 |
+
$class_name = FS_Plugin_Plan::get_class_name();
|
10129 |
+
break;
|
10130 |
+
case 'updates':
|
10131 |
+
$class_name = FS_Plugin_Tag::get_class_name();
|
10132 |
+
break;
|
10133 |
+
}
|
10134 |
+
|
10135 |
+
if ( empty( $class_name ) ) {
|
10136 |
+
return $option;
|
10137 |
+
}
|
10138 |
+
|
10139 |
+
return fs_get_entities( $option, $class_name );
|
10140 |
+
}
|
10141 |
+
|
10142 |
/**
|
10143 |
* @author Vova Feldman (@svovaf)
|
10144 |
* @since 1.0.6
|
10322 |
* @return FS_Plugin_Tag[]
|
10323 |
*/
|
10324 |
private static function get_all_updates() {
|
10325 |
+
$updates = self::maybe_get_entities_account_option( 'updates', array() );
|
10326 |
|
10327 |
if ( ! is_array( $updates ) ) {
|
10328 |
$updates = array();
|
10338 |
* @return array<number,FS_Plugin[]>|false
|
10339 |
*/
|
10340 |
private static function get_all_addons() {
|
10341 |
+
$addons = self::maybe_get_entities_account_option( 'addons', array() );
|
10342 |
|
10343 |
if ( ! is_array( $addons ) ) {
|
10344 |
$addons = array();
|
10351 |
* @author Vova Feldman (@svovaf)
|
10352 |
* @since 1.0.6
|
10353 |
*
|
10354 |
+
* @return number[]|false
|
10355 |
*/
|
10356 |
private static function get_all_account_addons() {
|
10357 |
$addons = self::$_accounts->get_option( 'account_addons', array() );
|
10452 |
* @author Vova Feldman (@svovaf)
|
10453 |
* @since 1.0.6
|
10454 |
*
|
10455 |
+
* @return number[]|false
|
10456 |
*/
|
10457 |
function get_account_addons() {
|
10458 |
$this->_logger->entrance();
|
10596 |
|
10597 |
if ( ! fs_is_network_admin() ) {
|
10598 |
// Get blog-level activated installations.
|
10599 |
+
$sites = self::maybe_get_entities_account_option( 'sites', array() );
|
10600 |
} else {
|
10601 |
$sites = null;
|
10602 |
|
10605 |
) {
|
10606 |
if ( FS_Site::is_valid_id( $addon_storage->network_install_blog_id ) ) {
|
10607 |
// Get network-level activated installations.
|
10608 |
+
$sites = self::maybe_get_entities_account_option(
|
10609 |
'sites',
|
10610 |
array(),
|
10611 |
$addon_storage->network_install_blog_id
|
10615 |
}
|
10616 |
|
10617 |
$addon_info = array(
|
10618 |
+
'is_connected' => false,
|
10619 |
+
'slug' => $slug,
|
10620 |
+
'title' => $addon->title,
|
10621 |
+
'is_whitelabeled' => $addon_storage->is_whitelabeled
|
10622 |
);
|
10623 |
|
10624 |
if ( ! $is_installed ) {
|
10664 |
|
10665 |
$addon_info['site'] = $site;
|
10666 |
|
10667 |
+
$plugins_data = self::maybe_get_entities_account_option( WP_FS__MODULE_TYPE_PLUGIN . 's', array() );
|
10668 |
if ( isset( $plugins_data[ $slug ] ) ) {
|
10669 |
$plugin_data = $plugins_data[ $slug ];
|
10670 |
|
10671 |
$addon_info['version'] = $plugin_data->version;
|
10672 |
}
|
10673 |
|
10674 |
+
$all_plans = self::maybe_get_entities_account_option( 'plans', array() );
|
10675 |
if ( isset( $all_plans[ $slug ] ) ) {
|
10676 |
$plans = $all_plans[ $slug ];
|
10677 |
|
10684 |
}
|
10685 |
}
|
10686 |
|
10687 |
+
$licenses = self::maybe_get_entities_account_option( 'all_licenses', array() );
|
10688 |
if ( is_array( $licenses ) && isset( $licenses[ $addon_id ] ) ) {
|
10689 |
foreach ( $licenses[ $addon_id ] as $license ) {
|
10690 |
if ( $license->id == $site->license_id ) {
|
10698 |
if ( isset( $addon_storage->subscriptions ) &&
|
10699 |
! empty( $addon_storage->subscriptions )
|
10700 |
) {
|
10701 |
+
$addon_subscriptions = fs_get_entities( $addon_storage->subscriptions, FS_Subscription::get_class_name() );
|
10702 |
+
|
10703 |
+
foreach ( $addon_subscriptions as $subscription ) {
|
10704 |
if ( $subscription->license_id == $site->license_id ) {
|
10705 |
$addon_info['subscription'] = $subscription;
|
10706 |
break;
|
10791 |
function is_premium() {
|
10792 |
/**
|
10793 |
* `$this->_plugin` will be `false` when `is_activation_mode` calls this method directly from the
|
10794 |
+
* `register_constructor_hooks` method.
|
10795 |
*
|
10796 |
* @author Leo Fajardo (@leorw)
|
10797 |
* @since 2.2.3
|
10888 |
return false;
|
10889 |
}
|
10890 |
|
10891 |
+
if ( ! $this->has_active_valid_license() ) {
|
10892 |
+
return false;
|
10893 |
+
}
|
10894 |
|
10895 |
+
if ( $this->_site->trial_plan_id != $this->_license->plan_id ) {
|
10896 |
+
return false;
|
10897 |
+
}
|
10898 |
+
|
10899 |
+
/**
|
10900 |
+
* @var FS_Subscription $subscription
|
10901 |
+
*/
|
10902 |
+
$subscription = $this->_get_subscription( $this->_license->id );
|
10903 |
+
|
10904 |
+
return ( is_object( $subscription ) && $subscription->is_active() );
|
10905 |
+
}
|
10906 |
+
|
10907 |
+
/**
|
10908 |
+
* Check if trial already utilized.
|
10909 |
+
*
|
10910 |
+
* @since 1.0.9
|
10911 |
*
|
10912 |
* @return bool
|
10913 |
*/
|
11036 |
* @author Vova Feldman (@svovaf)
|
11037 |
* @since 1.1.7.3
|
11038 |
*
|
11039 |
+
* @param bool $including_foreign
|
11040 |
+
*
|
11041 |
* @return bool
|
11042 |
*/
|
11043 |
+
function has_any_license( $including_foreign = true ) {
|
11044 |
+
if ( ! is_array( $this->_licenses ) || 0 === count( $this->_licenses ) ) {
|
11045 |
+
return false;
|
11046 |
+
}
|
11047 |
+
|
11048 |
+
if ( $including_foreign ) {
|
11049 |
+
return true;
|
11050 |
+
}
|
11051 |
+
|
11052 |
+
foreach ( $this->_licenses as $license ) {
|
11053 |
+
if ( $this->_user->id == $license->user_id ) {
|
11054 |
+
return true;
|
11055 |
+
}
|
11056 |
+
}
|
11057 |
+
|
11058 |
+
return false;
|
11059 |
}
|
11060 |
|
11061 |
/**
|
11201 |
|
11202 |
if ( $license instanceof FS_Plugin_License ) {
|
11203 |
$this->_licenses[] = $license;
|
11204 |
+
|
11205 |
+
$this->set_license( $license );
|
11206 |
+
|
11207 |
$this->_store_licenses();
|
11208 |
|
11209 |
return $license;
|
11428 |
|
11429 |
// Update current license.
|
11430 |
if ( is_object( $this->_license ) ) {
|
11431 |
+
$license = $this->_get_license_by_id( $this->_license->id );
|
11432 |
+
|
11433 |
+
if ( is_object( $license ) ) {
|
11434 |
+
/**
|
11435 |
+
* `$license` can be `false` in case a user change action has just been completed and this method
|
11436 |
+
* has synced the `$this->_licenses` collection for the new user. In this case, the
|
11437 |
+
* `$this->_licenses` collection may have only the newly activated license that is associated with
|
11438 |
+
* the new user. `set_license` will eventually be called in the same request by the logic that
|
11439 |
+
* follows outside this method which will detect that the install's license has been updated, and
|
11440 |
+
* then `_update_site_license` will be called which in turn will call `set_license`.
|
11441 |
+
*
|
11442 |
+
* @author Leo Fajardo (@leorw)
|
11443 |
+
* @since 2.3.2
|
11444 |
+
*/
|
11445 |
+
$this->set_license( $license );
|
11446 |
+
}
|
11447 |
}
|
11448 |
|
11449 |
return $this->_licenses;
|
11783 |
return true;
|
11784 |
}
|
11785 |
|
11786 |
+
/**
|
11787 |
+
* Activate a given license on a collection of blogs/sites that are not yet opted-in.
|
11788 |
+
*
|
11789 |
+
* @author Vova Feldman (@svovaf)
|
11790 |
+
* @since 2.3.1
|
11791 |
+
*
|
11792 |
+
* @param \FS_User $user
|
11793 |
+
* @param string $license_key
|
11794 |
+
*
|
11795 |
+
* @return true|mixed True if successful, otherwise, the API result.
|
11796 |
+
*/
|
11797 |
+
private function activate_license_on_site( FS_User $user, $license_key ) {
|
11798 |
+
return $this->activate_license_on_many_sites( $user, $license_key );
|
11799 |
+
}
|
11800 |
+
|
11801 |
/**
|
11802 |
* Activate a given license on a collection of blogs/sites that are not yet opted-in.
|
11803 |
*
|
11813 |
private function activate_license_on_many_sites(
|
11814 |
FS_User $user,
|
11815 |
$license_key,
|
11816 |
+
array $site_ids = array()
|
11817 |
) {
|
11818 |
$sites = array();
|
11819 |
foreach ( $site_ids as $site_id ) {
|
11837 |
}
|
11838 |
|
11839 |
$installs = array();
|
|
|
|
|
|
|
11840 |
|
11841 |
+
if ( $this->is_api_result_entity( $result ) ) {
|
11842 |
+
$install = new FS_Site( $result );
|
11843 |
|
11844 |
+
$this->_user = $user;
|
11845 |
|
11846 |
+
$this->_store_site( true, null, $install );
|
|
|
|
|
11847 |
|
11848 |
+
$this->_site = $install;
|
11849 |
+
|
11850 |
+
$this->reset_anonymous_mode();
|
11851 |
+
} else {
|
11852 |
+
foreach ( $result->installs as $install ) {
|
11853 |
+
$installs[] = new FS_Site( $install );
|
11854 |
+
}
|
11855 |
+
|
11856 |
+
// Map site addresses to their blog IDs.
|
11857 |
+
$address_to_blog_map = $this->get_address_to_blog_map();
|
11858 |
|
11859 |
+
$first_blog_id = null;
|
11860 |
|
11861 |
+
foreach ( $installs as $install ) {
|
11862 |
+
$address = trailingslashit( fs_strip_url_protocol( $install->url ) );
|
11863 |
+
$blog_id = $address_to_blog_map[ $address ];
|
11864 |
+
|
11865 |
+
$this->_store_site( true, $blog_id, $install );
|
11866 |
+
|
11867 |
+
$this->reset_anonymous_mode( $blog_id );
|
11868 |
+
|
11869 |
+
if ( is_null( $first_blog_id ) ) {
|
11870 |
+
$first_blog_id = $blog_id;
|
11871 |
+
}
|
11872 |
}
|
|
|
11873 |
|
11874 |
+
if ( ! FS_Site::is_valid_id( $this->_storage->network_install_blog_id ) ) {
|
11875 |
+
$this->_storage->network_install_blog_id = $first_blog_id;
|
11876 |
+
}
|
11877 |
}
|
11878 |
|
11879 |
return true;
|
11892 |
function _update_site_license( $new_license ) {
|
11893 |
$this->_logger->entrance();
|
11894 |
|
11895 |
+
/**
|
11896 |
+
* In case this call will be removed in the future, the `_sync_licenses()` method needs to be updated
|
11897 |
+
* accordingly so that it will also handle the case when an ownership change is done via license
|
11898 |
+
* activation.
|
11899 |
+
*
|
11900 |
+
* @author Leo Fajardo (@leorw)
|
11901 |
+
* @since 2.3.2
|
11902 |
+
*/
|
11903 |
+
$this->set_license( $new_license );
|
11904 |
|
11905 |
if ( ! is_object( $new_license ) ) {
|
11906 |
$this->_site->license_id = null;
|
11935 |
return $this->_license;
|
11936 |
}
|
11937 |
|
11938 |
+
/**
|
11939 |
+
* @author Vova Feldman (@svovaf)
|
11940 |
+
* @since 2.3.1
|
11941 |
+
*
|
11942 |
+
* @param \FS_Plugin_License $license
|
11943 |
+
*/
|
11944 |
+
private function set_license( FS_Plugin_License $license = null ) {
|
11945 |
+
$this->_license = $license;
|
11946 |
+
|
11947 |
+
$this->maybe_update_whitelabel_flag( $license );
|
11948 |
+
}
|
11949 |
+
|
11950 |
+
/**
|
11951 |
+
* @author Leo Fajardo (@leorw)
|
11952 |
+
* @since 2.3.1
|
11953 |
+
*
|
11954 |
+
* @param FS_Plugin_License $license
|
11955 |
+
*/
|
11956 |
+
private function maybe_update_whitelabel_flag( $license ) {
|
11957 |
+
$is_whitelabeled = isset( $this->_storage->is_whitelabeled ) ?
|
11958 |
+
$this->_storage->is_whitelabeled :
|
11959 |
+
false;
|
11960 |
+
|
11961 |
+
if ( is_object( $license ) ) {
|
11962 |
+
$license_user = self::_get_user_by_id( $license->user_id );
|
11963 |
+
|
11964 |
+
if ( ! is_object( $license_user ) ) {
|
11965 |
+
// If foreign license, do not update the `is_whitelabeled` flag.
|
11966 |
+
return;
|
11967 |
+
}
|
11968 |
+
|
11969 |
+
if ( $this->is_addon() ) {
|
11970 |
+
/**
|
11971 |
+
* Store the last license data to the parent's storage since it's needed only when showing the
|
11972 |
+
* "Start Debug" dialog which is triggered from the "Account" page. This way, there's no need to
|
11973 |
+
* iterate over the add-ons just to get the last license data.
|
11974 |
+
*/
|
11975 |
+
$this->get_parent_instance()->store_last_activated_license_data( $license, $license_user );
|
11976 |
+
} else {
|
11977 |
+
$this->store_last_activated_license_data( $license );
|
11978 |
+
}
|
11979 |
+
|
11980 |
+
if ( $license->is_whitelabeled ) {
|
11981 |
+
// Activated a developer license, data should be hidden.
|
11982 |
+
$is_whitelabeled = true;
|
11983 |
+
} else if ( $this->is_registered() && $this->_user->id == $license->user_id ) {
|
11984 |
+
// The account owner activated a regular license key, no need to hide the data.
|
11985 |
+
$is_whitelabeled = false;
|
11986 |
+
}
|
11987 |
+
}
|
11988 |
+
|
11989 |
+
$this->_storage->is_whitelabeled = $is_whitelabeled;
|
11990 |
+
|
11991 |
+
// Reset the whitelabeled status after update.
|
11992 |
+
$this->is_whitelabeled = null;
|
11993 |
+
if ( $this->is_addon() ) {
|
11994 |
+
$parent_fs = $this->get_parent_instance();
|
11995 |
+
|
11996 |
+
if ( is_object( $parent_fs ) ) {
|
11997 |
+
$parent_fs->is_whitelabeled = null;
|
11998 |
+
}
|
11999 |
+
}
|
12000 |
+
}
|
12001 |
+
|
12002 |
+
/**
|
12003 |
+
* @author Leo Fajardo (@leorw)
|
12004 |
+
* @since 2.3.1
|
12005 |
+
*
|
12006 |
+
* @param FS_Plugin_License $license
|
12007 |
+
* @param FS_User $license_user
|
12008 |
+
*/
|
12009 |
+
private function store_last_activated_license_data( FS_Plugin_License $license, $license_user = null ) {
|
12010 |
+
if ( ! is_object( $license_user ) ) {
|
12011 |
+
$this->_storage->last_license_key = md5( $license->secret_key );
|
12012 |
+
$this->_storage->last_license_user_id = null;
|
12013 |
+
} else {
|
12014 |
+
$this->_storage->last_license_user_key = md5( $license_user->secret_key );
|
12015 |
+
$this->_storage->last_license_user_id = $license_user->id;
|
12016 |
+
}
|
12017 |
+
}
|
12018 |
+
|
12019 |
+
/**
|
12020 |
+
* @author Leo Fajardo (@leorw)
|
12021 |
+
* @since 2.3.1
|
12022 |
+
*
|
12023 |
+
* @param bool $ignore_data_debug_mode
|
12024 |
+
*
|
12025 |
+
* @return bool
|
12026 |
+
*/
|
12027 |
+
function is_whitelabeled_by_flag( $ignore_data_debug_mode = false ) {
|
12028 |
+
if ( true !== $this->_storage->is_whitelabeled ) {
|
12029 |
+
return false;
|
12030 |
+
} else if ( $ignore_data_debug_mode ) {
|
12031 |
+
return true;
|
12032 |
+
}
|
12033 |
+
|
12034 |
+
$fs = $this->is_addon() ?
|
12035 |
+
$this->get_parent_instance() :
|
12036 |
+
$this;
|
12037 |
+
|
12038 |
+
return ! $fs->is_data_debug_mode();
|
12039 |
+
}
|
12040 |
+
|
12041 |
+
/**
|
12042 |
+
* @author Leo Fajardo (@leorw)
|
12043 |
+
* @since 2.3.1
|
12044 |
+
*
|
12045 |
+
* @return number
|
12046 |
+
*/
|
12047 |
+
function get_last_license_user_id() {
|
12048 |
+
return ( FS_User::is_valid_id( $this->_storage->last_license_user_id ) ) ?
|
12049 |
+
$this->_storage->last_license_user_id :
|
12050 |
+
null;
|
12051 |
+
}
|
12052 |
+
|
12053 |
+
/**
|
12054 |
+
* @author Leo Fajardo (@leorw)
|
12055 |
+
* @since 2.3.1
|
12056 |
+
*
|
12057 |
+
* @param int $blog_id
|
12058 |
+
* @param bool $ignore_data_debug_mode
|
12059 |
+
*
|
12060 |
+
* @return bool
|
12061 |
+
*/
|
12062 |
+
function is_whitelabeled( $ignore_data_debug_mode = false, $blog_id = null ) {
|
12063 |
+
if ( ! is_null( $blog_id ) ) {
|
12064 |
+
$this->switch_to_blog( $blog_id );
|
12065 |
+
}
|
12066 |
+
|
12067 |
+
if ( ! is_null( $this->is_whitelabeled ) ) {
|
12068 |
+
$is_whitelabeled = $this->is_whitelabeled;
|
12069 |
+
} else {
|
12070 |
+
$is_whitelabeled = false;
|
12071 |
+
|
12072 |
+
$is_whitelabeled_flag = $this->is_whitelabeled_by_flag( true );
|
12073 |
+
|
12074 |
+
if ( ! $this->has_addons() ) {
|
12075 |
+
$is_whitelabeled = $is_whitelabeled_flag;
|
12076 |
+
} else if ( $is_whitelabeled_flag ) {
|
12077 |
+
$is_whitelabeled = true;
|
12078 |
+
} else {
|
12079 |
+
$addon_ids = $this->get_updated_account_addons();
|
12080 |
+
$installed_addons = $this->get_installed_addons();
|
12081 |
+
foreach ( $installed_addons as $fs_addon ) {
|
12082 |
+
$addon_ids[] = $fs_addon->get_id();
|
12083 |
+
}
|
12084 |
+
|
12085 |
+
if ( ! empty( $addon_ids ) ) {
|
12086 |
+
$addon_ids = array_unique( $addon_ids );
|
12087 |
+
|
12088 |
+
$is_network_level = (
|
12089 |
+
fs_is_network_admin() &&
|
12090 |
+
$this->is_network_active()
|
12091 |
+
);
|
12092 |
+
|
12093 |
+
foreach ( $addon_ids as $addon_id ) {
|
12094 |
+
$addon = $this->get_addon( $addon_id );
|
12095 |
+
|
12096 |
+
if ( ! is_object( $addon ) ) {
|
12097 |
+
continue;
|
12098 |
+
}
|
12099 |
+
|
12100 |
+
$addon_storage = FS_Storage::instance( WP_FS__MODULE_TYPE_PLUGIN, $addon->slug );
|
12101 |
+
$fs_addon = $this->is_addon_activated( $addon_id ) ?
|
12102 |
+
self::get_addon_instance( $addon_id ) :
|
12103 |
+
null;
|
12104 |
+
|
12105 |
+
$was_addon_network_activated = false;
|
12106 |
+
|
12107 |
+
if ( is_object( $fs_addon ) ) {
|
12108 |
+
$was_addon_network_activated = $fs_addon->is_network_active();
|
12109 |
+
} else if ( $is_network_level ) {
|
12110 |
+
$was_addon_network_activated = $addon_storage->get( 'was_plugin_loaded', false, true );
|
12111 |
+
}
|
12112 |
+
|
12113 |
+
$network_delegated_connection = (
|
12114 |
+
$was_addon_network_activated &&
|
12115 |
+
$addon_storage->get( 'is_delegated_connection', false, true )
|
12116 |
+
);
|
12117 |
+
|
12118 |
+
if (
|
12119 |
+
$is_network_level &&
|
12120 |
+
( ! $was_addon_network_activated || $network_delegated_connection )
|
12121 |
+
) {
|
12122 |
+
$sites = self::get_sites();
|
12123 |
+
|
12124 |
+
/**
|
12125 |
+
* If in network admin area and the add-on was not network-activated or network-activated
|
12126 |
+
* and network-delegated, find any add-on whose is_whitelabeled flag is true.
|
12127 |
+
*/
|
12128 |
+
foreach ( $sites as $site ) {
|
12129 |
+
$site_info = $this->get_site_info( $site );
|
12130 |
+
|
12131 |
+
if ( $addon_storage->get( 'is_whitelabeled', false, $site_info['blog_id'] ) ) {
|
12132 |
+
$is_whitelabeled = true;
|
12133 |
+
break;
|
12134 |
+
}
|
12135 |
+
}
|
12136 |
+
|
12137 |
+
if ( $is_whitelabeled ) {
|
12138 |
+
break;
|
12139 |
+
}
|
12140 |
+
} else {
|
12141 |
+
/**
|
12142 |
+
* This will be executed when any of the following is met:
|
12143 |
+
* 1. Add-on was network-activated, not network-delegated, and in network admin area.
|
12144 |
+
* 2. Add-on was network-activated, network-delegated, and in site admin area.
|
12145 |
+
* 3. Add-on was not network-activated and in site admin area.
|
12146 |
+
*/
|
12147 |
+
if ( true === $addon_storage->is_whitelabeled ) {
|
12148 |
+
$is_whitelabeled = true;
|
12149 |
+
break;
|
12150 |
+
}
|
12151 |
+
}
|
12152 |
+
}
|
12153 |
+
}
|
12154 |
+
}
|
12155 |
+
|
12156 |
+
$this->is_whitelabeled = $is_whitelabeled;
|
12157 |
+
|
12158 |
+
if ( ! $is_whitelabeled || ! $this->is_data_debug_mode() ) {
|
12159 |
+
$this->_admin_notices->remove_sticky( 'data_debug_mode_enabled' );
|
12160 |
+
}
|
12161 |
+
|
12162 |
+
if ( ! is_null( $blog_id ) ) {
|
12163 |
+
$this->restore_current_blog();
|
12164 |
+
}
|
12165 |
+
}
|
12166 |
+
|
12167 |
+
return (
|
12168 |
+
$is_whitelabeled &&
|
12169 |
+
( $ignore_data_debug_mode || ! $this->is_data_debug_mode() )
|
12170 |
+
);
|
12171 |
+
}
|
12172 |
+
|
12173 |
/**
|
12174 |
* Sync site's subscription.
|
12175 |
*
|
12227 |
return null;
|
12228 |
}
|
12229 |
|
12230 |
+
foreach ( fs_get_entities( $this->_storage->subscriptions, FS_Subscription::get_class_name() ) as $subscription ) {
|
12231 |
if ( $subscription->license_id == $license_id ) {
|
12232 |
return $subscription;
|
12233 |
}
|
12253 |
return;
|
12254 |
}
|
12255 |
|
12256 |
+
$subscriptions = fs_get_entities( $this->_storage->subscriptions, FS_Subscription::get_class_name() );
|
12257 |
|
12258 |
$updated_subscription = false;
|
12259 |
foreach ( $subscriptions as $key => $existing_subscription ) {
|
12348 |
}
|
12349 |
|
12350 |
$current_plan_order = - 1;
|
12351 |
+
$required_plan_order = PHP_INT_MAX;
|
12352 |
for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
|
12353 |
if ( $plan === $this->_plans[ $i ]->name ) {
|
12354 |
$required_plan_order = $i;
|
12366 |
* @author Vova Feldman (@svovaf)
|
12367 |
* @since 1.2.1.7
|
12368 |
*
|
12369 |
+
* @param bool $double_check In some cases developers prefer to release their paid offering as premium-only, even though there is a free version. For those cases, looking at the 'is_premium_only' value isn't enough because the result will return false even when the product has only signle paid plan.
|
12370 |
+
*
|
12371 |
* @return bool
|
12372 |
*/
|
12373 |
+
function is_single_plan( $double_check = false ) {
|
12374 |
$this->_logger->entrance();
|
12375 |
|
12376 |
if ( ! $this->is_registered() ||
|
12380 |
return true;
|
12381 |
}
|
12382 |
|
12383 |
+
$has_free_plan = $this->has_free_plan();
|
12384 |
+
|
12385 |
+
if ( ! $has_free_plan && $double_check ) {
|
12386 |
+
foreach ( $this->_plans as $plan ) {
|
12387 |
+
if ( $plan->is_free() ) {
|
12388 |
+
$has_free_plan = true;
|
12389 |
+
break;
|
12390 |
+
}
|
12391 |
+
}
|
12392 |
+
}
|
12393 |
+
|
12394 |
+
return ( 1 === ( count( $this->_plans ) - ( $has_free_plan ? 1 : 0 ) ) );
|
12395 |
}
|
12396 |
|
12397 |
/**
|
12505 |
fs_require_template( 'forms/resend-key.php', $vars );
|
12506 |
}
|
12507 |
|
12508 |
+
/**
|
12509 |
+
* Returns a collection of IDs of installs that are associated with the context product and its add-ons, and activated with foreign licenses.
|
12510 |
+
*
|
12511 |
+
* @author Leo Fajardo (@leorw)
|
12512 |
+
* @since 2.3.2
|
12513 |
+
*
|
12514 |
+
* @return number[]
|
12515 |
+
*/
|
12516 |
+
function get_installs_ids_with_foreign_licenses() {
|
12517 |
+
$installs = array();
|
12518 |
+
|
12519 |
+
if (
|
12520 |
+
is_object( $this->_license ) &&
|
12521 |
+
$this->_site->user_id != $this->_license->user_id
|
12522 |
+
) {
|
12523 |
+
$installs[] = $this->_site->id;
|
12524 |
+
}
|
12525 |
+
|
12526 |
+
/**
|
12527 |
+
* Also try to get foreign licenses for the context product's add-ons.
|
12528 |
+
*/
|
12529 |
+
$installs_by_slug_map = $this->get_parent_and_addons_installs_info();
|
12530 |
+
|
12531 |
+
foreach ( $installs_by_slug_map as $slug => $install_info ) {
|
12532 |
+
if ( $slug == $this->get_slug() ) {
|
12533 |
+
continue;
|
12534 |
+
}
|
12535 |
+
|
12536 |
+
$install = $install_info['install'];
|
12537 |
+
$license = $install_info['license'];
|
12538 |
+
|
12539 |
+
if (
|
12540 |
+
is_object( $license ) &&
|
12541 |
+
$install->user_id != $license->user_id
|
12542 |
+
) {
|
12543 |
+
$installs[] = $install->id;
|
12544 |
+
}
|
12545 |
+
}
|
12546 |
+
|
12547 |
+
return $installs;
|
12548 |
+
}
|
12549 |
+
|
12550 |
+
/**
|
12551 |
+
* Displays the "Change User" dialog box when the user clicks on the "Change User" button on the "Account" page.
|
12552 |
+
*
|
12553 |
+
* @author Leo Fajardo (@leorw)
|
12554 |
+
* @since 2.3.2
|
12555 |
+
*
|
12556 |
+
* @param number[] $install_ids
|
12557 |
+
*/
|
12558 |
+
function _add_user_change_dialog_box( $install_ids ) {
|
12559 |
+
$vars = array(
|
12560 |
+
'id' => $this->_module_id,
|
12561 |
+
'license_owners' => $this->fetch_installs_licenses_owners_data( $install_ids )
|
12562 |
+
);
|
12563 |
+
|
12564 |
+
fs_require_template( 'forms/user-change.php', $vars );
|
12565 |
+
}
|
12566 |
+
|
12567 |
+
/**
|
12568 |
+
* @author Leo Fajardo (@leorw)
|
12569 |
+
* @since 2.3.1
|
12570 |
+
*/
|
12571 |
+
function _add_data_debug_mode_dialog_box() {
|
12572 |
+
$vars = array(
|
12573 |
+
'id' => $this->_module_id,
|
12574 |
+
);
|
12575 |
+
|
12576 |
+
fs_require_template( 'forms/data-debug-mode.php', $vars );
|
12577 |
+
}
|
12578 |
+
|
12579 |
/**
|
12580 |
* Displays a subscription cancellation dialog box when the user clicks on the "Deactivate License"
|
12581 |
* link on the "Account" page or deactivates a plugin and there's an active subscription that is
|
12594 |
// Subscription cancellation dialog box is currently not supported for multisite networks.
|
12595 |
return array();
|
12596 |
}
|
12597 |
+
|
12598 |
+
if ( $this->is_whitelabeled() ) {
|
12599 |
+
return array();
|
12600 |
+
}
|
12601 |
|
12602 |
$license = $this->_get_license();
|
12603 |
|
12685 |
return;
|
12686 |
}
|
12687 |
|
12688 |
+
if (
|
12689 |
+
$this->has_premium_version() &&
|
12690 |
+
! $this->is_premium() &&
|
12691 |
+
/**
|
12692 |
+
* Also handle the case when an upgrade was made using the free version.
|
12693 |
+
*
|
12694 |
+
* @author Leo Fajardo (@leorw)
|
12695 |
+
* @since 2.3.2
|
12696 |
+
*/
|
12697 |
+
! is_object( $this->_get_license() )
|
12698 |
+
) {
|
12699 |
+
// Only add license activation logic to the premium version, or in case of a serviceware plugin, also in the free version.
|
12700 |
return;
|
12701 |
}
|
12702 |
|
12722 |
$this->add_ajax_action( 'resend_license_key', array( &$this, '_resend_license_key_ajax_action' ) );
|
12723 |
}
|
12724 |
|
12725 |
+
/**
|
12726 |
+
* Prepares page to include all required UI and logic for the "Change User" dialog.
|
12727 |
+
*
|
12728 |
+
* @author Leo Fajardo (@leorw)
|
12729 |
+
* @since 2.3.2
|
12730 |
+
*/
|
12731 |
+
function _add_user_change_option() {
|
12732 |
+
if ( ! $this->should_handle_user_change() ) {
|
12733 |
+
return;
|
12734 |
+
}
|
12735 |
+
|
12736 |
+
if ( empty( $this->get_installs_ids_with_foreign_licenses() ) ) {
|
12737 |
+
// Handle user change only when the parent product or one of its add-ons is activated with a foreign license.
|
12738 |
+
return;
|
12739 |
+
}
|
12740 |
+
|
12741 |
+
// Add user change AJAX handler.
|
12742 |
+
$this->add_ajax_action( 'change_user', array( &$this, '_user_change_ajax_action' ) );
|
12743 |
+
}
|
12744 |
+
|
12745 |
+
/**
|
12746 |
+
* @author Leo Fajardo (@leorw)
|
12747 |
+
* @since 2.3.2
|
12748 |
+
*/
|
12749 |
+
function should_handle_user_change() {
|
12750 |
+
if ( ! $this->is_user_admin() ) {
|
12751 |
+
// Only admins can change user.
|
12752 |
+
return false;
|
12753 |
+
}
|
12754 |
+
|
12755 |
+
if ( $this->is_addon() ) {
|
12756 |
+
return false;
|
12757 |
+
}
|
12758 |
+
|
12759 |
+
if ( ! $this->is_registered() ) {
|
12760 |
+
return false;
|
12761 |
+
}
|
12762 |
+
|
12763 |
+
if (
|
12764 |
+
$this->is_network_active() &&
|
12765 |
+
( fs_is_network_admin() || ! $this->is_site_delegated_connection() )
|
12766 |
+
) {
|
12767 |
+
// Handle only on site-level "Account" section for now.
|
12768 |
+
return false;
|
12769 |
+
}
|
12770 |
+
|
12771 |
+
return true;
|
12772 |
+
}
|
12773 |
+
|
12774 |
/**
|
12775 |
* @author Leo Fajardo (@leorw)
|
12776 |
* @since 2.0.2
|
12876 |
array(),
|
12877 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
12878 |
fs_request_get( 'blog_id', null ),
|
12879 |
+
fs_request_get( 'module_id', null, 'post' ),
|
12880 |
+
fs_request_get( 'user_id', null ),
|
12881 |
+
fs_request_get_bool( 'is_extensions_tracking_allowed', true )
|
12882 |
);
|
12883 |
|
12884 |
echo json_encode( $result );
|
12886 |
exit;
|
12887 |
}
|
12888 |
|
12889 |
+
/**
|
12890 |
+
* User change WP AJAX handler.
|
12891 |
+
*
|
12892 |
+
* @author Leo Fajardo (@leorw)
|
12893 |
+
* @since 2.3.2
|
12894 |
+
*/
|
12895 |
+
function _user_change_ajax_action() {
|
12896 |
+
$this->_logger->entrance();
|
12897 |
+
|
12898 |
+
$this->check_ajax_referer( 'change_user' );
|
12899 |
+
|
12900 |
+
$new_email_address = trim( fs_request_get( 'email_address', '' ) );
|
12901 |
+
$new_user_id = fs_request_get( 'user_id' );
|
12902 |
+
|
12903 |
+
if ( empty( $new_email_address ) && ! FS_User::is_valid_id( $new_user_id ) ) {
|
12904 |
+
self::shoot_ajax_failure( fs_text_inline( 'Invalid new user ID or email address.', 'invalid-new-user-id-or-email', $this->get_slug() ) );
|
12905 |
+
}
|
12906 |
+
|
12907 |
+
$params = array();
|
12908 |
+
|
12909 |
+
if ( ! empty( $new_email_address ) ) {
|
12910 |
+
$params['user_email'] = $new_email_address;
|
12911 |
+
} else {
|
12912 |
+
$params['user_id'] = $new_user_id;
|
12913 |
+
}
|
12914 |
+
|
12915 |
+
$installs_info_by_slug_map = $this->get_parent_and_addons_installs_info();
|
12916 |
+
$install_ids = array();
|
12917 |
+
|
12918 |
+
foreach ( $installs_info_by_slug_map as $slug => $install_info ) {
|
12919 |
+
$install_ids[ $slug ] = $install_info['install']->id;
|
12920 |
+
}
|
12921 |
+
|
12922 |
+
$params['install_ids'] = implode( ',', array_values( $install_ids ) );
|
12923 |
+
|
12924 |
+
$install = $this->get_api_site_scope()->call( $this->add_show_pending( '/' ), 'put', $params );
|
12925 |
+
|
12926 |
+
if ( FS_Api::is_api_error( $install ) ) {
|
12927 |
+
$error = '';
|
12928 |
+
|
12929 |
+
if ( is_object( $install ) ) {
|
12930 |
+
switch ( $install->error->code ) {
|
12931 |
+
case 'user_exist':
|
12932 |
+
$error = (
|
12933 |
+
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...' .
|
12934 |
+
$this->get_text_inline( 'Sorry, we could not complete the email update. Another user with the same email is already registered.', 'user-exist-message' ) . ' ' .
|
12935 |
+
sprintf( $this->get_text_inline( 'If you would like to give up the ownership of the %s\'s account to %s click the Change Ownership button.', 'user-exist-message_ownership' ), $this->_module_type, '<b>' . $new_email_address . '</b>' ) .
|
12936 |
+
sprintf(
|
12937 |
+
'<a style="line-height: 40px;" href="%s"><button class="button button-primary">%s ➜</button></a>',
|
12938 |
+
$this->get_account_url( 'change_owner', array(
|
12939 |
+
'state' => 'init',
|
12940 |
+
'candidate_email' => $new_email_address
|
12941 |
+
) ),
|
12942 |
+
$this->get_text_inline( 'Change Ownership', 'change-ownership' )
|
12943 |
+
)
|
12944 |
+
);
|
12945 |
+
break;
|
12946 |
+
}
|
12947 |
+
}
|
12948 |
+
|
12949 |
+
if ( empty( $error ) ) {
|
12950 |
+
$error = FS_Api::is_api_error_object( $install ) ?
|
12951 |
+
$install->error->message :
|
12952 |
+
var_export( $install->error, true );
|
12953 |
+
}
|
12954 |
+
|
12955 |
+
self::shoot_ajax_failure( $error );
|
12956 |
+
} else {
|
12957 |
+
if (
|
12958 |
+
// If successful ownership change.
|
12959 |
+
$this->get_user()->id != $install->user_id ||
|
12960 |
+
! empty( $new_email_address )
|
12961 |
+
) {
|
12962 |
+
$this->complete_ownership_change_by_license( $install->user_id, $install_ids );
|
12963 |
+
}
|
12964 |
+
}
|
12965 |
+
|
12966 |
+
self::shoot_ajax_success();
|
12967 |
+
}
|
12968 |
+
|
12969 |
/**
|
12970 |
* A helper method to activate migrated licenses. If the product is network activated and integrated, the method will network activate the license.
|
12971 |
*
|
12989 |
$is_marketing_allowed = null,
|
12990 |
$plugin_id = null
|
12991 |
) {
|
12992 |
+
$this->_logger->entrance();
|
12993 |
+
|
12994 |
+
$result = $this->activate_license(
|
12995 |
$license_key,
|
12996 |
$this->is_network_active() ?
|
12997 |
$this->get_sites_for_network_level_optin() :
|
13000 |
null,
|
13001 |
$plugin_id
|
13002 |
);
|
13003 |
+
|
13004 |
+
// No need to show the sticky after license activation notice after migrating a license.
|
13005 |
+
$this->_admin_notices->remove_sticky( 'plan_upgraded' );
|
13006 |
+
|
13007 |
+
return $result;
|
13008 |
}
|
13009 |
|
13010 |
/**
|
13018 |
* @param null|bool $is_marketing_allowed
|
13019 |
* @param null|int $blog_id
|
13020 |
* @param null|number $plugin_id
|
13021 |
+
* @param null|number $license_owner_id
|
13022 |
*
|
13023 |
* @return array {
|
13024 |
* @var bool $success
|
13031 |
$sites = array(),
|
13032 |
$is_marketing_allowed = null,
|
13033 |
$blog_id = null,
|
13034 |
+
$plugin_id = null,
|
13035 |
+
$license_owner_id = null,
|
13036 |
+
$is_extensions_tracking_allowed = true
|
13037 |
) {
|
13038 |
$this->_logger->entrance();
|
13039 |
|
13048 |
$this :
|
13049 |
$this->get_addon_instance( $plugin_id );
|
13050 |
|
13051 |
+
$this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
|
13052 |
+
|
13053 |
$error = false;
|
13054 |
$next_page = false;
|
13055 |
|
13056 |
$has_valid_blog_id = is_numeric( $blog_id );
|
13057 |
|
13058 |
+
$user = null;
|
13059 |
+
|
13060 |
+
if ( $fs->is_addon() && $fs->get_parent_instance()->is_registered() ) {
|
13061 |
+
/**
|
13062 |
+
* When activating an add-on's license and the parent is opted-in, activate the license with the parent's opted-in user context.
|
13063 |
+
*
|
13064 |
+
* @author Vova Feldman (@svovaf)
|
13065 |
+
*/
|
13066 |
+
$user = $fs->get_parent_instance()->get_current_or_network_user();
|
13067 |
+
} else if ( $fs->is_registered() ) {
|
13068 |
+
$user = $fs->get_current_or_network_user();
|
13069 |
+
}
|
13070 |
+
|
13071 |
+
if ( is_object( $user ) ) {
|
13072 |
if ( fs_is_network_admin() && ! $has_valid_blog_id ) {
|
13073 |
// If no specific blog ID was provided, activate the license for all sites in the network.
|
13074 |
$blog_2_install_map = array();
|
13079 |
continue;
|
13080 |
}
|
13081 |
|
13082 |
+
$install = $fs->get_install_by_blog_id( $site['blog_id'] );
|
13083 |
|
13084 |
if ( is_object( $install ) ) {
|
13085 |
$blog_2_install_map[ $site['blog_id'] ] = $install;
|
13088 |
}
|
13089 |
}
|
13090 |
|
|
|
|
|
13091 |
if ( ! empty( $blog_2_install_map ) ) {
|
13092 |
+
$result = $fs->activate_license_on_many_installs( $user, $license_key, $blog_2_install_map );
|
13093 |
|
13094 |
if ( true !== $result ) {
|
13095 |
$error = FS_Api::is_api_error_object( $result ) ?
|
13099 |
}
|
13100 |
|
13101 |
if ( empty( $error ) && ! empty( $site_ids ) ) {
|
13102 |
+
$result = $fs->activate_license_on_many_sites( $user, $license_key, $site_ids );
|
13103 |
|
13104 |
if ( true !== $result ) {
|
13105 |
$error = FS_Api::is_api_error_object( $result ) ?
|
13115 |
*
|
13116 |
* @author Leo Fajardo (@leorw)
|
13117 |
*/
|
13118 |
+
$fs->switch_to_blog( $blog_id );
|
13119 |
}
|
13120 |
|
13121 |
+
if ( $fs->is_registered() ) {
|
13122 |
+
$params = array(
|
13123 |
+
'license_key' => $fs->apply_filters( 'license_key', $license_key )
|
13124 |
+
);
|
13125 |
|
13126 |
+
$install_ids = array();
|
|
|
|
|
13127 |
|
13128 |
+
$change_owner = FS_User::is_valid_id( $license_owner_id );
|
13129 |
|
13130 |
+
if ( $change_owner ) {
|
13131 |
+
$params['user_id'] = $license_owner_id;
|
13132 |
+
|
13133 |
+
$installs_info_by_slug_map = $fs->get_parent_and_addons_installs_info();
|
13134 |
+
|
13135 |
+
foreach ( $installs_info_by_slug_map as $slug => $install_info ) {
|
13136 |
+
$install_ids[ $slug ] = $install_info['install']->id;
|
13137 |
+
}
|
13138 |
+
|
13139 |
+
$params['install_ids'] = implode( ',', array_values( $install_ids ) );
|
13140 |
+
}
|
13141 |
+
|
13142 |
+
$api = $fs->get_api_site_scope();
|
13143 |
+
|
13144 |
+
$install = $api->call( $fs->add_show_pending( '/' ), 'put', $params );
|
13145 |
+
|
13146 |
+
if ( FS_Api::is_api_error( $install ) ) {
|
13147 |
+
$error = FS_Api::is_api_error_object( $install ) ?
|
13148 |
+
$install->error->message :
|
13149 |
+
var_export( $install->error, true );
|
13150 |
+
} else {
|
13151 |
+
$fs->reconnect_locally( $has_valid_blog_id );
|
13152 |
+
|
13153 |
+
if (
|
13154 |
+
$change_owner &&
|
13155 |
+
// If successful ownership change.
|
13156 |
+
$fs->get_user()->id != $install->user_id
|
13157 |
+
) {
|
13158 |
+
$fs->complete_ownership_change_by_license( $install->user_id, $install_ids );
|
13159 |
+
}
|
13160 |
+
}
|
13161 |
+
} else /* ( $fs->is_addon() && $fs->get_parent_instance()->is_registered() ) */ {
|
13162 |
+
$result = $fs->activate_license_on_site( $user, $license_key );
|
13163 |
+
|
13164 |
+
if ( true !== $result ) {
|
13165 |
+
$error = FS_Api::is_api_error_object( $result ) ?
|
13166 |
+
$result->error->message :
|
13167 |
+
var_export( $result, true );
|
13168 |
+
}
|
13169 |
}
|
13170 |
}
|
13171 |
|
13172 |
if ( empty( $error ) ) {
|
13173 |
+
$fs->network_upgrade_mode_completed();
|
13174 |
|
13175 |
$fs->_sync_license( true, $has_valid_blog_id );
|
13176 |
|
13177 |
+
$this->maybe_sync_install_user();
|
13178 |
+
|
13179 |
$next_page = $fs->is_addon() ?
|
13180 |
$fs->get_parent_instance()->get_account_url() :
|
13181 |
$fs->get_account_url();
|
13224 |
continue;
|
13225 |
}
|
13226 |
|
13227 |
+
if ( $fs->is_installed_on_site( $blog_id ) ) {
|
13228 |
// Site was already connected before.
|
13229 |
continue;
|
13230 |
}
|
13231 |
|
13232 |
+
if ( $fs->is_site_delegated_connection( $blog_id ) ) {
|
13233 |
// Site's connection was delegated.
|
13234 |
continue;
|
13235 |
}
|
13236 |
|
13237 |
+
if ( $fs->is_anonymous_site( $blog_id ) ) {
|
13238 |
// Site connection was already skipped.
|
13239 |
continue;
|
13240 |
}
|
13243 |
}
|
13244 |
|
13245 |
if ( ! empty( $pending_sites ) ) {
|
13246 |
+
if ( $fs->is_freemium() && $fs->is_enable_anonymous() ) {
|
13247 |
+
$fs->skip_connection( $pending_sites );
|
13248 |
} else {
|
13249 |
+
$fs->delegate_connection( $pending_sites );
|
13250 |
}
|
13251 |
}
|
13252 |
}
|
13253 |
}
|
13254 |
}
|
13255 |
|
13256 |
+
if ( false === $error && true === $fs->_storage->require_license_activation ) {
|
13257 |
+
$fs->_storage->require_license_activation = false;
|
13258 |
}
|
13259 |
|
13260 |
+
$result = array(
|
13261 |
+
'success' => ( false === $error )
|
13262 |
+
);
|
13263 |
+
|
13264 |
+
if ( false !== $error ) {
|
13265 |
+
$result['error'] = $fs->apply_filters( 'opt_in_error_message', $error );
|
13266 |
+
} else {
|
13267 |
+
if ( $fs->is_addon() || $fs->has_addons() ) {
|
13268 |
+
/**
|
13269 |
+
* Purge the valid user licenses cache so that when the "Account" or the "Add-Ons" page is loaded,
|
13270 |
+
* an updated valid user licenses collection will be fetched from the server which is used to also
|
13271 |
+
* update the account add-ons (add-ons the user has licenses for).
|
13272 |
+
*
|
13273 |
+
* @author Leo Fajardo (@leorw)
|
13274 |
+
* @since 2.2.4
|
13275 |
+
*/
|
13276 |
+
$fs->purge_valid_user_licenses_cache();
|
13277 |
+
}
|
13278 |
+
|
13279 |
+
$result['next_page'] = $next_page;
|
13280 |
+
}
|
13281 |
+
|
13282 |
+
return $result;
|
13283 |
+
}
|
13284 |
+
|
13285 |
+
/**
|
13286 |
+
* @author Leo Fajardo (@leorw)
|
13287 |
+
* @since 2.3.2
|
13288 |
+
*
|
13289 |
+
* @return array {
|
13290 |
+
* @key string Product slug.
|
13291 |
+
* @value array {
|
13292 |
+
* @property FS_Site $site
|
13293 |
+
* @property FS_Plugin_License $license
|
13294 |
+
* }
|
13295 |
+
* }
|
13296 |
+
*/
|
13297 |
+
private function get_parent_and_addons_installs_info() {
|
13298 |
+
$fs = $this->is_addon() ?
|
13299 |
+
$this->get_parent_instance() :
|
13300 |
+
$this;
|
13301 |
+
|
13302 |
+
$installed_addons_ids = array();
|
13303 |
+
|
13304 |
+
$installed_addons_instances = $fs->get_installed_addons();
|
13305 |
+
foreach ( $installed_addons_instances as $instance ) {
|
13306 |
+
$installed_addons_ids[] = $instance->get_id();
|
13307 |
+
}
|
13308 |
+
|
13309 |
+
$addons_ids = array_unique( array_merge(
|
13310 |
+
$installed_addons_ids,
|
13311 |
+
$fs->get_updated_account_addons()
|
13312 |
+
) );
|
13313 |
+
|
13314 |
+
// Add parent product info.
|
13315 |
+
$installs_info_by_slug_map = array(
|
13316 |
+
$fs->get_slug() => array(
|
13317 |
+
'install' => $fs->get_site(),
|
13318 |
+
'license' => $fs->_get_license()
|
13319 |
+
)
|
13320 |
);
|
13321 |
|
13322 |
+
foreach ( $addons_ids as $addon_id ) {
|
13323 |
+
$is_installed = isset( $installed_addons_ids_map[ $addon_id ] );
|
13324 |
+
|
13325 |
+
$addon_info = $fs->_get_addon_info( $addon_id, $is_installed );
|
13326 |
+
|
13327 |
+
if ( ! $addon_info['is_connected'] ) {
|
13328 |
+
// Add-on is not associated with an install entity.
|
13329 |
+
continue;
|
|
|
|
|
|
|
|
|
|
|
13330 |
}
|
13331 |
|
13332 |
+
$installs_info_by_slug_map[ $addon_info['slug'] ] = array(
|
13333 |
+
'install' => $addon_info['site'],
|
13334 |
+
'license' => isset( $addon_info['license'] ) ?
|
13335 |
+
$addon_info['license'] :
|
13336 |
+
null
|
13337 |
+
);
|
13338 |
}
|
13339 |
|
13340 |
+
return $installs_info_by_slug_map;
|
13341 |
}
|
13342 |
|
13343 |
/**
|
14366 |
$page_param = $this->_menu->get_slug( $page );
|
14367 |
|
14368 |
if ( empty( $page ) &&
|
|
|
14369 |
// Show the opt-in as an overlay for free wp.org themes or themes without any settings page.
|
14370 |
+
$this->show_opt_in_on_themes_page()
|
14371 |
) {
|
14372 |
$params[ $this->get_unique_affix() . '_show_optin' ] = 'true';
|
14373 |
|
14797 |
*
|
14798 |
* @param int $blog_id
|
14799 |
* @param FS_Site $install
|
14800 |
+
*
|
14801 |
+
* @return bool Since 2.3.1 returns if a switch was made.
|
14802 |
*/
|
14803 |
function switch_to_blog( $blog_id, FS_Site $install = null ) {
|
14804 |
if ( $blog_id == $this->_context_is_network_or_blog_id ) {
|
14805 |
+
return false;
|
14806 |
}
|
14807 |
|
14808 |
switch_to_blog( $blog_id );
|
14816 |
$install :
|
14817 |
$this->get_install_by_blog_id( $blog_id );
|
14818 |
|
14819 |
+
$this->_user = false;
|
14820 |
+
$this->_licenses = false;
|
14821 |
+
$this->_license = null;
|
14822 |
+
$this->is_whitelabeled = null;
|
14823 |
|
14824 |
if ( is_object( $this->_site ) ) {
|
14825 |
// Try to fetch user from install.
|
14864 |
|
14865 |
unset( $this->_site_api );
|
14866 |
unset( $this->_user_api );
|
14867 |
+
|
14868 |
+
return false;
|
14869 |
}
|
14870 |
|
14871 |
/**
|
15311 |
return ( $this->_menu->get_slug( $page ) === fs_request_get( 'page', '', 'get' ) );
|
15312 |
}
|
15313 |
|
15314 |
+
/**
|
15315 |
+
* Check if currently in the product's main admin page.
|
15316 |
+
*
|
15317 |
+
* @author Vova Feldman (@svovaf)
|
15318 |
+
* @since 2.3.1
|
15319 |
+
*
|
15320 |
+
* @return bool
|
15321 |
+
*/
|
15322 |
+
function is_main_admin_page() {
|
15323 |
+
return $this->is_admin_page( '' );
|
15324 |
+
}
|
15325 |
+
|
15326 |
/**
|
15327 |
* Get module's main admin setting page URL.
|
15328 |
*
|
15343 |
* @since 1.2.2.7
|
15344 |
*
|
15345 |
* @return bool
|
15346 |
+
*
|
15347 |
+
* @deprecated Please use is_product_settings_page() instead;
|
15348 |
*/
|
15349 |
function is_theme_settings_page() {
|
15350 |
+
return $this->is_product_settings_page();
|
15351 |
+
}
|
15352 |
+
|
15353 |
+
/**
|
15354 |
+
* Check if currently on the product's main setting page or on any of the Freemius added pages (via tabs).
|
15355 |
+
*
|
15356 |
+
* @author Vova Feldman (@svovaf)
|
15357 |
+
* @since 1.2.2.7
|
15358 |
+
*
|
15359 |
+
* @return bool
|
15360 |
+
*/
|
15361 |
+
function is_product_settings_page() {
|
15362 |
return fs_starts_with(
|
15363 |
fs_request_get( 'page', '', 'get' ),
|
15364 |
$this->_menu->get_slug()
|
15778 |
/**
|
15779 |
* This is a special fault tolerance mechanism to handle a scenario that the user data is missing.
|
15780 |
*/
|
15781 |
+
$user = $this->sync_user_by_current_install();
|
15782 |
}
|
15783 |
|
15784 |
$this->_user = ( $user instanceof FS_User ) ?
|
15818 |
* @author Vova Feldman (@svovaf)
|
15819 |
* @since 2.0.0
|
15820 |
*
|
15821 |
+
* @param number|null $site_user_id
|
15822 |
+
*
|
15823 |
* @return \FS_User|mixed
|
15824 |
*/
|
15825 |
+
private function sync_user_by_current_install( $site_user_id = null ) {
|
15826 |
+
$site_user_id = FS_Site::is_valid_id( $site_user_id ) ?
|
15827 |
+
$site_user_id :
|
15828 |
+
$this->_site->user_id;
|
15829 |
+
|
15830 |
$api = $this->get_api_site_scope();
|
15831 |
|
15832 |
$uid = $this->get_anonymous_id();
|
15833 |
+
$request_path = "/users/{$site_user_id}.json?uid={$uid}";
|
15834 |
|
15835 |
$result = $api->get( $request_path, false, WP_FS__TIME_10_MIN_IN_SEC );
|
15836 |
|
15986 |
'is_uninstalled' => false,
|
15987 |
) );
|
15988 |
|
15989 |
+
if ( $this->is_addon() ) {
|
15990 |
+
$parent_fs = $this->get_parent_instance();
|
15991 |
+
|
15992 |
+
$params['parent_plugin_slug'] = $parent_fs->_slug;
|
15993 |
+
$params['parent_plugin_id'] = $parent_fs->get_id();
|
15994 |
+
}
|
15995 |
+
|
15996 |
if ( true === $network_level_or_blog_id ) {
|
15997 |
if ( ! isset( $override_with['sites'] ) ) {
|
15998 |
$params['sites'] = $this->get_sites_for_network_level_optin();
|
16088 |
if ( ! $is_uninstall ) {
|
16089 |
$fs_user = Freemius::_get_user_by_email( $email );
|
16090 |
if ( is_object( $fs_user ) && ! $this->is_pending_activation() ) {
|
16091 |
+
return $this->install_with_user(
|
16092 |
+
$fs_user,
|
16093 |
false,
|
16094 |
$trial_plan_id,
|
16095 |
+
true,
|
16096 |
+
true,
|
16097 |
$sites
|
16098 |
);
|
16099 |
}
|
16260 |
( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
|
16261 |
$decoded->is_marketing_allowed :
|
16262 |
null ),
|
16263 |
+
( isset( $decoded->is_extensions_tracking_allowed ) && ! is_null( $decoded->is_extensions_tracking_allowed ) ?
|
16264 |
+
$decoded->is_extensions_tracking_allowed :
|
16265 |
+
null ),
|
16266 |
$decoded->install_id,
|
16267 |
$decoded->install_public_key,
|
16268 |
$decoded->install_secret_key,
|
16276 |
( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
|
16277 |
$decoded->is_marketing_allowed :
|
16278 |
null ),
|
16279 |
+
( isset( $decoded->is_extensions_tracking_allowed ) && ! is_null( $decoded->is_extensions_tracking_allowed ) ?
|
16280 |
+
$decoded->is_extensions_tracking_allowed :
|
16281 |
+
null ),
|
16282 |
$decoded->installs,
|
16283 |
false
|
16284 |
);
|
16370 |
);
|
16371 |
|
16372 |
if ( is_numeric( $first_install->license_id ) ) {
|
16373 |
+
$this->set_license( $this->_get_license_by_id( $first_install->license_id ) );
|
16374 |
}
|
16375 |
|
16376 |
$this->_admin_notices->remove_sticky( 'connect_account' );
|
16505 |
fs_request_get( 'user_public_key' ),
|
16506 |
fs_request_get( 'user_secret_key' ),
|
16507 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
16508 |
+
fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
|
16509 |
$pending_sites_info['blog_ids'],
|
16510 |
$pending_sites_info['license_key'],
|
16511 |
$pending_sites_info['trial_plan_id']
|
16516 |
fs_request_get( 'user_public_key' ),
|
16517 |
fs_request_get( 'user_secret_key' ),
|
16518 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
16519 |
+
fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
|
16520 |
fs_request_get( 'install_id' ),
|
16521 |
fs_request_get( 'install_public_key' ),
|
16522 |
fs_request_get( 'install_secret_key' ),
|
16572 |
* @param string $user_public_key
|
16573 |
* @param string $user_secret_key
|
16574 |
* @param bool|null $is_marketing_allowed
|
16575 |
+
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
16576 |
* @param number $install_id
|
16577 |
* @param string $install_public_key
|
16578 |
* @param string $install_secret_key
|
16579 |
* @param bool $redirect
|
16580 |
+
* @param bool $auto_install Since 1.2.1.7 If `true` and setting up an account with a valid license, will redirect (or return a URL) to the account page with a special parameter to trigger the auto installation processes.
|
|
|
|
|
16581 |
*
|
16582 |
* @return string If redirect is `false`, returns the next page the user should be redirected to.
|
16583 |
*/
|
16586 |
$user_public_key,
|
16587 |
$user_secret_key,
|
16588 |
$is_marketing_allowed,
|
16589 |
+
$is_extensions_tracking_allowed,
|
16590 |
$install_id,
|
16591 |
$install_public_key,
|
16592 |
$install_secret_key,
|
16628 |
$this->disable_opt_in_notice_and_lock_user();
|
16629 |
}
|
16630 |
|
16631 |
+
if ( ! is_null( $is_extensions_tracking_allowed ) ) {
|
16632 |
+
$this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
|
16633 |
+
}
|
16634 |
+
|
16635 |
return $this->setup_account(
|
16636 |
$this->_user,
|
16637 |
$this->_site,
|
16650 |
* @param string $user_public_key
|
16651 |
* @param string $user_secret_key
|
16652 |
* @param bool|null $is_marketing_allowed
|
16653 |
+
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
16654 |
* @param array $site_ids
|
16655 |
* @param bool $license_key
|
16656 |
* @param bool $trial_plan_id
|
16663 |
$user_public_key,
|
16664 |
$user_secret_key,
|
16665 |
$is_marketing_allowed,
|
16666 |
+
$is_extensions_tracking_allowed,
|
16667 |
$site_ids,
|
16668 |
$license_key = false,
|
16669 |
$trial_plan_id = false,
|
16675 |
$this->disable_opt_in_notice_and_lock_user();
|
16676 |
}
|
16677 |
|
16678 |
+
if ( ! is_null( $is_extensions_tracking_allowed ) ) {
|
16679 |
+
$this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
|
16680 |
+
}
|
16681 |
+
|
16682 |
$sites = array();
|
16683 |
foreach ( $site_ids as $site_id ) {
|
16684 |
$sites[] = $this->get_site_info( array( 'blog_id' => $site_id ) );
|
16697 |
* @param string $user_public_key
|
16698 |
* @param string $user_secret_key
|
16699 |
* @param bool|null $is_marketing_allowed
|
16700 |
+
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
16701 |
* @param object[] $installs
|
16702 |
* @param bool $redirect
|
16703 |
+
* @param bool $auto_install Since 1.2.1.7 If `true` and setting up an account with a valid license, will redirect (or return a URL) to the account page with a special parameter to trigger the auto installation processes.
|
|
|
|
|
16704 |
*
|
16705 |
* @return string If redirect is `false`, returns the next page the user should be redirected to.
|
16706 |
*/
|
16709 |
$user_public_key,
|
16710 |
$user_secret_key,
|
16711 |
$is_marketing_allowed,
|
16712 |
+
$is_extensions_tracking_allowed,
|
16713 |
array $installs,
|
16714 |
$redirect = true,
|
16715 |
$auto_install = false
|
16720 |
$this->disable_opt_in_notice_and_lock_user();
|
16721 |
}
|
16722 |
|
16723 |
+
if ( ! is_null( $is_extensions_tracking_allowed ) ) {
|
16724 |
+
$this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
|
16725 |
+
}
|
16726 |
+
|
16727 |
$install_ids = array();
|
16728 |
|
16729 |
foreach ( $installs as $install ) {
|
16833 |
*/
|
16834 |
$license_key = fs_request_get( 'license_secret_key' );
|
16835 |
|
16836 |
+
$this->update_extensions_tracking_flag( fs_request_get_bool( 'is_extensions_tracking_allowed', true ) );
|
16837 |
+
|
16838 |
$this->install_with_current_user( $license_key );
|
16839 |
}
|
16840 |
}
|
16879 |
*
|
16880 |
* @return \FS_Site|object|string If redirect is `false`, returns the next page the user should be redirected to, or the API error object if failed to install. If $setup_account is set to `false`, return the newly created install.
|
16881 |
*/
|
16882 |
+
function install_with_user(
|
16883 |
FS_User $user,
|
16884 |
$license_key = false,
|
16885 |
$trial_plan_id = false,
|
16968 |
|
16969 |
if ( ! empty( $license_key ) ) {
|
16970 |
$extra_install_params['license_key'] = $this->apply_filters( 'license_key', $license_key );
|
16971 |
+
|
16972 |
+
if ( $silent ) {
|
16973 |
+
$extra_install_params['ignore_license_owner'] = true;
|
16974 |
+
}
|
16975 |
} else if ( FS_Plugin_Plan::is_valid_id( $trial_plan_id ) ) {
|
16976 |
$extra_install_params['trial_plan_id'] = $trial_plan_id;
|
16977 |
}
|
16993 |
! $this->is_api_result_object( $result, 'installs' )
|
16994 |
) {
|
16995 |
if ( ! empty( $args['license_key'] ) ) {
|
16996 |
+
// Pass the fully entered license key to the failure handler.
|
16997 |
$args['license_key'] = $license_key;
|
16998 |
}
|
16999 |
|
17370 |
*/
|
17371 |
private function add_menu_action() {
|
17372 |
if ( $this->is_activation_mode() ) {
|
17373 |
+
if ( $this->show_opt_in_on_setting_page() ) {
|
17374 |
$this->override_plugin_menu_with_activation();
|
17375 |
} else {
|
17376 |
/**
|
17392 |
}
|
17393 |
} else if (
|
17394 |
fs_request_is_action( 'sync_user' ) &&
|
17395 |
+
( ! $this->has_settings_menu() || $this->show_opt_in_on_themes_page() )
|
17396 |
) {
|
17397 |
$this->_handle_account_user_sync();
|
17398 |
}
|
17640 |
// Didn't ask to hide the pricing page.
|
17641 |
$this->is_page_visible( 'pricing' ) &&
|
17642 |
// Don't have a valid active license or has more than one plan.
|
17643 |
+
( ! $this->is_paying() || ! $this->is_single_plan( true ) )
|
17644 |
);
|
17645 |
}
|
17646 |
|
17658 |
return false;
|
17659 |
}
|
17660 |
|
17661 |
+
if ( $this->show_opt_in_on_themes_page() ) {
|
17662 |
+
if ( ! fs_is_network_admin() ) {
|
17663 |
+
// Also add action links or submenu items when running in a free .org theme so the tabs will be visible.
|
17664 |
+
return true;
|
17665 |
+
}
|
17666 |
+
} else if ( $is_activation_mode ) {
|
17667 |
+
// Don't show submenu-items/tabs in activation mode, unless it's a wp.org theme.
|
17668 |
return false;
|
17669 |
}
|
17670 |
|
17744 |
}
|
17745 |
|
17746 |
if ( $add_submenu_items ) {
|
17747 |
+
if (! WP_FS__DEMO_MODE && ! $this->is_whitelabeled() ) {
|
17748 |
+
// Add contact page.
|
17749 |
+
$this->add_submenu_item(
|
17750 |
+
$this->get_text_inline( 'Contact Us', 'contact-us' ),
|
17751 |
+
array( &$this, '_contact_page_render' ),
|
17752 |
+
$this->get_plugin_name() . ' – ' . $this->get_text_inline( 'Contact Us', 'contact-us' ),
|
17753 |
+
'manage_options',
|
17754 |
+
'contact',
|
17755 |
+
'Freemius::_clean_admin_content_section',
|
17756 |
+
WP_FS__DEFAULT_PRIORITY,
|
17757 |
+
$this->is_submenu_item_visible( 'contact' )
|
17758 |
+
);
|
17759 |
+
}
|
17760 |
|
17761 |
if ( $this->has_addons() ) {
|
17762 |
$this->add_submenu_item(
|
17775 |
if ( $add_submenu_items ||
|
17776 |
( $is_activation_mode && $this->is_only_premium() && $this->is_admin_page( 'pricing' ) )
|
17777 |
) {
|
17778 |
+
if (! WP_FS__DEMO_MODE && ! $this->is_whitelabeled() ) {
|
17779 |
$show_pricing = (
|
17780 |
$this->is_submenu_item_visible( 'pricing' ) &&
|
17781 |
$this->is_pricing_page_visible()
|
18140 |
|
18141 |
#endregion ------------------------------------------------------------------
|
18142 |
|
18143 |
+
#--------------------------------------------------------------------------------
|
18144 |
+
#region Admin Notices
|
18145 |
+
#--------------------------------------------------------------------------------
|
18146 |
+
|
18147 |
+
/**
|
18148 |
+
* @author Vova Feldman (@svovaf)
|
18149 |
+
* @since 2.3.1
|
18150 |
+
*
|
18151 |
+
* @param string|string[] $ids
|
18152 |
+
* @param int|null $network_level_or_blog_id
|
18153 |
+
*
|
18154 |
+
* @uses FS_Admin_Notices::remove_sticky()
|
18155 |
+
*/
|
18156 |
+
function remove_sticky( $ids, $network_level_or_blog_id = null ) {
|
18157 |
+
$this->_admin_notices->remove_sticky( $ids, $network_level_or_blog_id );
|
18158 |
+
}
|
18159 |
+
|
18160 |
+
#endregion
|
18161 |
|
18162 |
#--------------------------------------------------------------------------------
|
18163 |
#region Actions / Hooks / Filters
|
18534 |
private function _store_site( $store = true, $network_level_or_blog_id = null, FS_Site $site = null ) {
|
18535 |
$this->_logger->entrance();
|
18536 |
|
18537 |
+
if ( is_null( $site ) ) {
|
18538 |
+
$site = $this->_site;
|
18539 |
+
}
|
18540 |
+
|
18541 |
+
if ( !isset( $site ) || !is_object($site) || empty( $site->id ) ) {
|
18542 |
$this->_logger->error( "Empty install ID, can't store site." );
|
18543 |
|
18544 |
return;
|
18545 |
}
|
18546 |
|
18547 |
+
$site_clone = clone $site;
|
|
|
18548 |
|
18549 |
$sites = self::get_all_sites( $this->_module_type, $network_level_or_blog_id );
|
18550 |
|
18551 |
+
if ( is_object( $this->_user ) && $this->_user->id != $site->user_id ) {
|
18552 |
+
$this->sync_user_by_current_install( $site->user_id );
|
18553 |
|
18554 |
+
$prev_stored_user_id = $this->_storage->get( 'prev_user_id', false, $network_level_or_blog_id );
|
18555 |
+
|
18556 |
+
if ( empty( $prev_stored_user_id ) &&
|
18557 |
+
is_object($this->_user) && $this->_user->id != $site->user_id
|
18558 |
+
) {
|
18559 |
+
/**
|
18560 |
+
* Store the current user ID as the previous user ID so that the previous user can be used
|
18561 |
+
* as the install's owner while the new owner's details are not yet available.
|
18562 |
+
*
|
18563 |
+
* This will be executed only in the `replica` site. For example, there are 2 sites, namely `original`
|
18564 |
+
* and `replica`, then an ownership change was initiated and completed in the `original`, the `replica`
|
18565 |
+
* will be using the previous user until it is updated again (e.g.: until the next clone of `original`
|
18566 |
+
* into `replica`.
|
18567 |
+
*
|
18568 |
+
* @author Leo Fajardo (@leorw)
|
18569 |
+
*/
|
18570 |
+
$this->_storage->store( 'prev_user_id', $sites[ $this->_slug ]->user_id, $network_level_or_blog_id );
|
18571 |
+
}
|
18572 |
}
|
18573 |
|
18574 |
+
$sites[ $this->_slug ] = $site_clone;
|
18575 |
|
18576 |
$this->set_account_option( 'sites', $sites, $store, $network_level_or_blog_id );
|
18577 |
}
|
18781 |
* @since 2.2.4
|
18782 |
*/
|
18783 |
private function purge_valid_user_licenses_cache() {
|
18784 |
+
if ( ! $this->is_registered() ) {
|
18785 |
+
return;
|
18786 |
+
}
|
18787 |
+
|
18788 |
$this->get_api_user_scope()->purge_cache( $this->get_valid_user_licenses_endpoint() );
|
18789 |
}
|
18790 |
|
19443 |
return self::is_active_valid_license( $this->_license );
|
19444 |
}
|
19445 |
|
19446 |
+
/**
|
19447 |
+
* @author Leo Fajardo (@leorw)
|
19448 |
+
* @since 2.3.1
|
19449 |
+
*/
|
19450 |
+
function is_data_debug_mode() {
|
19451 |
+
if ( is_null( $this->is_whitelabeled ) || ! $this->is_whitelabeled ) {
|
19452 |
+
return false;
|
19453 |
+
}
|
19454 |
+
|
19455 |
+
$fs = $this->is_addon() ?
|
19456 |
+
$this->get_parent_instance() :
|
19457 |
+
$this;
|
19458 |
+
|
19459 |
+
if ( $fs->is_network_active() && fs_is_network_admin() ) {
|
19460 |
+
$is_developer_license_debug_mode = get_site_transient( "fs_{$this->get_id()}_data_debug_mode" );
|
19461 |
+
} else {
|
19462 |
+
$is_developer_license_debug_mode = get_transient( "fs_{$this->get_id()}_data_debug_mode" );
|
19463 |
+
}
|
19464 |
+
|
19465 |
+
return ( 'true' === $is_developer_license_debug_mode );
|
19466 |
+
}
|
19467 |
+
|
19468 |
+
/**
|
19469 |
+
* @author Leo Fajardo (@leorw)
|
19470 |
+
* @since 2.3.1
|
19471 |
+
*/
|
19472 |
+
function _set_data_debug_mode() {
|
19473 |
+
if ( ! $this->is_whitelabeled( true ) ) {
|
19474 |
+
return;
|
19475 |
+
}
|
19476 |
+
|
19477 |
+
$license_or_user_key = fs_request_get( 'license_or_user_key' );
|
19478 |
+
|
19479 |
+
$transient_value = ( ! empty( $license_or_user_key ) ) ?
|
19480 |
+
'true' :
|
19481 |
+
'false';
|
19482 |
+
|
19483 |
+
if ( 'true' === $transient_value ) {
|
19484 |
+
$stored_key = $this->_storage->get( ! FS_User::is_valid_id( $this->_storage->last_license_user_id ) ?
|
19485 |
+
'last_license_key' :
|
19486 |
+
'last_license_user_key'
|
19487 |
+
);
|
19488 |
+
|
19489 |
+
if ( md5( $license_or_user_key ) !== $stored_key ) {
|
19490 |
+
$this->shoot_ajax_failure( sprintf(
|
19491 |
+
'%s... %s',
|
19492 |
+
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ),
|
19493 |
+
$this->get_text_inline(
|
19494 |
+
'seems like the key you entered doesn\'t match our records.',
|
19495 |
+
'developer-or-license-not-found'
|
19496 |
+
)
|
19497 |
+
) );
|
19498 |
+
}
|
19499 |
+
}
|
19500 |
+
|
19501 |
+
if ( $this->is_network_active() && fs_is_network_admin() ) {
|
19502 |
+
set_site_transient(
|
19503 |
+
"fs_{$this->get_id()}_data_debug_mode",
|
19504 |
+
$transient_value,
|
19505 |
+
WP_FS__TIME_24_HOURS_IN_SEC / 24
|
19506 |
+
);
|
19507 |
+
} else {
|
19508 |
+
set_transient(
|
19509 |
+
"fs_{$this->get_id()}_data_debug_mode",
|
19510 |
+
$transient_value,
|
19511 |
+
WP_FS__TIME_24_HOURS_IN_SEC / 24
|
19512 |
+
);
|
19513 |
+
}
|
19514 |
+
|
19515 |
+
if ( 'true' === $transient_value ) {
|
19516 |
+
$this->_admin_notices->add_sticky(
|
19517 |
+
$this->get_text_inline(
|
19518 |
+
'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.',
|
19519 |
+
'data_debug_mode_enabled'
|
19520 |
+
),
|
19521 |
+
'data_debug_mode_enabled'
|
19522 |
+
);
|
19523 |
+
}
|
19524 |
+
|
19525 |
+
$this->shoot_ajax_success();
|
19526 |
+
}
|
19527 |
+
|
19528 |
/**
|
19529 |
* Check if a given license is active & valid (not expired).
|
19530 |
*
|
19839 |
} else {
|
19840 |
// Authentication params are broken.
|
19841 |
$this->_admin_notices->add(
|
19842 |
+
$this->get_text_inline( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.', 'wrong-authentication-param-message' ) . '<br> ' . $this->get_text_inline( 'Error received from the server:', 'server-error-message' ) . var_export( $result->error, true ),
|
19843 |
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
|
19844 |
'error'
|
19845 |
);
|
20006 |
$this->get_network_install_blog_id()
|
20007 |
);
|
20008 |
} else {
|
20009 |
+
if ( ! is_object( $this->_license ) ) {
|
20010 |
+
$this->maybe_update_whitelabel_flag(
|
20011 |
+
FS_Plugin_License::is_valid_id( $site->license_id ) ?
|
20012 |
+
$this->get_license_by_id( $site->license_id ) :
|
20013 |
+
null
|
20014 |
+
);
|
20015 |
+
} else {
|
20016 |
+
$this->maybe_update_whitelabel_flag( $this->_license );
|
20017 |
+
|
20018 |
+
if ( $this->_license->is_expired() ) {
|
20019 |
+
if ( ! $this->has_features_enabled_license() ) {
|
20020 |
+
$this->_deactivate_license();
|
20021 |
+
$plan_change = 'downgraded';
|
20022 |
+
} else {
|
20023 |
+
$last_time_expired_license_notice_was_shown = $this->_storage->get( 'expired_license_notice_shown', 0 );
|
20024 |
+
|
20025 |
+
if ( time() - ( 14 * WP_FS__TIME_24_HOURS_IN_SEC ) >= $last_time_expired_license_notice_was_shown ) {
|
20026 |
+
/**
|
20027 |
+
* Show the expired license notice every 14 days.
|
20028 |
+
*
|
20029 |
+
* @author Leo Fajardo (@leorw)
|
20030 |
+
* @since 2.3.1
|
20031 |
+
*/
|
20032 |
+
$plan_change = 'expired';
|
20033 |
+
}
|
20034 |
+
}
|
20035 |
}
|
20036 |
}
|
20037 |
|
20055 |
|
20056 |
$hmm_text = $this->get_text_x_inline( 'Hmm', 'something somebody says when they are thinking about what you have just said.', 'hmm' ) . '...';
|
20057 |
|
20058 |
+
if ( $this->apply_filters( 'has_paid_plan_account', $this->has_paid_plan() ) ) {
|
20059 |
switch ( $plan_change ) {
|
20060 |
case 'none':
|
20061 |
if ( ! $background && is_admin() ) {
|
20148 |
'license_expired',
|
20149 |
$hmm_text
|
20150 |
);
|
20151 |
+
|
20152 |
+
$this->_storage->expired_license_notice_shown = WP_FS__SCRIPT_START_TIME;
|
20153 |
+
|
20154 |
$this->_admin_notices->remove_sticky( 'plan_upgraded' );
|
20155 |
break;
|
20156 |
case 'trial_started':
|
20205 |
* @author Vova Feldman (@svovaf)
|
20206 |
* @since 1.0.5
|
20207 |
*
|
20208 |
+
* @param bool $background
|
20209 |
+
* @param FS_Plugin_License|null $premium_license
|
20210 |
*/
|
20211 |
protected function _activate_license( $background = false, $premium_license = null ) {
|
20212 |
$this->_logger->entrance();
|
20400 |
|
20401 |
if ( $show_notice ) {
|
20402 |
$this->_admin_notices->add(
|
20403 |
+
sprintf( $this->is_only_premium() ?
|
20404 |
+
$this->get_text_inline( 'Your %s license was successfully deactivated.', 'license-deactivation-message_premium-only' ) :
|
20405 |
+
$this->get_text_inline( 'Your license was successfully deactivated, you are back to the %s plan.', 'license-deactivation-message' ),
|
20406 |
+
$this->get_plan_title()
|
20407 |
+
),
|
20408 |
$this->get_text_inline( 'O.K', 'ok' )
|
20409 |
);
|
20410 |
}
|
21017 |
|
21018 |
$api = $this->get_api_site_or_plugin_scope();
|
21019 |
|
21020 |
+
$path = $this->add_show_pending( '/addons.json?enriched=true&count=50' );
|
21021 |
|
21022 |
/**
|
21023 |
* @since 1.2.1
|
21211 |
return true;
|
21212 |
}
|
21213 |
|
21214 |
+
/**
|
21215 |
+
* Completes ownership change by license.
|
21216 |
+
*
|
21217 |
+
* @author Leo Fajardo (@leorw)
|
21218 |
+
* @since 2.3.2
|
21219 |
+
*
|
21220 |
+
* @param number $user_id
|
21221 |
+
* @param array[string]number $install_ids_by_slug_map
|
21222 |
+
*
|
21223 |
+
*/
|
21224 |
+
private function complete_ownership_change_by_license( $user_id, $install_ids_by_slug_map ) {
|
21225 |
+
$this->_logger->entrance();
|
21226 |
+
|
21227 |
+
$this->sync_user_by_current_install( $user_id );
|
21228 |
+
|
21229 |
+
$result = $this->get_api_user_scope( true )->get(
|
21230 |
+
"/installs.json?install_ids=" . implode( ',', $install_ids_by_slug_map )
|
21231 |
+
);
|
21232 |
+
|
21233 |
+
if ( $this->is_api_result_object( $result, 'installs' ) ) {
|
21234 |
+
$sites = self::get_all_sites( $this->get_module_type() );
|
21235 |
+
$install_ids_by_slug_map = array_flip( $install_ids_by_slug_map );
|
21236 |
+
|
21237 |
+
foreach ( $result->installs as $install ) {
|
21238 |
+
$site = new FS_Site( $install );
|
21239 |
+
|
21240 |
+
$sites[ $install_ids_by_slug_map[ $site->id ] ] = clone $site;
|
21241 |
+
}
|
21242 |
+
|
21243 |
+
$this->set_account_option( 'sites', $sites, true );
|
21244 |
+
}
|
21245 |
+
}
|
21246 |
+
|
21247 |
/**
|
21248 |
* Handle user name update.
|
21249 |
*
|
21357 |
* @return string
|
21358 |
*/
|
21359 |
function get_after_activation_url( $filter, $params = array(), $network = null ) {
|
21360 |
+
if ( $this->show_opt_in_on_themes_page() &&
|
21361 |
( fs_request_has( 'pending_activation' ) ||
|
21362 |
// For cases when the first time path is set, even though it's a WP.org theme.
|
21363 |
fs_request_get_bool( $this->get_unique_affix() . '_show_optin' ) )
|
21412 |
// Alias.
|
21413 |
$oops_text = $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...';
|
21414 |
|
21415 |
+
$is_network_action = $this->is_network_level_action();
|
21416 |
+
$blog_id = $this->is_network_level_site_specific_action();
|
21417 |
+
$is_parent_plugin_action = ( $plugin_id == $this->get_id() );
|
21418 |
|
21419 |
if ( is_numeric( $blog_id ) ) {
|
21420 |
$this->switch_to_blog( $blog_id );
|
21426 |
case 'opt_in':
|
21427 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
21428 |
|
21429 |
+
if ( $is_parent_plugin_action ) {
|
21430 |
if ( $is_network_action && ! empty( $blog_id ) ) {
|
21431 |
if ( ! $this->is_registered() ) {
|
21432 |
$this->install_with_user(
|
21449 |
case 'toggle_tracking':
|
21450 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
21451 |
|
21452 |
+
if ( $is_parent_plugin_action ) {
|
21453 |
if ( $is_network_action && ! empty( $blog_id ) ) {
|
21454 |
if ( $this->is_registered() ) {
|
21455 |
if ( $this->is_tracking_prohibited() ) {
|
21484 |
case 'delete_account':
|
21485 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
21486 |
|
21487 |
+
$is_network_deletion = $is_network_action && empty( $blog_id );
|
21488 |
+
|
21489 |
+
if ( $is_parent_plugin_action ) {
|
21490 |
+
// Delete add-on installs if have any.
|
21491 |
+
$installed_addons = $this->get_installed_addons();
|
21492 |
+
foreach ( $installed_addons as $fs_addon ) {
|
21493 |
+
if ( $is_network_deletion ) {
|
21494 |
+
$fs_addon->delete_network_account_event();
|
21495 |
+
} else {
|
21496 |
+
$fs_addon->delete_account_event();
|
21497 |
+
}
|
21498 |
+
}
|
21499 |
+
|
21500 |
+
if ( $is_network_deletion ) {
|
21501 |
$this->delete_network_account_event();
|
21502 |
} else {
|
21503 |
$this->delete_account_event();
|
21513 |
} else {
|
21514 |
if ( $this->is_addon_activated( $plugin_id ) ) {
|
21515 |
$fs_addon = self::get_instance_by_id( $plugin_id );
|
21516 |
+
|
21517 |
+
if ( $is_network_deletion ) {
|
21518 |
+
$fs_addon->delete_network_account_event();
|
21519 |
+
} else {
|
21520 |
+
$fs_addon->delete_account_event();
|
21521 |
+
}
|
21522 |
|
21523 |
fs_redirect( $this->_get_admin_page_url( 'account' ) );
|
21524 |
}
|
22118 |
return $this->_plugin_api;
|
22119 |
}
|
22120 |
|
22121 |
+
/**
|
22122 |
+
* Get bundle public API scope.
|
22123 |
+
*
|
22124 |
+
* @author Vova Feldman (@svovaf)
|
22125 |
+
* @since 2.3.1
|
22126 |
+
*
|
22127 |
+
* @return FS_Api
|
22128 |
+
*/
|
22129 |
+
function get_api_bundle_scope() {
|
22130 |
+
return FS_Api::instance(
|
22131 |
+
$this->get_bundle_id(),
|
22132 |
+
'plugin',
|
22133 |
+
$this->get_bundle_id(),
|
22134 |
+
$this->get_bundle_public_key(),
|
22135 |
+
! $this->is_live(),
|
22136 |
+
false,
|
22137 |
+
$this->get_sdk_version()
|
22138 |
+
);
|
22139 |
+
}
|
22140 |
+
|
22141 |
/**
|
22142 |
* Get site API scope object (fallback to public plugin scope when not registered).
|
22143 |
*
|
22471 |
function _show_theme_activation_optin_dialog() {
|
22472 |
fs_enqueue_local_style( 'fs_connect', '/admin/connect.css' );
|
22473 |
|
22474 |
+
add_action( 'admin_footer', array( &$this, '_add_fs_theme_activation_dialog' ) );
|
22475 |
}
|
22476 |
|
22477 |
/**
|
22479 |
* @since 1.2.2
|
22480 |
*/
|
22481 |
function _add_fs_theme_activation_dialog() {
|
22482 |
+
global $pagenow;
|
22483 |
+
|
22484 |
+
if ( 'themes.php' !== $pagenow ) {
|
22485 |
+
return;
|
22486 |
+
}
|
22487 |
+
|
22488 |
$vars = array( 'id' => $this->_module_id );
|
22489 |
fs_require_once_template( 'connect.php', $vars );
|
22490 |
}
|
22572 |
$add_upgrade_link = (
|
22573 |
$add_action_links ||
|
22574 |
( $is_activation_mode && $this->is_only_premium() )
|
22575 |
+
) && ! WP_FS__DEMO_MODE && ( ! $this->is_whitelabeled() );
|
22576 |
|
22577 |
$add_addons_link = ( $add_action_links && $this->has_addons() );
|
22578 |
|
22661 |
|
22662 |
$this->_logger->entrance();
|
22663 |
|
22664 |
+
/**
|
22665 |
+
* @author Vova Feldman (@svovaf)
|
22666 |
+
* @since 2.3.2 Allow opting out from usage-tracking for paid products too by giving the appropriate warning letting the user know the automatic updates mechanism cannot function without an ongoing connection to the licensing and updates engine.
|
22667 |
+
*/
|
22668 |
+
/*if ( $this->is_premium() ) {
|
22669 |
+
// Don't add opt-in/out for premium code base.
|
22670 |
+
return;
|
22671 |
+
}*/
|
22672 |
+
|
22673 |
+
if ( $this->is_only_premium() && $this->is_free_plan() ) {
|
22674 |
+
// Don't add tracking links for premium-only products that were opted-in by relation (add-on or a parent product) before activating any license.
|
22675 |
+
return;
|
22676 |
+
}
|
22677 |
+
|
22678 |
if ( fs_is_network_admin() ) {
|
22679 |
if ( ! $this->_is_network_active ) {
|
22680 |
// Don't add tracking links when browsing the network WP Admin and the plugin is not network active.
|
22725 |
return;
|
22726 |
}
|
22727 |
|
22728 |
+
if ( $this->add_ajax_action( 'update_tracking_permission', array( &$this, '_update_tracking_permission_callback' ) ) ) {
|
22729 |
+
return;
|
22730 |
+
}
|
22731 |
+
|
22732 |
$link_text_id = '';
|
22733 |
$url = '#';
|
22734 |
|
22738 |
} else {
|
22739 |
$link_text_id = $this->get_text_inline( 'Opt In', 'opt-in' );
|
22740 |
}
|
|
|
|
|
22741 |
} else if ( $this->is_anonymous() || $this->is_activation_mode() ) {
|
22742 |
/**
|
22743 |
* Show opt-in link only if skipped or in activation mode.
|
22754 |
$url = $this->get_activation_url( $params );
|
22755 |
}
|
22756 |
|
22757 |
+
add_action( 'admin_footer', array( &$this, '_add_optout_dialog' ) );
|
22758 |
+
|
22759 |
if ( ! empty( $link_text_id ) && $this->is_plugin() && self::is_plugins_page() ) {
|
22760 |
$this->add_plugin_action_link(
|
22761 |
$link_text_id,
|
23445 |
function _tabs_capture() {
|
23446 |
$this->_logger->entrance();
|
23447 |
|
23448 |
+
if ( ! $this->is_product_settings_page() ||
|
23449 |
! $this->is_matching_url( $this->main_menu_url() )
|
23450 |
) {
|
23451 |
return;
|
23500 |
function _store_tabs_styles() {
|
23501 |
$this->_logger->entrance();
|
23502 |
|
23503 |
+
if ( ! $this->is_product_settings_page() ||
|
23504 |
! $this->is_matching_url( $this->main_menu_url() )
|
23505 |
) {
|
23506 |
return;
|
23574 |
return false;
|
23575 |
}
|
23576 |
|
23577 |
+
if ( self::NAVIGATION_TABS !== $this->_navigation ) {
|
23578 |
// Only add tabs to themes for now.
|
23579 |
return false;
|
23580 |
}
|
23581 |
|
23582 |
+
if ( $this->is_theme() && ! $this->has_paid_plan() && ! $this->has_addons() ) {
|
23583 |
// Only add tabs to monetizing themes.
|
23584 |
return false;
|
23585 |
}
|
23586 |
|
23587 |
+
if ( ! $this->is_product_settings_page() ) {
|
23588 |
+
// Only add tabs if browsing one of the product's setting pages.
|
23589 |
+
return false;
|
23590 |
+
}
|
23591 |
+
|
23592 |
+
if ( $this->is_activation_mode() && $this->is_activation_page() ) {
|
23593 |
+
// Don't include tabs in the activation page.
|
23594 |
return false;
|
23595 |
}
|
23596 |
|
24277 |
}
|
24278 |
|
24279 |
$modules = array_merge(
|
24280 |
+
array_values( self::maybe_get_entities_account_option( 'plugins', array() ) ),
|
24281 |
+
array_values( self::maybe_get_entities_account_option( 'themes', array() ) )
|
24282 |
);
|
24283 |
|
24284 |
foreach ( $modules as $module ) {
|
24383 |
*
|
24384 |
* @author Vova Feldman (@svovaf)
|
24385 |
*/
|
24386 |
+
self::shoot_ajax_success( array(
|
24387 |
+
'is_marketing_allowed' => null,
|
24388 |
+
'license_owner_id' => null
|
24389 |
+
) );
|
24390 |
+
}
|
24391 |
+
|
24392 |
+
self::shoot_ajax_success( array(
|
24393 |
+
'is_marketing_allowed' => $user_plugins[0]->is_marketing_allowed,
|
24394 |
+
'license_owner_id' => ( isset( $user_plugins[0]->license_owner_id ) ? $user_plugins[0]->license_owner_id : null )
|
24395 |
+
) );
|
24396 |
+
}
|
24397 |
+
|
24398 |
+
/**
|
24399 |
+
* @author Leo Fajardo (@leorw)
|
24400 |
+
* @since 2.3.2
|
24401 |
+
*
|
24402 |
+
* @param number[] $install_ids
|
24403 |
+
*
|
24404 |
+
* @return array {
|
24405 |
+
* An array of objects containing the installs' licenses owners data.
|
24406 |
+
*
|
24407 |
+
* @property number $id User ID.
|
24408 |
+
* @property string $email User email (can be masked email).
|
24409 |
+
* }
|
24410 |
+
*/
|
24411 |
+
private function fetch_installs_licenses_owners_data( $install_ids ) {
|
24412 |
+
$this->_logger->entrance();
|
24413 |
+
|
24414 |
+
$response = $this->get_api_user_scope()->get(
|
24415 |
+
'/licenses_owners.json?install_ids=' . implode( ',', $install_ids )
|
24416 |
+
);
|
24417 |
+
|
24418 |
+
$license_owners = null;
|
24419 |
+
|
24420 |
+
if ( $this->is_api_result_object( $response, 'owners' ) ) {
|
24421 |
+
$license_owners = $response->owners;
|
24422 |
}
|
24423 |
|
24424 |
+
return $license_owners;
|
24425 |
}
|
24426 |
|
24427 |
/**
|
24457 |
}
|
24458 |
|
24459 |
$modules = array_merge(
|
24460 |
+
array_values( self::maybe_get_entities_account_option( 'plugins', array() ) ),
|
24461 |
+
array_values( self::maybe_get_entities_account_option( 'themes', array() ) )
|
24462 |
);
|
24463 |
|
24464 |
foreach ( $modules as $key => $module ) {
|
freemius/includes/class-fs-plugin-updater.php
CHANGED
@@ -102,7 +102,9 @@
|
|
102 |
'edit_and_echo_plugin_update_row'
|
103 |
), 11, 2 );
|
104 |
|
105 |
-
|
|
|
|
|
106 |
|
107 |
if ( ! WP_FS__IS_PRODUCTION_MODE ) {
|
108 |
add_filter( 'http_request_host_is_external', array(
|
@@ -238,6 +240,12 @@
|
|
238 |
* @since 2.0.0
|
239 |
*/
|
240 |
private function add_transient_filters() {
|
|
|
|
|
|
|
|
|
|
|
|
|
241 |
add_filter( 'pre_set_site_transient_update_plugins', array(
|
242 |
&$this,
|
243 |
'pre_set_site_transient_update_plugins_filter'
|
@@ -487,13 +495,35 @@
|
|
487 |
return $transient_data;
|
488 |
}
|
489 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
490 |
if ( ! isset( $this->_update_details ) ) {
|
491 |
// Get plugin's newest update.
|
492 |
$new_version = $this->_fs->get_update(
|
493 |
false,
|
494 |
fs_request_get_bool( 'force-check' ),
|
495 |
WP_FS__TIME_24_HOURS_IN_SEC / 24,
|
496 |
-
$
|
497 |
);
|
498 |
|
499 |
$this->_update_details = false;
|
102 |
'edit_and_echo_plugin_update_row'
|
103 |
), 11, 2 );
|
104 |
|
105 |
+
if ( ! $this->_fs->has_any_active_valid_license() ) {
|
106 |
+
add_action( 'admin_head', array( &$this, 'catch_plugin_information_dialog_contents' ) );
|
107 |
+
}
|
108 |
|
109 |
if ( ! WP_FS__IS_PRODUCTION_MODE ) {
|
110 |
add_filter( 'http_request_host_is_external', array(
|
240 |
* @since 2.0.0
|
241 |
*/
|
242 |
private function add_transient_filters() {
|
243 |
+
if ( $this->_fs->is_premium() && ! $this->_fs->is_tracking_allowed() ) {
|
244 |
+
$this->_logger->log( 'Opted out sites cannot receive automatic software updates.' );
|
245 |
+
|
246 |
+
return;
|
247 |
+
}
|
248 |
+
|
249 |
add_filter( 'pre_set_site_transient_update_plugins', array(
|
250 |
&$this,
|
251 |
'pre_set_site_transient_update_plugins_filter'
|
495 |
return $transient_data;
|
496 |
}
|
497 |
|
498 |
+
global $wp_current_filter;
|
499 |
+
|
500 |
+
$current_plugin_version = $this->_fs->get_plugin_version();
|
501 |
+
|
502 |
+
if ( ! empty( $wp_current_filter ) && 'upgrader_process_complete' === $wp_current_filter[0] ) {
|
503 |
+
if (
|
504 |
+
is_null( $this->_update_details ) ||
|
505 |
+
( is_object( $this->_update_details ) && $this->_update_details->new_version !== $current_plugin_version )
|
506 |
+
) {
|
507 |
+
/**
|
508 |
+
* After an update, clear the stored update details and reparse the plugin's main file in order to get
|
509 |
+
* the updated version's information and prevent the previous update information from showing up on the
|
510 |
+
* updates page.
|
511 |
+
*
|
512 |
+
* @author Leo Fajardo (@leorw)
|
513 |
+
* @since 2.3.1
|
514 |
+
*/
|
515 |
+
$this->_update_details = null;
|
516 |
+
$current_plugin_version = $this->_fs->get_plugin_version( true );
|
517 |
+
}
|
518 |
+
}
|
519 |
+
|
520 |
if ( ! isset( $this->_update_details ) ) {
|
521 |
// Get plugin's newest update.
|
522 |
$new_version = $this->_fs->get_update(
|
523 |
false,
|
524 |
fs_request_get_bool( 'force-check' ),
|
525 |
WP_FS__TIME_24_HOURS_IN_SEC / 24,
|
526 |
+
$current_plugin_version
|
527 |
);
|
528 |
|
529 |
$this->_update_details = false;
|
freemius/includes/class-fs-storage.php
CHANGED
@@ -336,57 +336,62 @@
|
|
336 |
private static function load_network_options_map() {
|
337 |
self::$_NETWORK_OPTIONS_MAP = array(
|
338 |
// Network level options.
|
339 |
-
'affiliate_application_data'
|
340 |
-
'beta_data'
|
341 |
-
'connectivity_test'
|
342 |
-
'handle_gdpr_admin_notice'
|
343 |
-
'has_trial_plan'
|
344 |
-
'install_sync_timestamp'
|
345 |
-
'install_sync_cron'
|
346 |
-
'is_anonymous_ms'
|
347 |
-
'is_network_activated'
|
348 |
-
'is_on'
|
349 |
-
'is_plugin_new_install'
|
350 |
-
'network_install_blog_id'
|
351 |
-
'pending_sites_info'
|
352 |
-
'plugin_last_version'
|
353 |
-
'plugin_main_file'
|
354 |
-
'plugin_version'
|
355 |
-
'sdk_downgrade_mode'
|
356 |
-
'sdk_last_version'
|
357 |
-
'sdk_upgrade_mode'
|
358 |
-
'sdk_version'
|
359 |
-
'sticky_optin_added_ms'
|
360 |
-
'subscriptions'
|
361 |
-
'sync_timestamp'
|
362 |
-
'sync_cron'
|
363 |
-
'was_plugin_loaded'
|
364 |
-
'network_user_id'
|
365 |
-
'plugin_upgrade_mode'
|
366 |
-
'plugin_downgrade_mode'
|
367 |
-
'is_network_connected'
|
368 |
/**
|
369 |
* Special flag that is used when a super-admin upgrades to the new version of the SDK that
|
370 |
* supports network level integration, when the connection decision wasn't made for all of the
|
371 |
* sites in the network.
|
372 |
*/
|
373 |
-
'is_network_activation'
|
374 |
|
375 |
// When network activated, then network level.
|
376 |
-
'install_timestamp'
|
377 |
-
'prev_is_premium'
|
378 |
-
'require_license_activation'
|
379 |
|
380 |
// If not network activated OR delegated, then site level.
|
381 |
-
'activation_timestamp'
|
382 |
-
'
|
383 |
-
'
|
384 |
-
'
|
385 |
-
'
|
386 |
-
'
|
|
|
|
|
|
|
|
|
|
|
387 |
|
388 |
// Site level options.
|
389 |
-
'is_anonymous'
|
390 |
);
|
391 |
}
|
392 |
|
336 |
private static function load_network_options_map() {
|
337 |
self::$_NETWORK_OPTIONS_MAP = array(
|
338 |
// Network level options.
|
339 |
+
'affiliate_application_data' => 0,
|
340 |
+
'beta_data' => 0,
|
341 |
+
'connectivity_test' => 0,
|
342 |
+
'handle_gdpr_admin_notice' => 0,
|
343 |
+
'has_trial_plan' => 0,
|
344 |
+
'install_sync_timestamp' => 0,
|
345 |
+
'install_sync_cron' => 0,
|
346 |
+
'is_anonymous_ms' => 0,
|
347 |
+
'is_network_activated' => 0,
|
348 |
+
'is_on' => 0,
|
349 |
+
'is_plugin_new_install' => 0,
|
350 |
+
'network_install_blog_id' => 0,
|
351 |
+
'pending_sites_info' => 0,
|
352 |
+
'plugin_last_version' => 0,
|
353 |
+
'plugin_main_file' => 0,
|
354 |
+
'plugin_version' => 0,
|
355 |
+
'sdk_downgrade_mode' => 0,
|
356 |
+
'sdk_last_version' => 0,
|
357 |
+
'sdk_upgrade_mode' => 0,
|
358 |
+
'sdk_version' => 0,
|
359 |
+
'sticky_optin_added_ms' => 0,
|
360 |
+
'subscriptions' => 0,
|
361 |
+
'sync_timestamp' => 0,
|
362 |
+
'sync_cron' => 0,
|
363 |
+
'was_plugin_loaded' => 0,
|
364 |
+
'network_user_id' => 0,
|
365 |
+
'plugin_upgrade_mode' => 0,
|
366 |
+
'plugin_downgrade_mode' => 0,
|
367 |
+
'is_network_connected' => 0,
|
368 |
/**
|
369 |
* Special flag that is used when a super-admin upgrades to the new version of the SDK that
|
370 |
* supports network level integration, when the connection decision wasn't made for all of the
|
371 |
* sites in the network.
|
372 |
*/
|
373 |
+
'is_network_activation' => 0,
|
374 |
|
375 |
// When network activated, then network level.
|
376 |
+
'install_timestamp' => 1,
|
377 |
+
'prev_is_premium' => 1,
|
378 |
+
'require_license_activation' => 1,
|
379 |
|
380 |
// If not network activated OR delegated, then site level.
|
381 |
+
'activation_timestamp' => 2,
|
382 |
+
'expired_license_notice_shown' => 2,
|
383 |
+
'is_whitelabeled' => 2,
|
384 |
+
'last_license_key' => 2,
|
385 |
+
'last_license_user_id' => 2,
|
386 |
+
'prev_user_id' => 2,
|
387 |
+
'sticky_optin_added' => 2,
|
388 |
+
'uninstall_reason' => 2,
|
389 |
+
'is_pending_activation' => 2,
|
390 |
+
'pending_license_key' => 2,
|
391 |
+
'is_extensions_tracking_allowed' => 2,
|
392 |
|
393 |
// Site level options.
|
394 |
+
'is_anonymous' => 3,
|
395 |
);
|
396 |
}
|
397 |
|
freemius/includes/customizer/class-fs-customizer-upsell-control.php
CHANGED
@@ -1,157 +1,161 @@
|
|
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.2.7
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Class FS_Customizer_Upsell_Control
|
15 |
-
*/
|
16 |
-
class FS_Customizer_Upsell_Control extends WP_Customize_Control {
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Control type
|
20 |
-
*
|
21 |
-
* @var string control type
|
22 |
-
*/
|
23 |
-
public $type = 'freemius-upsell-control';
|
24 |
-
|
25 |
-
/**
|
26 |
-
* @var Freemius
|
27 |
-
*/
|
28 |
-
public $fs = null;
|
29 |
-
|
30 |
-
/**
|
31 |
-
* @param WP_Customize_Manager $manager the customize manager class.
|
32 |
-
* @param string $id id.
|
33 |
-
* @param array $args customizer manager parameters.
|
34 |
-
*/
|
35 |
-
public function __construct( WP_Customize_Manager $manager, $id, array $args ) {
|
36 |
-
$manager->register_control_type( 'FS_Customizer_Upsell_Control' );
|
37 |
-
|
38 |
-
parent::__construct( $manager, $id, $args );
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Enqueue resources for the control.
|
43 |
-
*/
|
44 |
-
public function enqueue() {
|
45 |
-
fs_enqueue_local_style( 'fs_customizer', 'customizer.css' );
|
46 |
-
}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Json conversion
|
50 |
-
*/
|
51 |
-
public function to_json() {
|
52 |
-
$pricing_cta = esc_html( $this->fs->get_pricing_cta_label() ) . ' ' . ( is_rtl() ? '←' : '➤' );
|
53 |
-
|
54 |
-
parent::to_json();
|
55 |
-
|
56 |
-
$this->json['button_text'] = $pricing_cta;
|
57 |
-
$this->json['button_url'] = $this->fs->is_in_trial_promotion() ?
|
58 |
-
$this->fs->get_trial_url() :
|
59 |
-
$this->fs->get_upgrade_url();
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
'
|
73 |
-
'
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
if (
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
$
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
$
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
</
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
|
|
|
|
|
|
|
|
157 |
}
|
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.2.7
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Class FS_Customizer_Upsell_Control
|
15 |
+
*/
|
16 |
+
class FS_Customizer_Upsell_Control extends WP_Customize_Control {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Control type
|
20 |
+
*
|
21 |
+
* @var string control type
|
22 |
+
*/
|
23 |
+
public $type = 'freemius-upsell-control';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @var Freemius
|
27 |
+
*/
|
28 |
+
public $fs = null;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @param WP_Customize_Manager $manager the customize manager class.
|
32 |
+
* @param string $id id.
|
33 |
+
* @param array $args customizer manager parameters.
|
34 |
+
*/
|
35 |
+
public function __construct( WP_Customize_Manager $manager, $id, array $args ) {
|
36 |
+
$manager->register_control_type( 'FS_Customizer_Upsell_Control' );
|
37 |
+
|
38 |
+
parent::__construct( $manager, $id, $args );
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Enqueue resources for the control.
|
43 |
+
*/
|
44 |
+
public function enqueue() {
|
45 |
+
fs_enqueue_local_style( 'fs_customizer', 'customizer.css' );
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Json conversion
|
50 |
+
*/
|
51 |
+
public function to_json() {
|
52 |
+
$pricing_cta = esc_html( $this->fs->get_pricing_cta_label() ) . ' ' . ( is_rtl() ? '←' : '➤' );
|
53 |
+
|
54 |
+
parent::to_json();
|
55 |
+
|
56 |
+
$this->json['button_text'] = $pricing_cta;
|
57 |
+
$this->json['button_url'] = $this->fs->is_in_trial_promotion() ?
|
58 |
+
$this->fs->get_trial_url() :
|
59 |
+
$this->fs->get_upgrade_url();
|
60 |
+
|
61 |
+
$api = FS_Plugin::is_valid_id( $this->fs->get_bundle_id() ) ?
|
62 |
+
$this->fs->get_api_bundle_scope() :
|
63 |
+
$this->fs->get_api_plugin_scope();
|
64 |
+
|
65 |
+
// Load features.
|
66 |
+
$pricing = $api->get( $this->fs->add_show_pending( "pricing.json" ) );
|
67 |
+
|
68 |
+
if ( $this->fs->is_api_result_object( $pricing, 'plans' ) ) {
|
69 |
+
// Add support features.
|
70 |
+
if ( is_array( $pricing->plans ) && 0 < count( $pricing->plans ) ) {
|
71 |
+
$support_features = array(
|
72 |
+
'kb' => 'Help Center',
|
73 |
+
'forum' => 'Support Forum',
|
74 |
+
'email' => 'Priority Email Support',
|
75 |
+
'phone' => 'Phone Support',
|
76 |
+
'skype' => 'Skype Support',
|
77 |
+
'is_success_manager' => 'Personal Success Manager',
|
78 |
+
);
|
79 |
+
|
80 |
+
for ( $i = 0, $len = count( $pricing->plans ); $i < $len; $i ++ ) {
|
81 |
+
if ( 'free' == $pricing->plans[$i]->name ) {
|
82 |
+
continue;
|
83 |
+
}
|
84 |
+
|
85 |
+
if ( ! isset( $pricing->plans[ $i ]->features ) ||
|
86 |
+
! is_array( $pricing->plans[ $i ]->features ) ) {
|
87 |
+
$pricing->plans[$i]->features = array();
|
88 |
+
}
|
89 |
+
|
90 |
+
foreach ( $support_features as $key => $label ) {
|
91 |
+
$key = ( 'is_success_manager' !== $key ) ?
|
92 |
+
"support_{$key}" :
|
93 |
+
$key;
|
94 |
+
|
95 |
+
if ( ! empty( $pricing->plans[ $i ]->{$key} ) ) {
|
96 |
+
|
97 |
+
$support_feature = new stdClass();
|
98 |
+
$support_feature->title = $label;
|
99 |
+
|
100 |
+
$pricing->plans[ $i ]->features[] = $support_feature;
|
101 |
+
}
|
102 |
+
}
|
103 |
+
}
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
107 |
+
$this->json['plans'] = $pricing->plans;
|
108 |
+
|
109 |
+
$this->json['strings'] = array(
|
110 |
+
'plan' => $this->fs->get_text_x_inline( 'Plan', 'as product pricing plan', 'plan' ),
|
111 |
+
);
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Control content
|
116 |
+
*/
|
117 |
+
public function content_template() {
|
118 |
+
?>
|
119 |
+
<div id="fs_customizer_upsell">
|
120 |
+
<# if ( data.plans ) { #>
|
121 |
+
<ul class="fs-customizer-plans">
|
122 |
+
<# for (i in data.plans) { #>
|
123 |
+
<# if ( 'free' != data.plans[i].name && (null != data.plans[i].features && 0 < data.plans[i].features.length) ) { #>
|
124 |
+
<li class="fs-customizer-plan">
|
125 |
+
<div class="fs-accordion-section-open">
|
126 |
+
<h2 class="fs-accordion-section-title menu-item">
|
127 |
+
<span>{{ data.plans[i].title }}</span>
|
128 |
+
<button type="button" class="button-link item-edit" aria-expanded="true">
|
129 |
+
<span class="screen-reader-text">Toggle section: {{ data.plans[i].title }} {{ data.strings.plan }}</span>
|
130 |
+
<span class="toggle-indicator" aria-hidden="true"></span>
|
131 |
+
</button>
|
132 |
+
</h2>
|
133 |
+
<div class="fs-accordion-section-content">
|
134 |
+
<# if ( data.plans[i].description ) { #>
|
135 |
+
<h3>{{ data.plans[i].description }}</h3>
|
136 |
+
<# } #>
|
137 |
+
<# if ( data.plans[i].features ) { #>
|
138 |
+
<ul>
|
139 |
+
<# for ( j in data.plans[i].features ) { #>
|
140 |
+
<li><div class="fs-feature">
|
141 |
+
<span class="dashicons dashicons-yes"></span><span><# if ( data.plans[i].features[j].value ) { #>{{ data.plans[i].features[j].value }} <# } #>{{ data.plans[i].features[j].title }}</span>
|
142 |
+
<# if ( data.plans[i].features[j].description ) { #>
|
143 |
+
<span class="dashicons dashicons-editor-help"><span class="fs-feature-desc">{{ data.plans[i].features[j].description }}</span></span>
|
144 |
+
<# } #>
|
145 |
+
</div></li>
|
146 |
+
<# } #>
|
147 |
+
</ul>
|
148 |
+
<# } #>
|
149 |
+
<# if ( 'free' != data.plans[i].name ) { #>
|
150 |
+
<a href="{{ data.button_url }}" class="button button-primary" target="_blank">{{{ data.button_text }}}</a>
|
151 |
+
<# } #>
|
152 |
+
</div>
|
153 |
+
</div>
|
154 |
+
</li>
|
155 |
+
<# } #>
|
156 |
+
<# } #>
|
157 |
+
</ul>
|
158 |
+
<# } #>
|
159 |
+
</div>
|
160 |
+
<?php }
|
161 |
}
|
freemius/includes/entities/class-fs-entity.php
CHANGED
@@ -1,149 +1,159 @@
|
|
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 |
-
* Get object's public variables.
|
15 |
-
*
|
16 |
-
* @author Vova Feldman (@svovaf)
|
17 |
-
* @since 1.0.0
|
18 |
-
*
|
19 |
-
* @param object $object
|
20 |
-
*
|
21 |
-
* @return array
|
22 |
-
*/
|
23 |
-
function fs_get_object_public_vars( $object ) {
|
24 |
-
return get_object_vars( $object );
|
25 |
-
}
|
26 |
-
|
27 |
-
class FS_Entity {
|
28 |
-
/**
|
29 |
-
* @var number
|
30 |
-
*/
|
31 |
-
public $id;
|
32 |
-
/**
|
33 |
-
* @var string Datetime value in 'YYYY-MM-DD HH:MM:SS' format.
|
34 |
-
*/
|
35 |
-
public $updated;
|
36 |
-
/**
|
37 |
-
* @var string Datetime value in 'YYYY-MM-DD HH:MM:SS' format.
|
38 |
-
*/
|
39 |
-
public $created;
|
40 |
-
|
41 |
-
/**
|
42 |
-
* @param bool|object $entity
|
43 |
-
*/
|
44 |
-
function __construct( $entity = false ) {
|
45 |
-
if ( ! ( $entity instanceof stdClass ) && ! ( $entity instanceof FS_Entity ) ) {
|
46 |
-
return;
|
47 |
-
}
|
48 |
-
|
49 |
-
$props = fs_get_object_public_vars( $this );
|
50 |
-
|
51 |
-
foreach ( $props as $key => $def_value ) {
|
52 |
-
$this->{$key} = isset( $entity->{$key} ) ?
|
53 |
-
$entity->{$key} :
|
54 |
-
$def_value;
|
55 |
-
}
|
56 |
-
}
|
57 |
-
|
58 |
-
static function get_type() {
|
59 |
-
return 'type';
|
60 |
-
}
|
61 |
-
|
62 |
-
/**
|
63 |
-
* @author Vova Feldman (@svovaf)
|
64 |
-
* @since 1.0.6
|
65 |
-
*
|
66 |
-
* @param FS_Entity $entity1
|
67 |
-
* @param FS_Entity $entity2
|
68 |
-
*
|
69 |
-
* @return bool
|
70 |
-
*/
|
71 |
-
static function equals( $entity1, $entity2 ) {
|
72 |
-
if ( is_null( $entity1 ) && is_null( $entity2 ) ) {
|
73 |
-
return true;
|
74 |
-
} else if ( is_object( $entity1 ) && is_object( $entity2 ) ) {
|
75 |
-
return ( $entity1->id == $entity2->id );
|
76 |
-
} else if ( is_object( $entity1 ) ) {
|
77 |
-
return is_null( $entity1->id );
|
78 |
-
} else {
|
79 |
-
return is_null( $entity2->id );
|
80 |
-
}
|
81 |
-
}
|
82 |
-
|
83 |
-
private $_is_updated = false;
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Update object property.
|
87 |
-
*
|
88 |
-
* @author Vova Feldman (@svovaf)
|
89 |
-
* @since 1.0.9
|
90 |
-
*
|
91 |
-
* @param string|array[string]mixed $key
|
92 |
-
* @param string|bool $val
|
93 |
-
*
|
94 |
-
* @return bool
|
95 |
-
*/
|
96 |
-
function update( $key, $val = false ) {
|
97 |
-
if ( ! is_array( $key ) ) {
|
98 |
-
$key = array( $key => $val );
|
99 |
-
}
|
100 |
-
|
101 |
-
$is_updated = false;
|
102 |
-
|
103 |
-
foreach ( $key as $k => $v ) {
|
104 |
-
if ( $this->{$k} === $v ) {
|
105 |
-
continue;
|
106 |
-
}
|
107 |
-
|
108 |
-
if ( ( is_string( $this->{$k} ) && is_numeric( $v ) ||
|
109 |
-
( is_numeric( $this->{$k} ) && is_string( $v ) ) ) &&
|
110 |
-
$this->{$k} == $v
|
111 |
-
) {
|
112 |
-
continue;
|
113 |
-
}
|
114 |
-
|
115 |
-
// Update value.
|
116 |
-
$this->{$k} = $v;
|
117 |
-
|
118 |
-
$is_updated = true;
|
119 |
-
}
|
120 |
-
|
121 |
-
$this->_is_updated = $is_updated;
|
122 |
-
|
123 |
-
return $is_updated;
|
124 |
-
}
|
125 |
-
|
126 |
-
/**
|
127 |
-
* Checks if entity was updated.
|
128 |
-
*
|
129 |
-
* @author Vova Feldman (@svovaf)
|
130 |
-
* @since 1.0.9
|
131 |
-
*
|
132 |
-
* @return bool
|
133 |
-
*/
|
134 |
-
function is_updated() {
|
135 |
-
return $this->_is_updated;
|
136 |
-
}
|
137 |
-
|
138 |
-
/**
|
139 |
-
* @param $id
|
140 |
-
*
|
141 |
-
* @author Vova Feldman (@svovaf)
|
142 |
-
* @since 1.1.2
|
143 |
-
*
|
144 |
-
* @return bool
|
145 |
-
*/
|
146 |
-
static function is_valid_id($id){
|
147 |
-
return is_numeric($id);
|
148 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
}
|
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 |
+
* Get object's public variables.
|
15 |
+
*
|
16 |
+
* @author Vova Feldman (@svovaf)
|
17 |
+
* @since 1.0.0
|
18 |
+
*
|
19 |
+
* @param object $object
|
20 |
+
*
|
21 |
+
* @return array
|
22 |
+
*/
|
23 |
+
function fs_get_object_public_vars( $object ) {
|
24 |
+
return get_object_vars( $object );
|
25 |
+
}
|
26 |
+
|
27 |
+
class FS_Entity {
|
28 |
+
/**
|
29 |
+
* @var number
|
30 |
+
*/
|
31 |
+
public $id;
|
32 |
+
/**
|
33 |
+
* @var string Datetime value in 'YYYY-MM-DD HH:MM:SS' format.
|
34 |
+
*/
|
35 |
+
public $updated;
|
36 |
+
/**
|
37 |
+
* @var string Datetime value in 'YYYY-MM-DD HH:MM:SS' format.
|
38 |
+
*/
|
39 |
+
public $created;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @param bool|object $entity
|
43 |
+
*/
|
44 |
+
function __construct( $entity = false ) {
|
45 |
+
if ( ! ( $entity instanceof stdClass ) && ! ( $entity instanceof FS_Entity ) ) {
|
46 |
+
return;
|
47 |
+
}
|
48 |
+
|
49 |
+
$props = fs_get_object_public_vars( $this );
|
50 |
+
|
51 |
+
foreach ( $props as $key => $def_value ) {
|
52 |
+
$this->{$key} = isset( $entity->{$key} ) ?
|
53 |
+
$entity->{$key} :
|
54 |
+
$def_value;
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
static function get_type() {
|
59 |
+
return 'type';
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* @author Vova Feldman (@svovaf)
|
64 |
+
* @since 1.0.6
|
65 |
+
*
|
66 |
+
* @param FS_Entity $entity1
|
67 |
+
* @param FS_Entity $entity2
|
68 |
+
*
|
69 |
+
* @return bool
|
70 |
+
*/
|
71 |
+
static function equals( $entity1, $entity2 ) {
|
72 |
+
if ( is_null( $entity1 ) && is_null( $entity2 ) ) {
|
73 |
+
return true;
|
74 |
+
} else if ( is_object( $entity1 ) && is_object( $entity2 ) ) {
|
75 |
+
return ( $entity1->id == $entity2->id );
|
76 |
+
} else if ( is_object( $entity1 ) ) {
|
77 |
+
return is_null( $entity1->id );
|
78 |
+
} else {
|
79 |
+
return is_null( $entity2->id );
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
private $_is_updated = false;
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Update object property.
|
87 |
+
*
|
88 |
+
* @author Vova Feldman (@svovaf)
|
89 |
+
* @since 1.0.9
|
90 |
+
*
|
91 |
+
* @param string|array[string]mixed $key
|
92 |
+
* @param string|bool $val
|
93 |
+
*
|
94 |
+
* @return bool
|
95 |
+
*/
|
96 |
+
function update( $key, $val = false ) {
|
97 |
+
if ( ! is_array( $key ) ) {
|
98 |
+
$key = array( $key => $val );
|
99 |
+
}
|
100 |
+
|
101 |
+
$is_updated = false;
|
102 |
+
|
103 |
+
foreach ( $key as $k => $v ) {
|
104 |
+
if ( $this->{$k} === $v ) {
|
105 |
+
continue;
|
106 |
+
}
|
107 |
+
|
108 |
+
if ( ( is_string( $this->{$k} ) && is_numeric( $v ) ||
|
109 |
+
( is_numeric( $this->{$k} ) && is_string( $v ) ) ) &&
|
110 |
+
$this->{$k} == $v
|
111 |
+
) {
|
112 |
+
continue;
|
113 |
+
}
|
114 |
+
|
115 |
+
// Update value.
|
116 |
+
$this->{$k} = $v;
|
117 |
+
|
118 |
+
$is_updated = true;
|
119 |
+
}
|
120 |
+
|
121 |
+
$this->_is_updated = $is_updated;
|
122 |
+
|
123 |
+
return $is_updated;
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Checks if entity was updated.
|
128 |
+
*
|
129 |
+
* @author Vova Feldman (@svovaf)
|
130 |
+
* @since 1.0.9
|
131 |
+
*
|
132 |
+
* @return bool
|
133 |
+
*/
|
134 |
+
function is_updated() {
|
135 |
+
return $this->_is_updated;
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* @param $id
|
140 |
+
*
|
141 |
+
* @author Vova Feldman (@svovaf)
|
142 |
+
* @since 1.1.2
|
143 |
+
*
|
144 |
+
* @return bool
|
145 |
+
*/
|
146 |
+
static function is_valid_id($id){
|
147 |
+
return is_numeric($id);
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* @author Leo Fajardo (@leorw)
|
152 |
+
* @since 2.3.1
|
153 |
+
*
|
154 |
+
* @return string
|
155 |
+
*/
|
156 |
+
public static function get_class_name() {
|
157 |
+
return get_called_class();
|
158 |
+
}
|
159 |
}
|
freemius/includes/entities/class-fs-payment.php
CHANGED
@@ -1,168 +1,168 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* @package Freemius
|
4 |
-
* @copyright Copyright (c) 2016, Freemius, Inc.
|
5 |
-
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
-
* @since 1.0.0
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
class FS_Payment extends FS_Entity {
|
14 |
-
|
15 |
-
#region Properties
|
16 |
-
|
17 |
-
/**
|
18 |
-
* @var number
|
19 |
-
*/
|
20 |
-
public $plugin_id;
|
21 |
-
/**
|
22 |
-
* @var number
|
23 |
-
*/
|
24 |
-
public $user_id;
|
25 |
-
/**
|
26 |
-
* @var number
|
27 |
-
*/
|
28 |
-
public $install_id;
|
29 |
-
/**
|
30 |
-
* @var number
|
31 |
-
*/
|
32 |
-
public $subscription_id;
|
33 |
-
/**
|
34 |
-
* @var number
|
35 |
-
*/
|
36 |
-
public $plan_id;
|
37 |
-
/**
|
38 |
-
* @var number
|
39 |
-
*/
|
40 |
-
public $license_id;
|
41 |
-
/**
|
42 |
-
* @var float
|
43 |
-
*/
|
44 |
-
public $gross;
|
45 |
-
/**
|
46 |
-
* @author Leo Fajardo (@leorw)
|
47 |
-
* @since 2.3.0
|
48 |
-
*
|
49 |
-
* @var string One of the following: `usd`, `gbp`, `eur`.
|
50 |
-
*/
|
51 |
-
public $currency;
|
52 |
-
/**
|
53 |
-
* @var number
|
54 |
-
*/
|
55 |
-
public $bound_payment_id;
|
56 |
-
/**
|
57 |
-
* @var string
|
58 |
-
*/
|
59 |
-
public $external_id;
|
60 |
-
/**
|
61 |
-
* @var string
|
62 |
-
*/
|
63 |
-
public $gateway;
|
64 |
-
/**
|
65 |
-
* @var string ISO 3166-1 alpha-2 - two-letter country code.
|
66 |
-
*
|
67 |
-
* @link http://www.wikiwand.com/en/ISO_3166-1_alpha-2
|
68 |
-
*/
|
69 |
-
public $country_code;
|
70 |
-
/**
|
71 |
-
* @var string
|
72 |
-
*/
|
73 |
-
public $vat_id;
|
74 |
-
/**
|
75 |
-
* @var float Actual Tax / VAT in $$$
|
76 |
-
*/
|
77 |
-
public $vat;
|
78 |
-
/**
|
79 |
-
* @var int Payment source.
|
80 |
-
*/
|
81 |
-
public $source = 0;
|
82 |
-
|
83 |
-
#endregion Properties
|
84 |
-
|
85 |
-
const CURRENCY_USD = 'usd';
|
86 |
-
const CURRENCY_GBP = 'gbp';
|
87 |
-
const CURRENCY_EUR = 'eur';
|
88 |
-
|
89 |
-
/**
|
90 |
-
* @param object|bool $payment
|
91 |
-
*/
|
92 |
-
function __construct( $payment = false ) {
|
93 |
-
parent::__construct( $payment );
|
94 |
-
}
|
95 |
-
|
96 |
-
static function get_type() {
|
97 |
-
return 'payment';
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* @author Vova Feldman (@svovaf)
|
102 |
-
* @since 1.0.0
|
103 |
-
*
|
104 |
-
* @return bool
|
105 |
-
*/
|
106 |
-
function is_refund() {
|
107 |
-
return ( parent::is_valid_id( $this->bound_payment_id ) && 0 > $this->gross );
|
108 |
-
}
|
109 |
-
|
110 |
-
/**
|
111 |
-
* Checks if the payment was migrated from another platform.
|
112 |
-
*
|
113 |
-
* @author Vova Feldman (@svovaf)
|
114 |
-
* @since 2.0.2
|
115 |
-
*
|
116 |
-
* @return bool
|
117 |
-
*/
|
118 |
-
function is_migrated() {
|
119 |
-
return ( 0 != $this->source );
|
120 |
-
}
|
121 |
-
|
122 |
-
/**
|
123 |
-
* Returns the gross in this format:
|
124 |
-
* `{symbol}{amount | 2 decimal digits} {currency | uppercase}`
|
125 |
-
*
|
126 |
-
* Examples: £9.99 GBP, -£9.99 GBP.
|
127 |
-
*
|
128 |
-
* @author Leo Fajardo (@leorw)
|
129 |
-
* @since 2.3.0
|
130 |
-
*
|
131 |
-
* @return string
|
132 |
-
*/
|
133 |
-
function formatted_gross()
|
134 |
-
{
|
135 |
-
return (
|
136 |
-
( $this->gross < 0 ? '-' : '' ) .
|
137 |
-
$this->get_symbol() .
|
138 |
-
number_format( abs( $this->gross ), 2, '.', ',' ) . ' ' .
|
139 |
-
strtoupper( $this->currency )
|
140 |
-
);
|
141 |
-
}
|
142 |
-
|
143 |
-
/**
|
144 |
-
* A map between supported currencies with their symbols.
|
145 |
-
*
|
146 |
-
* @var array<string,string>
|
147 |
-
*/
|
148 |
-
static $CURRENCY_2_SYMBOL;
|
149 |
-
|
150 |
-
/**
|
151 |
-
* @author Leo Fajardo (@leorw)
|
152 |
-
* @since 2.3.0
|
153 |
-
*
|
154 |
-
* @return string
|
155 |
-
*/
|
156 |
-
private function get_symbol() {
|
157 |
-
if ( ! isset( self::$CURRENCY_2_SYMBOL ) ) {
|
158 |
-
// Lazy load.
|
159 |
-
self::$CURRENCY_2_SYMBOL = array(
|
160 |
-
self::CURRENCY_USD => '$',
|
161 |
-
self::CURRENCY_GBP => '£',
|
162 |
-
self::CURRENCY_EUR => '€',
|
163 |
-
);
|
164 |
-
}
|
165 |
-
|
166 |
-
return self::$CURRENCY_2_SYMBOL[ $this->currency ];
|
167 |
-
}
|
168 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Freemius
|
4 |
+
* @copyright Copyright (c) 2016, Freemius, Inc.
|
5 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
+
* @since 1.0.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
class FS_Payment extends FS_Entity {
|
14 |
+
|
15 |
+
#region Properties
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @var number
|
19 |
+
*/
|
20 |
+
public $plugin_id;
|
21 |
+
/**
|
22 |
+
* @var number
|
23 |
+
*/
|
24 |
+
public $user_id;
|
25 |
+
/**
|
26 |
+
* @var number
|
27 |
+
*/
|
28 |
+
public $install_id;
|
29 |
+
/**
|
30 |
+
* @var number
|
31 |
+
*/
|
32 |
+
public $subscription_id;
|
33 |
+
/**
|
34 |
+
* @var number
|
35 |
+
*/
|
36 |
+
public $plan_id;
|
37 |
+
/**
|
38 |
+
* @var number
|
39 |
+
*/
|
40 |
+
public $license_id;
|
41 |
+
/**
|
42 |
+
* @var float
|
43 |
+
*/
|
44 |
+
public $gross;
|
45 |
+
/**
|
46 |
+
* @author Leo Fajardo (@leorw)
|
47 |
+
* @since 2.3.0
|
48 |
+
*
|
49 |
+
* @var string One of the following: `usd`, `gbp`, `eur`.
|
50 |
+
*/
|
51 |
+
public $currency;
|
52 |
+
/**
|
53 |
+
* @var number
|
54 |
+
*/
|
55 |
+
public $bound_payment_id;
|
56 |
+
/**
|
57 |
+
* @var string
|
58 |
+
*/
|
59 |
+
public $external_id;
|
60 |
+
/**
|
61 |
+
* @var string
|
62 |
+
*/
|
63 |
+
public $gateway;
|
64 |
+
/**
|
65 |
+
* @var string ISO 3166-1 alpha-2 - two-letter country code.
|
66 |
+
*
|
67 |
+
* @link http://www.wikiwand.com/en/ISO_3166-1_alpha-2
|
68 |
+
*/
|
69 |
+
public $country_code;
|
70 |
+
/**
|
71 |
+
* @var string
|
72 |
+
*/
|
73 |
+
public $vat_id;
|
74 |
+
/**
|
75 |
+
* @var float Actual Tax / VAT in $$$
|
76 |
+
*/
|
77 |
+
public $vat;
|
78 |
+
/**
|
79 |
+
* @var int Payment source.
|
80 |
+
*/
|
81 |
+
public $source = 0;
|
82 |
+
|
83 |
+
#endregion Properties
|
84 |
+
|
85 |
+
const CURRENCY_USD = 'usd';
|
86 |
+
const CURRENCY_GBP = 'gbp';
|
87 |
+
const CURRENCY_EUR = 'eur';
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @param object|bool $payment
|
91 |
+
*/
|
92 |
+
function __construct( $payment = false ) {
|
93 |
+
parent::__construct( $payment );
|
94 |
+
}
|
95 |
+
|
96 |
+
static function get_type() {
|
97 |
+
return 'payment';
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* @author Vova Feldman (@svovaf)
|
102 |
+
* @since 1.0.0
|
103 |
+
*
|
104 |
+
* @return bool
|
105 |
+
*/
|
106 |
+
function is_refund() {
|
107 |
+
return ( parent::is_valid_id( $this->bound_payment_id ) && 0 > $this->gross );
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Checks if the payment was migrated from another platform.
|
112 |
+
*
|
113 |
+
* @author Vova Feldman (@svovaf)
|
114 |
+
* @since 2.0.2
|
115 |
+
*
|
116 |
+
* @return bool
|
117 |
+
*/
|
118 |
+
function is_migrated() {
|
119 |
+
return ( 0 != $this->source );
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Returns the gross in this format:
|
124 |
+
* `{symbol}{amount | 2 decimal digits} {currency | uppercase}`
|
125 |
+
*
|
126 |
+
* Examples: £9.99 GBP, -£9.99 GBP.
|
127 |
+
*
|
128 |
+
* @author Leo Fajardo (@leorw)
|
129 |
+
* @since 2.3.0
|
130 |
+
*
|
131 |
+
* @return string
|
132 |
+
*/
|
133 |
+
function formatted_gross()
|
134 |
+
{
|
135 |
+
return (
|
136 |
+
( $this->gross < 0 ? '-' : '' ) .
|
137 |
+
$this->get_symbol() .
|
138 |
+
number_format( abs( $this->gross ), 2, '.', ',' ) . ' ' .
|
139 |
+
strtoupper( $this->currency )
|
140 |
+
);
|
141 |
+
}
|
142 |
+
|
143 |
+
/**
|
144 |
+
* A map between supported currencies with their symbols.
|
145 |
+
*
|
146 |
+
* @var array<string,string>
|
147 |
+
*/
|
148 |
+
static $CURRENCY_2_SYMBOL;
|
149 |
+
|
150 |
+
/**
|
151 |
+
* @author Leo Fajardo (@leorw)
|
152 |
+
* @since 2.3.0
|
153 |
+
*
|
154 |
+
* @return string
|
155 |
+
*/
|
156 |
+
private function get_symbol() {
|
157 |
+
if ( ! isset( self::$CURRENCY_2_SYMBOL ) ) {
|
158 |
+
// Lazy load.
|
159 |
+
self::$CURRENCY_2_SYMBOL = array(
|
160 |
+
self::CURRENCY_USD => '$',
|
161 |
+
self::CURRENCY_GBP => '£',
|
162 |
+
self::CURRENCY_EUR => '€',
|
163 |
+
);
|
164 |
+
}
|
165 |
+
|
166 |
+
return self::$CURRENCY_2_SYMBOL[ $this->currency ];
|
167 |
+
}
|
168 |
}
|
freemius/includes/entities/class-fs-plugin-license.php
CHANGED
@@ -74,6 +74,10 @@
|
|
74 |
* @var string
|
75 |
*/
|
76 |
public $secret_key;
|
|
|
|
|
|
|
|
|
77 |
/**
|
78 |
* @var bool $is_free_localhost Defaults to true. If true, allow unlimited localhost installs with the same
|
79 |
* license.
|
@@ -287,4 +291,33 @@
|
|
287 |
function total_activations() {
|
288 |
return ( $this->activated + $this->activated_local );
|
289 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
290 |
}
|
74 |
* @var string
|
75 |
*/
|
76 |
public $secret_key;
|
77 |
+
/**
|
78 |
+
* @var bool
|
79 |
+
*/
|
80 |
+
public $is_whitelabeled;
|
81 |
/**
|
82 |
* @var bool $is_free_localhost Defaults to true. If true, allow unlimited localhost installs with the same
|
83 |
* license.
|
291 |
function total_activations() {
|
292 |
return ( $this->activated + $this->activated_local );
|
293 |
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* @author Vova Feldman (@svovaf)
|
297 |
+
* @since 2.3.1
|
298 |
+
*
|
299 |
+
* @return string
|
300 |
+
*/
|
301 |
+
function get_html_escaped_masked_secret_key() {
|
302 |
+
return self::mask_secret_key_for_html( $this->secret_key );
|
303 |
+
}
|
304 |
+
|
305 |
+
/**
|
306 |
+
* @author Vova Feldman (@svovaf)
|
307 |
+
* @since 2.3.1
|
308 |
+
*
|
309 |
+
* @param string $secret_key
|
310 |
+
*
|
311 |
+
* @return string
|
312 |
+
*/
|
313 |
+
static function mask_secret_key_for_html( $secret_key ) {
|
314 |
+
return (
|
315 |
+
// Initial 6 chars - sk_ABC
|
316 |
+
htmlspecialchars( substr( $secret_key, 0, 6 ) ) .
|
317 |
+
// Masking
|
318 |
+
str_pad( '', ( strlen( $secret_key ) - 9 ) * 6, '•' ) .
|
319 |
+
// Last 3 chars.
|
320 |
+
htmlspecialchars( substr( $secret_key, - 3 ) )
|
321 |
+
);
|
322 |
+
}
|
323 |
}
|
freemius/includes/entities/class-fs-plugin-tag.php
CHANGED
@@ -1,60 +1,60 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* @package Freemius
|
4 |
-
* @copyright Copyright (c) 2018, Freemius, Inc.
|
5 |
-
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
-
* @since 2.0.0
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
class FS_Plugin_Tag extends FS_Entity {
|
14 |
-
/**
|
15 |
-
* @var string
|
16 |
-
*/
|
17 |
-
public $version;
|
18 |
-
/**
|
19 |
-
* @var string
|
20 |
-
*/
|
21 |
-
public $url;
|
22 |
-
/**
|
23 |
-
* @var string
|
24 |
-
*/
|
25 |
-
public $requires_platform_version;
|
26 |
-
/**
|
27 |
-
* @var string
|
28 |
-
*/
|
29 |
-
public $tested_up_to_version;
|
30 |
-
/**
|
31 |
-
* @var bool
|
32 |
-
*/
|
33 |
-
public $has_free;
|
34 |
-
/**
|
35 |
-
* @var bool
|
36 |
-
*/
|
37 |
-
public $has_premium;
|
38 |
-
/**
|
39 |
-
* @var string One of the following: `pending`, `beta`, `unreleased`.
|
40 |
-
*/
|
41 |
-
public $release_mode;
|
42 |
-
|
43 |
-
function __construct( $tag = false ) {
|
44 |
-
parent::__construct( $tag );
|
45 |
-
}
|
46 |
-
|
47 |
-
static function get_type() {
|
48 |
-
return 'tag';
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* @author Leo Fajardo (@leorw)
|
53 |
-
* @since 2.3.0
|
54 |
-
*
|
55 |
-
* @return bool
|
56 |
-
*/
|
57 |
-
function is_beta() {
|
58 |
-
return ( 'beta' === $this->release_mode );
|
59 |
-
}
|
60 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Freemius
|
4 |
+
* @copyright Copyright (c) 2018, Freemius, Inc.
|
5 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
+
* @since 2.0.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
class FS_Plugin_Tag extends FS_Entity {
|
14 |
+
/**
|
15 |
+
* @var string
|
16 |
+
*/
|
17 |
+
public $version;
|
18 |
+
/**
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
public $url;
|
22 |
+
/**
|
23 |
+
* @var string
|
24 |
+
*/
|
25 |
+
public $requires_platform_version;
|
26 |
+
/**
|
27 |
+
* @var string
|
28 |
+
*/
|
29 |
+
public $tested_up_to_version;
|
30 |
+
/**
|
31 |
+
* @var bool
|
32 |
+
*/
|
33 |
+
public $has_free;
|
34 |
+
/**
|
35 |
+
* @var bool
|
36 |
+
*/
|
37 |
+
public $has_premium;
|
38 |
+
/**
|
39 |
+
* @var string One of the following: `pending`, `beta`, `unreleased`.
|
40 |
+
*/
|
41 |
+
public $release_mode;
|
42 |
+
|
43 |
+
function __construct( $tag = false ) {
|
44 |
+
parent::__construct( $tag );
|
45 |
+
}
|
46 |
+
|
47 |
+
static function get_type() {
|
48 |
+
return 'tag';
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* @author Leo Fajardo (@leorw)
|
53 |
+
* @since 2.3.0
|
54 |
+
*
|
55 |
+
* @return bool
|
56 |
+
*/
|
57 |
+
function is_beta() {
|
58 |
+
return ( 'beta' === $this->release_mode );
|
59 |
+
}
|
60 |
}
|
freemius/includes/entities/class-fs-plugin.php
CHANGED
@@ -99,6 +99,11 @@
|
|
99 |
* @var null|number
|
100 |
*/
|
101 |
public $bundle_id;
|
|
|
|
|
|
|
|
|
|
|
102 |
|
103 |
const AFFILIATE_MODERATION_CUSTOMERS = 'customers';
|
104 |
|
99 |
* @var null|number
|
100 |
*/
|
101 |
public $bundle_id;
|
102 |
+
/**
|
103 |
+
* @since 2.3.1
|
104 |
+
* @var null|string
|
105 |
+
*/
|
106 |
+
public $bundle_public_key;
|
107 |
|
108 |
const AFFILIATE_MODERATION_CUSTOMERS = 'customers';
|
109 |
|
freemius/includes/entities/class-fs-pricing.php
CHANGED
@@ -1,141 +1,157 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* @package Freemius for EDD Add-On
|
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.0
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
class FS_Pricing extends FS_Entity {
|
14 |
-
|
15 |
-
#region Properties
|
16 |
-
|
17 |
-
/**
|
18 |
-
* @var number
|
19 |
-
*/
|
20 |
-
public $plan_id;
|
21 |
-
/**
|
22 |
-
* @var int
|
23 |
-
*/
|
24 |
-
public $licenses;
|
25 |
-
/**
|
26 |
-
* @var null|float
|
27 |
-
*/
|
28 |
-
public $monthly_price;
|
29 |
-
/**
|
30 |
-
* @var null|float
|
31 |
-
*/
|
32 |
-
public $annual_price;
|
33 |
-
/**
|
34 |
-
* @var null|float
|
35 |
-
*/
|
36 |
-
public $lifetime_price;
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
* @
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
* @
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
*
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
*
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Freemius for EDD Add-On
|
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.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
class FS_Pricing extends FS_Entity {
|
14 |
+
|
15 |
+
#region Properties
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @var number
|
19 |
+
*/
|
20 |
+
public $plan_id;
|
21 |
+
/**
|
22 |
+
* @var int
|
23 |
+
*/
|
24 |
+
public $licenses;
|
25 |
+
/**
|
26 |
+
* @var null|float
|
27 |
+
*/
|
28 |
+
public $monthly_price;
|
29 |
+
/**
|
30 |
+
* @var null|float
|
31 |
+
*/
|
32 |
+
public $annual_price;
|
33 |
+
/**
|
34 |
+
* @var null|float
|
35 |
+
*/
|
36 |
+
public $lifetime_price;
|
37 |
+
/**
|
38 |
+
* @author Leo Fajardo (@leorw)
|
39 |
+
* @since 2.3.1
|
40 |
+
*
|
41 |
+
* @var string One of the following: `usd`, `gbp`, `eur`.
|
42 |
+
*/
|
43 |
+
public $currency;
|
44 |
+
|
45 |
+
#endregion Properties
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @param object|bool $pricing
|
49 |
+
*/
|
50 |
+
function __construct( $pricing = false ) {
|
51 |
+
parent::__construct( $pricing );
|
52 |
+
}
|
53 |
+
|
54 |
+
static function get_type() {
|
55 |
+
return 'pricing';
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @author Vova Feldman (@svovaf)
|
60 |
+
* @since 1.1.8
|
61 |
+
*
|
62 |
+
* @return bool
|
63 |
+
*/
|
64 |
+
function has_monthly() {
|
65 |
+
return ( is_numeric( $this->monthly_price ) && $this->monthly_price > 0 );
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* @author Vova Feldman (@svovaf)
|
70 |
+
* @since 1.1.8
|
71 |
+
*
|
72 |
+
* @return bool
|
73 |
+
*/
|
74 |
+
function has_annual() {
|
75 |
+
return ( is_numeric( $this->annual_price ) && $this->annual_price > 0 );
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* @author Vova Feldman (@svovaf)
|
80 |
+
* @since 1.1.8
|
81 |
+
*
|
82 |
+
* @return bool
|
83 |
+
*/
|
84 |
+
function has_lifetime() {
|
85 |
+
return ( is_numeric( $this->lifetime_price ) && $this->lifetime_price > 0 );
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Check if unlimited licenses pricing.
|
90 |
+
*
|
91 |
+
* @author Vova Feldman (@svovaf)
|
92 |
+
* @since 1.1.8
|
93 |
+
*
|
94 |
+
* @return bool
|
95 |
+
*/
|
96 |
+
function is_unlimited() {
|
97 |
+
return is_null( $this->licenses );
|
98 |
+
}
|
99 |
+
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Check if pricing has more than one billing cycle.
|
103 |
+
*
|
104 |
+
* @author Vova Feldman (@svovaf)
|
105 |
+
* @since 1.1.8
|
106 |
+
*
|
107 |
+
* @return bool
|
108 |
+
*/
|
109 |
+
function is_multi_cycle() {
|
110 |
+
$cycles = 0;
|
111 |
+
if ( $this->has_monthly() ) {
|
112 |
+
$cycles ++;
|
113 |
+
}
|
114 |
+
if ( $this->has_annual() ) {
|
115 |
+
$cycles ++;
|
116 |
+
}
|
117 |
+
if ( $this->has_lifetime() ) {
|
118 |
+
$cycles ++;
|
119 |
+
}
|
120 |
+
|
121 |
+
return $cycles > 1;
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Get annual over monthly discount.
|
126 |
+
*
|
127 |
+
* @author Vova Feldman (@svovaf)
|
128 |
+
* @since 1.1.8
|
129 |
+
*
|
130 |
+
* @return int
|
131 |
+
*/
|
132 |
+
function annual_discount_percentage() {
|
133 |
+
return floor( $this->annual_savings() / ( $this->monthly_price * 12 * ( $this->is_unlimited() ? 1 : $this->licenses ) ) * 100 );
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Get annual over monthly savings.
|
138 |
+
*
|
139 |
+
* @author Vova Feldman (@svovaf)
|
140 |
+
* @since 1.1.8
|
141 |
+
*
|
142 |
+
* @return float
|
143 |
+
*/
|
144 |
+
function annual_savings() {
|
145 |
+
return ( $this->monthly_price * 12 - $this->annual_price ) * ( $this->is_unlimited() ? 1 : $this->licenses );
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* @author Leo Fajardo (@leorw)
|
150 |
+
* @since 2.3.1
|
151 |
+
*
|
152 |
+
* @return bool
|
153 |
+
*/
|
154 |
+
function is_usd() {
|
155 |
+
return ( 'usd' === $this->currency );
|
156 |
+
}
|
157 |
}
|
freemius/includes/entities/class-fs-site.php
CHANGED
@@ -172,12 +172,12 @@
|
|
172 |
fs_ends_with( $subdomain, '.staging.wpengine.com' ) ||
|
173 |
fs_ends_with( $subdomain, '.dev.wpengine.com' ) ||
|
174 |
// Pantheon
|
175 |
-
( fs_ends_with($subdomain, 'pantheonsite.io') &&
|
176 |
-
(fs_starts_with($subdomain, 'test-') || fs_starts_with($subdomain, 'dev-'))) ||
|
177 |
// Cloudways
|
178 |
fs_ends_with( $subdomain, '.cloudwaysapps.com' ) ||
|
179 |
// Kinsta
|
180 |
-
(fs_ends_with($subdomain, '.kinsta.com')
|
181 |
// DesktopServer
|
182 |
fs_ends_with( $subdomain, '.dev.cc' )
|
183 |
);
|
172 |
fs_ends_with( $subdomain, '.staging.wpengine.com' ) ||
|
173 |
fs_ends_with( $subdomain, '.dev.wpengine.com' ) ||
|
174 |
// Pantheon
|
175 |
+
( fs_ends_with( $subdomain, 'pantheonsite.io' ) &&
|
176 |
+
( fs_starts_with( $subdomain, 'test-' ) || fs_starts_with( $subdomain, 'dev-' ) ) ) ||
|
177 |
// Cloudways
|
178 |
fs_ends_with( $subdomain, '.cloudwaysapps.com' ) ||
|
179 |
// Kinsta
|
180 |
+
( fs_starts_with( $subdomain, 'staging-' ) && ( fs_ends_with( $subdomain, '.kinsta.com' ) || fs_ends_with( $subdomain, '.kinsta.cloud' ) ) ) ||
|
181 |
// DesktopServer
|
182 |
fs_ends_with( $subdomain, '.dev.cc' )
|
183 |
);
|
freemius/includes/entities/class-fs-subscription.php
CHANGED
@@ -1,125 +1,147 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.9
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
class FS_Subscription extends FS_Entity {
|
14 |
+
|
15 |
+
#region Properties
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @var number
|
19 |
+
*/
|
20 |
+
public $user_id;
|
21 |
+
/**
|
22 |
+
* @var number
|
23 |
+
*/
|
24 |
+
public $install_id;
|
25 |
+
/**
|
26 |
+
* @var number
|
27 |
+
*/
|
28 |
+
public $plan_id;
|
29 |
+
/**
|
30 |
+
* @var number
|
31 |
+
*/
|
32 |
+
public $license_id;
|
33 |
+
/**
|
34 |
+
* @var float
|
35 |
+
*/
|
36 |
+
public $total_gross;
|
37 |
+
/**
|
38 |
+
* @var float
|
39 |
+
*/
|
40 |
+
public $amount_per_cycle;
|
41 |
+
/**
|
42 |
+
* @var int # of months
|
43 |
+
*/
|
44 |
+
public $billing_cycle;
|
45 |
+
/**
|
46 |
+
* @var float
|
47 |
+
*/
|
48 |
+
public $outstanding_balance;
|
49 |
+
/**
|
50 |
+
* @var int
|
51 |
+
*/
|
52 |
+
public $failed_payments;
|
53 |
+
/**
|
54 |
+
* @var string
|
55 |
+
*/
|
56 |
+
public $gateway;
|
57 |
+
/**
|
58 |
+
* @var string
|
59 |
+
*/
|
60 |
+
public $external_id;
|
61 |
+
/**
|
62 |
+
* @var string|null
|
63 |
+
*/
|
64 |
+
public $trial_ends;
|
65 |
+
/**
|
66 |
+
* @var string|null Datetime of the next payment, or null if cancelled.
|
67 |
+
*/
|
68 |
+
public $next_payment;
|
69 |
+
/**
|
70 |
+
* @since 2.3.1
|
71 |
+
*
|
72 |
+
* @var string|null Datetime of the cancellation.
|
73 |
+
*/
|
74 |
+
public $canceled_at;
|
75 |
+
/**
|
76 |
+
* @var string|null
|
77 |
+
*/
|
78 |
+
public $vat_id;
|
79 |
+
/**
|
80 |
+
* @var string Two characters country code
|
81 |
+
*/
|
82 |
+
public $country_code;
|
83 |
+
|
84 |
+
#endregion Properties
|
85 |
+
|
86 |
+
/**
|
87 |
+
* @param object|bool $subscription
|
88 |
+
*/
|
89 |
+
function __construct( $subscription = false ) {
|
90 |
+
parent::__construct( $subscription );
|
91 |
+
}
|
92 |
+
|
93 |
+
static function get_type() {
|
94 |
+
return 'subscription';
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Check if subscription is active.
|
99 |
+
*
|
100 |
+
* @author Vova Feldman (@svovaf)
|
101 |
+
* @since 1.0.9
|
102 |
+
*
|
103 |
+
* @return bool
|
104 |
+
*/
|
105 |
+
function is_active() {
|
106 |
+
if ( $this->is_canceled() ) {
|
107 |
+
return false;
|
108 |
+
}
|
109 |
+
|
110 |
+
return (
|
111 |
+
! empty( $this->next_payment ) &&
|
112 |
+
strtotime( $this->next_payment ) > WP_FS__SCRIPT_START_TIME
|
113 |
+
);
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* @author Vova Feldman (@svovaf)
|
118 |
+
* @since 2.3.1
|
119 |
+
*
|
120 |
+
* @return bool
|
121 |
+
*/
|
122 |
+
function is_canceled() {
|
123 |
+
return ! is_null( $this->canceled_at );
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Subscription considered to be new without any payments
|
128 |
+
* if the next payment should be made within less than 24 hours
|
129 |
+
* from the subscription creation.
|
130 |
+
*
|
131 |
+
* @author Vova Feldman (@svovaf)
|
132 |
+
* @since 1.0.9
|
133 |
+
*
|
134 |
+
* @return bool
|
135 |
+
*/
|
136 |
+
function is_first_payment_pending() {
|
137 |
+
return ( WP_FS__TIME_24_HOURS_IN_SEC >= strtotime( $this->next_payment ) - strtotime( $this->created ) );
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* @author Vova Feldman (@svovaf)
|
142 |
+
* @since 1.1.7
|
143 |
+
*/
|
144 |
+
function has_trial() {
|
145 |
+
return ! is_null( $this->trial_ends );
|
146 |
+
}
|
147 |
+
}
|
freemius/includes/entities/class-fs-user.php
CHANGED
@@ -1,79 +1,79 @@
|
|
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 |
-
class FS_User extends FS_Scope_Entity {
|
14 |
-
|
15 |
-
#region Properties
|
16 |
-
|
17 |
-
/**
|
18 |
-
* @var string
|
19 |
-
*/
|
20 |
-
public $email;
|
21 |
-
/**
|
22 |
-
* @var string
|
23 |
-
*/
|
24 |
-
public $first;
|
25 |
-
/**
|
26 |
-
* @var string
|
27 |
-
*/
|
28 |
-
public $last;
|
29 |
-
/**
|
30 |
-
* @var bool
|
31 |
-
*/
|
32 |
-
public $is_verified;
|
33 |
-
/**
|
34 |
-
* @author Leo Fajardo (@leorw)
|
35 |
-
* @since 2.3.0
|
36 |
-
*
|
37 |
-
* @var bool
|
38 |
-
*/
|
39 |
-
public $is_beta;
|
40 |
-
/**
|
41 |
-
* @var string|null
|
42 |
-
*/
|
43 |
-
public $customer_id;
|
44 |
-
/**
|
45 |
-
* @var float
|
46 |
-
*/
|
47 |
-
public $gross;
|
48 |
-
|
49 |
-
#endregion Properties
|
50 |
-
|
51 |
-
/**
|
52 |
-
* @param object|bool $user
|
53 |
-
*/
|
54 |
-
function __construct( $user = false ) {
|
55 |
-
parent::__construct( $user );
|
56 |
-
}
|
57 |
-
|
58 |
-
function get_name() {
|
59 |
-
return trim( ucfirst( trim( is_string( $this->first ) ? $this->first : '' ) ) . ' ' . ucfirst( trim( is_string( $this->last ) ? $this->last : '' ) ) );
|
60 |
-
}
|
61 |
-
|
62 |
-
function is_verified() {
|
63 |
-
return ( isset( $this->is_verified ) && true === $this->is_verified );
|
64 |
-
}
|
65 |
-
|
66 |
-
/**
|
67 |
-
* @author Leo Fajardo (@leorw)
|
68 |
-
* @since 2.3.0
|
69 |
-
*
|
70 |
-
* @return bool
|
71 |
-
*/
|
72 |
-
function is_beta() {
|
73 |
-
return ( isset( $this->is_beta ) && true === $this->is_beta );
|
74 |
-
}
|
75 |
-
|
76 |
-
static function get_type() {
|
77 |
-
return 'user';
|
78 |
-
}
|
79 |
}
|
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 |
+
class FS_User extends FS_Scope_Entity {
|
14 |
+
|
15 |
+
#region Properties
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
public $email;
|
21 |
+
/**
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
public $first;
|
25 |
+
/**
|
26 |
+
* @var string
|
27 |
+
*/
|
28 |
+
public $last;
|
29 |
+
/**
|
30 |
+
* @var bool
|
31 |
+
*/
|
32 |
+
public $is_verified;
|
33 |
+
/**
|
34 |
+
* @author Leo Fajardo (@leorw)
|
35 |
+
* @since 2.3.0
|
36 |
+
*
|
37 |
+
* @var bool
|
38 |
+
*/
|
39 |
+
public $is_beta;
|
40 |
+
/**
|
41 |
+
* @var string|null
|
42 |
+
*/
|
43 |
+
public $customer_id;
|
44 |
+
/**
|
45 |
+
* @var float
|
46 |
+
*/
|
47 |
+
public $gross;
|
48 |
+
|
49 |
+
#endregion Properties
|
50 |
+
|
51 |
+
/**
|
52 |
+
* @param object|bool $user
|
53 |
+
*/
|
54 |
+
function __construct( $user = false ) {
|
55 |
+
parent::__construct( $user );
|
56 |
+
}
|
57 |
+
|
58 |
+
function get_name() {
|
59 |
+
return trim( ucfirst( trim( is_string( $this->first ) ? $this->first : '' ) ) . ' ' . ucfirst( trim( is_string( $this->last ) ? $this->last : '' ) ) );
|
60 |
+
}
|
61 |
+
|
62 |
+
function is_verified() {
|
63 |
+
return ( isset( $this->is_verified ) && true === $this->is_verified );
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* @author Leo Fajardo (@leorw)
|
68 |
+
* @since 2.3.0
|
69 |
+
*
|
70 |
+
* @return bool
|
71 |
+
*/
|
72 |
+
function is_beta() {
|
73 |
+
return ( isset( $this->is_beta ) && true === $this->is_beta );
|
74 |
+
}
|
75 |
+
|
76 |
+
static function get_type() {
|
77 |
+
return 'user';
|
78 |
+
}
|
79 |
}
|
freemius/includes/fs-core-functions.php
CHANGED
@@ -63,62 +63,70 @@
|
|
63 |
/* Scripts and styles including.
|
64 |
--------------------------------------------------------------------------------------------*/
|
65 |
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
$wp_plugins_dir = fs_normalize_path( WP_PLUGIN_DIR );
|
96 |
-
if ( 0 === strpos( $asset_abs_path, $wp_plugins_dir ) ) {
|
97 |
-
// Try to handle plugin assets that may be located in a non-standard plugins directory.
|
98 |
-
$asset_rel_path = str_replace( $wp_plugins_dir, '', $asset_abs_path );
|
99 |
-
$asset_url = plugins_url( fs_normalize_path( $asset_rel_path ) );
|
100 |
} else {
|
101 |
-
|
102 |
-
$
|
103 |
-
|
104 |
-
|
105 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
}
|
107 |
-
}
|
108 |
|
109 |
-
|
|
|
110 |
}
|
111 |
|
112 |
-
|
113 |
-
|
|
|
|
|
114 |
}
|
115 |
|
116 |
-
|
117 |
-
|
|
|
|
|
118 |
}
|
119 |
|
120 |
-
|
121 |
-
|
|
|
|
|
122 |
}
|
123 |
|
124 |
#--------------------------------------------------------------------------------
|
@@ -315,138 +323,191 @@
|
|
315 |
|
316 |
/* Core UI.
|
317 |
--------------------------------------------------------------------------------------------*/
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
$page,
|
336 |
-
$action,
|
337 |
-
$title,
|
338 |
-
$button_class = '',
|
339 |
-
$params = array(),
|
340 |
-
$is_primary = true,
|
341 |
-
$is_small = false,
|
342 |
-
$icon_class = false,
|
343 |
-
$confirmation = false,
|
344 |
-
$method = 'GET'
|
345 |
-
) {
|
346 |
-
echo fs_ui_get_action_button(
|
347 |
$module_id,
|
348 |
$page,
|
349 |
$action,
|
350 |
$title,
|
351 |
-
$button_class,
|
352 |
-
$params,
|
353 |
-
$is_primary,
|
354 |
-
$is_small,
|
355 |
-
$icon_class,
|
356 |
-
$confirmation,
|
357 |
-
$method
|
358 |
-
)
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
* @author Vova Feldman (@svovaf)
|
363 |
-
* @since 1.1.7
|
364 |
-
*
|
365 |
-
* @param number $module_id
|
366 |
-
* @param string $page
|
367 |
-
* @param string $action
|
368 |
-
* @param string $title
|
369 |
-
* @param string $button_class
|
370 |
-
* @param array $params
|
371 |
-
* @param bool $is_primary
|
372 |
-
* @param bool $is_small
|
373 |
-
* @param string|bool $icon_class Optional class for an icon.
|
374 |
-
* @param string|bool $confirmation Optional confirmation message before submit.
|
375 |
-
* @param string $method
|
376 |
-
*
|
377 |
-
* @return string
|
378 |
-
*/
|
379 |
-
function fs_ui_get_action_button(
|
380 |
-
$module_id,
|
381 |
-
$page,
|
382 |
-
$action,
|
383 |
-
$title,
|
384 |
-
$button_class = '',
|
385 |
-
$params = array(),
|
386 |
-
$is_primary = true,
|
387 |
-
$is_small = false,
|
388 |
-
$icon_class = false,
|
389 |
-
$confirmation = false,
|
390 |
-
$method = 'GET'
|
391 |
-
) {
|
392 |
-
// Prepend icon (if set).
|
393 |
-
$title = ( is_string( $icon_class ) ? '<i class="' . $icon_class . '"></i> ' : '' ) . $title;
|
394 |
-
|
395 |
-
if ( is_string( $confirmation ) ) {
|
396 |
-
return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="if (confirm(\'%s\')) this.parentNode.submit(); return false;">%s</a></form>',
|
397 |
-
freemius( $module_id )->_get_admin_page_url( $page, $params ),
|
398 |
-
$method,
|
399 |
$action,
|
400 |
-
|
401 |
-
|
|
|
|
|
|
|
|
|
402 |
$confirmation,
|
403 |
-
$
|
404 |
-
);
|
405 |
-
} else if ( 'GET' !== strtoupper( $method ) ) {
|
406 |
-
return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="this.parentNode.submit(); return false;">%s</a></form>',
|
407 |
-
freemius( $module_id )->_get_admin_page_url( $page, $params ),
|
408 |
-
$method,
|
409 |
-
$action,
|
410 |
-
wp_nonce_field( $action, '_wpnonce', true, false ),
|
411 |
-
'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
|
412 |
-
$title
|
413 |
-
);
|
414 |
-
} else {
|
415 |
-
return sprintf( '<a href="%s" class="%s">%s</a></form>',
|
416 |
-
wp_nonce_url( freemius( $module_id )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ),
|
417 |
-
'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
|
418 |
-
$title
|
419 |
);
|
420 |
}
|
421 |
}
|
422 |
|
423 |
-
|
424 |
-
|
425 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
426 |
}
|
427 |
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
// break;
|
446 |
-
// }
|
447 |
}
|
448 |
|
449 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
450 |
|
451 |
if ( ! function_exists( 'fs_nonce_url' ) ) {
|
452 |
/**
|
@@ -634,71 +695,75 @@
|
|
634 |
|
635 |
#endregion Url Canonization ------------------------------------------------------------------
|
636 |
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
|
|
649 |
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
|
659 |
-
|
660 |
-
|
661 |
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
|
667 |
-
|
668 |
-
|
669 |
|
670 |
-
|
|
|
671 |
}
|
672 |
|
673 |
/* General Utilities
|
674 |
--------------------------------------------------------------------------------------------*/
|
675 |
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
688 |
|
689 |
-
|
690 |
-
|
691 |
-
return 1;
|
692 |
-
} // If b has a priority and a does not, b wins.
|
693 |
-
elseif ( isset( $a['priority'] ) && ! isset( $b['priority'] ) ) {
|
694 |
-
return - 1;
|
695 |
-
} // If neither has a priority or both priorities are equal its a tie.
|
696 |
-
elseif ( ( ! isset( $a['priority'] ) && ! isset( $b['priority'] ) ) || $a['priority'] === $b['priority'] ) {
|
697 |
-
return 0;
|
698 |
}
|
699 |
-
|
700 |
-
// If both have priority return the winner.
|
701 |
-
return ( $a['priority'] < $b['priority'] ) ? - 1 : 1;
|
702 |
}
|
703 |
|
704 |
#--------------------------------------------------------------------------------
|
63 |
/* Scripts and styles including.
|
64 |
--------------------------------------------------------------------------------------------*/
|
65 |
|
66 |
+
if ( ! function_exists( 'fs_asset_url' ) ) {
|
67 |
+
/**
|
68 |
+
* Generates an absolute URL to the given path. This function ensures that the URL will be correct whether the asset
|
69 |
+
* is inside a plugin's folder or a theme's folder.
|
70 |
+
*
|
71 |
+
* Examples:
|
72 |
+
* 1. "themes" folder
|
73 |
+
* Path: C:/xampp/htdocs/fswp/wp-content/themes/twentytwelve/freemius/assets/css/admin/common.css
|
74 |
+
* URL: http://fswp:8080/wp-content/themes/twentytwelve/freemius/assets/css/admin/common.css
|
75 |
+
*
|
76 |
+
* 2. "plugins" folder
|
77 |
+
* Path: C:/xampp/htdocs/fswp/wp-content/plugins/rating-widget-premium/freemius/assets/css/admin/common.css
|
78 |
+
* URL: http://fswp:8080/wp-content/plugins/rating-widget-premium/freemius/assets/css/admin/common.css
|
79 |
+
*
|
80 |
+
* @author Leo Fajardo (@leorw)
|
81 |
+
* @since 1.2.2
|
82 |
+
*
|
83 |
+
* @param string $asset_abs_path Asset's absolute path.
|
84 |
+
*
|
85 |
+
* @return string Asset's URL.
|
86 |
+
*/
|
87 |
+
function fs_asset_url( $asset_abs_path ) {
|
88 |
+
$wp_content_dir = fs_normalize_path( WP_CONTENT_DIR );
|
89 |
+
$asset_abs_path = fs_normalize_path( $asset_abs_path );
|
90 |
+
|
91 |
+
if ( 0 === strpos( $asset_abs_path, $wp_content_dir ) ) {
|
92 |
+
// Handle both theme and plugin assets located in the standard directories.
|
93 |
+
$asset_rel_path = str_replace( $wp_content_dir, '', $asset_abs_path );
|
94 |
+
$asset_url = content_url( fs_normalize_path( $asset_rel_path ) );
|
|
|
|
|
|
|
|
|
|
|
95 |
} else {
|
96 |
+
$wp_plugins_dir = fs_normalize_path( WP_PLUGIN_DIR );
|
97 |
+
if ( 0 === strpos( $asset_abs_path, $wp_plugins_dir ) ) {
|
98 |
+
// Try to handle plugin assets that may be located in a non-standard plugins directory.
|
99 |
+
$asset_rel_path = str_replace( $wp_plugins_dir, '', $asset_abs_path );
|
100 |
+
$asset_url = plugins_url( fs_normalize_path( $asset_rel_path ) );
|
101 |
+
} else {
|
102 |
+
// Try to handle theme assets that may be located in a non-standard themes directory.
|
103 |
+
$active_theme_stylesheet = get_stylesheet();
|
104 |
+
$wp_themes_dir = fs_normalize_path( trailingslashit( get_theme_root( $active_theme_stylesheet ) ) );
|
105 |
+
$asset_rel_path = str_replace( $wp_themes_dir, '', fs_normalize_path( $asset_abs_path ) );
|
106 |
+
$asset_url = trailingslashit( get_theme_root_uri( $active_theme_stylesheet ) ) . fs_normalize_path( $asset_rel_path );
|
107 |
+
}
|
108 |
}
|
|
|
109 |
|
110 |
+
return $asset_url;
|
111 |
+
}
|
112 |
}
|
113 |
|
114 |
+
if ( ! function_exists( 'fs_enqueue_local_style' ) ) {
|
115 |
+
function fs_enqueue_local_style( $handle, $path, $deps = array(), $ver = false, $media = 'all' ) {
|
116 |
+
wp_enqueue_style( $handle, fs_asset_url( WP_FS__DIR_CSS . '/' . trim( $path, '/' ) ), $deps, $ver, $media );
|
117 |
+
}
|
118 |
}
|
119 |
|
120 |
+
if ( ! function_exists( 'fs_enqueue_local_script' ) ) {
|
121 |
+
function fs_enqueue_local_script( $handle, $path, $deps = array(), $ver = false, $in_footer = 'all' ) {
|
122 |
+
wp_enqueue_script( $handle, fs_asset_url( WP_FS__DIR_JS . '/' . trim( $path, '/' ) ), $deps, $ver, $in_footer );
|
123 |
+
}
|
124 |
}
|
125 |
|
126 |
+
if ( ! function_exists( 'fs_img_url' ) ) {
|
127 |
+
function fs_img_url( $path, $img_dir = WP_FS__DIR_IMG ) {
|
128 |
+
return ( fs_asset_url( $img_dir . '/' . trim( $path, '/' ) ) );
|
129 |
+
}
|
130 |
}
|
131 |
|
132 |
#--------------------------------------------------------------------------------
|
323 |
|
324 |
/* Core UI.
|
325 |
--------------------------------------------------------------------------------------------*/
|
326 |
+
if ( ! function_exists( 'fs_ui_action_button' ) ) {
|
327 |
+
/**
|
328 |
+
* @param number $module_id
|
329 |
+
* @param string $page
|
330 |
+
* @param string $action
|
331 |
+
* @param string $title
|
332 |
+
* @param string $button_class
|
333 |
+
* @param array $params
|
334 |
+
* @param bool $is_primary
|
335 |
+
* @param bool $is_small
|
336 |
+
* @param string|bool $icon_class Optional class for an icon (since 1.1.7).
|
337 |
+
* @param string|bool $confirmation Optional confirmation message before submit (since 1.1.7).
|
338 |
+
* @param string $method Since 1.1.7
|
339 |
+
*
|
340 |
+
* @uses fs_ui_get_action_button()
|
341 |
+
*/
|
342 |
+
function fs_ui_action_button(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
343 |
$module_id,
|
344 |
$page,
|
345 |
$action,
|
346 |
$title,
|
347 |
+
$button_class = '',
|
348 |
+
$params = array(),
|
349 |
+
$is_primary = true,
|
350 |
+
$is_small = false,
|
351 |
+
$icon_class = false,
|
352 |
+
$confirmation = false,
|
353 |
+
$method = 'GET'
|
354 |
+
) {
|
355 |
+
echo fs_ui_get_action_button(
|
356 |
+
$module_id,
|
357 |
+
$page,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
358 |
$action,
|
359 |
+
$title,
|
360 |
+
$button_class,
|
361 |
+
$params,
|
362 |
+
$is_primary,
|
363 |
+
$is_small,
|
364 |
+
$icon_class,
|
365 |
$confirmation,
|
366 |
+
$method
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
367 |
);
|
368 |
}
|
369 |
}
|
370 |
|
371 |
+
if ( ! function_exists( 'fs_ui_get_action_button' ) ) {
|
372 |
+
/**
|
373 |
+
* @author Vova Feldman (@svovaf)
|
374 |
+
* @since 1.1.7
|
375 |
+
*
|
376 |
+
* @param number $module_id
|
377 |
+
* @param string $page
|
378 |
+
* @param string $action
|
379 |
+
* @param string $title
|
380 |
+
* @param string $button_class
|
381 |
+
* @param array $params
|
382 |
+
* @param bool $is_primary
|
383 |
+
* @param bool $is_small
|
384 |
+
* @param string|bool $icon_class Optional class for an icon.
|
385 |
+
* @param string|bool $confirmation Optional confirmation message before submit.
|
386 |
+
* @param string $method
|
387 |
+
*
|
388 |
+
* @return string
|
389 |
+
*/
|
390 |
+
function fs_ui_get_action_button(
|
391 |
+
$module_id,
|
392 |
+
$page,
|
393 |
+
$action,
|
394 |
+
$title,
|
395 |
+
$button_class = '',
|
396 |
+
$params = array(),
|
397 |
+
$is_primary = true,
|
398 |
+
$is_small = false,
|
399 |
+
$icon_class = false,
|
400 |
+
$confirmation = false,
|
401 |
+
$method = 'GET'
|
402 |
+
) {
|
403 |
+
// Prepend icon (if set).
|
404 |
+
$title = ( is_string( $icon_class ) ? '<i class="' . $icon_class . '"></i> ' : '' ) . $title;
|
405 |
+
|
406 |
+
if ( is_string( $confirmation ) ) {
|
407 |
+
return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="if (confirm(\'%s\')) this.parentNode.submit(); return false;">%s</a></form>',
|
408 |
+
freemius( $module_id )->_get_admin_page_url( $page, $params ),
|
409 |
+
$method,
|
410 |
+
$action,
|
411 |
+
wp_nonce_field( $action, '_wpnonce', true, false ),
|
412 |
+
'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
|
413 |
+
$confirmation,
|
414 |
+
$title
|
415 |
+
);
|
416 |
+
} else if ( 'GET' !== strtoupper( $method ) ) {
|
417 |
+
return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="this.parentNode.submit(); return false;">%s</a></form>',
|
418 |
+
freemius( $module_id )->_get_admin_page_url( $page, $params ),
|
419 |
+
$method,
|
420 |
+
$action,
|
421 |
+
wp_nonce_field( $action, '_wpnonce', true, false ),
|
422 |
+
'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
|
423 |
+
$title
|
424 |
+
);
|
425 |
+
} else {
|
426 |
+
return sprintf( '<a href="%s" class="%s">%s</a></form>',
|
427 |
+
wp_nonce_url( freemius( $module_id )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ),
|
428 |
+
'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
|
429 |
+
$title
|
430 |
+
);
|
431 |
+
}
|
432 |
+
}
|
433 |
+
|
434 |
+
function fs_ui_action_link( $module_id, $page, $action, $title, $params = array() ) {
|
435 |
+
?><a class=""
|
436 |
+
href="<?php echo wp_nonce_url( freemius( $module_id )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ) ?>"><?php echo $title ?></a><?php
|
437 |
+
}
|
438 |
}
|
439 |
|
440 |
+
if ( ! function_exists( 'fs_get_entity' ) ) {
|
441 |
+
/**
|
442 |
+
* @author Leo Fajardo (@leorw)
|
443 |
+
* @since 2.3.1
|
444 |
+
*
|
445 |
+
* @param mixed $entity
|
446 |
+
* @param string $class
|
447 |
+
*
|
448 |
+
* @return FS_Plugin|FS_User|FS_Site|FS_Plugin_License|FS_Plugin_Plan|FS_Plugin_Tag|FS_Subscription
|
449 |
+
*/
|
450 |
+
function fs_get_entity( $entity, $class ) {
|
451 |
+
if ( ! is_object( $entity ) || $entity instanceof $class ) {
|
452 |
+
return $entity;
|
453 |
+
}
|
454 |
+
|
455 |
+
return new $class( $entity );
|
456 |
+
}
|
|
|
|
|
457 |
}
|
458 |
|
459 |
+
if ( ! function_exists( 'fs_get_entities' ) ) {
|
460 |
+
/**
|
461 |
+
* @author Leo Fajardo (@leorw)
|
462 |
+
* @since 2.3.1
|
463 |
+
*
|
464 |
+
* @param mixed $entities
|
465 |
+
* @param string $class_name
|
466 |
+
*
|
467 |
+
* @return FS_Plugin[]|FS_User[]|FS_Site[]|FS_Plugin_License[]|FS_Plugin_Plan[]|FS_Plugin_Tag[]|FS_Subscription[]
|
468 |
+
*/
|
469 |
+
function fs_get_entities( $entities, $class_name ) {
|
470 |
+
if ( ! is_array( $entities ) || empty( $entities ) ) {
|
471 |
+
return $entities;
|
472 |
+
}
|
473 |
+
|
474 |
+
// Get first element.
|
475 |
+
$first_array_element = reset( $entities );
|
476 |
+
|
477 |
+
if ( $first_array_element instanceof $class_name ) {
|
478 |
+
/**
|
479 |
+
* If the first element of the array is an instance of the context class, assume that all other
|
480 |
+
* elements are instances of the class.
|
481 |
+
*/
|
482 |
+
return $entities;
|
483 |
+
}
|
484 |
+
|
485 |
+
if (
|
486 |
+
is_array( $first_array_element ) &&
|
487 |
+
! empty( $first_array_element )
|
488 |
+
) {
|
489 |
+
$first_array_element = reset( $first_array_element );
|
490 |
+
|
491 |
+
if ( $first_array_element instanceof $class_name ) {
|
492 |
+
/**
|
493 |
+
* If the first element of the `$entities` array is an array whose first element is an instance of the
|
494 |
+
* context class, assume that all other objects are instances of the class.
|
495 |
+
*/
|
496 |
+
return $entities;
|
497 |
+
}
|
498 |
+
}
|
499 |
+
|
500 |
+
foreach ( $entities as $key => $entities_or_entity ) {
|
501 |
+
if ( is_array( $entities_or_entity ) ) {
|
502 |
+
$entities[ $key ] = fs_get_entities( $entities_or_entity, $class_name );
|
503 |
+
} else {
|
504 |
+
$entities[ $key ] = fs_get_entity( $entities_or_entity, $class_name );
|
505 |
+
}
|
506 |
+
}
|
507 |
+
|
508 |
+
return $entities;
|
509 |
+
}
|
510 |
+
}
|
511 |
|
512 |
if ( ! function_exists( 'fs_nonce_url' ) ) {
|
513 |
/**
|
695 |
|
696 |
#endregion Url Canonization ------------------------------------------------------------------
|
697 |
|
698 |
+
if ( ! function_exists( 'fs_download_image' ) ) {
|
699 |
+
/**
|
700 |
+
* @author Vova Feldman (@svovaf)
|
701 |
+
*
|
702 |
+
* @since 1.2.2 Changed to usage of WP_Filesystem_Direct.
|
703 |
+
*
|
704 |
+
* @param string $from URL
|
705 |
+
* @param string $to File path.
|
706 |
+
*
|
707 |
+
* @return bool Is successfully downloaded.
|
708 |
+
*/
|
709 |
+
function fs_download_image( $from, $to ) {
|
710 |
+
$dir = dirname( $to );
|
711 |
|
712 |
+
if ( 'direct' !== get_filesystem_method( array(), $dir ) ) {
|
713 |
+
return false;
|
714 |
+
}
|
715 |
|
716 |
+
if ( ! class_exists( 'WP_Filesystem_Direct' ) ) {
|
717 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
|
718 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';
|
719 |
+
}
|
720 |
|
721 |
+
$fs = new WP_Filesystem_Direct( '' );
|
722 |
+
$tmpfile = download_url( $from );
|
723 |
|
724 |
+
if ( $tmpfile instanceof WP_Error ) {
|
725 |
+
// Issue downloading the file.
|
726 |
+
return false;
|
727 |
+
}
|
728 |
|
729 |
+
$fs->copy( $tmpfile, $to );
|
730 |
+
$fs->delete( $tmpfile );
|
731 |
|
732 |
+
return true;
|
733 |
+
}
|
734 |
}
|
735 |
|
736 |
/* General Utilities
|
737 |
--------------------------------------------------------------------------------------------*/
|
738 |
|
739 |
+
if ( ! function_exists( 'fs_sort_by_priority' ) ) {
|
740 |
+
/**
|
741 |
+
* Sorts an array by the value of the priority key.
|
742 |
+
*
|
743 |
+
* @author Daniel Iser (@danieliser)
|
744 |
+
* @since 1.1.7
|
745 |
+
*
|
746 |
+
* @param $a
|
747 |
+
* @param $b
|
748 |
+
*
|
749 |
+
* @return int
|
750 |
+
*/
|
751 |
+
function fs_sort_by_priority( $a, $b ) {
|
752 |
+
|
753 |
+
// If b has a priority and a does not, b wins.
|
754 |
+
if ( ! isset( $a['priority'] ) && isset( $b['priority'] ) ) {
|
755 |
+
return 1;
|
756 |
+
} // If b has a priority and a does not, b wins.
|
757 |
+
elseif ( isset( $a['priority'] ) && ! isset( $b['priority'] ) ) {
|
758 |
+
return - 1;
|
759 |
+
} // If neither has a priority or both priorities are equal its a tie.
|
760 |
+
elseif ( ( ! isset( $a['priority'] ) && ! isset( $b['priority'] ) ) || $a['priority'] === $b['priority'] ) {
|
761 |
+
return 0;
|
762 |
+
}
|
763 |
|
764 |
+
// If both have priority return the winner.
|
765 |
+
return ( $a['priority'] < $b['priority'] ) ? - 1 : 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
766 |
}
|
|
|
|
|
|
|
767 |
}
|
768 |
|
769 |
#--------------------------------------------------------------------------------
|
freemius/includes/fs-essential-functions.php
CHANGED
@@ -344,7 +344,11 @@
|
|
344 |
}
|
345 |
|
346 |
if ( ! isset( $newest_sdk->type ) || 'theme' !== $newest_sdk->type ) {
|
347 |
-
|
|
|
|
|
|
|
|
|
348 |
} else {
|
349 |
$theme = wp_get_theme();
|
350 |
$in_activation = ( $newest_sdk->plugin_path == $theme->stylesheet );
|
344 |
}
|
345 |
|
346 |
if ( ! isset( $newest_sdk->type ) || 'theme' !== $newest_sdk->type ) {
|
347 |
+
if ( ! function_exists( 'is_plugin_active' ) ) {
|
348 |
+
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
349 |
+
}
|
350 |
+
|
351 |
+
$in_activation = ( ! is_plugin_active( $plugin_file ) );
|
352 |
} else {
|
353 |
$theme = wp_get_theme();
|
354 |
$in_activation = ( $newest_sdk->plugin_path == $theme->stylesheet );
|
freemius/includes/fs-plugin-info-dialog.php
CHANGED
@@ -145,15 +145,36 @@
|
|
145 |
}
|
146 |
|
147 |
if ( is_array( $pricing ) && 0 < count( $pricing ) ) {
|
148 |
-
$
|
149 |
|
150 |
-
foreach ( $pricing as
|
151 |
$prices = new FS_Pricing( $prices );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
}
|
153 |
|
154 |
-
$
|
|
|
155 |
|
156 |
-
|
|
|
|
|
|
|
157 |
}
|
158 |
|
159 |
if ( is_array( $features ) && 0 < count( $features ) ) {
|
@@ -1047,7 +1068,7 @@
|
|
1047 |
$href = add_query_arg( array( 'tab' => $tab, 'section' => $section_name ) );
|
1048 |
$href = esc_url( $href );
|
1049 |
$san_section = esc_attr( $section_name );
|
1050 |
-
echo "\t<a name='$san_section' href='$href' $class
|
1051 |
}
|
1052 |
|
1053 |
echo "</div>\n";
|
@@ -1414,7 +1435,7 @@
|
|
1414 |
$stars_label
|
1415 |
) ) ?>"><?php echo $stars_label ?></a></span>
|
1416 |
<span class="counter-back">
|
1417 |
-
<span class="counter-bar" style="width: <?php echo 92 * $_rating; ?>px;"></span>
|
1418 |
</span>
|
1419 |
<span class="counter-count"><?php echo number_format_i18n( $ratecount ); ?></span>
|
1420 |
</div>
|
145 |
}
|
146 |
|
147 |
if ( is_array( $pricing ) && 0 < count( $pricing ) ) {
|
148 |
+
$filtered_pricing = array();
|
149 |
|
150 |
+
foreach ( $pricing as $prices ) {
|
151 |
$prices = new FS_Pricing( $prices );
|
152 |
+
|
153 |
+
if ( ! $prices->is_usd() ) {
|
154 |
+
/**
|
155 |
+
* Skip non-USD pricing.
|
156 |
+
*
|
157 |
+
* @author Leo Fajardo (@leorw)
|
158 |
+
* @since 2.3.1
|
159 |
+
*/
|
160 |
+
continue;
|
161 |
+
}
|
162 |
+
|
163 |
+
if ( ( $prices->has_monthly() && $prices->monthly_price > 1.0 ) ||
|
164 |
+
( $prices->has_annual() && $prices->annual_price > 1.0 ) ||
|
165 |
+
( $prices->has_lifetime() && $prices->lifetime_price > 1.0 )
|
166 |
+
) {
|
167 |
+
$filtered_pricing[] = $prices;
|
168 |
+
}
|
169 |
}
|
170 |
|
171 |
+
if ( ! empty( $filtered_pricing ) ) {
|
172 |
+
$has_paid_plan = true;
|
173 |
|
174 |
+
$plan->pricing = $filtered_pricing;
|
175 |
+
|
176 |
+
$has_pricing = true;
|
177 |
+
}
|
178 |
}
|
179 |
|
180 |
if ( is_array( $features ) && 0 < count( $features ) ) {
|
1068 |
$href = add_query_arg( array( 'tab' => $tab, 'section' => $section_name ) );
|
1069 |
$href = esc_url( $href );
|
1070 |
$san_section = esc_attr( $section_name );
|
1071 |
+
echo "\t<a name='$san_section' href='$href' $class>" . esc_html( $title ) . "</a>\n";
|
1072 |
}
|
1073 |
|
1074 |
echo "</div>\n";
|
1435 |
$stars_label
|
1436 |
) ) ?>"><?php echo $stars_label ?></a></span>
|
1437 |
<span class="counter-back">
|
1438 |
+
<span class="counter-bar" style="width: <?php echo absint(92 * $_rating); ?>px;"></span>
|
1439 |
</span>
|
1440 |
<span class="counter-count"><?php echo number_format_i18n( $ratecount ); ?></span>
|
1441 |
</div>
|
freemius/includes/managers/class-fs-admin-menu-manager.php
CHANGED
@@ -430,41 +430,62 @@
|
|
430 |
$this->get_raw_slug();
|
431 |
}
|
432 |
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
*
|
449 |
-
* @since 1.2.2
|
450 |
-
*/
|
451 |
-
return true;
|
452 |
-
}
|
453 |
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
463 |
|
464 |
-
|
465 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
466 |
|
467 |
-
|
468 |
|
469 |
/**
|
470 |
* Override submenu's action.
|
430 |
$this->get_raw_slug();
|
431 |
}
|
432 |
|
433 |
+
/**
|
434 |
+
* Is user on plugin's admin activation page.
|
435 |
+
*
|
436 |
+
* @author Vova Feldman (@svovaf)
|
437 |
+
* @since 1.0.8
|
438 |
+
*
|
439 |
+
* @param bool $show_opt_in_on_themes_page Since 2.3.1
|
440 |
+
*
|
441 |
+
* @return bool
|
442 |
+
*
|
443 |
+
* @deprecated Please use is_activation_page() instead.
|
444 |
+
*/
|
445 |
+
function is_main_settings_page( $show_opt_in_on_themes_page = false ) {
|
446 |
+
return $this->is_activation_page( $show_opt_in_on_themes_page );
|
447 |
+
}
|
|
|
|
|
|
|
|
|
|
|
448 |
|
449 |
+
/**
|
450 |
+
* Is user on product's admin activation page.
|
451 |
+
*
|
452 |
+
* @author Vova Feldman (@svovaf)
|
453 |
+
* @since 2.3.1
|
454 |
+
*
|
455 |
+
* @param bool $show_opt_in_on_themes_page Since 2.3.1
|
456 |
+
*
|
457 |
+
* @return bool
|
458 |
+
*/
|
459 |
+
function is_activation_page( $show_opt_in_on_themes_page = false ) {
|
460 |
+
if ( $show_opt_in_on_themes_page ) {
|
461 |
+
/**
|
462 |
+
* In activation only when show_optin query string param is given.
|
463 |
+
*
|
464 |
+
* @since 1.2.2
|
465 |
+
*/
|
466 |
+
return (
|
467 |
+
( WP_FS__MODULE_TYPE_THEME === $this->_module_type ) &&
|
468 |
+
Freemius::is_themes_page() &&
|
469 |
+
fs_request_get_bool( $this->_module_unique_affix . '_show_optin' )
|
470 |
+
);
|
471 |
+
}
|
472 |
|
473 |
+
if ( $this->_menu_exists &&
|
474 |
+
( fs_is_plugin_page( $this->_menu_slug ) || fs_is_plugin_page( $this->_module_unique_affix ) )
|
475 |
+
) {
|
476 |
+
/**
|
477 |
+
* Module has a settings menu and the context page is the main settings page, so assume it's in
|
478 |
+
* activation (doesn't really check if already opted-in/skipped or not).
|
479 |
+
*
|
480 |
+
* @since 1.2.2
|
481 |
+
*/
|
482 |
+
return true;
|
483 |
+
}
|
484 |
+
|
485 |
+
return false;
|
486 |
+
}
|
487 |
|
488 |
+
#region Submenu Override
|
489 |
|
490 |
/**
|
491 |
* Override submenu's action.
|
freemius/includes/managers/class-fs-cache-manager.php
CHANGED
@@ -1,326 +1,326 @@
|
|
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.1.6
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
class FS_Cache_Manager {
|
14 |
-
/**
|
15 |
-
* @var FS_Option_Manager
|
16 |
-
*/
|
17 |
-
private $_options;
|
18 |
-
/**
|
19 |
-
* @var FS_Logger
|
20 |
-
*/
|
21 |
-
private $_logger;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* @var FS_Cache_Manager[]
|
25 |
-
*/
|
26 |
-
private static $_MANAGERS = array();
|
27 |
-
|
28 |
-
/**
|
29 |
-
* @author Vova Feldman (@svovaf)
|
30 |
-
* @since 1.1.3
|
31 |
-
*
|
32 |
-
* @param string $id
|
33 |
-
*/
|
34 |
-
private function __construct( $id ) {
|
35 |
-
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_cach_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
36 |
-
|
37 |
-
$this->_logger->entrance();
|
38 |
-
$this->_logger->log( 'id = ' . $id );
|
39 |
-
|
40 |
-
$this->_options = FS_Option_Manager::get_manager( $id, true, true );
|
41 |
-
}
|
42 |
-
|
43 |
-
/**
|
44 |
-
* @author Vova Feldman (@svovaf)
|
45 |
-
* @since 1.1.6
|
46 |
-
*
|
47 |
-
* @param $id
|
48 |
-
*
|
49 |
-
* @return FS_Cache_Manager
|
50 |
-
*/
|
51 |
-
static function get_manager( $id ) {
|
52 |
-
$id = strtolower( $id );
|
53 |
-
|
54 |
-
if ( ! isset( self::$_MANAGERS[ $id ] ) ) {
|
55 |
-
self::$_MANAGERS[ $id ] = new FS_Cache_Manager( $id );
|
56 |
-
}
|
57 |
-
|
58 |
-
return self::$_MANAGERS[ $id ];
|
59 |
-
}
|
60 |
-
|
61 |
-
/**
|
62 |
-
* @author Vova Feldman (@svovaf)
|
63 |
-
* @since 1.1.6
|
64 |
-
*
|
65 |
-
* @return bool
|
66 |
-
*/
|
67 |
-
function is_empty() {
|
68 |
-
$this->_logger->entrance();
|
69 |
-
|
70 |
-
return $this->_options->is_empty();
|
71 |
-
}
|
72 |
-
|
73 |
-
/**
|
74 |
-
* @author Vova Feldman (@svovaf)
|
75 |
-
* @since 1.1.6
|
76 |
-
*/
|
77 |
-
function clear() {
|
78 |
-
$this->_logger->entrance();
|
79 |
-
|
80 |
-
$this->_options->clear( true );
|
81 |
-
}
|
82 |
-
|
83 |
-
/**
|
84 |
-
* Delete cache manager from DB.
|
85 |
-
*
|
86 |
-
* @author Vova Feldman (@svovaf)
|
87 |
-
* @since 1.0.9
|
88 |
-
*/
|
89 |
-
function delete() {
|
90 |
-
$this->_options->delete();
|
91 |
-
}
|
92 |
-
|
93 |
-
/**
|
94 |
-
* Check if there's a cached item.
|
95 |
-
*
|
96 |
-
* @author Vova Feldman (@svovaf)
|
97 |
-
* @since 1.1.6
|
98 |
-
*
|
99 |
-
* @param string $key
|
100 |
-
*
|
101 |
-
* @return bool
|
102 |
-
*/
|
103 |
-
function has( $key ) {
|
104 |
-
$cache_entry = $this->_options->get_option( $key, false );
|
105 |
-
|
106 |
-
return ( is_object( $cache_entry ) &&
|
107 |
-
isset( $cache_entry->timestamp ) &&
|
108 |
-
is_numeric( $cache_entry->timestamp )
|
109 |
-
);
|
110 |
-
}
|
111 |
-
|
112 |
-
/**
|
113 |
-
* Check if there's a valid cached item.
|
114 |
-
*
|
115 |
-
* @author Vova Feldman (@svovaf)
|
116 |
-
* @since 1.1.6
|
117 |
-
*
|
118 |
-
* @param string $key
|
119 |
-
* @param null|int $expiration Since 1.2.2.7
|
120 |
-
*
|
121 |
-
* @return bool
|
122 |
-
*/
|
123 |
-
function has_valid( $key, $expiration = null ) {
|
124 |
-
$cache_entry = $this->_options->get_option( $key, false );
|
125 |
-
|
126 |
-
$is_valid = ( is_object( $cache_entry ) &&
|
127 |
-
isset( $cache_entry->timestamp ) &&
|
128 |
-
is_numeric( $cache_entry->timestamp ) &&
|
129 |
-
$cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
|
130 |
-
);
|
131 |
-
|
132 |
-
if ( $is_valid &&
|
133 |
-
is_numeric( $expiration ) &&
|
134 |
-
isset( $cache_entry->created ) &&
|
135 |
-
is_numeric( $cache_entry->created ) &&
|
136 |
-
$cache_entry->created + $expiration < WP_FS__SCRIPT_START_TIME
|
137 |
-
) {
|
138 |
-
/**
|
139 |
-
* Even if the cache is still valid, since we are checking for validity
|
140 |
-
* with an explicit expiration period, if the period has past, return
|
141 |
-
* `false` as if the cache is invalid.
|
142 |
-
*
|
143 |
-
* @since 1.2.2.7
|
144 |
-
*/
|
145 |
-
$is_valid = false;
|
146 |
-
}
|
147 |
-
|
148 |
-
return $is_valid;
|
149 |
-
}
|
150 |
-
|
151 |
-
/**
|
152 |
-
* @author Vova Feldman (@svovaf)
|
153 |
-
* @since 1.1.6
|
154 |
-
*
|
155 |
-
* @param string $key
|
156 |
-
* @param mixed $default
|
157 |
-
*
|
158 |
-
* @return mixed
|
159 |
-
*/
|
160 |
-
function get( $key, $default = null ) {
|
161 |
-
$this->_logger->entrance( 'key = ' . $key );
|
162 |
-
|
163 |
-
$cache_entry = $this->_options->get_option( $key, false );
|
164 |
-
|
165 |
-
if ( is_object( $cache_entry ) &&
|
166 |
-
isset( $cache_entry->timestamp ) &&
|
167 |
-
is_numeric( $cache_entry->timestamp )
|
168 |
-
) {
|
169 |
-
return $cache_entry->result;
|
170 |
-
}
|
171 |
-
|
172 |
-
return is_object( $default ) ? clone $default : $default;
|
173 |
-
}
|
174 |
-
|
175 |
-
/**
|
176 |
-
* @author Vova Feldman (@svovaf)
|
177 |
-
* @since 1.1.6
|
178 |
-
*
|
179 |
-
* @param string $key
|
180 |
-
* @param mixed $default
|
181 |
-
*
|
182 |
-
* @return mixed
|
183 |
-
*/
|
184 |
-
function get_valid( $key, $default = null ) {
|
185 |
-
$this->_logger->entrance( 'key = ' . $key );
|
186 |
-
|
187 |
-
$cache_entry = $this->_options->get_option( $key, false );
|
188 |
-
|
189 |
-
if ( is_object( $cache_entry ) &&
|
190 |
-
isset( $cache_entry->timestamp ) &&
|
191 |
-
is_numeric( $cache_entry->timestamp ) &&
|
192 |
-
$cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
|
193 |
-
) {
|
194 |
-
return $cache_entry->result;
|
195 |
-
}
|
196 |
-
|
197 |
-
return is_object( $default ) ? clone $default : $default;
|
198 |
-
}
|
199 |
-
|
200 |
-
/**
|
201 |
-
* @author Vova Feldman (@svovaf)
|
202 |
-
* @since 1.1.6
|
203 |
-
*
|
204 |
-
* @param string $key
|
205 |
-
* @param mixed $value
|
206 |
-
* @param int $expiration
|
207 |
-
* @param int $created Since 2.0.0 Cache creation date.
|
208 |
-
*/
|
209 |
-
function set( $key, $value, $expiration = WP_FS__TIME_24_HOURS_IN_SEC, $created = WP_FS__SCRIPT_START_TIME ) {
|
210 |
-
$this->_logger->entrance( 'key = ' . $key );
|
211 |
-
|
212 |
-
$cache_entry = new stdClass();
|
213 |
-
|
214 |
-
$cache_entry->result = $value;
|
215 |
-
$cache_entry->created = $created;
|
216 |
-
$cache_entry->timestamp = $created + $expiration;
|
217 |
-
$this->_options->set_option( $key, $cache_entry, true );
|
218 |
-
}
|
219 |
-
|
220 |
-
/**
|
221 |
-
* Get cached record expiration, or false if not cached or expired.
|
222 |
-
*
|
223 |
-
* @author Vova Feldman (@svovaf)
|
224 |
-
* @since 1.1.7.3
|
225 |
-
*
|
226 |
-
* @param string $key
|
227 |
-
*
|
228 |
-
* @return bool|int
|
229 |
-
*/
|
230 |
-
function get_record_expiration( $key ) {
|
231 |
-
$this->_logger->entrance( 'key = ' . $key );
|
232 |
-
|
233 |
-
$cache_entry = $this->_options->get_option( $key, false );
|
234 |
-
|
235 |
-
if ( is_object( $cache_entry ) &&
|
236 |
-
isset( $cache_entry->timestamp ) &&
|
237 |
-
is_numeric( $cache_entry->timestamp ) &&
|
238 |
-
$cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
|
239 |
-
) {
|
240 |
-
return $cache_entry->timestamp;
|
241 |
-
}
|
242 |
-
|
243 |
-
return false;
|
244 |
-
}
|
245 |
-
|
246 |
-
/**
|
247 |
-
* Purge cached item.
|
248 |
-
*
|
249 |
-
* @author Vova Feldman (@svovaf)
|
250 |
-
* @since 1.1.6
|
251 |
-
*
|
252 |
-
* @param string $key
|
253 |
-
*/
|
254 |
-
function purge( $key ) {
|
255 |
-
$this->_logger->entrance( 'key = ' . $key );
|
256 |
-
|
257 |
-
$this->_options->unset_option( $key, true );
|
258 |
-
}
|
259 |
-
|
260 |
-
/**
|
261 |
-
* Extend cached item caching period.
|
262 |
-
*
|
263 |
-
* @author Vova Feldman (@svovaf)
|
264 |
-
* @since 2.0.0
|
265 |
-
*
|
266 |
-
* @param string $key
|
267 |
-
* @param int $expiration
|
268 |
-
*
|
269 |
-
* @return bool
|
270 |
-
*/
|
271 |
-
function update_expiration( $key, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
|
272 |
-
$this->_logger->entrance( 'key = ' . $key );
|
273 |
-
|
274 |
-
$cache_entry = $this->_options->get_option( $key, false );
|
275 |
-
|
276 |
-
if ( ! is_object( $cache_entry ) ||
|
277 |
-
! isset( $cache_entry->timestamp ) ||
|
278 |
-
! is_numeric( $cache_entry->timestamp )
|
279 |
-
) {
|
280 |
-
return false;
|
281 |
-
}
|
282 |
-
|
283 |
-
$this->set( $key, $cache_entry->result, $expiration, $cache_entry->created );
|
284 |
-
|
285 |
-
return true;
|
286 |
-
}
|
287 |
-
|
288 |
-
/**
|
289 |
-
* Set cached item as expired.
|
290 |
-
*
|
291 |
-
* @author Vova Feldman (@svovaf)
|
292 |
-
* @since 1.2.2.7
|
293 |
-
*
|
294 |
-
* @param string $key
|
295 |
-
*/
|
296 |
-
function expire( $key ) {
|
297 |
-
$this->_logger->entrance( 'key = ' . $key );
|
298 |
-
|
299 |
-
$cache_entry = $this->_options->get_option( $key, false );
|
300 |
-
|
301 |
-
if ( is_object( $cache_entry ) &&
|
302 |
-
isset( $cache_entry->timestamp ) &&
|
303 |
-
is_numeric( $cache_entry->timestamp )
|
304 |
-
) {
|
305 |
-
// Set to expired.
|
306 |
-
$cache_entry->timestamp = WP_FS__SCRIPT_START_TIME;
|
307 |
-
$this->_options->set_option( $key, $cache_entry, true );
|
308 |
-
}
|
309 |
-
}
|
310 |
-
|
311 |
-
#--------------------------------------------------------------------------------
|
312 |
-
#region Migration
|
313 |
-
#--------------------------------------------------------------------------------
|
314 |
-
|
315 |
-
/**
|
316 |
-
* Migrate options from site level.
|
317 |
-
*
|
318 |
-
* @author Vova Feldman (@svovaf)
|
319 |
-
* @since 2.0.0
|
320 |
-
*/
|
321 |
-
function migrate_to_network() {
|
322 |
-
$this->_options->migrate_to_network();
|
323 |
-
}
|
324 |
-
|
325 |
-
#endregion
|
326 |
}
|
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.1.6
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
class FS_Cache_Manager {
|
14 |
+
/**
|
15 |
+
* @var FS_Option_Manager
|
16 |
+
*/
|
17 |
+
private $_options;
|
18 |
+
/**
|
19 |
+
* @var FS_Logger
|
20 |
+
*/
|
21 |
+
private $_logger;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @var FS_Cache_Manager[]
|
25 |
+
*/
|
26 |
+
private static $_MANAGERS = array();
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @author Vova Feldman (@svovaf)
|
30 |
+
* @since 1.1.3
|
31 |
+
*
|
32 |
+
* @param string $id
|
33 |
+
*/
|
34 |
+
private function __construct( $id ) {
|
35 |
+
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_cach_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
36 |
+
|
37 |
+
$this->_logger->entrance();
|
38 |
+
$this->_logger->log( 'id = ' . $id );
|
39 |
+
|
40 |
+
$this->_options = FS_Option_Manager::get_manager( $id, true, true, false );
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @author Vova Feldman (@svovaf)
|
45 |
+
* @since 1.1.6
|
46 |
+
*
|
47 |
+
* @param $id
|
48 |
+
*
|
49 |
+
* @return FS_Cache_Manager
|
50 |
+
*/
|
51 |
+
static function get_manager( $id ) {
|
52 |
+
$id = strtolower( $id );
|
53 |
+
|
54 |
+
if ( ! isset( self::$_MANAGERS[ $id ] ) ) {
|
55 |
+
self::$_MANAGERS[ $id ] = new FS_Cache_Manager( $id );
|
56 |
+
}
|
57 |
+
|
58 |
+
return self::$_MANAGERS[ $id ];
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* @author Vova Feldman (@svovaf)
|
63 |
+
* @since 1.1.6
|
64 |
+
*
|
65 |
+
* @return bool
|
66 |
+
*/
|
67 |
+
function is_empty() {
|
68 |
+
$this->_logger->entrance();
|
69 |
+
|
70 |
+
return $this->_options->is_empty();
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* @author Vova Feldman (@svovaf)
|
75 |
+
* @since 1.1.6
|
76 |
+
*/
|
77 |
+
function clear() {
|
78 |
+
$this->_logger->entrance();
|
79 |
+
|
80 |
+
$this->_options->clear( true );
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Delete cache manager from DB.
|
85 |
+
*
|
86 |
+
* @author Vova Feldman (@svovaf)
|
87 |
+
* @since 1.0.9
|
88 |
+
*/
|
89 |
+
function delete() {
|
90 |
+
$this->_options->delete();
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Check if there's a cached item.
|
95 |
+
*
|
96 |
+
* @author Vova Feldman (@svovaf)
|
97 |
+
* @since 1.1.6
|
98 |
+
*
|
99 |
+
* @param string $key
|
100 |
+
*
|
101 |
+
* @return bool
|
102 |
+
*/
|
103 |
+
function has( $key ) {
|
104 |
+
$cache_entry = $this->_options->get_option( $key, false );
|
105 |
+
|
106 |
+
return ( is_object( $cache_entry ) &&
|
107 |
+
isset( $cache_entry->timestamp ) &&
|
108 |
+
is_numeric( $cache_entry->timestamp )
|
109 |
+
);
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Check if there's a valid cached item.
|
114 |
+
*
|
115 |
+
* @author Vova Feldman (@svovaf)
|
116 |
+
* @since 1.1.6
|
117 |
+
*
|
118 |
+
* @param string $key
|
119 |
+
* @param null|int $expiration Since 1.2.2.7
|
120 |
+
*
|
121 |
+
* @return bool
|
122 |
+
*/
|
123 |
+
function has_valid( $key, $expiration = null ) {
|
124 |
+
$cache_entry = $this->_options->get_option( $key, false );
|
125 |
+
|
126 |
+
$is_valid = ( is_object( $cache_entry ) &&
|
127 |
+
isset( $cache_entry->timestamp ) &&
|
128 |
+
is_numeric( $cache_entry->timestamp ) &&
|
129 |
+
$cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
|
130 |
+
);
|
131 |
+
|
132 |
+
if ( $is_valid &&
|
133 |
+
is_numeric( $expiration ) &&
|
134 |
+
isset( $cache_entry->created ) &&
|
135 |
+
is_numeric( $cache_entry->created ) &&
|
136 |
+
$cache_entry->created + $expiration < WP_FS__SCRIPT_START_TIME
|
137 |
+
) {
|
138 |
+
/**
|
139 |
+
* Even if the cache is still valid, since we are checking for validity
|
140 |
+
* with an explicit expiration period, if the period has past, return
|
141 |
+
* `false` as if the cache is invalid.
|
142 |
+
*
|
143 |
+
* @since 1.2.2.7
|
144 |
+
*/
|
145 |
+
$is_valid = false;
|
146 |
+
}
|
147 |
+
|
148 |
+
return $is_valid;
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* @author Vova Feldman (@svovaf)
|
153 |
+
* @since 1.1.6
|
154 |
+
*
|
155 |
+
* @param string $key
|
156 |
+
* @param mixed $default
|
157 |
+
*
|
158 |
+
* @return mixed
|
159 |
+
*/
|
160 |
+
function get( $key, $default = null ) {
|
161 |
+
$this->_logger->entrance( 'key = ' . $key );
|
162 |
+
|
163 |
+
$cache_entry = $this->_options->get_option( $key, false );
|
164 |
+
|
165 |
+
if ( is_object( $cache_entry ) &&
|
166 |
+
isset( $cache_entry->timestamp ) &&
|
167 |
+
is_numeric( $cache_entry->timestamp )
|
168 |
+
) {
|
169 |
+
return $cache_entry->result;
|
170 |
+
}
|
171 |
+
|
172 |
+
return is_object( $default ) ? clone $default : $default;
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* @author Vova Feldman (@svovaf)
|
177 |
+
* @since 1.1.6
|
178 |
+
*
|
179 |
+
* @param string $key
|
180 |
+
* @param mixed $default
|
181 |
+
*
|
182 |
+
* @return mixed
|
183 |
+
*/
|
184 |
+
function get_valid( $key, $default = null ) {
|
185 |
+
$this->_logger->entrance( 'key = ' . $key );
|
186 |
+
|
187 |
+
$cache_entry = $this->_options->get_option( $key, false );
|
188 |
+
|
189 |
+
if ( is_object( $cache_entry ) &&
|
190 |
+
isset( $cache_entry->timestamp ) &&
|
191 |
+
is_numeric( $cache_entry->timestamp ) &&
|
192 |
+
$cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
|
193 |
+
) {
|
194 |
+
return $cache_entry->result;
|
195 |
+
}
|
196 |
+
|
197 |
+
return is_object( $default ) ? clone $default : $default;
|
198 |
+
}
|
199 |
+
|
200 |
+
/**
|
201 |
+
* @author Vova Feldman (@svovaf)
|
202 |
+
* @since 1.1.6
|
203 |
+
*
|
204 |
+
* @param string $key
|
205 |
+
* @param mixed $value
|
206 |
+
* @param int $expiration
|
207 |
+
* @param int $created Since 2.0.0 Cache creation date.
|
208 |
+
*/
|
209 |
+
function set( $key, $value, $expiration = WP_FS__TIME_24_HOURS_IN_SEC, $created = WP_FS__SCRIPT_START_TIME ) {
|
210 |
+
$this->_logger->entrance( 'key = ' . $key );
|
211 |
+
|
212 |
+
$cache_entry = new stdClass();
|
213 |
+
|
214 |
+
$cache_entry->result = $value;
|
215 |
+
$cache_entry->created = $created;
|
216 |
+
$cache_entry->timestamp = $created + $expiration;
|
217 |
+
$this->_options->set_option( $key, $cache_entry, true );
|
218 |
+
}
|
219 |
+
|
220 |
+
/**
|
221 |
+
* Get cached record expiration, or false if not cached or expired.
|
222 |
+
*
|
223 |
+
* @author Vova Feldman (@svovaf)
|
224 |
+
* @since 1.1.7.3
|
225 |
+
*
|
226 |
+
* @param string $key
|
227 |
+
*
|
228 |
+
* @return bool|int
|
229 |
+
*/
|
230 |
+
function get_record_expiration( $key ) {
|
231 |
+
$this->_logger->entrance( 'key = ' . $key );
|
232 |
+
|
233 |
+
$cache_entry = $this->_options->get_option( $key, false );
|
234 |
+
|
235 |
+
if ( is_object( $cache_entry ) &&
|
236 |
+
isset( $cache_entry->timestamp ) &&
|
237 |
+
is_numeric( $cache_entry->timestamp ) &&
|
238 |
+
$cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
|
239 |
+
) {
|
240 |
+
return $cache_entry->timestamp;
|
241 |
+
}
|
242 |
+
|
243 |
+
return false;
|
244 |
+
}
|
245 |
+
|
246 |
+
/**
|
247 |
+
* Purge cached item.
|
248 |
+
*
|
249 |
+
* @author Vova Feldman (@svovaf)
|
250 |
+
* @since 1.1.6
|
251 |
+
*
|
252 |
+
* @param string $key
|
253 |
+
*/
|
254 |
+
function purge( $key ) {
|
255 |
+
$this->_logger->entrance( 'key = ' . $key );
|
256 |
+
|
257 |
+
$this->_options->unset_option( $key, true );
|
258 |
+
}
|
259 |
+
|
260 |
+
/**
|
261 |
+
* Extend cached item caching period.
|
262 |
+
*
|
263 |
+
* @author Vova Feldman (@svovaf)
|
264 |
+
* @since 2.0.0
|
265 |
+
*
|
266 |
+
* @param string $key
|
267 |
+
* @param int $expiration
|
268 |
+
*
|
269 |
+
* @return bool
|
270 |
+
*/
|
271 |
+
function update_expiration( $key, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
|
272 |
+
$this->_logger->entrance( 'key = ' . $key );
|
273 |
+
|
274 |
+
$cache_entry = $this->_options->get_option( $key, false );
|
275 |
+
|
276 |
+
if ( ! is_object( $cache_entry ) ||
|
277 |
+
! isset( $cache_entry->timestamp ) ||
|
278 |
+
! is_numeric( $cache_entry->timestamp )
|
279 |
+
) {
|
280 |
+
return false;
|
281 |
+
}
|
282 |
+
|
283 |
+
$this->set( $key, $cache_entry->result, $expiration, $cache_entry->created );
|
284 |
+
|
285 |
+
return true;
|
286 |
+
}
|
287 |
+
|
288 |
+
/**
|
289 |
+
* Set cached item as expired.
|
290 |
+
*
|
291 |
+
* @author Vova Feldman (@svovaf)
|
292 |
+
* @since 1.2.2.7
|
293 |
+
*
|
294 |
+
* @param string $key
|
295 |
+
*/
|
296 |
+
function expire( $key ) {
|
297 |
+
$this->_logger->entrance( 'key = ' . $key );
|
298 |
+
|
299 |
+
$cache_entry = $this->_options->get_option( $key, false );
|
300 |
+
|
301 |
+
if ( is_object( $cache_entry ) &&
|
302 |
+
isset( $cache_entry->timestamp ) &&
|
303 |
+
is_numeric( $cache_entry->timestamp )
|
304 |
+
) {
|
305 |
+
// Set to expired.
|
306 |
+
$cache_entry->timestamp = WP_FS__SCRIPT_START_TIME;
|
307 |
+
$this->_options->set_option( $key, $cache_entry, true );
|
308 |
+
}
|
309 |
+
}
|
310 |
+
|
311 |
+
#--------------------------------------------------------------------------------
|
312 |
+
#region Migration
|
313 |
+
#--------------------------------------------------------------------------------
|
314 |
+
|
315 |
+
/**
|
316 |
+
* Migrate options from site level.
|
317 |
+
*
|
318 |
+
* @author Vova Feldman (@svovaf)
|
319 |
+
* @since 2.0.0
|
320 |
+
*/
|
321 |
+
function migrate_to_network() {
|
322 |
+
$this->_options->migrate_to_network();
|
323 |
+
}
|
324 |
+
|
325 |
+
#endregion
|
326 |
}
|
freemius/includes/managers/class-fs-option-manager.php
CHANGED
@@ -48,6 +48,11 @@
|
|
48 |
*/
|
49 |
private $_is_network_storage;
|
50 |
|
|
|
|
|
|
|
|
|
|
|
51 |
/**
|
52 |
* @var array[string]FS_Option_Manager {
|
53 |
* @key string
|
@@ -60,11 +65,17 @@
|
|
60 |
* @author Vova Feldman (@svovaf)
|
61 |
* @since 1.0.3
|
62 |
*
|
63 |
-
* @param string
|
64 |
-
* @param bool
|
65 |
-
* @param bool|int
|
|
|
66 |
*/
|
67 |
-
private function __construct(
|
|
|
|
|
|
|
|
|
|
|
68 |
$id = strtolower( $id );
|
69 |
|
70 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_opt_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
@@ -74,6 +85,8 @@
|
|
74 |
|
75 |
$this->_id = $id;
|
76 |
|
|
|
|
|
77 |
if ( is_multisite() ) {
|
78 |
$this->_is_network_storage = ( true === $network_level_or_blog_id );
|
79 |
|
@@ -93,13 +106,19 @@
|
|
93 |
* @author Vova Feldman (@svovaf)
|
94 |
* @since 1.0.3
|
95 |
*
|
96 |
-
* @param string
|
97 |
-
* @param bool
|
98 |
-
* @param bool|int
|
|
|
99 |
*
|
100 |
-
* @return FS_Option_Manager
|
101 |
*/
|
102 |
-
static function get_manager(
|
|
|
|
|
|
|
|
|
|
|
103 |
$key = strtolower( $id );
|
104 |
|
105 |
if ( is_multisite() ) {
|
@@ -115,7 +134,12 @@
|
|
115 |
}
|
116 |
|
117 |
if ( ! isset( self::$_MANAGERS[ $key ] ) ) {
|
118 |
-
self::$_MANAGERS[ $key ] = new FS_Option_Manager(
|
|
|
|
|
|
|
|
|
|
|
119 |
} // If load required but not yet loaded, load.
|
120 |
else if ( $load && ! self::$_MANAGERS[ $key ]->is_loaded() ) {
|
121 |
self::$_MANAGERS[ $key ]->load();
|
@@ -410,7 +434,7 @@
|
|
410 |
} else if ( $this->_blog_id > 0 ) {
|
411 |
update_blog_option( $this->_blog_id, $option_name, $this->_options );
|
412 |
} else {
|
413 |
-
update_option( $option_name, $this->_options );
|
414 |
}
|
415 |
|
416 |
if ( ! WP_FS__DEBUG_SDK ) {
|
48 |
*/
|
49 |
private $_is_network_storage;
|
50 |
|
51 |
+
/**
|
52 |
+
* @var bool|null
|
53 |
+
*/
|
54 |
+
private $_autoload;
|
55 |
+
|
56 |
/**
|
57 |
* @var array[string]FS_Option_Manager {
|
58 |
* @key string
|
65 |
* @author Vova Feldman (@svovaf)
|
66 |
* @since 1.0.3
|
67 |
*
|
68 |
+
* @param string $id
|
69 |
+
* @param bool $load
|
70 |
+
* @param bool|int $network_level_or_blog_id Since 2.0.0
|
71 |
+
* @param bool|null $autoload
|
72 |
*/
|
73 |
+
private function __construct(
|
74 |
+
$id,
|
75 |
+
$load = false,
|
76 |
+
$network_level_or_blog_id = false,
|
77 |
+
$autoload = null
|
78 |
+
) {
|
79 |
$id = strtolower( $id );
|
80 |
|
81 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_opt_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
85 |
|
86 |
$this->_id = $id;
|
87 |
|
88 |
+
$this->_autoload = $autoload;
|
89 |
+
|
90 |
if ( is_multisite() ) {
|
91 |
$this->_is_network_storage = ( true === $network_level_or_blog_id );
|
92 |
|
106 |
* @author Vova Feldman (@svovaf)
|
107 |
* @since 1.0.3
|
108 |
*
|
109 |
+
* @param string $id
|
110 |
+
* @param bool $load
|
111 |
+
* @param bool|int $network_level_or_blog_id Since 2.0.0
|
112 |
+
* @param bool|null $autoload
|
113 |
*
|
114 |
+
* @return \FS_Option_Manager
|
115 |
*/
|
116 |
+
static function get_manager(
|
117 |
+
$id,
|
118 |
+
$load = false,
|
119 |
+
$network_level_or_blog_id = false,
|
120 |
+
$autoload = null
|
121 |
+
) {
|
122 |
$key = strtolower( $id );
|
123 |
|
124 |
if ( is_multisite() ) {
|
134 |
}
|
135 |
|
136 |
if ( ! isset( self::$_MANAGERS[ $key ] ) ) {
|
137 |
+
self::$_MANAGERS[ $key ] = new FS_Option_Manager(
|
138 |
+
$id,
|
139 |
+
$load,
|
140 |
+
$network_level_or_blog_id,
|
141 |
+
$autoload
|
142 |
+
);
|
143 |
} // If load required but not yet loaded, load.
|
144 |
else if ( $load && ! self::$_MANAGERS[ $key ]->is_loaded() ) {
|
145 |
self::$_MANAGERS[ $key ]->load();
|
434 |
} else if ( $this->_blog_id > 0 ) {
|
435 |
update_blog_option( $this->_blog_id, $option_name, $this->_options );
|
436 |
} else {
|
437 |
+
update_option( $option_name, $this->_options, $this->_autoload );
|
438 |
}
|
439 |
|
440 |
if ( ! WP_FS__DEBUG_SDK ) {
|
freemius/includes/managers/class-fs-plugin-manager.php
CHANGED
@@ -83,12 +83,12 @@
|
|
83 |
$option_manager = $this->get_option_manager();
|
84 |
|
85 |
if ( false !== $module_type ) {
|
86 |
-
return $option_manager->get_option( $module_type . 's', array() );
|
87 |
}
|
88 |
|
89 |
return array(
|
90 |
-
self::OPTION_NAME_PLUGINS => $option_manager->get_option( self::OPTION_NAME_PLUGINS, array() ),
|
91 |
-
self::OPTION_NAME_THEMES => $option_manager->get_option( self::OPTION_NAME_THEMES, array() ),
|
92 |
);
|
93 |
}
|
94 |
|
83 |
$option_manager = $this->get_option_manager();
|
84 |
|
85 |
if ( false !== $module_type ) {
|
86 |
+
return fs_get_entities( $option_manager->get_option( $module_type . 's', array() ), FS_Plugin::get_class_name() );
|
87 |
}
|
88 |
|
89 |
return array(
|
90 |
+
self::OPTION_NAME_PLUGINS => fs_get_entities( $option_manager->get_option( self::OPTION_NAME_PLUGINS, array() ), FS_Plugin::get_class_name() ),
|
91 |
+
self::OPTION_NAME_THEMES => fs_get_entities( $option_manager->get_option( self::OPTION_NAME_THEMES, array() ), FS_Plugin::get_class_name() ),
|
92 |
);
|
93 |
}
|
94 |
|
freemius/languages/freemius-cs_CZ.mo
ADDED
Binary file
|
freemius/languages/freemius-cs_CZ.po
ADDED
@@ -0,0 +1,2546 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (C) 2019 freemius
|
2 |
+
# This file is distributed under the same license as the freemius package.
|
3 |
+
# Translators:
|
4 |
+
# Karolína Vyskočilová <karolina@kybernaut.cz>, 2019
|
5 |
+
msgid ""
|
6 |
+
msgstr ""
|
7 |
+
"Project-Id-Version: WordPress SDK\n"
|
8 |
+
"Report-Msgid-Bugs-To: https://github.com/Freemius/wordpress-sdk/issues\n"
|
9 |
+
"POT-Creation-Date: \n"
|
10 |
+
"PO-Revision-Date: 2019-10-07 15:33+0000\n"
|
11 |
+
"Last-Translator: Vova Feldman <vova@freemius.com>\n"
|
12 |
+
"Language: cs_CZ\n"
|
13 |
+
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/freemius/wordpress-sdk/language/cs_CZ/)\n"
|
14 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
+
"Content-Transfer-Encoding: 8bit\n"
|
16 |
+
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
17 |
+
"MIME-Version: 1.0\n"
|
18 |
+
"X-Poedit-Basepath: ..\n"
|
19 |
+
"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"
|
20 |
+
"X-Poedit-SearchPath-0: .\n"
|
21 |
+
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
22 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
23 |
+
|
24 |
+
#: includes/class-freemius.php1880, templates/account.php:840
|
25 |
+
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."
|
26 |
+
msgstr "Aktualizováním na Beta verzi nahradíte nainstalovanou verzi %s nejnovějším vydáním Beta verze - používejte s opatrností a ne na produkčních webech. Varovali jsme vás."
|
27 |
+
|
28 |
+
#: includes/class-freemius.php:1887
|
29 |
+
msgid "Would you like to proceed with the update?"
|
30 |
+
msgstr "Chcete pokračovat v aktualizaci?"
|
31 |
+
|
32 |
+
#: includes/class-freemius.php:2095
|
33 |
+
msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
|
34 |
+
msgstr "Freemius SDK nemohlo najít hlavní soubor pluginu. S aktuální chybou se obraťte se na sdk@freemius.com."
|
35 |
+
|
36 |
+
#: includes/class-freemius.php:2097
|
37 |
+
msgid "Error"
|
38 |
+
msgstr "Chyba"
|
39 |
+
|
40 |
+
#: includes/class-freemius.php:2491
|
41 |
+
msgid "I found a better %s"
|
42 |
+
msgstr "Našel jsem lepší %s"
|
43 |
+
|
44 |
+
#: includes/class-freemius.php:2493
|
45 |
+
msgid "What's the %s's name?"
|
46 |
+
msgstr "Jak se %s jmenuje?"
|
47 |
+
|
48 |
+
#: includes/class-freemius.php:2499
|
49 |
+
msgid "It's a temporary %s. I'm just debugging an issue."
|
50 |
+
msgstr "Jen dočasná %s - ladím nějaký problém."
|
51 |
+
|
52 |
+
#: includes/class-freemius.php:2501
|
53 |
+
msgid "Deactivation"
|
54 |
+
msgstr "Deaktivace"
|
55 |
+
|
56 |
+
#: includes/class-freemius.php:2502
|
57 |
+
msgid "Theme Switch"
|
58 |
+
msgstr "Změna šablony"
|
59 |
+
|
60 |
+
#: includes/class-freemius.php2511, templates/forms/resend-key.php:24
|
61 |
+
msgid "Other"
|
62 |
+
msgstr "Jiné"
|
63 |
+
|
64 |
+
#: includes/class-freemius.php:2519
|
65 |
+
msgid "I no longer need the %s"
|
66 |
+
msgstr "Již nepotřebuji %s"
|
67 |
+
|
68 |
+
#: includes/class-freemius.php:2526
|
69 |
+
msgid "I only needed the %s for a short period"
|
70 |
+
msgstr "Potřeboval %s jsem jen krátkou dobu"
|
71 |
+
|
72 |
+
#: includes/class-freemius.php:2532
|
73 |
+
msgid "The %s broke my site"
|
74 |
+
msgstr "%s rozbil můj web"
|
75 |
+
|
76 |
+
#: includes/class-freemius.php:2539
|
77 |
+
msgid "The %s suddenly stopped working"
|
78 |
+
msgstr "%s náhle přestal pracovat"
|
79 |
+
|
80 |
+
#: includes/class-freemius.php:2549
|
81 |
+
msgid "I can't pay for it anymore"
|
82 |
+
msgstr "Už si to nemohu dovolit"
|
83 |
+
|
84 |
+
#: includes/class-freemius.php:2551
|
85 |
+
msgid "What price would you feel comfortable paying?"
|
86 |
+
msgstr "Jakou cenu byste byli ochotni platit?"
|
87 |
+
|
88 |
+
#: includes/class-freemius.php:2557
|
89 |
+
msgid "I don't like to share my information with you"
|
90 |
+
msgstr "Nechci s vámi sdílet své informace"
|
91 |
+
|
92 |
+
#: includes/class-freemius.php:2578
|
93 |
+
msgid "The %s didn't work"
|
94 |
+
msgstr "%s nefungoval"
|
95 |
+
|
96 |
+
#: includes/class-freemius.php:2588
|
97 |
+
msgid "I couldn't understand how to make it work"
|
98 |
+
msgstr "Nedokázal jsem jej zprovoznit"
|
99 |
+
|
100 |
+
#: includes/class-freemius.php:2596
|
101 |
+
msgid "The %s is great, but I need specific feature that you don't support"
|
102 |
+
msgstr "%s je skvělý, ale potřebuji funkci, kterou není podporovaná"
|
103 |
+
|
104 |
+
#: includes/class-freemius.php:2598
|
105 |
+
msgid "What feature?"
|
106 |
+
msgstr "Jaká funkce?"
|
107 |
+
|
108 |
+
#: includes/class-freemius.php:2602
|
109 |
+
msgid "The %s is not working"
|
110 |
+
msgstr "%s nefunguje"
|
111 |
+
|
112 |
+
#: includes/class-freemius.php:2604
|
113 |
+
msgid "Kindly share what didn't work so we can fix it for future users..."
|
114 |
+
msgstr "Dejte nám prosím vědět, co nefungovalo, ať to můžeme opravit pro další uživatele..."
|
115 |
+
|
116 |
+
#: includes/class-freemius.php:2608
|
117 |
+
msgid "It's not what I was looking for"
|
118 |
+
msgstr "Není to to, co jsem hledal"
|
119 |
+
|
120 |
+
#: includes/class-freemius.php:2610
|
121 |
+
msgid "What you've been looking for?"
|
122 |
+
msgstr "Co jste hledali?"
|
123 |
+
|
124 |
+
#: includes/class-freemius.php:2614
|
125 |
+
msgid "The %s didn't work as expected"
|
126 |
+
msgstr "%s nefungoval podle očekávání"
|
127 |
+
|
128 |
+
#: includes/class-freemius.php:2616
|
129 |
+
msgid "What did you expect?"
|
130 |
+
msgstr "Co jste očekávali?"
|
131 |
+
|
132 |
+
#: includes/class-freemius.php3471, templates/debug.php:20
|
133 |
+
msgid "Freemius Debug"
|
134 |
+
msgstr "Freemius Debug"
|
135 |
+
|
136 |
+
#: includes/class-freemius.php:4223
|
137 |
+
msgid "I don't know what is cURL or how to install it, help me!"
|
138 |
+
msgstr "Nevím, co je cURL nebo jak jej nainstalovat, pomozte mi!"
|
139 |
+
|
140 |
+
#: includes/class-freemius.php:4225
|
141 |
+
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."
|
142 |
+
msgstr "Zkontaktujeme vaší hostingovou společnost a zkusíme vyřešit tento problém. Na %s dostanete upozornění, jakmile budeme vědět něco nového."
|
143 |
+
|
144 |
+
#: includes/class-freemius.php:4232
|
145 |
+
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."
|
146 |
+
msgstr "Výborně, nainstalujte prosím cURL a povolte ji v souboru php.ini. Dále vyhledejte v souboru php.ini direktivu 'disable_functions ' a odeberte všechny zakázané metody začínající na \"curl_\". Chcete-li se ujistit, že byla úspěšně aktivována, použijte 'phpinfo() '. Jakmile je aktivován, deaktivujte %s a znovu jej aktivujte."
|
147 |
+
|
148 |
+
#: includes/class-freemius.php:4337
|
149 |
+
msgid "Yes - do your thing"
|
150 |
+
msgstr "Ano - udělejte, co potřebujete"
|
151 |
+
|
152 |
+
#: includes/class-freemius.php:4342
|
153 |
+
msgid "No - just deactivate"
|
154 |
+
msgstr "Ne - jen deaktivovat"
|
155 |
+
|
156 |
+
#: includes/class-freemius.php4387, includes/class-freemius.php4881,
|
157 |
+
#: includes/class-freemius.php6032, includes/class-freemius.php13153,
|
158 |
+
#: includes/class-freemius.php16558, includes/class-freemius.php16646,
|
159 |
+
#: includes/class-freemius.php16812, includes/class-freemius.php19040,
|
160 |
+
#: includes/class-freemius.php19381, includes/class-freemius.php19391,
|
161 |
+
#: includes/class-freemius.php20051, includes/class-freemius.php20924,
|
162 |
+
#: includes/class-freemius.php21039, includes/class-freemius.php21183,
|
163 |
+
#: templates/add-ons.php:57
|
164 |
+
msgctxt "exclamation"
|
165 |
+
msgid "Oops"
|
166 |
+
msgstr "Jejda"
|
167 |
+
|
168 |
+
#: includes/class-freemius.php:4456
|
169 |
+
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."
|
170 |
+
msgstr "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."
|
171 |
+
|
172 |
+
#: includes/class-freemius.php:4878
|
173 |
+
msgctxt "addonX cannot run without pluginY"
|
174 |
+
msgid "%s cannot run without %s."
|
175 |
+
msgstr "%s nelze spustit bez %s."
|
176 |
+
|
177 |
+
#: includes/class-freemius.php:4879
|
178 |
+
msgctxt "addonX cannot run..."
|
179 |
+
msgid "%s cannot run without the plugin."
|
180 |
+
msgstr "%s nelze spustit bez tohoto pluginu."
|
181 |
+
|
182 |
+
#: includes/class-freemius.php5052, includes/class-freemius.php5077,
|
183 |
+
#: includes/class-freemius.php:20122
|
184 |
+
msgid "Unexpected API error. Please contact the %s's author with the following error."
|
185 |
+
msgstr "Unexpected API error. Please contact the %s's author with the following error."
|
186 |
+
|
187 |
+
#: includes/class-freemius.php:5720
|
188 |
+
msgid "Premium %s version was successfully activated."
|
189 |
+
msgstr "Premium %s version was successfully activated."
|
190 |
+
|
191 |
+
#: includes/class-freemius.php5732, includes/class-freemius.php:7599
|
192 |
+
msgctxt ""
|
193 |
+
msgid "W00t"
|
194 |
+
msgstr "W00t"
|
195 |
+
|
196 |
+
#: includes/class-freemius.php:5747
|
197 |
+
msgid "You have a %s license."
|
198 |
+
msgstr "Máte licenci „%s“."
|
199 |
+
|
200 |
+
#: includes/class-freemius.php5751, includes/class-freemius.php15975,
|
201 |
+
#: includes/class-freemius.php15986, includes/class-freemius.php19292,
|
202 |
+
#: includes/class-freemius.php19642, includes/class-freemius.php19711,
|
203 |
+
#: includes/class-freemius.php:19876
|
204 |
+
msgctxt "interjection expressing joy or exuberance"
|
205 |
+
msgid "Yee-haw"
|
206 |
+
msgstr "Yee-haw"
|
207 |
+
|
208 |
+
#: includes/class-freemius.php:6015
|
209 |
+
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."
|
210 |
+
msgstr "%s bezplatná zkušební verze byla úspěšně zrušena. Jelikož toto rozšíření nenabízí bezplatnou verzi, bylo automaticky deaktivováno. Chcete-li jej v budoucnu používat, budete si muset zakoupit licenci."
|
211 |
+
|
212 |
+
#: includes/class-freemius.php:6019
|
213 |
+
msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
214 |
+
msgstr "%s je pouze prémiové rozšíření. Před aktivací pluginu si musíte nejprve zakoupit licenci."
|
215 |
+
|
216 |
+
#: includes/class-freemius.php6028, templates/add-ons.php186,
|
217 |
+
#: templates/account/partials/addon.php:381
|
218 |
+
msgid "More information about %s"
|
219 |
+
msgstr "Více informací o %s"
|
220 |
+
|
221 |
+
#: includes/class-freemius.php:6029
|
222 |
+
msgid "Purchase License"
|
223 |
+
msgstr "Koupit licenci"
|
224 |
+
|
225 |
+
#: includes/class-freemius.php6964, templates/connect.php:163
|
226 |
+
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."
|
227 |
+
msgstr "Aktivační email od %s by měl dorazit do vašeho mailboxu (%s). Ujistěte se, že v emailu kliknete na tlačítko aktivovat, abyste %s."
|
228 |
+
|
229 |
+
#: includes/class-freemius.php:6968
|
230 |
+
msgid "start the trial"
|
231 |
+
msgstr "spustit zkušební verzi"
|
232 |
+
|
233 |
+
#: includes/class-freemius.php6969, templates/connect.php:167
|
234 |
+
msgid "complete the install"
|
235 |
+
msgstr "dokončit installaci"
|
236 |
+
|
237 |
+
#: includes/class-freemius.php:7081
|
238 |
+
msgid "You are just one step away - %s"
|
239 |
+
msgstr "Jste jen na krok od - %s"
|
240 |
+
|
241 |
+
#: includes/class-freemius.php:7084
|
242 |
+
msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
|
243 |
+
msgid "Complete \"%s\" Activation Now"
|
244 |
+
msgstr "Dokončit aktivaci pluginu „%s“"
|
245 |
+
|
246 |
+
#: includes/class-freemius.php:7162
|
247 |
+
msgid "We made a few tweaks to the %s, %s"
|
248 |
+
msgstr "Udělali jsme několik vylepšení %s, %s"
|
249 |
+
|
250 |
+
#: includes/class-freemius.php:7166
|
251 |
+
msgid "Opt in to make \"%s\" better!"
|
252 |
+
msgstr "Zúčastněte se, aby byl \"%s\" ještě lepší!"
|
253 |
+
|
254 |
+
#: includes/class-freemius.php:7598
|
255 |
+
msgid "The upgrade of %s was successfully completed."
|
256 |
+
msgstr "Aktualizace %s byla úspěšně dokončena."
|
257 |
+
|
258 |
+
#: includes/class-freemius.php9802, includes/class-fs-plugin-updater.php1038,
|
259 |
+
#: includes/class-fs-plugin-updater.php1233,
|
260 |
+
#: includes/class-fs-plugin-updater.php1240,
|
261 |
+
#: templates/auto-installation.php:32
|
262 |
+
msgid "Add-On"
|
263 |
+
msgstr "Doplněk"
|
264 |
+
|
265 |
+
#: includes/class-freemius.php9804, templates/account.php335,
|
266 |
+
#: templates/account.php343, templates/debug.php360, templates/debug.php:551
|
267 |
+
msgid "Plugin"
|
268 |
+
msgstr "Plugin"
|
269 |
+
|
270 |
+
#: includes/class-freemius.php9805, templates/account.php336,
|
271 |
+
#: templates/account.php344, templates/debug.php360, templates/debug.php551,
|
272 |
+
#: templates/forms/deactivation/form.php:71
|
273 |
+
msgid "Theme"
|
274 |
+
msgstr "Šablona"
|
275 |
+
|
276 |
+
#: includes/class-freemius.php:12596
|
277 |
+
msgid "An unknown error has occurred while trying to set the user's beta mode."
|
278 |
+
msgstr "Během nastavování uživatelského beta módu došlo k neočekávané chybě."
|
279 |
+
|
280 |
+
#: includes/class-freemius.php:13020
|
281 |
+
msgid "Invalid site details collection."
|
282 |
+
msgstr "Invalid site details collection."
|
283 |
+
|
284 |
+
#: includes/class-freemius.php:13140
|
285 |
+
msgid "We couldn't find your email address in the system, are you sure it's the right address?"
|
286 |
+
msgstr "Nemohli jsme najít vaši e-mailovou adresu v systému, jste si jisti, že je to správná adresa?"
|
287 |
+
|
288 |
+
#: includes/class-freemius.php:13142
|
289 |
+
msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
290 |
+
msgstr "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
291 |
+
|
292 |
+
#: includes/class-freemius.php:13416
|
293 |
+
msgid "Account is pending activation."
|
294 |
+
msgstr "Účet čeká na aktivaci."
|
295 |
+
|
296 |
+
#: includes/class-freemius.php13528,
|
297 |
+
#: templates/forms/premium-versions-upgrade-handler.php:47
|
298 |
+
msgid "Buy a license now"
|
299 |
+
msgstr "Koupit licenci nyní"
|
300 |
+
|
301 |
+
#: includes/class-freemius.php13540,
|
302 |
+
#: templates/forms/premium-versions-upgrade-handler.php:46
|
303 |
+
msgid "Renew your license now"
|
304 |
+
msgstr "Obnovte svou licenci teď"
|
305 |
+
|
306 |
+
#: includes/class-freemius.php:13544
|
307 |
+
msgid "%s to access version %s security & feature updates, and support."
|
308 |
+
msgstr "%s pro přístup k verzi %s zajišťující podporu a nejen bezpečnostní aktualizace."
|
309 |
+
|
310 |
+
#: includes/class-freemius.php:15957
|
311 |
+
msgid "%s activation was successfully completed."
|
312 |
+
msgstr "Aktivace %s byla úspěšně dokončena."
|
313 |
+
|
314 |
+
#: includes/class-freemius.php:15971
|
315 |
+
msgid "Your account was successfully activated with the %s plan."
|
316 |
+
msgstr "Účet byl úspěšně aktivován s plánem %s."
|
317 |
+
|
318 |
+
#: includes/class-freemius.php15982, includes/class-freemius.php:19707
|
319 |
+
msgid "Your trial has been successfully started."
|
320 |
+
msgstr "Vaše zkušebí verze byla úspěšně spuštěna."
|
321 |
+
|
322 |
+
#: includes/class-freemius.php16556, includes/class-freemius.php16644,
|
323 |
+
#: includes/class-freemius.php:16810
|
324 |
+
msgid "Couldn't activate %s."
|
325 |
+
msgstr "Nelze aktivovat %s."
|
326 |
+
|
327 |
+
#: includes/class-freemius.php16557, includes/class-freemius.php16645,
|
328 |
+
#: includes/class-freemius.php:16811
|
329 |
+
msgid "Please contact us with the following message:"
|
330 |
+
msgstr "Kontaktujte nás prosím s následující zprávou:"
|
331 |
+
|
332 |
+
#: includes/class-freemius.php16641, templates/forms/data-debug-mode.php:162
|
333 |
+
msgid "An unknown error has occurred."
|
334 |
+
msgstr "Došlo k neznámé chybě."
|
335 |
+
|
336 |
+
#: includes/class-freemius.php17168, includes/class-freemius.php:22082
|
337 |
+
msgid "Upgrade"
|
338 |
+
msgstr "Upgrade"
|
339 |
+
|
340 |
+
#: includes/class-freemius.php:17174
|
341 |
+
msgid "Start Trial"
|
342 |
+
msgstr "Začít Trial"
|
343 |
+
|
344 |
+
#: includes/class-freemius.php:17176
|
345 |
+
msgid "Pricing"
|
346 |
+
msgstr "Ceník"
|
347 |
+
|
348 |
+
#: includes/class-freemius.php17256, includes/class-freemius.php:17258
|
349 |
+
msgid "Affiliation"
|
350 |
+
msgstr "Affiliation"
|
351 |
+
|
352 |
+
#: includes/class-freemius.php17286, includes/class-freemius.php17288,
|
353 |
+
#: templates/account.php183, templates/debug.php:326
|
354 |
+
msgid "Account"
|
355 |
+
msgstr "Účet"
|
356 |
+
|
357 |
+
#: includes/class-freemius.php17302, includes/class-freemius.php17304,
|
358 |
+
#: includes/customizer/class-fs-customizer-support-section.php:60
|
359 |
+
msgid "Contact Us"
|
360 |
+
msgstr "Support"
|
361 |
+
|
362 |
+
#: includes/class-freemius.php17315, includes/class-freemius.php17317,
|
363 |
+
#: includes/class-freemius.php22096, templates/account.php111,
|
364 |
+
#: templates/account/partials/addon.php:44
|
365 |
+
msgid "Add-Ons"
|
366 |
+
msgstr "Doplňky"
|
367 |
+
|
368 |
+
#: includes/class-freemius.php:17351
|
369 |
+
msgctxt "ASCII arrow left icon"
|
370 |
+
msgid "←"
|
371 |
+
msgstr "←"
|
372 |
+
|
373 |
+
#: includes/class-freemius.php:17351
|
374 |
+
msgctxt "ASCII arrow right icon"
|
375 |
+
msgid "➤"
|
376 |
+
msgstr "➤"
|
377 |
+
|
378 |
+
#: includes/class-freemius.php17353, templates/pricing.php:103
|
379 |
+
msgctxt "noun"
|
380 |
+
msgid "Pricing"
|
381 |
+
msgstr "Ceník"
|
382 |
+
|
383 |
+
#: includes/class-freemius.php17566,
|
384 |
+
#: includes/customizer/class-fs-customizer-support-section.php:67
|
385 |
+
msgid "Support Forum"
|
386 |
+
msgstr "Fórum podpory"
|
387 |
+
|
388 |
+
#: includes/class-freemius.php:18536
|
389 |
+
msgid "Your email has been successfully verified - you are AWESOME!"
|
390 |
+
msgstr "Your email has been successfully verified - you are AWESOME!"
|
391 |
+
|
392 |
+
#: includes/class-freemius.php:18537
|
393 |
+
msgctxt "a positive response"
|
394 |
+
msgid "Right on"
|
395 |
+
msgstr "Right on"
|
396 |
+
|
397 |
+
#: includes/class-freemius.php:19041
|
398 |
+
msgid "seems like the key you entered doesn't match our records."
|
399 |
+
msgstr "seems like the key you entered doesn't match our records."
|
400 |
+
|
401 |
+
#: includes/class-freemius.php:19065
|
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 "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."
|
404 |
+
|
405 |
+
#: includes/class-freemius.php:19283
|
406 |
+
msgid "Your %s Add-on plan was successfully upgraded."
|
407 |
+
msgstr "Your %s Add-on plan was successfully upgraded."
|
408 |
+
|
409 |
+
#: includes/class-freemius.php:19285
|
410 |
+
msgid "%s Add-on was successfully purchased."
|
411 |
+
msgstr "Rozšíření %s bylo úspěšně zakoupeno."
|
412 |
+
|
413 |
+
#: includes/class-freemius.php:19288
|
414 |
+
msgid "Download the latest version"
|
415 |
+
msgstr "Stáhnout nejnovější verzi"
|
416 |
+
|
417 |
+
#: includes/class-freemius.php:19374
|
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 "Váš server blokuje přístup k Freemium API, což je zásadní pro synchronizaci %1s. Obraťte se na svého poskytovatele , aby přidal do svého whitelistu %2s"
|
420 |
+
|
421 |
+
#: includes/class-freemius.php19380, includes/class-freemius.php19390,
|
422 |
+
#: includes/class-freemius.php19835, includes/class-freemius.php:19924
|
423 |
+
msgid "Error received from the server:"
|
424 |
+
msgstr "Chyba přijatá ze serveru:"
|
425 |
+
|
426 |
+
#: includes/class-freemius.php:19390
|
427 |
+
msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
428 |
+
msgstr "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
429 |
+
|
430 |
+
#: includes/class-freemius.php19604, includes/class-freemius.php19840,
|
431 |
+
#: includes/class-freemius.php19895, includes/class-freemius.php:19998
|
432 |
+
msgctxt ""
|
433 |
+
msgid "Hmm"
|
434 |
+
msgstr "Hmm"
|
435 |
+
|
436 |
+
#: includes/class-freemius.php:19617
|
437 |
+
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."
|
438 |
+
msgstr "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."
|
439 |
+
|
440 |
+
#: includes/class-freemius.php19618, templates/account.php113,
|
441 |
+
#: templates/add-ons.php250, templates/account/partials/addon.php:46
|
442 |
+
msgctxt "trial period"
|
443 |
+
msgid "Trial"
|
444 |
+
msgstr "Trial"
|
445 |
+
|
446 |
+
#: includes/class-freemius.php:19623
|
447 |
+
msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
448 |
+
msgstr "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
449 |
+
|
450 |
+
#: includes/class-freemius.php19627, includes/class-freemius.php:19686
|
451 |
+
msgid "Please contact us here"
|
452 |
+
msgstr "Kontaktujte nás prosím zde"
|
453 |
+
|
454 |
+
#: includes/class-freemius.php:19638
|
455 |
+
msgid "Your plan was successfully activated."
|
456 |
+
msgstr "Vaše licence byla úspěšně aktivována."
|
457 |
+
|
458 |
+
#: includes/class-freemius.php:19639
|
459 |
+
msgid "Your plan was successfully upgraded."
|
460 |
+
msgstr "Váš plán byl úspěšně aktualizován."
|
461 |
+
|
462 |
+
#: includes/class-freemius.php:19656
|
463 |
+
msgid "Your plan was successfully changed to %s."
|
464 |
+
msgstr "Váše předplatné bylo úspěšně změněn na %s."
|
465 |
+
|
466 |
+
#: includes/class-freemius.php:19672
|
467 |
+
msgid "Your license has expired. You can still continue using the free %s forever."
|
468 |
+
msgstr "Vaše licence vypršela. Stále však můžete free verzi %s bez omezení."
|
469 |
+
|
470 |
+
#: includes/class-freemius.php:19674
|
471 |
+
msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
472 |
+
msgstr "Vaše licence vypršela. %1$sObnovte předplatné%2$s, abyste mohli mohli %3$s používat bez omezení."
|
473 |
+
|
474 |
+
#: includes/class-freemius.php:19682
|
475 |
+
msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
|
476 |
+
msgstr "Vaše licence byla zrušena. Pokud si myslíte, že je to chyba, obraťte se na naší podporu."
|
477 |
+
|
478 |
+
#: includes/class-freemius.php:19695
|
479 |
+
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."
|
480 |
+
msgstr "Vaše licence vypršela. Stále však můžete používat všechny funkce verze %s, ale pro získání technické podpory a nejnovějších aktualizací budete muset obnovit svou licenci."
|
481 |
+
|
482 |
+
#: includes/class-freemius.php:19721
|
483 |
+
msgid "Your free trial has expired. You can still continue using all our free features."
|
484 |
+
msgstr "Your free trial has expired. You can still continue using all our free features."
|
485 |
+
|
486 |
+
#: includes/class-freemius.php:19723
|
487 |
+
msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
488 |
+
msgstr "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
489 |
+
|
490 |
+
#: includes/class-freemius.php:19831
|
491 |
+
msgid "It looks like the license could not be activated."
|
492 |
+
msgstr "Licenci se nepodařilo aktivovat."
|
493 |
+
|
494 |
+
#: includes/class-freemius.php:19873
|
495 |
+
msgid "Your license was successfully activated."
|
496 |
+
msgstr "Vaše licence byla úspěšně aktivována."
|
497 |
+
|
498 |
+
#: includes/class-freemius.php:19899
|
499 |
+
msgid "It looks like your site currently doesn't have an active license."
|
500 |
+
msgstr "It looks like your site currently doesn't have an active license."
|
501 |
+
|
502 |
+
#: includes/class-freemius.php:19923
|
503 |
+
msgid "It looks like the license deactivation failed."
|
504 |
+
msgstr "Deaktivace licence pravděpodobně selhala."
|
505 |
+
|
506 |
+
#: includes/class-freemius.php:19951
|
507 |
+
msgid "Your license was successfully deactivated, you are back to the %s plan."
|
508 |
+
msgstr "Vaše licence byla úspěšně deaktivována, jste zpět na plánu %s."
|
509 |
+
|
510 |
+
#: includes/class-freemius.php:19952
|
511 |
+
msgid "O.K"
|
512 |
+
msgstr "OK"
|
513 |
+
|
514 |
+
#: includes/class-freemius.php:20005
|
515 |
+
msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
|
516 |
+
msgstr "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
|
517 |
+
|
518 |
+
#: includes/class-freemius.php:20014
|
519 |
+
msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
|
520 |
+
msgstr "Vaše předplatné bylo úspěšně zrušeno. Platnost licence %s vyprší za %s."
|
521 |
+
|
522 |
+
#: includes/class-freemius.php:20056
|
523 |
+
msgid "You are already running the %s in a trial mode."
|
524 |
+
msgstr "You are already running the %s in a trial mode."
|
525 |
+
|
526 |
+
#: includes/class-freemius.php:20067
|
527 |
+
msgid "You already utilized a trial before."
|
528 |
+
msgstr "O zkušební licenci nelze žádat dvakrát."
|
529 |
+
|
530 |
+
#: includes/class-freemius.php:20081
|
531 |
+
msgid "Plan %s do not exist, therefore, can't start a trial."
|
532 |
+
msgstr "Plán %s neexistuje, proto nemůžete používt zkušební verzi."
|
533 |
+
|
534 |
+
#: includes/class-freemius.php:20092
|
535 |
+
msgid "Plan %s does not support a trial period."
|
536 |
+
msgstr "Plán %s nepodporuje zkušební období."
|
537 |
+
|
538 |
+
#: includes/class-freemius.php:20103
|
539 |
+
msgid "None of the %s's plans supports a trial period."
|
540 |
+
msgstr "None of the %s's plans supports a trial period."
|
541 |
+
|
542 |
+
#: includes/class-freemius.php:20153
|
543 |
+
msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
|
544 |
+
msgstr "Zkuušební režim už vám skončil, takže už není co rušit :)"
|
545 |
+
|
546 |
+
#: includes/class-freemius.php:20189
|
547 |
+
msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
|
548 |
+
msgstr "Omlouváme se, ale měli jsme nějaký dočasný problém se zrušením vaší zkušební licence. Zkuste to znovu za několik minut."
|
549 |
+
|
550 |
+
#: includes/class-freemius.php:20208
|
551 |
+
msgid "Your %s free trial was successfully cancelled."
|
552 |
+
msgstr "Your %s free trial was successfully cancelled."
|
553 |
+
|
554 |
+
#: includes/class-freemius.php:20524
|
555 |
+
msgid "Version %s was released."
|
556 |
+
msgstr "Byla vydána verze %s."
|
557 |
+
|
558 |
+
#: includes/class-freemius.php:20524
|
559 |
+
msgid "Please download %s."
|
560 |
+
msgstr "Stáhněte si prosím %s."
|
561 |
+
|
562 |
+
#: includes/class-freemius.php:20531
|
563 |
+
msgid "the latest %s version here"
|
564 |
+
msgstr "nejnovější %s verze zde"
|
565 |
+
|
566 |
+
#: includes/class-freemius.php:20536
|
567 |
+
msgid "New"
|
568 |
+
msgstr "Nový"
|
569 |
+
|
570 |
+
#: includes/class-freemius.php:20541
|
571 |
+
msgid "Seems like you got the latest release."
|
572 |
+
msgstr "Pravděpodobně máte nejnovější verzi."
|
573 |
+
|
574 |
+
#: includes/class-freemius.php:20542
|
575 |
+
msgid "You are all good!"
|
576 |
+
msgstr "You are all good!"
|
577 |
+
|
578 |
+
#: includes/class-freemius.php:20812
|
579 |
+
msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
|
580 |
+
msgstr "Ověřovací zpráva byla právě odeslána na email %s. Pokud ji nenajdete do 5 min, zkontrolujte prosím složku pro spam."
|
581 |
+
|
582 |
+
#: includes/class-freemius.php:20951
|
583 |
+
msgid "Site successfully opted in."
|
584 |
+
msgstr "Site successfully opted in."
|
585 |
+
|
586 |
+
#: includes/class-freemius.php20952, includes/class-freemius.php:21792
|
587 |
+
msgid "Awesome"
|
588 |
+
msgstr "Úžasný"
|
589 |
+
|
590 |
+
#: includes/class-freemius.php20968, templates/forms/optout.php:32
|
591 |
+
msgid "We appreciate your help in making the %s better by letting us track some usage data."
|
592 |
+
msgstr "Vážíme si vaší pomoci při zlepšování %s tím, že nám umožníte sledovat některá data o jeho používání."
|
593 |
+
|
594 |
+
#: includes/class-freemius.php:20969
|
595 |
+
msgid "Thank you!"
|
596 |
+
msgstr "Děkujeme!"
|
597 |
+
|
598 |
+
#: includes/class-freemius.php:20976
|
599 |
+
msgid "We will no longer be sending any usage data of %s on %s to %s."
|
600 |
+
msgstr "Nebudeme již posílat žádná data o používání %s na %s do %s."
|
601 |
+
|
602 |
+
#: includes/class-freemius.php:21105
|
603 |
+
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."
|
604 |
+
msgstr "Zkontrolujte si prosím emailovou schránku, měli byste obdržet zprávu od %s pro potvrzení změny vlastnictví. Z bezpečnostních důvodů je nutné potvrdit tuto změnu během následujících 15 minut. Pokud email nemůžete najít, zkontrolujte složku se spamem."
|
605 |
+
|
606 |
+
#: includes/class-freemius.php:21111
|
607 |
+
msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
|
608 |
+
msgstr "Děkujeme za potvrzení změny vlastnictví. Email byl právě odeslán na adresu %s, ke konečnému schválení."
|
609 |
+
|
610 |
+
#: includes/class-freemius.php:21116
|
611 |
+
msgid "%s is the new owner of the account."
|
612 |
+
msgstr "%s je nový vlastník účtu."
|
613 |
+
|
614 |
+
#: includes/class-freemius.php:21118
|
615 |
+
msgctxt "as congratulations"
|
616 |
+
msgid "Congrats"
|
617 |
+
msgstr "Gratulujeme"
|
618 |
+
|
619 |
+
#: includes/class-freemius.php:21138
|
620 |
+
msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
|
621 |
+
msgstr "Omlouváme se, ale aktualizaci emailu jsem nemohli dokončit. Uživatel s vámi zadaným emailem už je registrován."
|
622 |
+
|
623 |
+
#: includes/class-freemius.php:21139
|
624 |
+
msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
|
625 |
+
msgstr "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
|
626 |
+
|
627 |
+
#: includes/class-freemius.php:21146
|
628 |
+
msgid "Change Ownership"
|
629 |
+
msgstr "Změnit vlastnictví"
|
630 |
+
|
631 |
+
#: includes/class-freemius.php:21154
|
632 |
+
msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
|
633 |
+
msgstr "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
|
634 |
+
|
635 |
+
#: includes/class-freemius.php:21166
|
636 |
+
msgid "Please provide your full name."
|
637 |
+
msgstr "Zadejte prosím své celé jméno."
|
638 |
+
|
639 |
+
#: includes/class-freemius.php:21171
|
640 |
+
msgid "Your name was successfully updated."
|
641 |
+
msgstr "Vaše jméno bylo úspěšně aktualizováno."
|
642 |
+
|
643 |
+
#: includes/class-freemius.php:21232
|
644 |
+
msgid "You have successfully updated your %s."
|
645 |
+
msgstr "Úspěšně jste aktualizovali %s."
|
646 |
+
|
647 |
+
#: includes/class-freemius.php:21372
|
648 |
+
msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
|
649 |
+
msgstr "Just letting you know that the add-ons information of %s is being pulled from an external server."
|
650 |
+
|
651 |
+
#: includes/class-freemius.php:21373
|
652 |
+
msgctxt "advance notice of something that will need attention."
|
653 |
+
msgid "Heads up"
|
654 |
+
msgstr "Heads up"
|
655 |
+
|
656 |
+
#: includes/class-freemius.php:21832
|
657 |
+
msgctxt "exclamation"
|
658 |
+
msgid "Hey"
|
659 |
+
msgstr "Dobrý den"
|
660 |
+
|
661 |
+
#: includes/class-freemius.php:21832
|
662 |
+
msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
|
663 |
+
msgstr "Jak se vám líbí %s? Otestujte všechny naše %s nadstandardní funkce s %d-denní zkušební verze zdarma."
|
664 |
+
|
665 |
+
#: includes/class-freemius.php:21840
|
666 |
+
msgid "No commitment for %s days - cancel anytime!"
|
667 |
+
msgstr "No commitment for %s days - cancel anytime!"
|
668 |
+
|
669 |
+
#: includes/class-freemius.php:21841
|
670 |
+
msgid "No credit card required"
|
671 |
+
msgstr "Kreditní karta není vyžadována"
|
672 |
+
|
673 |
+
#: includes/class-freemius.php21848, templates/forms/trial-start.php:53
|
674 |
+
msgctxt "call to action"
|
675 |
+
msgid "Start free trial"
|
676 |
+
msgstr "Start free trial"
|
677 |
+
|
678 |
+
#: includes/class-freemius.php:21925
|
679 |
+
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!"
|
680 |
+
msgstr "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!"
|
681 |
+
|
682 |
+
#: includes/class-freemius.php:21934
|
683 |
+
msgid "Learn more"
|
684 |
+
msgstr "Přečtěte si více"
|
685 |
+
|
686 |
+
#: includes/class-freemius.php22120, templates/account.php499,
|
687 |
+
#: templates/account.php624, templates/connect.php171,
|
688 |
+
#: templates/connect.php421, templates/forms/license-activation.php27,
|
689 |
+
#: templates/account/partials/addon.php:321
|
690 |
+
msgid "Activate License"
|
691 |
+
msgstr "Aktivovat licenci"
|
692 |
+
|
693 |
+
#: includes/class-freemius.php22121, templates/account.php571,
|
694 |
+
#: templates/account.php623, templates/account/partials/addon.php322,
|
695 |
+
#: templates/account/partials/site.php:271
|
696 |
+
msgid "Change License"
|
697 |
+
msgstr "Změnit licenci"
|
698 |
+
|
699 |
+
#: includes/class-freemius.php22217, templates/account/partials/site.php:169
|
700 |
+
msgid "Opt Out"
|
701 |
+
msgstr "Odhlásit se"
|
702 |
+
|
703 |
+
#: includes/class-freemius.php22219, includes/class-freemius.php22225,
|
704 |
+
#: templates/account/partials/site.php49,
|
705 |
+
#: templates/account/partials/site.php:169
|
706 |
+
msgid "Opt In"
|
707 |
+
msgstr "Zúčastnit se"
|
708 |
+
|
709 |
+
#: includes/class-freemius.php:22453
|
710 |
+
msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
|
711 |
+
msgstr " Placená verze %1s je již nainstalována. Aktivujte jí, abyste mohli těžit z %2s funkcí. %3s"
|
712 |
+
|
713 |
+
#: includes/class-freemius.php:22461
|
714 |
+
msgid "Activate %s features"
|
715 |
+
msgstr "Aktivovat %s funkce"
|
716 |
+
|
717 |
+
#: includes/class-freemius.php:22474
|
718 |
+
msgid "Please follow these steps to complete the upgrade"
|
719 |
+
msgstr "Dokončete upgrade provedením následujících kroků"
|
720 |
+
|
721 |
+
#: includes/class-freemius.php:22478
|
722 |
+
msgid "Download the latest %s version"
|
723 |
+
msgstr "Stáhnout nejnovější verzi %s"
|
724 |
+
|
725 |
+
#: includes/class-freemius.php:22482
|
726 |
+
msgid "Upload and activate the downloaded version"
|
727 |
+
msgstr "Nahrát a aktivovat stáhnutou verzi"
|
728 |
+
|
729 |
+
#: includes/class-freemius.php:22484
|
730 |
+
msgid "How to upload and activate?"
|
731 |
+
msgstr "Jak nahrát a aktivovat?"
|
732 |
+
|
733 |
+
#: includes/class-freemius.php:22618
|
734 |
+
msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
|
735 |
+
msgstr "%sClick here%s to choose the sites where you'd like to activate the license on."
|
736 |
+
|
737 |
+
#: includes/class-freemius.php:22779
|
738 |
+
msgid "Auto installation only works for opted-in users."
|
739 |
+
msgstr "Auto installation only works for opted-in users."
|
740 |
+
|
741 |
+
#: includes/class-freemius.php22789, includes/class-freemius.php22822,
|
742 |
+
#: includes/class-fs-plugin-updater.php1212,
|
743 |
+
#: includes/class-fs-plugin-updater.php:1226
|
744 |
+
msgid "Invalid module ID."
|
745 |
+
msgstr "Invalid module ID."
|
746 |
+
|
747 |
+
#: includes/class-freemius.php22798, includes/class-fs-plugin-updater.php:1248
|
748 |
+
msgid "Premium version already active."
|
749 |
+
msgstr "Prémiová verze je již aktivní."
|
750 |
+
|
751 |
+
#: includes/class-freemius.php:22805
|
752 |
+
msgid "You do not have a valid license to access the premium version."
|
753 |
+
msgstr "You do not have a valid license to access the premium version."
|
754 |
+
|
755 |
+
#: includes/class-freemius.php:22812
|
756 |
+
msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
|
757 |
+
msgstr "Plugin is a \"Serviceware\" which means it does not have a premium code version."
|
758 |
+
|
759 |
+
#: includes/class-freemius.php22830, includes/class-fs-plugin-updater.php:1247
|
760 |
+
msgid "Premium add-on version already installed."
|
761 |
+
msgstr "Premium add-on version already installed."
|
762 |
+
|
763 |
+
#: includes/class-freemius.php:23180
|
764 |
+
msgid "View paid features"
|
765 |
+
msgstr "Zobrazit placené funkce"
|
766 |
+
|
767 |
+
#: includes/class-freemius.php:23502
|
768 |
+
msgid "Thank you so much for using %s and its add-ons!"
|
769 |
+
msgstr "Thank you so much for using %s and its add-ons!"
|
770 |
+
|
771 |
+
#: includes/class-freemius.php:23503
|
772 |
+
msgid "Thank you so much for using %s!"
|
773 |
+
msgstr "Thank you so much for using %s!"
|
774 |
+
|
775 |
+
#: includes/class-freemius.php:23509
|
776 |
+
msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
|
777 |
+
msgstr "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
|
778 |
+
|
779 |
+
#: includes/class-freemius.php:23513
|
780 |
+
msgid "Thank you so much for using our products!"
|
781 |
+
msgstr "Thank you so much for using our products!"
|
782 |
+
|
783 |
+
#: includes/class-freemius.php:23514
|
784 |
+
msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
|
785 |
+
msgstr "You've already opted-in to our usage-tracking, which helps us keep improving them."
|
786 |
+
|
787 |
+
#: includes/class-freemius.php:23533
|
788 |
+
msgid "%s and its add-ons"
|
789 |
+
msgstr "%s a jeho doplňky"
|
790 |
+
|
791 |
+
#: includes/class-freemius.php:23542
|
792 |
+
msgid "Products"
|
793 |
+
msgstr "Produkty"
|
794 |
+
|
795 |
+
#: includes/class-freemius.php23549, templates/connect.php:272
|
796 |
+
msgid "Yes"
|
797 |
+
msgstr "Ano"
|
798 |
+
|
799 |
+
#: includes/class-freemius.php23550, templates/connect.php:273
|
800 |
+
msgid "send me security & feature updates, educational content and offers."
|
801 |
+
msgstr "send me security & feature updates, educational content and offers."
|
802 |
+
|
803 |
+
#: includes/class-freemius.php23551, templates/connect.php:278
|
804 |
+
msgid "No"
|
805 |
+
msgstr "Ne"
|
806 |
+
|
807 |
+
#: includes/class-freemius.php23553, templates/connect.php:280
|
808 |
+
msgid "do %sNOT%s send me security & feature updates, educational content and offers."
|
809 |
+
msgstr "do %sNOT%s send me security & feature updates, educational content and offers."
|
810 |
+
|
811 |
+
#: includes/class-freemius.php:23563
|
812 |
+
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 :-)"
|
813 |
+
msgstr "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 :-)"
|
814 |
+
|
815 |
+
#: includes/class-freemius.php23565, templates/connect.php:287
|
816 |
+
msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
|
817 |
+
msgstr "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
|
818 |
+
|
819 |
+
#: includes/class-freemius.php:23847
|
820 |
+
msgid "License key is empty."
|
821 |
+
msgstr "Licenční klíč je prázdný."
|
822 |
+
|
823 |
+
#: includes/class-fs-plugin-updater.php206,
|
824 |
+
#: templates/forms/premium-versions-upgrade-handler.php:57
|
825 |
+
msgid "Renew license"
|
826 |
+
msgstr "Obnovit licenci"
|
827 |
+
|
828 |
+
#: includes/class-fs-plugin-updater.php211,
|
829 |
+
#: templates/forms/premium-versions-upgrade-handler.php:58
|
830 |
+
msgid "Buy license"
|
831 |
+
msgstr "Koupit licenci"
|
832 |
+
|
833 |
+
#: includes/class-fs-plugin-updater.php321,
|
834 |
+
#: includes/class-fs-plugin-updater.php:354
|
835 |
+
msgid "There is a %s of %s available."
|
836 |
+
msgstr "There is a %s of %s available."
|
837 |
+
|
838 |
+
#: includes/class-fs-plugin-updater.php323,
|
839 |
+
#: includes/class-fs-plugin-updater.php:359
|
840 |
+
msgid "new Beta version"
|
841 |
+
msgstr "nová Beta verze"
|
842 |
+
|
843 |
+
#: includes/class-fs-plugin-updater.php324,
|
844 |
+
#: includes/class-fs-plugin-updater.php:360
|
845 |
+
msgid "new version"
|
846 |
+
msgstr "nová verze"
|
847 |
+
|
848 |
+
#: includes/class-fs-plugin-updater.php:383
|
849 |
+
msgid "Important Upgrade Notice:"
|
850 |
+
msgstr "Important Upgrade Notice:"
|
851 |
+
|
852 |
+
#: includes/class-fs-plugin-updater.php:1277
|
853 |
+
msgid "Installing plugin: %s"
|
854 |
+
msgstr "Instaluji plugin: %s"
|
855 |
+
|
856 |
+
#: includes/class-fs-plugin-updater.php:1318
|
857 |
+
msgid "Unable to connect to the filesystem. Please confirm your credentials."
|
858 |
+
msgstr "Nelze se připojit k systémovému souboru. Potvrďte prosím svá pověření."
|
859 |
+
|
860 |
+
#: includes/class-fs-plugin-updater.php:1500
|
861 |
+
msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
|
862 |
+
msgstr "Balíček remote pluginů neobsahuje složku s žádoucím \"slug\" a přejmenování nefunguje."
|
863 |
+
|
864 |
+
#: includes/fs-plugin-info-dialog.php:535
|
865 |
+
msgid "Purchase More"
|
866 |
+
msgstr "Zakoupit další"
|
867 |
+
|
868 |
+
#: includes/fs-plugin-info-dialog.php536,
|
869 |
+
#: templates/account/partials/addon.php:385
|
870 |
+
msgctxt "verb"
|
871 |
+
msgid "Purchase"
|
872 |
+
msgstr "Zakoupit"
|
873 |
+
|
874 |
+
#: includes/fs-plugin-info-dialog.php:540
|
875 |
+
msgid "Start my free %s"
|
876 |
+
msgstr "Začít můj bezplatný %s"
|
877 |
+
|
878 |
+
#: includes/fs-plugin-info-dialog.php:738
|
879 |
+
msgid "Install Free Version Update Now"
|
880 |
+
msgstr "Install Free Version Update Now"
|
881 |
+
|
882 |
+
#: includes/fs-plugin-info-dialog.php739, templates/account.php:560
|
883 |
+
msgid "Install Update Now"
|
884 |
+
msgstr "Nainstalovat aktualizaci"
|
885 |
+
|
886 |
+
#: includes/fs-plugin-info-dialog.php:748
|
887 |
+
msgid "Install Free Version Now"
|
888 |
+
msgstr "Nainstalovat verzi zdarma"
|
889 |
+
|
890 |
+
#: includes/fs-plugin-info-dialog.php749, templates/add-ons.php323,
|
891 |
+
#: templates/auto-installation.php111,
|
892 |
+
#: templates/account/partials/addon.php365,
|
893 |
+
#: templates/account/partials/addon.php:418
|
894 |
+
msgid "Install Now"
|
895 |
+
msgstr "Instalovat"
|
896 |
+
|
897 |
+
#: includes/fs-plugin-info-dialog.php:765
|
898 |
+
msgctxt "as download latest version"
|
899 |
+
msgid "Download Latest Free Version"
|
900 |
+
msgstr "Stáhněte si nejnovější bezplatnou verzi"
|
901 |
+
|
902 |
+
#: includes/fs-plugin-info-dialog.php766, templates/account.php91,
|
903 |
+
#: templates/add-ons.php37, templates/account/partials/addon.php:25
|
904 |
+
msgctxt "as download latest version"
|
905 |
+
msgid "Download Latest"
|
906 |
+
msgstr "Stáhněte si nejnovější"
|
907 |
+
|
908 |
+
#: includes/fs-plugin-info-dialog.php781, templates/add-ons.php329,
|
909 |
+
#: templates/account/partials/addon.php356,
|
910 |
+
#: templates/account/partials/addon.php:412
|
911 |
+
msgid "Activate this add-on"
|
912 |
+
msgstr "Aktivovat toto rozšíření"
|
913 |
+
|
914 |
+
#: includes/fs-plugin-info-dialog.php783, templates/connect.php:418
|
915 |
+
msgid "Activate Free Version"
|
916 |
+
msgstr "Aktivovat bezplatnou verzi"
|
917 |
+
|
918 |
+
#: includes/fs-plugin-info-dialog.php784, templates/account.php115,
|
919 |
+
#: templates/add-ons.php330, templates/account/partials/addon.php:48
|
920 |
+
msgid "Activate"
|
921 |
+
msgstr "Aktivovat"
|
922 |
+
|
923 |
+
#: includes/fs-plugin-info-dialog.php:994
|
924 |
+
msgctxt "Plugin installer section title"
|
925 |
+
msgid "Description"
|
926 |
+
msgstr "Popis"
|
927 |
+
|
928 |
+
#: includes/fs-plugin-info-dialog.php:995
|
929 |
+
msgctxt "Plugin installer section title"
|
930 |
+
msgid "Installation"
|
931 |
+
msgstr "Instalace"
|
932 |
+
|
933 |
+
#: includes/fs-plugin-info-dialog.php:996
|
934 |
+
msgctxt "Plugin installer section title"
|
935 |
+
msgid "FAQ"
|
936 |
+
msgstr "FAQ"
|
937 |
+
|
938 |
+
#: includes/fs-plugin-info-dialog.php997,
|
939 |
+
#: templates/plugin-info/description.php:55
|
940 |
+
msgid "Screenshots"
|
941 |
+
msgstr "Snímky obrazovky"
|
942 |
+
|
943 |
+
#: includes/fs-plugin-info-dialog.php:998
|
944 |
+
msgctxt "Plugin installer section title"
|
945 |
+
msgid "Changelog"
|
946 |
+
msgstr "Historie změn"
|
947 |
+
|
948 |
+
#: includes/fs-plugin-info-dialog.php:999
|
949 |
+
msgctxt "Plugin installer section title"
|
950 |
+
msgid "Reviews"
|
951 |
+
msgstr "Vaše hodnocení"
|
952 |
+
|
953 |
+
#: includes/fs-plugin-info-dialog.php:1000
|
954 |
+
msgctxt "Plugin installer section title"
|
955 |
+
msgid "Other Notes"
|
956 |
+
msgstr "Other Notes"
|
957 |
+
|
958 |
+
#: includes/fs-plugin-info-dialog.php:1015
|
959 |
+
msgctxt "Plugin installer section title"
|
960 |
+
msgid "Features & Pricing"
|
961 |
+
msgstr "Vlastnosti a ceník"
|
962 |
+
|
963 |
+
#: includes/fs-plugin-info-dialog.php:1025
|
964 |
+
msgid "Plugin Install"
|
965 |
+
msgstr "Instalace pluginu"
|
966 |
+
|
967 |
+
#: includes/fs-plugin-info-dialog.php:1097
|
968 |
+
msgctxt "e.g. Professional Plan"
|
969 |
+
msgid "%s Plan"
|
970 |
+
msgstr "%s plán"
|
971 |
+
|
972 |
+
#: includes/fs-plugin-info-dialog.php:1123
|
973 |
+
msgctxt "e.g. the best product"
|
974 |
+
msgid "Best"
|
975 |
+
msgstr "Nejlepší"
|
976 |
+
|
977 |
+
#: includes/fs-plugin-info-dialog.php1129,
|
978 |
+
#: includes/fs-plugin-info-dialog.php:1149
|
979 |
+
msgctxt "as every month"
|
980 |
+
msgid "Monthly"
|
981 |
+
msgstr "Měsíčně"
|
982 |
+
|
983 |
+
#: includes/fs-plugin-info-dialog.php:1132
|
984 |
+
msgctxt "as once a year"
|
985 |
+
msgid "Annual"
|
986 |
+
msgstr "Ročně"
|
987 |
+
|
988 |
+
#: includes/fs-plugin-info-dialog.php:1135
|
989 |
+
msgid "Lifetime"
|
990 |
+
msgstr "Doživotní"
|
991 |
+
|
992 |
+
#: includes/fs-plugin-info-dialog.php1149,
|
993 |
+
#: includes/fs-plugin-info-dialog.php1151,
|
994 |
+
#: includes/fs-plugin-info-dialog.php:1153
|
995 |
+
msgctxt "e.g. billed monthly"
|
996 |
+
msgid "Billed %s"
|
997 |
+
msgstr "Účtováno %s"
|
998 |
+
|
999 |
+
#: includes/fs-plugin-info-dialog.php:1151
|
1000 |
+
msgctxt "as once a year"
|
1001 |
+
msgid "Annually"
|
1002 |
+
msgstr "Ročně"
|
1003 |
+
|
1004 |
+
#: includes/fs-plugin-info-dialog.php:1153
|
1005 |
+
msgctxt "as once a year"
|
1006 |
+
msgid "Once"
|
1007 |
+
msgstr "Jedenkrát"
|
1008 |
+
|
1009 |
+
#: includes/fs-plugin-info-dialog.php:1159
|
1010 |
+
msgid "Single Site License"
|
1011 |
+
msgstr "Single Site License"
|
1012 |
+
|
1013 |
+
#: includes/fs-plugin-info-dialog.php:1161
|
1014 |
+
msgid "Unlimited Licenses"
|
1015 |
+
msgstr "Unlimited Licenses"
|
1016 |
+
|
1017 |
+
#: includes/fs-plugin-info-dialog.php:1163
|
1018 |
+
msgid "Up to %s Sites"
|
1019 |
+
msgstr "Až pro %s webů"
|
1020 |
+
|
1021 |
+
#: includes/fs-plugin-info-dialog.php1173,
|
1022 |
+
#: templates/plugin-info/features.php:82
|
1023 |
+
msgctxt "as monthly period"
|
1024 |
+
msgid "mo"
|
1025 |
+
msgstr "po"
|
1026 |
+
|
1027 |
+
#: includes/fs-plugin-info-dialog.php1180,
|
1028 |
+
#: templates/plugin-info/features.php:80
|
1029 |
+
msgctxt "as annual period"
|
1030 |
+
msgid "year"
|
1031 |
+
msgstr "rok"
|
1032 |
+
|
1033 |
+
#: includes/fs-plugin-info-dialog.php:1234
|
1034 |
+
msgctxt "noun"
|
1035 |
+
msgid "Price"
|
1036 |
+
msgstr "Cena"
|
1037 |
+
|
1038 |
+
#: includes/fs-plugin-info-dialog.php:1282
|
1039 |
+
msgid "Save %s"
|
1040 |
+
msgstr "Uložit %s"
|
1041 |
+
|
1042 |
+
#: includes/fs-plugin-info-dialog.php:1292
|
1043 |
+
msgid "No commitment for %s - cancel anytime"
|
1044 |
+
msgstr "No commitment for %s - cancel anytime"
|
1045 |
+
|
1046 |
+
#: includes/fs-plugin-info-dialog.php:1295
|
1047 |
+
msgid "After your free %s, pay as little as %s"
|
1048 |
+
msgstr "Po bezplatné %s platit jen v %s"
|
1049 |
+
|
1050 |
+
#: includes/fs-plugin-info-dialog.php:1306
|
1051 |
+
msgid "Details"
|
1052 |
+
msgstr "Detaily"
|
1053 |
+
|
1054 |
+
#: includes/fs-plugin-info-dialog.php1310, templates/account.php102,
|
1055 |
+
#: templates/debug.php203, templates/debug.php240, templates/debug.php457,
|
1056 |
+
#: templates/account/partials/addon.php:36
|
1057 |
+
msgctxt "product version"
|
1058 |
+
msgid "Version"
|
1059 |
+
msgstr "Verze"
|
1060 |
+
|
1061 |
+
#: includes/fs-plugin-info-dialog.php:1317
|
1062 |
+
msgctxt "as the plugin author"
|
1063 |
+
msgid "Author"
|
1064 |
+
msgstr "Autor"
|
1065 |
+
|
1066 |
+
#: includes/fs-plugin-info-dialog.php:1324
|
1067 |
+
msgid "Last Updated"
|
1068 |
+
msgstr "Poslední aktualizace"
|
1069 |
+
|
1070 |
+
#: includes/fs-plugin-info-dialog.php1329, templates/account.php:468
|
1071 |
+
msgctxt "x-ago"
|
1072 |
+
msgid "%s ago"
|
1073 |
+
msgstr "Před %s"
|
1074 |
+
|
1075 |
+
#: includes/fs-plugin-info-dialog.php:1338
|
1076 |
+
msgid "Requires WordPress Version"
|
1077 |
+
msgstr "Vyžaduje verzi WordPress"
|
1078 |
+
|
1079 |
+
#: includes/fs-plugin-info-dialog.php:1339
|
1080 |
+
msgid "%s or higher"
|
1081 |
+
msgstr "%s nebo vyšší"
|
1082 |
+
|
1083 |
+
#: includes/fs-plugin-info-dialog.php:1346
|
1084 |
+
msgid "Compatible up to"
|
1085 |
+
msgstr "Kompatibilní až po"
|
1086 |
+
|
1087 |
+
#: includes/fs-plugin-info-dialog.php:1354
|
1088 |
+
msgid "Downloaded"
|
1089 |
+
msgstr "Staženo"
|
1090 |
+
|
1091 |
+
#: includes/fs-plugin-info-dialog.php:1358
|
1092 |
+
msgid "%s time"
|
1093 |
+
msgstr "%s krát"
|
1094 |
+
|
1095 |
+
#: includes/fs-plugin-info-dialog.php:1360
|
1096 |
+
msgid "%s times"
|
1097 |
+
msgstr "%s krát"
|
1098 |
+
|
1099 |
+
#: includes/fs-plugin-info-dialog.php:1370
|
1100 |
+
msgid "WordPress.org Plugin Page"
|
1101 |
+
msgstr "Název pluginu na WordPress.org"
|
1102 |
+
|
1103 |
+
#: includes/fs-plugin-info-dialog.php:1378
|
1104 |
+
msgid "Plugin Homepage"
|
1105 |
+
msgstr "Hlavní stránka pluginu"
|
1106 |
+
|
1107 |
+
#: includes/fs-plugin-info-dialog.php1386,
|
1108 |
+
#: includes/fs-plugin-info-dialog.php:1468
|
1109 |
+
msgid "Donate to this plugin"
|
1110 |
+
msgstr "Přispějte na tento plugin"
|
1111 |
+
|
1112 |
+
#: includes/fs-plugin-info-dialog.php:1393
|
1113 |
+
msgid "Average Rating"
|
1114 |
+
msgstr "Průměrné hodnocení"
|
1115 |
+
|
1116 |
+
#: includes/fs-plugin-info-dialog.php:1400
|
1117 |
+
msgid "based on %s"
|
1118 |
+
msgstr "založeno na %s"
|
1119 |
+
|
1120 |
+
#: includes/fs-plugin-info-dialog.php:1404
|
1121 |
+
msgid "%s rating"
|
1122 |
+
msgstr "%s hodnocení"
|
1123 |
+
|
1124 |
+
#: includes/fs-plugin-info-dialog.php:1406
|
1125 |
+
msgid "%s ratings"
|
1126 |
+
msgstr "%s hodnocení"
|
1127 |
+
|
1128 |
+
#: includes/fs-plugin-info-dialog.php:1421
|
1129 |
+
msgid "%s star"
|
1130 |
+
msgstr "%s hvězda"
|
1131 |
+
|
1132 |
+
#: includes/fs-plugin-info-dialog.php:1423
|
1133 |
+
msgid "%s stars"
|
1134 |
+
msgstr "%s hvězd"
|
1135 |
+
|
1136 |
+
#: includes/fs-plugin-info-dialog.php:1434
|
1137 |
+
msgid "Click to see reviews that provided a rating of %s"
|
1138 |
+
msgstr "Click to see reviews that provided a rating of %s"
|
1139 |
+
|
1140 |
+
#: includes/fs-plugin-info-dialog.php:1447
|
1141 |
+
msgid "Contributors"
|
1142 |
+
msgstr "Přispěvatelé"
|
1143 |
+
|
1144 |
+
#: includes/fs-plugin-info-dialog.php1476,
|
1145 |
+
#: includes/fs-plugin-info-dialog.php:1478
|
1146 |
+
msgid "Warning"
|
1147 |
+
msgstr "Varování"
|
1148 |
+
|
1149 |
+
#: includes/fs-plugin-info-dialog.php:1476
|
1150 |
+
msgid "This plugin has not been tested with your current version of WordPress."
|
1151 |
+
msgstr "This plugin has not been tested with your current version of WordPress."
|
1152 |
+
|
1153 |
+
#: includes/fs-plugin-info-dialog.php:1478
|
1154 |
+
msgid "This plugin has not been marked as compatible with your version of WordPress."
|
1155 |
+
msgstr "This plugin has not been marked as compatible with your version of WordPress."
|
1156 |
+
|
1157 |
+
#: includes/fs-plugin-info-dialog.php:1497
|
1158 |
+
msgid "Paid add-on must be deployed to Freemius."
|
1159 |
+
msgstr "Placený doplněk musí být nasazen na Freemius."
|
1160 |
+
|
1161 |
+
#: includes/fs-plugin-info-dialog.php:1498
|
1162 |
+
msgid "Add-on must be deployed to WordPress.org or Freemius."
|
1163 |
+
msgstr "Rozšíření musí být nasazeno na WordPress.org nebo na Freemius."
|
1164 |
+
|
1165 |
+
#: includes/fs-plugin-info-dialog.php:1519
|
1166 |
+
msgid "Newer Version (%s) Installed"
|
1167 |
+
msgstr "Novější verze (%s) nainstalována"
|
1168 |
+
|
1169 |
+
#: includes/fs-plugin-info-dialog.php:1520
|
1170 |
+
msgid "Newer Free Version (%s) Installed"
|
1171 |
+
msgstr "Novější verze zdarma (%s) nainstalována"
|
1172 |
+
|
1173 |
+
#: includes/fs-plugin-info-dialog.php:1527
|
1174 |
+
msgid "Latest Version Installed"
|
1175 |
+
msgstr "Nainstalována nejnovější verze"
|
1176 |
+
|
1177 |
+
#: includes/fs-plugin-info-dialog.php:1528
|
1178 |
+
msgid "Latest Free Version Installed"
|
1179 |
+
msgstr "Nainstalována nejnovější verze zdarma"
|
1180 |
+
|
1181 |
+
#: templates/account.php92, templates/forms/subscription-cancellation.php96,
|
1182 |
+
#: templates/account/partials/addon.php26,
|
1183 |
+
#: templates/account/partials/site.php:311
|
1184 |
+
msgid "Downgrading your plan"
|
1185 |
+
msgstr "Snižuji vaše předplatné"
|
1186 |
+
|
1187 |
+
#: templates/account.php93, templates/forms/subscription-cancellation.php97,
|
1188 |
+
#: templates/account/partials/addon.php27,
|
1189 |
+
#: templates/account/partials/site.php:312
|
1190 |
+
msgid "Cancelling the subscription"
|
1191 |
+
msgstr "Ruším předplatné"
|
1192 |
+
|
1193 |
+
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the
|
1194 |
+
#. subscription'
|
1195 |
+
#: templates/account.php95, templates/forms/subscription-cancellation.php99,
|
1196 |
+
#: templates/account/partials/site.php:314
|
1197 |
+
msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
|
1198 |
+
msgstr "%1s okamžitě zastaví všechny budoucí opakující se platby a licence k plánu %s vyprší za %s."
|
1199 |
+
|
1200 |
+
#: templates/account.php96, templates/forms/subscription-cancellation.php100,
|
1201 |
+
#: templates/account/partials/addon.php30,
|
1202 |
+
#: templates/account/partials/site.php:315
|
1203 |
+
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."
|
1204 |
+
msgstr "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."
|
1205 |
+
|
1206 |
+
#: templates/account.php97, templates/forms/subscription-cancellation.php106,
|
1207 |
+
#: templates/account/partials/addon.php:31
|
1208 |
+
msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
|
1209 |
+
msgstr "Zrušení zkušební verze okamžitě zablokuje přístup ke všem prémiovým funkcím. Opravdu chcete pokračovat?"
|
1210 |
+
|
1211 |
+
#: templates/account.php98, templates/forms/subscription-cancellation.php101,
|
1212 |
+
#: templates/account/partials/addon.php32,
|
1213 |
+
#: templates/account/partials/site.php:316
|
1214 |
+
msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
1215 |
+
msgstr "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
1216 |
+
|
1217 |
+
#: templates/account.php99, templates/forms/subscription-cancellation.php102,
|
1218 |
+
#: templates/account/partials/addon.php33,
|
1219 |
+
#: templates/account/partials/site.php:317
|
1220 |
+
msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
1221 |
+
msgstr "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
1222 |
+
|
1223 |
+
#. translators: %s: Plan title (e.g. "Professional")
|
1224 |
+
#: templates/account.php101,
|
1225 |
+
#: templates/account/partials/activate-license-button.php31,
|
1226 |
+
#: templates/account/partials/addon.php:35
|
1227 |
+
msgid "Activate %s Plan"
|
1228 |
+
msgstr "Aktivovat %s plán"
|
1229 |
+
|
1230 |
+
#. translators: %s: Time period (e.g. Auto renews in "2 months")
|
1231 |
+
#: templates/account.php104, templates/account/partials/addon.php38,
|
1232 |
+
#: templates/account/partials/site.php:291
|
1233 |
+
msgid "Auto renews in %s"
|
1234 |
+
msgstr "Automaticky se obnoví za %s"
|
1235 |
+
|
1236 |
+
#. translators: %s: Time period (e.g. Expires in "2 months")
|
1237 |
+
#: templates/account.php106, templates/account/partials/addon.php40,
|
1238 |
+
#: templates/account/partials/site.php:293
|
1239 |
+
msgid "Expires in %s"
|
1240 |
+
msgstr "Vyprší za %s"
|
1241 |
+
|
1242 |
+
#: templates/account.php:107
|
1243 |
+
msgctxt "as synchronize license"
|
1244 |
+
msgid "Sync License"
|
1245 |
+
msgstr "Synchronizovat licence"
|
1246 |
+
|
1247 |
+
#: templates/account.php108, templates/account/partials/addon.php:41
|
1248 |
+
msgid "Cancel Trial"
|
1249 |
+
msgstr "Zrušit zkušební verzi"
|
1250 |
+
|
1251 |
+
#: templates/account.php109, templates/account/partials/addon.php:42
|
1252 |
+
msgid "Change Plan"
|
1253 |
+
msgstr "Změnit plán"
|
1254 |
+
|
1255 |
+
#: templates/account.php110, templates/account/partials/addon.php:43
|
1256 |
+
msgctxt "verb"
|
1257 |
+
msgid "Upgrade"
|
1258 |
+
msgstr "Vylepšit"
|
1259 |
+
|
1260 |
+
#: templates/account.php112, templates/account/partials/addon.php45,
|
1261 |
+
#: templates/account/partials/site.php:318
|
1262 |
+
msgctxt "verb"
|
1263 |
+
msgid "Downgrade"
|
1264 |
+
msgstr "Přejít na nižší verzi"
|
1265 |
+
|
1266 |
+
#: templates/account.php114, templates/add-ons.php246,
|
1267 |
+
#: templates/plugin-info/features.php72,
|
1268 |
+
#: templates/account/partials/addon.php47,
|
1269 |
+
#: templates/account/partials/site.php:33
|
1270 |
+
msgid "Free"
|
1271 |
+
msgstr "Zdarma"
|
1272 |
+
|
1273 |
+
#: templates/account.php116, templates/debug.php373,
|
1274 |
+
#: includes/customizer/class-fs-customizer-upsell-control.php110,
|
1275 |
+
#: templates/account/partials/addon.php:49
|
1276 |
+
msgctxt "as product pricing plan"
|
1277 |
+
msgid "Plan"
|
1278 |
+
msgstr "Druh členství"
|
1279 |
+
|
1280 |
+
#: templates/account.php:117
|
1281 |
+
msgid "Bundle Plan"
|
1282 |
+
msgstr "Bundle Plan"
|
1283 |
+
|
1284 |
+
#: templates/account.php:191
|
1285 |
+
msgid "Free Trial"
|
1286 |
+
msgstr "Zkušební verze zdarma"
|
1287 |
+
|
1288 |
+
#: templates/account.php:202
|
1289 |
+
msgid "Account Details"
|
1290 |
+
msgstr "Detaily účtu"
|
1291 |
+
|
1292 |
+
#: templates/account.php209, templates/forms/data-debug-mode.php:33
|
1293 |
+
msgid "Start Debug"
|
1294 |
+
msgstr "Start Debug"
|
1295 |
+
|
1296 |
+
#: templates/account.php:211
|
1297 |
+
msgid "Stop Debug"
|
1298 |
+
msgstr "Stop Debug"
|
1299 |
+
|
1300 |
+
#: templates/account.php:218
|
1301 |
+
msgid "Billing & Invoices"
|
1302 |
+
msgstr "Billing & Invoices"
|
1303 |
+
|
1304 |
+
#: templates/account.php:229
|
1305 |
+
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?"
|
1306 |
+
msgstr "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?"
|
1307 |
+
|
1308 |
+
#: templates/account.php:231
|
1309 |
+
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?"
|
1310 |
+
msgstr "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?"
|
1311 |
+
|
1312 |
+
#: templates/account.php:234
|
1313 |
+
msgid "Delete Account"
|
1314 |
+
msgstr "Smazat účet"
|
1315 |
+
|
1316 |
+
#: templates/account.php246, templates/account/partials/addon.php231,
|
1317 |
+
#: templates/account/partials/deactivate-license-button.php:35
|
1318 |
+
msgid "Deactivate License"
|
1319 |
+
msgstr "Deaktivovat licenci"
|
1320 |
+
|
1321 |
+
#: templates/account.php269, templates/forms/subscription-cancellation.php:125
|
1322 |
+
msgid "Are you sure you want to proceed?"
|
1323 |
+
msgstr "Opravdu chcete pokračovat?"
|
1324 |
+
|
1325 |
+
#: templates/account.php269, templates/account/partials/addon.php:255
|
1326 |
+
msgid "Cancel Subscription"
|
1327 |
+
msgstr "Zrušit předplatné"
|
1328 |
+
|
1329 |
+
#: templates/account.php298, templates/account/partials/addon.php:340
|
1330 |
+
msgctxt "as synchronize"
|
1331 |
+
msgid "Sync"
|
1332 |
+
msgstr "Synchronizovat"
|
1333 |
+
|
1334 |
+
#: templates/account.php313, templates/debug.php:507
|
1335 |
+
msgid "Name"
|
1336 |
+
msgstr "Jméno"
|
1337 |
+
|
1338 |
+
#: templates/account.php319, templates/debug.php:508
|
1339 |
+
msgid "Email"
|
1340 |
+
msgstr "Email"
|
1341 |
+
|
1342 |
+
#: templates/account.php326, templates/debug.php371, templates/debug.php:557
|
1343 |
+
msgid "User ID"
|
1344 |
+
msgstr "ID uživatele"
|
1345 |
+
|
1346 |
+
#: templates/account.php344, templates/account.php637,
|
1347 |
+
#: templates/account.php682, templates/debug.php238, templates/debug.php365,
|
1348 |
+
#: templates/debug.php454, templates/debug.php506, templates/debug.php555,
|
1349 |
+
#: templates/debug.php632, templates/account/payments.php35,
|
1350 |
+
#: templates/debug/logger.php:21
|
1351 |
+
msgid "ID"
|
1352 |
+
msgstr "ID"
|
1353 |
+
|
1354 |
+
#: templates/account.php:351
|
1355 |
+
msgid "Site ID"
|
1356 |
+
msgstr "ID stránky"
|
1357 |
+
|
1358 |
+
#: templates/account.php:354
|
1359 |
+
msgid "No ID"
|
1360 |
+
msgstr "Žádné ID"
|
1361 |
+
|
1362 |
+
#: templates/account.php359, templates/debug.php245, templates/debug.php374,
|
1363 |
+
#: templates/debug.php458, templates/debug.php510,
|
1364 |
+
#: templates/account/partials/site.php:227
|
1365 |
+
msgid "Public Key"
|
1366 |
+
msgstr "Veřejný klíč"
|
1367 |
+
|
1368 |
+
#: templates/account.php365, templates/debug.php375, templates/debug.php459,
|
1369 |
+
#: templates/debug.php511, templates/account/partials/site.php:239
|
1370 |
+
msgid "Secret Key"
|
1371 |
+
msgstr "Tajný klíč"
|
1372 |
+
|
1373 |
+
#: templates/account.php:368
|
1374 |
+
msgctxt "as secret encryption key missing"
|
1375 |
+
msgid "No Secret"
|
1376 |
+
msgstr "Tajný klíč chybí"
|
1377 |
+
|
1378 |
+
#: templates/account.php395, templates/account/partials/site.php120,
|
1379 |
+
#: templates/account/partials/site.php:122
|
1380 |
+
msgid "Trial"
|
1381 |
+
msgstr "Zkouška"
|
1382 |
+
|
1383 |
+
#: templates/account.php422, templates/debug.php562,
|
1384 |
+
#: templates/account/partials/site.php:260
|
1385 |
+
msgid "License Key"
|
1386 |
+
msgstr "Licenční klíč"
|
1387 |
+
|
1388 |
+
#: templates/account.php:453
|
1389 |
+
msgid "Join the Beta program"
|
1390 |
+
msgstr "Join the Beta program"
|
1391 |
+
|
1392 |
+
#: templates/account.php:459
|
1393 |
+
msgid "not verified"
|
1394 |
+
msgstr "není ověřeno"
|
1395 |
+
|
1396 |
+
#: templates/account.php468, templates/account/partials/addon.php:190
|
1397 |
+
msgid "Expired"
|
1398 |
+
msgstr "Vypršelo"
|
1399 |
+
|
1400 |
+
#: templates/account.php:528
|
1401 |
+
msgid "Premium version"
|
1402 |
+
msgstr "Prémiová verze"
|
1403 |
+
|
1404 |
+
#: templates/account.php:530
|
1405 |
+
msgid "Free version"
|
1406 |
+
msgstr "Verze zdarma"
|
1407 |
+
|
1408 |
+
#: templates/account.php:542
|
1409 |
+
msgid "Verify Email"
|
1410 |
+
msgstr "Ověřit e-mail"
|
1411 |
+
|
1412 |
+
#: templates/account.php:553
|
1413 |
+
msgid "Download %s Version"
|
1414 |
+
msgstr "Stáhnout verzi %s"
|
1415 |
+
|
1416 |
+
#: templates/account.php568, templates/account.php820,
|
1417 |
+
#: templates/account/partials/site.php248,
|
1418 |
+
#: templates/account/partials/site.php:270
|
1419 |
+
msgctxt "verb"
|
1420 |
+
msgid "Show"
|
1421 |
+
msgstr "Zobrazit"
|
1422 |
+
|
1423 |
+
#: templates/account.php:583
|
1424 |
+
msgid "What is your %s?"
|
1425 |
+
msgstr "Jaké je vaše \"%s\"?"
|
1426 |
+
|
1427 |
+
#: templates/account.php591, templates/account/billing.php:21
|
1428 |
+
msgctxt "verb"
|
1429 |
+
msgid "Edit"
|
1430 |
+
msgstr "Upravit"
|
1431 |
+
|
1432 |
+
#: templates/account.php:616
|
1433 |
+
msgid "Sites"
|
1434 |
+
msgstr "Weby"
|
1435 |
+
|
1436 |
+
#: templates/account.php:629
|
1437 |
+
msgid "Search by address"
|
1438 |
+
msgstr "Hledat podle adresy"
|
1439 |
+
|
1440 |
+
#: templates/account.php638, templates/debug.php:368
|
1441 |
+
msgid "Address"
|
1442 |
+
msgstr "Adresa"
|
1443 |
+
|
1444 |
+
#: templates/account.php:639
|
1445 |
+
msgid "License"
|
1446 |
+
msgstr "Licence"
|
1447 |
+
|
1448 |
+
#: templates/account.php:640
|
1449 |
+
msgid "Plan"
|
1450 |
+
msgstr "Druh členství"
|
1451 |
+
|
1452 |
+
#: templates/account.php:685
|
1453 |
+
msgctxt "as software license"
|
1454 |
+
msgid "License"
|
1455 |
+
msgstr "Licence"
|
1456 |
+
|
1457 |
+
#: templates/account.php:814
|
1458 |
+
msgctxt "verb"
|
1459 |
+
msgid "Hide"
|
1460 |
+
msgstr "Skrýt"
|
1461 |
+
|
1462 |
+
#: templates/account.php836, templates/forms/data-debug-mode.php:31
|
1463 |
+
msgid "Processing"
|
1464 |
+
msgstr "Processing"
|
1465 |
+
|
1466 |
+
#: templates/account.php:839
|
1467 |
+
msgid "Get updates for bleeding edge Beta versions of %s."
|
1468 |
+
msgstr "Get updates for bleeding edge Beta versions of %s."
|
1469 |
+
|
1470 |
+
#: templates/account.php:897
|
1471 |
+
msgid "Cancelling %s"
|
1472 |
+
msgstr "Ruším %s"
|
1473 |
+
|
1474 |
+
#: templates/account.php897, templates/account.php914,
|
1475 |
+
#: templates/forms/subscription-cancellation.php27,
|
1476 |
+
#: templates/forms/deactivation/form.php:133
|
1477 |
+
msgid "trial"
|
1478 |
+
msgstr "zkušební"
|
1479 |
+
|
1480 |
+
#: templates/account.php912, templates/forms/deactivation/form.php:150
|
1481 |
+
msgid "Cancelling %s..."
|
1482 |
+
msgstr "Ruším %s..."
|
1483 |
+
|
1484 |
+
#: templates/account.php915, templates/forms/subscription-cancellation.php28,
|
1485 |
+
#: templates/forms/deactivation/form.php:134
|
1486 |
+
msgid "subscription"
|
1487 |
+
msgstr "předplatné"
|
1488 |
+
|
1489 |
+
#: templates/account.php:929
|
1490 |
+
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?"
|
1491 |
+
msgstr "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
|
1492 |
+
|
1493 |
+
#: templates/add-ons.php:38
|
1494 |
+
msgid "View details"
|
1495 |
+
msgstr "Zobrazit podrobnosti"
|
1496 |
+
|
1497 |
+
#: templates/add-ons.php:48
|
1498 |
+
msgid "Add Ons for %s"
|
1499 |
+
msgstr "Rozšíření pro %s"
|
1500 |
+
|
1501 |
+
#: templates/add-ons.php:58
|
1502 |
+
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."
|
1503 |
+
msgstr "We couldn't load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
|
1504 |
+
|
1505 |
+
#: templates/add-ons.php:229
|
1506 |
+
msgctxt "active add-on"
|
1507 |
+
msgid "Active"
|
1508 |
+
msgstr "Active"
|
1509 |
+
|
1510 |
+
#: templates/add-ons.php:230
|
1511 |
+
msgctxt "installed add-on"
|
1512 |
+
msgid "Installed"
|
1513 |
+
msgstr "Installed"
|
1514 |
+
|
1515 |
+
#: templates/admin-notice.php13, templates/forms/license-activation.php207,
|
1516 |
+
#: templates/forms/resend-key.php:77
|
1517 |
+
msgctxt "as close a window"
|
1518 |
+
msgid "Dismiss"
|
1519 |
+
msgstr "Skrýt"
|
1520 |
+
|
1521 |
+
#: templates/auto-installation.php:45
|
1522 |
+
msgid "%s sec"
|
1523 |
+
msgstr "%s s"
|
1524 |
+
|
1525 |
+
#: templates/auto-installation.php:83
|
1526 |
+
msgid "Automatic Installation"
|
1527 |
+
msgstr "Automatic Installation"
|
1528 |
+
|
1529 |
+
#: templates/auto-installation.php:93
|
1530 |
+
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."
|
1531 |
+
msgstr "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."
|
1532 |
+
|
1533 |
+
#: templates/auto-installation.php:104
|
1534 |
+
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."
|
1535 |
+
msgstr "Proces instalace byl zahájen a může trvat několik minut. Počkejte prosím na dokončení - neobnovujte tuto stránku."
|
1536 |
+
|
1537 |
+
#: templates/auto-installation.php:109
|
1538 |
+
msgid "Cancel Installation"
|
1539 |
+
msgstr "Cancel Installation"
|
1540 |
+
|
1541 |
+
#: templates/checkout.php:180
|
1542 |
+
msgid "Checkout"
|
1543 |
+
msgstr "Pokladna"
|
1544 |
+
|
1545 |
+
#: templates/checkout.php:180
|
1546 |
+
msgid "PCI compliant"
|
1547 |
+
msgstr "Kompatibilní s PCI"
|
1548 |
+
|
1549 |
+
#. translators: %s: name (e.g. Hey John,)
|
1550 |
+
#: templates/connect.php:112
|
1551 |
+
msgctxt "greeting"
|
1552 |
+
msgid "Hey %s,"
|
1553 |
+
msgstr "Dobrý den %s,"
|
1554 |
+
|
1555 |
+
#: templates/connect.php:154
|
1556 |
+
msgid "Allow & Continue"
|
1557 |
+
msgstr "Povolit a pokračovat"
|
1558 |
+
|
1559 |
+
#: templates/connect.php:158
|
1560 |
+
msgid "Re-send activation email"
|
1561 |
+
msgstr "Znovu poslat aktivační email"
|
1562 |
+
|
1563 |
+
#: templates/connect.php:162
|
1564 |
+
msgid "Thanks %s!"
|
1565 |
+
msgstr "Děkujeme %s!"
|
1566 |
+
|
1567 |
+
#: templates/connect.php172, templates/forms/license-activation.php:46
|
1568 |
+
msgid "Agree & Activate License"
|
1569 |
+
msgstr "Aktivovat licenci"
|
1570 |
+
|
1571 |
+
#: templates/connect.php:181
|
1572 |
+
msgid "Thanks for purchasing %s! To get started, please enter your license key:"
|
1573 |
+
msgstr "Děkujeme za nákup %s! Pro aktivaci zadejte prosím svůj licenční klíč:"
|
1574 |
+
|
1575 |
+
#: templates/connect.php:188
|
1576 |
+
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."
|
1577 |
+
msgstr "Nezmeškejte žádnou důležitou aktualizaci - dovolte nám sbírat anonymní a obecná diagnostická data s %4$s a nechte se upozornit na nové funkce, výukové materiály, nabídky a bezpečnostní aktualizace."
|
1578 |
+
|
1579 |
+
#: templates/connect.php:189
|
1580 |
+
msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
|
1581 |
+
msgstr "Nezmeškejte žádnou důležitou aktualizaci - dovolte nám sbírat anonymní a obecná diagnostická data s %4$s a nechte se upozornit na nové funkce a bezpečnostní aktualizace."
|
1582 |
+
|
1583 |
+
#: templates/connect.php:195
|
1584 |
+
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."
|
1585 |
+
msgstr "Nezmeškejte žádnou důležitou aktualizaci - dovolte nám sbírat anonymní a obecná diagnostická data s %4$s a nechte se upozornit na nové funkce, výukové materiály, nabídky a bezpečnostní aktualizace. Pokud tohle přeskočíte tak se nic neděje. %1$s bude bez problémů dál fungovat."
|
1586 |
+
|
1587 |
+
#: templates/connect.php:196
|
1588 |
+
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."
|
1589 |
+
msgstr "Nezmeškejte žádnou důležitou aktualizaci - dovolte nám sbírat anonymní a obecná diagnostická data s %4$s a nechte se upozornit na nové funkce a bezpečnostní aktualizace. Pokud tohle přeskočíte tak se nic neděje. %1$s bude bez problémů dál fungovat."
|
1590 |
+
|
1591 |
+
#: templates/connect.php:230
|
1592 |
+
msgid "We're excited to introduce the Freemius network-level integration."
|
1593 |
+
msgstr "Jsme rádi, že vám můžeme ukázat integraci Freemiusu i v rámci sítě webů."
|
1594 |
+
|
1595 |
+
#: templates/connect.php:233
|
1596 |
+
msgid "During the update process we detected %d site(s) that are still pending license activation."
|
1597 |
+
msgstr "During the update process we detected %d site(s) that are still pending license activation."
|
1598 |
+
|
1599 |
+
#: templates/connect.php:235
|
1600 |
+
msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
1601 |
+
msgstr "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
1602 |
+
|
1603 |
+
#: templates/connect.php:237
|
1604 |
+
msgid "%s's paid features"
|
1605 |
+
msgstr "%s's paid features"
|
1606 |
+
|
1607 |
+
#: templates/connect.php:242
|
1608 |
+
msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
1609 |
+
msgstr "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
1610 |
+
|
1611 |
+
#: templates/connect.php:244
|
1612 |
+
msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
|
1613 |
+
msgstr "During the update process we detected %s site(s) in the network that are still pending your attention."
|
1614 |
+
|
1615 |
+
#: templates/connect.php253, templates/forms/data-debug-mode.php35,
|
1616 |
+
#: templates/forms/license-activation.php:49
|
1617 |
+
msgid "License key"
|
1618 |
+
msgstr "Licenční klíč"
|
1619 |
+
|
1620 |
+
#: templates/connect.php256, templates/forms/license-activation.php:22
|
1621 |
+
msgid "Can't find your license key?"
|
1622 |
+
msgstr "Nemůžete najít svůj licenční klíč?"
|
1623 |
+
|
1624 |
+
#: templates/connect.php315, templates/connect.php652,
|
1625 |
+
#: templates/forms/deactivation/retry-skip.php:20
|
1626 |
+
msgctxt "verb"
|
1627 |
+
msgid "Skip"
|
1628 |
+
msgstr "Přeskočit"
|
1629 |
+
|
1630 |
+
#: templates/connect.php:318
|
1631 |
+
msgid "Delegate to Site Admins"
|
1632 |
+
msgstr "Delegate to Site Admins"
|
1633 |
+
|
1634 |
+
#: templates/connect.php:318
|
1635 |
+
msgid "If you click it, this decision will be delegated to the sites administrators."
|
1636 |
+
msgstr "If you click it, this decision will be delegated to the sites administrators."
|
1637 |
+
|
1638 |
+
#: templates/connect.php:346
|
1639 |
+
msgid "Your Profile Overview"
|
1640 |
+
msgstr "Informace o vašem profilu"
|
1641 |
+
|
1642 |
+
#: templates/connect.php:347
|
1643 |
+
msgid "Name and email address"
|
1644 |
+
msgstr "Jméno a emailová adresa"
|
1645 |
+
|
1646 |
+
#: templates/connect.php:352
|
1647 |
+
msgid "Your Site Overview"
|
1648 |
+
msgstr "Informace o vaší stránce"
|
1649 |
+
|
1650 |
+
#: templates/connect.php:353
|
1651 |
+
msgid "Site URL, WP version, PHP info, plugins & themes"
|
1652 |
+
msgstr "URL webu, verze WP, PHP info, pluginy a šablony"
|
1653 |
+
|
1654 |
+
#: templates/connect.php:358
|
1655 |
+
msgid "Admin Notices"
|
1656 |
+
msgstr "Zobrazení oznámení v adminu"
|
1657 |
+
|
1658 |
+
#: templates/connect.php359, templates/connect.php:375
|
1659 |
+
msgid "Updates, announcements, marketing, no spam"
|
1660 |
+
msgstr "Aktualizace, oznámení, marketing, žádný spam"
|
1661 |
+
|
1662 |
+
#: templates/connect.php:364
|
1663 |
+
msgid "Current %s Events"
|
1664 |
+
msgstr "Informace o událostech pro %s"
|
1665 |
+
|
1666 |
+
#: templates/connect.php:365
|
1667 |
+
msgid "Activation, deactivation and uninstall"
|
1668 |
+
msgstr "Aktivace, deaktivace a odinstalace"
|
1669 |
+
|
1670 |
+
#: templates/connect.php:374
|
1671 |
+
msgid "Newsletter"
|
1672 |
+
msgstr "Newsletter"
|
1673 |
+
|
1674 |
+
#: templates/connect.php391, templates/forms/license-activation.php:41
|
1675 |
+
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."
|
1676 |
+
msgstr "Pro ověření platnosti vaší licence a automatických aktualizací bude tento %1$s periodicky odesílat data do %2$s."
|
1677 |
+
|
1678 |
+
#: templates/connect.php:396
|
1679 |
+
msgid "What permissions are being granted?"
|
1680 |
+
msgstr "Jaká oprávnění budou udělena?"
|
1681 |
+
|
1682 |
+
#: templates/connect.php:417
|
1683 |
+
msgid "Don't have a license key?"
|
1684 |
+
msgstr "Nemáte licenční klíč?"
|
1685 |
+
|
1686 |
+
#: templates/connect.php:420
|
1687 |
+
msgid "Have a license key?"
|
1688 |
+
msgstr "Máte licenční klíč?"
|
1689 |
+
|
1690 |
+
#: templates/connect.php:428
|
1691 |
+
msgid "Privacy Policy"
|
1692 |
+
msgstr "Zásady ochrany osobních údajů"
|
1693 |
+
|
1694 |
+
#: templates/connect.php:430
|
1695 |
+
msgid "License Agreement"
|
1696 |
+
msgstr "Licenční smlouva"
|
1697 |
+
|
1698 |
+
#: templates/connect.php:430
|
1699 |
+
msgid "Terms of Service"
|
1700 |
+
msgstr "Podmínky služby"
|
1701 |
+
|
1702 |
+
#: templates/connect.php:805
|
1703 |
+
msgctxt "as in the process of sending an email"
|
1704 |
+
msgid "Sending email"
|
1705 |
+
msgstr "Probíhá odesílání emailů"
|
1706 |
+
|
1707 |
+
#: templates/connect.php:806
|
1708 |
+
msgctxt "as activating plugin"
|
1709 |
+
msgid "Activating"
|
1710 |
+
msgstr "Probíhá aktivace"
|
1711 |
+
|
1712 |
+
#: templates/contact.php:78
|
1713 |
+
msgid "Contact"
|
1714 |
+
msgstr "Kontakt"
|
1715 |
+
|
1716 |
+
#: templates/debug.php:17
|
1717 |
+
msgctxt "as turned off"
|
1718 |
+
msgid "Off"
|
1719 |
+
msgstr "Vypnuto"
|
1720 |
+
|
1721 |
+
#: templates/debug.php:18
|
1722 |
+
msgctxt "as turned on"
|
1723 |
+
msgid "On"
|
1724 |
+
msgstr "Zapnuto"
|
1725 |
+
|
1726 |
+
#: templates/debug.php:20
|
1727 |
+
msgid "SDK"
|
1728 |
+
msgstr "SDK"
|
1729 |
+
|
1730 |
+
#: templates/debug.php:24
|
1731 |
+
msgctxt "as code debugging"
|
1732 |
+
msgid "Debugging"
|
1733 |
+
msgstr "Debugging"
|
1734 |
+
|
1735 |
+
#: templates/debug.php54, templates/debug.php250, templates/debug.php376,
|
1736 |
+
#: templates/debug.php:512
|
1737 |
+
msgid "Actions"
|
1738 |
+
msgstr "Akce objednávky"
|
1739 |
+
|
1740 |
+
#: templates/debug.php:64
|
1741 |
+
msgid "Are you sure you want to delete all Freemius data?"
|
1742 |
+
msgstr "Opravdu chcete smazat veškerá Freemius data?"
|
1743 |
+
|
1744 |
+
#: templates/debug.php:64
|
1745 |
+
msgid "Delete All Accounts"
|
1746 |
+
msgstr "Delete All Accounts"
|
1747 |
+
|
1748 |
+
#: templates/debug.php:71
|
1749 |
+
msgid "Clear API Cache"
|
1750 |
+
msgstr "Vymazat paměť API"
|
1751 |
+
|
1752 |
+
#: templates/debug.php:79
|
1753 |
+
msgid "Clear Updates Transients"
|
1754 |
+
msgstr "Clear Updates Transients"
|
1755 |
+
|
1756 |
+
#: templates/debug.php:86
|
1757 |
+
msgid "Sync Data From Server"
|
1758 |
+
msgstr "Synchronizovat data ze serveru"
|
1759 |
+
|
1760 |
+
#: templates/debug.php:95
|
1761 |
+
msgid "Migrate Options to Network"
|
1762 |
+
msgstr "Migrate Options to Network"
|
1763 |
+
|
1764 |
+
#: templates/debug.php:100
|
1765 |
+
msgid "Load DB Option"
|
1766 |
+
msgstr "Load DB Option"
|
1767 |
+
|
1768 |
+
#: templates/debug.php:103
|
1769 |
+
msgid "Set DB Option"
|
1770 |
+
msgstr "Set DB Option"
|
1771 |
+
|
1772 |
+
#: templates/debug.php:182
|
1773 |
+
msgid "Key"
|
1774 |
+
msgstr "Klíč"
|
1775 |
+
|
1776 |
+
#: templates/debug.php:183
|
1777 |
+
msgid "Value"
|
1778 |
+
msgstr "Hodnota"
|
1779 |
+
|
1780 |
+
#: templates/debug.php:199
|
1781 |
+
msgctxt "as software development kit versions"
|
1782 |
+
msgid "SDK Versions"
|
1783 |
+
msgstr "SDK Versions"
|
1784 |
+
|
1785 |
+
#: templates/debug.php:204
|
1786 |
+
msgid "SDK Path"
|
1787 |
+
msgstr "Cesta l SDK"
|
1788 |
+
|
1789 |
+
#: templates/debug.php205, templates/debug.php:244
|
1790 |
+
msgid "Module Path"
|
1791 |
+
msgstr "Cesta k modulu"
|
1792 |
+
|
1793 |
+
#: templates/debug.php:206
|
1794 |
+
msgid "Is Active"
|
1795 |
+
msgstr "Je aktivní"
|
1796 |
+
|
1797 |
+
#: templates/debug.php234, templates/debug/plugins-themes-sync.php:35
|
1798 |
+
msgid "Plugins"
|
1799 |
+
msgstr "Pluginy"
|
1800 |
+
|
1801 |
+
#: templates/debug.php234, templates/debug/plugins-themes-sync.php:56
|
1802 |
+
msgid "Themes"
|
1803 |
+
msgstr "Šablony"
|
1804 |
+
|
1805 |
+
#: templates/debug.php239, templates/debug.php370, templates/debug.php456,
|
1806 |
+
#: templates/debug/scheduled-crons.php:80
|
1807 |
+
msgid "Slug"
|
1808 |
+
msgstr "Zkratka"
|
1809 |
+
|
1810 |
+
#: templates/debug.php241, templates/debug.php:455
|
1811 |
+
msgid "Title"
|
1812 |
+
msgstr "Nadpis"
|
1813 |
+
|
1814 |
+
#: templates/debug.php:242
|
1815 |
+
msgctxt "as application program interface"
|
1816 |
+
msgid "API"
|
1817 |
+
msgstr "API"
|
1818 |
+
|
1819 |
+
#: templates/debug.php:243
|
1820 |
+
msgid "Freemius State"
|
1821 |
+
msgstr "Stav Freemius"
|
1822 |
+
|
1823 |
+
#: templates/debug.php:247
|
1824 |
+
msgid "Network Blog"
|
1825 |
+
msgstr "Network Blog"
|
1826 |
+
|
1827 |
+
#: templates/debug.php:248
|
1828 |
+
msgid "Network User"
|
1829 |
+
msgstr "Network User"
|
1830 |
+
|
1831 |
+
#: templates/debug.php:285
|
1832 |
+
msgctxt "as connection was successful"
|
1833 |
+
msgid "Connected"
|
1834 |
+
msgstr "Připojeno"
|
1835 |
+
|
1836 |
+
#: templates/debug.php:286
|
1837 |
+
msgctxt "as connection blocked"
|
1838 |
+
msgid "Blocked"
|
1839 |
+
msgstr "Zablokováno"
|
1840 |
+
|
1841 |
+
#: templates/debug.php:322
|
1842 |
+
msgid "Simulate Trial Promotion"
|
1843 |
+
msgstr "Simulate Trial Promotion"
|
1844 |
+
|
1845 |
+
#: templates/debug.php:334
|
1846 |
+
msgid "Simulate Network Upgrade"
|
1847 |
+
msgstr "Simulate Network Upgrade"
|
1848 |
+
|
1849 |
+
#: templates/debug.php:359
|
1850 |
+
msgid "%s Installs"
|
1851 |
+
msgstr "%s instalací"
|
1852 |
+
|
1853 |
+
#: templates/debug.php:361
|
1854 |
+
msgctxt "like websites"
|
1855 |
+
msgid "Sites"
|
1856 |
+
msgstr "Weby"
|
1857 |
+
|
1858 |
+
#: templates/debug.php367, templates/account/partials/site.php:156
|
1859 |
+
msgid "Blog ID"
|
1860 |
+
msgstr "Blog ID"
|
1861 |
+
|
1862 |
+
#: templates/debug.php:372
|
1863 |
+
msgid "License ID"
|
1864 |
+
msgstr "License ID"
|
1865 |
+
|
1866 |
+
#: templates/debug.php436, templates/debug.php535,
|
1867 |
+
#: templates/account/partials/addon.php:435
|
1868 |
+
msgctxt "verb"
|
1869 |
+
msgid "Delete"
|
1870 |
+
msgstr "Smazat"
|
1871 |
+
|
1872 |
+
#: templates/debug.php:450
|
1873 |
+
msgid "Add Ons of module %s"
|
1874 |
+
msgstr "Add Ons of module %s"
|
1875 |
+
|
1876 |
+
#: templates/debug.php:502
|
1877 |
+
msgid "Users"
|
1878 |
+
msgstr "Uživatelé"
|
1879 |
+
|
1880 |
+
#: templates/debug.php:509
|
1881 |
+
msgid "Verified"
|
1882 |
+
msgstr "Ověřeno"
|
1883 |
+
|
1884 |
+
#: templates/debug.php:551
|
1885 |
+
msgid "%s Licenses"
|
1886 |
+
msgstr "%s licencí"
|
1887 |
+
|
1888 |
+
#: templates/debug.php:556
|
1889 |
+
msgid "Plugin ID"
|
1890 |
+
msgstr "ID pluginu"
|
1891 |
+
|
1892 |
+
#: templates/debug.php:558
|
1893 |
+
msgid "Plan ID"
|
1894 |
+
msgstr "ID členství"
|
1895 |
+
|
1896 |
+
#: templates/debug.php:559
|
1897 |
+
msgid "Quota"
|
1898 |
+
msgstr "Quota"
|
1899 |
+
|
1900 |
+
#: templates/debug.php:560
|
1901 |
+
msgid "Activated"
|
1902 |
+
msgstr "Aktivovaný"
|
1903 |
+
|
1904 |
+
#: templates/debug.php:561
|
1905 |
+
msgid "Blocking"
|
1906 |
+
msgstr "Blokování"
|
1907 |
+
|
1908 |
+
#: templates/debug.php:563
|
1909 |
+
msgctxt "as expiration date"
|
1910 |
+
msgid "Expiration"
|
1911 |
+
msgstr "Expirace"
|
1912 |
+
|
1913 |
+
#: templates/debug.php:590
|
1914 |
+
msgid "Debug Log"
|
1915 |
+
msgstr "Ladící log"
|
1916 |
+
|
1917 |
+
#: templates/debug.php:594
|
1918 |
+
msgid "All Types"
|
1919 |
+
msgstr "Všechny typy"
|
1920 |
+
|
1921 |
+
#: templates/debug.php:601
|
1922 |
+
msgid "All Requests"
|
1923 |
+
msgstr "All Requests"
|
1924 |
+
|
1925 |
+
#: templates/debug.php606, templates/debug.php635,
|
1926 |
+
#: templates/debug/logger.php:25
|
1927 |
+
msgid "File"
|
1928 |
+
msgstr "Soubor"
|
1929 |
+
|
1930 |
+
#: templates/debug.php607, templates/debug.php633,
|
1931 |
+
#: templates/debug/logger.php:23
|
1932 |
+
msgid "Function"
|
1933 |
+
msgstr "Funkce"
|
1934 |
+
|
1935 |
+
#: templates/debug.php:608
|
1936 |
+
msgid "Process ID"
|
1937 |
+
msgstr "Process ID"
|
1938 |
+
|
1939 |
+
#: templates/debug.php:609
|
1940 |
+
msgid "Logger"
|
1941 |
+
msgstr "Logger"
|
1942 |
+
|
1943 |
+
#: templates/debug.php610, templates/debug.php634,
|
1944 |
+
#: templates/debug/logger.php:24
|
1945 |
+
msgid "Message"
|
1946 |
+
msgstr "Zpráva"
|
1947 |
+
|
1948 |
+
#: templates/debug.php:612
|
1949 |
+
msgid "Filter"
|
1950 |
+
msgstr "Filtr"
|
1951 |
+
|
1952 |
+
#: templates/debug.php:620
|
1953 |
+
msgid "Download"
|
1954 |
+
msgstr "Stáhnout"
|
1955 |
+
|
1956 |
+
#: templates/debug.php631, templates/debug/logger.php:22
|
1957 |
+
msgid "Type"
|
1958 |
+
msgstr "Typ"
|
1959 |
+
|
1960 |
+
#: templates/debug.php636, templates/debug/logger.php:26
|
1961 |
+
msgid "Timestamp"
|
1962 |
+
msgstr "Datum a čas"
|
1963 |
+
|
1964 |
+
#: templates/secure-https-header.php:28
|
1965 |
+
msgid "Secure HTTPS %s page, running from an external domain"
|
1966 |
+
msgstr "Zabezpečená stránka HTTPS %s spuštěná z externí domény"
|
1967 |
+
|
1968 |
+
#: includes/customizer/class-fs-customizer-support-section.php55,
|
1969 |
+
#: templates/plugin-info/features.php:43
|
1970 |
+
msgid "Support"
|
1971 |
+
msgstr "Podpora"
|
1972 |
+
|
1973 |
+
#: includes/debug/class-fs-debug-bar-panel.php48,
|
1974 |
+
#: templates/debug/api-calls.php54, templates/debug/logger.php:62
|
1975 |
+
msgctxt "milliseconds"
|
1976 |
+
msgid "ms"
|
1977 |
+
msgstr "ms"
|
1978 |
+
|
1979 |
+
#: includes/debug/debug-bar-start.php:41
|
1980 |
+
msgid "Freemius API"
|
1981 |
+
msgstr "Freemius API"
|
1982 |
+
|
1983 |
+
#: includes/debug/debug-bar-start.php:42
|
1984 |
+
msgid "Requests"
|
1985 |
+
msgstr "Žádosti"
|
1986 |
+
|
1987 |
+
#: templates/account/billing.php:22
|
1988 |
+
msgctxt "verb"
|
1989 |
+
msgid "Update"
|
1990 |
+
msgstr "Aktualizovat"
|
1991 |
+
|
1992 |
+
#: templates/account/billing.php:33
|
1993 |
+
msgid "Billing"
|
1994 |
+
msgstr "Fakturace"
|
1995 |
+
|
1996 |
+
#: templates/account/billing.php38, templates/account/billing.php:38
|
1997 |
+
msgid "Business name"
|
1998 |
+
msgstr "Jméno firmy"
|
1999 |
+
|
2000 |
+
#: templates/account/billing.php39, templates/account/billing.php:39
|
2001 |
+
msgid "Tax / VAT ID"
|
2002 |
+
msgstr "Tax / VAT ID"
|
2003 |
+
|
2004 |
+
#: templates/account/billing.php42, templates/account/billing.php42,
|
2005 |
+
#: templates/account/billing.php43, templates/account/billing.php:43
|
2006 |
+
msgid "Address Line %d"
|
2007 |
+
msgstr "Address Line %d"
|
2008 |
+
|
2009 |
+
#: templates/account/billing.php46, templates/account/billing.php:46
|
2010 |
+
msgid "City"
|
2011 |
+
msgstr "Město"
|
2012 |
+
|
2013 |
+
#: templates/account/billing.php46, templates/account/billing.php:46
|
2014 |
+
msgid "Town"
|
2015 |
+
msgstr "Město"
|
2016 |
+
|
2017 |
+
#: templates/account/billing.php47, templates/account/billing.php:47
|
2018 |
+
msgid "ZIP / Postal Code"
|
2019 |
+
msgstr "PSČ / směrovací číslo"
|
2020 |
+
|
2021 |
+
#: templates/account/billing.php:302
|
2022 |
+
msgid "Country"
|
2023 |
+
msgstr "Země"
|
2024 |
+
|
2025 |
+
#: templates/account/billing.php:304
|
2026 |
+
msgid "Select Country"
|
2027 |
+
msgstr "Vyberte zemi"
|
2028 |
+
|
2029 |
+
#: templates/account/billing.php311, templates/account/billing.php:312
|
2030 |
+
msgid "State"
|
2031 |
+
msgstr "Kraj"
|
2032 |
+
|
2033 |
+
#: templates/account/billing.php311, templates/account/billing.php:312
|
2034 |
+
msgid "Province"
|
2035 |
+
msgstr "Okres"
|
2036 |
+
|
2037 |
+
#: templates/account/payments.php:29
|
2038 |
+
msgid "Payments"
|
2039 |
+
msgstr "Platby"
|
2040 |
+
|
2041 |
+
#: templates/account/payments.php:36
|
2042 |
+
msgid "Date"
|
2043 |
+
msgstr "Datum"
|
2044 |
+
|
2045 |
+
#: templates/account/payments.php:37
|
2046 |
+
msgid "Amount"
|
2047 |
+
msgstr "Částka"
|
2048 |
+
|
2049 |
+
#: templates/account/payments.php38, templates/account/payments.php:50
|
2050 |
+
msgid "Invoice"
|
2051 |
+
msgstr "Faktura"
|
2052 |
+
|
2053 |
+
#: templates/debug/api-calls.php:56
|
2054 |
+
msgid "API"
|
2055 |
+
msgstr "API"
|
2056 |
+
|
2057 |
+
#: templates/debug/api-calls.php:68
|
2058 |
+
msgid "Method"
|
2059 |
+
msgstr "Metoda"
|
2060 |
+
|
2061 |
+
#: templates/debug/api-calls.php:69
|
2062 |
+
msgid "Code"
|
2063 |
+
msgstr "Kód"
|
2064 |
+
|
2065 |
+
#: templates/debug/api-calls.php:70
|
2066 |
+
msgid "Length"
|
2067 |
+
msgstr "Délka"
|
2068 |
+
|
2069 |
+
#: templates/debug/api-calls.php:71
|
2070 |
+
msgctxt "as file/folder path"
|
2071 |
+
msgid "Path"
|
2072 |
+
msgstr "Složka"
|
2073 |
+
|
2074 |
+
#: templates/debug/api-calls.php:73
|
2075 |
+
msgid "Body"
|
2076 |
+
msgstr "Tělo"
|
2077 |
+
|
2078 |
+
#: templates/debug/api-calls.php:75
|
2079 |
+
msgid "Result"
|
2080 |
+
msgstr "Výsledek"
|
2081 |
+
|
2082 |
+
#: templates/debug/api-calls.php:76
|
2083 |
+
msgid "Start"
|
2084 |
+
msgstr "Začátek"
|
2085 |
+
|
2086 |
+
#: templates/debug/api-calls.php:77
|
2087 |
+
msgid "End"
|
2088 |
+
msgstr "Konec"
|
2089 |
+
|
2090 |
+
#: templates/debug/logger.php:15
|
2091 |
+
msgid "Log"
|
2092 |
+
msgstr "Záznam"
|
2093 |
+
|
2094 |
+
#. translators: %s: time period (e.g. In "2 hours")
|
2095 |
+
#: templates/debug/plugins-themes-sync.php18,
|
2096 |
+
#: templates/debug/scheduled-crons.php:91
|
2097 |
+
msgid "In %s"
|
2098 |
+
msgstr "Za %s"
|
2099 |
+
|
2100 |
+
#. translators: %s: time period (e.g. "2 hours" ago)
|
2101 |
+
#: templates/debug/plugins-themes-sync.php20,
|
2102 |
+
#: templates/debug/scheduled-crons.php:93
|
2103 |
+
msgid "%s ago"
|
2104 |
+
msgstr "Před %s"
|
2105 |
+
|
2106 |
+
#: templates/debug/plugins-themes-sync.php21,
|
2107 |
+
#: templates/debug/scheduled-crons.php:74
|
2108 |
+
msgctxt "seconds"
|
2109 |
+
msgid "sec"
|
2110 |
+
msgstr "s"
|
2111 |
+
|
2112 |
+
#: templates/debug/plugins-themes-sync.php:23
|
2113 |
+
msgid "Plugins & Themes Sync"
|
2114 |
+
msgstr "Pluginy a synchronizace šablon"
|
2115 |
+
|
2116 |
+
#: templates/debug/plugins-themes-sync.php:28
|
2117 |
+
msgid "Total"
|
2118 |
+
msgstr "Celkem"
|
2119 |
+
|
2120 |
+
#: templates/debug/plugins-themes-sync.php29,
|
2121 |
+
#: templates/debug/scheduled-crons.php:84
|
2122 |
+
msgid "Last"
|
2123 |
+
msgstr "Poslední"
|
2124 |
+
|
2125 |
+
#: templates/debug/scheduled-crons.php:76
|
2126 |
+
msgid "Scheduled Crons"
|
2127 |
+
msgstr "Plánované crony"
|
2128 |
+
|
2129 |
+
#: templates/debug/scheduled-crons.php:81
|
2130 |
+
msgid "Module"
|
2131 |
+
msgstr "Modul"
|
2132 |
+
|
2133 |
+
#: templates/debug/scheduled-crons.php:82
|
2134 |
+
msgid "Module Type"
|
2135 |
+
msgstr "Typ modulu"
|
2136 |
+
|
2137 |
+
#: templates/debug/scheduled-crons.php:83
|
2138 |
+
msgid "Cron Type"
|
2139 |
+
msgstr "Cron Type"
|
2140 |
+
|
2141 |
+
#: templates/debug/scheduled-crons.php:85
|
2142 |
+
msgid "Next"
|
2143 |
+
msgstr "Následující"
|
2144 |
+
|
2145 |
+
#: templates/forms/affiliation.php:82
|
2146 |
+
msgid "Non-expiring"
|
2147 |
+
msgstr "Non-expiring"
|
2148 |
+
|
2149 |
+
#: templates/forms/affiliation.php:85
|
2150 |
+
msgid "Apply to become an affiliate"
|
2151 |
+
msgstr "Apply to become an affiliate"
|
2152 |
+
|
2153 |
+
#: templates/forms/affiliation.php:104
|
2154 |
+
msgid "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
|
2155 |
+
msgstr "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
|
2156 |
+
|
2157 |
+
#: templates/forms/affiliation.php:119
|
2158 |
+
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."
|
2159 |
+
msgstr "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."
|
2160 |
+
|
2161 |
+
#: templates/forms/affiliation.php:122
|
2162 |
+
msgid "Your affiliation account was temporarily suspended."
|
2163 |
+
msgstr "Your affiliation account was temporarily suspended."
|
2164 |
+
|
2165 |
+
#: templates/forms/affiliation.php:125
|
2166 |
+
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."
|
2167 |
+
msgstr "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."
|
2168 |
+
|
2169 |
+
#: templates/forms/affiliation.php:128
|
2170 |
+
msgid "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
|
2171 |
+
msgstr "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
|
2172 |
+
|
2173 |
+
#: templates/forms/affiliation.php:141
|
2174 |
+
msgid "Like the %s? Become our ambassador and earn cash ;-)"
|
2175 |
+
msgstr "Like the %s? Become our ambassador and earn cash ;-)"
|
2176 |
+
|
2177 |
+
#: templates/forms/affiliation.php:142
|
2178 |
+
msgid "Refer new customers to our %s and earn %s commission on each successful sale you refer!"
|
2179 |
+
msgstr "Refer new customers to our %s and earn %s commission on each successful sale you refer!"
|
2180 |
+
|
2181 |
+
#: templates/forms/affiliation.php:145
|
2182 |
+
msgid "Program Summary"
|
2183 |
+
msgstr "Program Summary"
|
2184 |
+
|
2185 |
+
#: templates/forms/affiliation.php:147
|
2186 |
+
msgid "%s commission when a customer purchases a new license."
|
2187 |
+
msgstr "%s provizi, když zákazník zakoupí novou licenci."
|
2188 |
+
|
2189 |
+
#: templates/forms/affiliation.php:149
|
2190 |
+
msgid "Get commission for automated subscription renewals."
|
2191 |
+
msgstr "Get commission for automated subscription renewals."
|
2192 |
+
|
2193 |
+
#: templates/forms/affiliation.php:152
|
2194 |
+
msgid "%s tracking cookie after the first visit to maximize earnings potential."
|
2195 |
+
msgstr "%s tracking cookie after the first visit to maximize earnings potential."
|
2196 |
+
|
2197 |
+
#: templates/forms/affiliation.php:155
|
2198 |
+
msgid "Unlimited commissions."
|
2199 |
+
msgstr "Unlimited commissions."
|
2200 |
+
|
2201 |
+
#: templates/forms/affiliation.php:157
|
2202 |
+
msgid "%s minimum payout amount."
|
2203 |
+
msgstr "%s minimální částka výplaty."
|
2204 |
+
|
2205 |
+
#: templates/forms/affiliation.php:158
|
2206 |
+
msgid "Payouts are in USD and processed monthly via PayPal."
|
2207 |
+
msgstr "Payouts are in USD and processed monthly via PayPal."
|
2208 |
+
|
2209 |
+
#: templates/forms/affiliation.php:159
|
2210 |
+
msgid "As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days."
|
2211 |
+
msgstr "As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days."
|
2212 |
+
|
2213 |
+
#: templates/forms/affiliation.php:162
|
2214 |
+
msgid "Affiliate"
|
2215 |
+
msgstr "Partner"
|
2216 |
+
|
2217 |
+
#: templates/forms/affiliation.php165, templates/forms/resend-key.php:23
|
2218 |
+
msgid "Email address"
|
2219 |
+
msgstr "Emailová adresa"
|
2220 |
+
|
2221 |
+
#: templates/forms/affiliation.php:169
|
2222 |
+
msgid "Full name"
|
2223 |
+
msgstr "Celé jméno"
|
2224 |
+
|
2225 |
+
#: templates/forms/affiliation.php:173
|
2226 |
+
msgid "PayPal account email address"
|
2227 |
+
msgstr "E-mailová adresa účtu PayPal"
|
2228 |
+
|
2229 |
+
#: templates/forms/affiliation.php:177
|
2230 |
+
msgid "Where are you going to promote the %s?"
|
2231 |
+
msgstr "Where are you going to promote the %s?"
|
2232 |
+
|
2233 |
+
#: templates/forms/affiliation.php:179
|
2234 |
+
msgid "Enter the domain of your website or other websites from where you plan to promote the %s."
|
2235 |
+
msgstr "Enter the domain of your website or other websites from where you plan to promote the %s."
|
2236 |
+
|
2237 |
+
#: templates/forms/affiliation.php:181
|
2238 |
+
msgid "Add another domain"
|
2239 |
+
msgstr "Add another domain"
|
2240 |
+
|
2241 |
+
#: templates/forms/affiliation.php:185
|
2242 |
+
msgid "Extra Domains"
|
2243 |
+
msgstr "Další domény"
|
2244 |
+
|
2245 |
+
#: templates/forms/affiliation.php:186
|
2246 |
+
msgid "Extra domains where you will be marketing the product from."
|
2247 |
+
msgstr "Extra domains where you will be marketing the product from."
|
2248 |
+
|
2249 |
+
#: templates/forms/affiliation.php:196
|
2250 |
+
msgid "Promotion methods"
|
2251 |
+
msgstr "Promotion methods"
|
2252 |
+
|
2253 |
+
#: templates/forms/affiliation.php:199
|
2254 |
+
msgid "Social media (Facebook, Twitter, etc.)"
|
2255 |
+
msgstr "Social media (Facebook, Twitter, etc.)"
|
2256 |
+
|
2257 |
+
#: templates/forms/affiliation.php:203
|
2258 |
+
msgid "Mobile apps"
|
2259 |
+
msgstr "Mobile apps"
|
2260 |
+
|
2261 |
+
#: templates/forms/affiliation.php:207
|
2262 |
+
msgid "Website, email, and social media statistics (optional)"
|
2263 |
+
msgstr "Statistika o webová stránc, emaiul a sociálních médiích"
|
2264 |
+
|
2265 |
+
#: templates/forms/affiliation.php:210
|
2266 |
+
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)."
|
2267 |
+
msgstr "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)."
|
2268 |
+
|
2269 |
+
#: templates/forms/affiliation.php:214
|
2270 |
+
msgid "How will you promote us?"
|
2271 |
+
msgstr "Jakým způsobem budete mé produkty propagovat?"
|
2272 |
+
|
2273 |
+
#: templates/forms/affiliation.php:217
|
2274 |
+
msgid "Please provide details on how you intend to promote %s (please be as specific as possible)."
|
2275 |
+
msgstr "Please provide details on how you intend to promote %s (please be as specific as possible)."
|
2276 |
+
|
2277 |
+
#: templates/forms/affiliation.php223, templates/forms/resend-key.php:22
|
2278 |
+
msgid "Cancel"
|
2279 |
+
msgstr "Zrušit"
|
2280 |
+
|
2281 |
+
#: templates/forms/affiliation.php:225
|
2282 |
+
msgid "Become an affiliate"
|
2283 |
+
msgstr "Staňte se naším afiliátem"
|
2284 |
+
|
2285 |
+
#: templates/forms/data-debug-mode.php:25
|
2286 |
+
msgid "Please enter the license key to enable the debug mode:"
|
2287 |
+
msgstr "Please enter the license key to enable the debug mode:"
|
2288 |
+
|
2289 |
+
#: templates/forms/data-debug-mode.php:27
|
2290 |
+
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:"
|
2291 |
+
msgstr "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:"
|
2292 |
+
|
2293 |
+
#: templates/forms/data-debug-mode.php:32
|
2294 |
+
msgid "Submit"
|
2295 |
+
msgstr "Submit"
|
2296 |
+
|
2297 |
+
#: templates/forms/data-debug-mode.php:36
|
2298 |
+
msgid "User key"
|
2299 |
+
msgstr "User key"
|
2300 |
+
|
2301 |
+
#: templates/forms/license-activation.php:23
|
2302 |
+
msgid "Please enter the license key that you received in the email right after the purchase:"
|
2303 |
+
msgstr "Please enter the license key that you received in the email right after the purchase:"
|
2304 |
+
|
2305 |
+
#: templates/forms/license-activation.php:28
|
2306 |
+
msgid "Update License"
|
2307 |
+
msgstr "Aktualizovat licenci"
|
2308 |
+
|
2309 |
+
#: templates/forms/optout.php:30
|
2310 |
+
msgctxt "verb"
|
2311 |
+
msgid "Opt Out"
|
2312 |
+
msgstr "Odhlásit se"
|
2313 |
+
|
2314 |
+
#: templates/forms/optout.php:31
|
2315 |
+
msgctxt "verb"
|
2316 |
+
msgid "Opt In"
|
2317 |
+
msgstr "Zúčastnit se"
|
2318 |
+
|
2319 |
+
#: templates/forms/optout.php:33
|
2320 |
+
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."
|
2321 |
+
msgstr "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."
|
2322 |
+
|
2323 |
+
#: templates/forms/optout.php:35
|
2324 |
+
msgid "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
|
2325 |
+
msgstr "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
|
2326 |
+
|
2327 |
+
#: templates/forms/premium-versions-upgrade-handler.php:40
|
2328 |
+
msgid "There is a new version of %s available."
|
2329 |
+
msgstr "Je k dispozici nová verze %s."
|
2330 |
+
|
2331 |
+
#: templates/forms/premium-versions-upgrade-handler.php:41
|
2332 |
+
msgid " %s to access version %s security & feature updates, and support."
|
2333 |
+
msgstr " %s pro přístup k verzi %s zajišťující podporu a nejen bezpečnostní aktualizace."
|
2334 |
+
|
2335 |
+
#: templates/forms/premium-versions-upgrade-handler.php:54
|
2336 |
+
msgid "New Version Available"
|
2337 |
+
msgstr "Nová verze k dispozici"
|
2338 |
+
|
2339 |
+
#: templates/forms/premium-versions-upgrade-handler.php:75
|
2340 |
+
msgctxt "close a window"
|
2341 |
+
msgid "Dismiss"
|
2342 |
+
msgstr "Skrýt"
|
2343 |
+
|
2344 |
+
#: templates/forms/resend-key.php:21
|
2345 |
+
msgid "Send License Key"
|
2346 |
+
msgstr "Odeslat licenční klíč"
|
2347 |
+
|
2348 |
+
#: templates/forms/resend-key.php:57
|
2349 |
+
msgid "Enter the email address you've used for the upgrade below and we will resend you the license key."
|
2350 |
+
msgstr "Níže zadejte emailovou adresu, kterou jste použili pro koupi pluginu a my vám znovu odešleme váš licenční klíč."
|
2351 |
+
|
2352 |
+
#: templates/forms/subscription-cancellation.php:37
|
2353 |
+
msgid "Deactivating or uninstalling the %s will automatically disable the license, which you'll be able to use on another site."
|
2354 |
+
msgstr "Deactivating or uninstalling the %s will automatically disable the license, which you'll be able to use on another site."
|
2355 |
+
|
2356 |
+
#: templates/forms/subscription-cancellation.php:47
|
2357 |
+
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?"
|
2358 |
+
msgstr "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?"
|
2359 |
+
|
2360 |
+
#: templates/forms/subscription-cancellation.php:52
|
2361 |
+
msgid "license"
|
2362 |
+
msgstr "licence"
|
2363 |
+
|
2364 |
+
#: templates/forms/subscription-cancellation.php:57
|
2365 |
+
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."
|
2366 |
+
msgstr "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."
|
2367 |
+
|
2368 |
+
#: templates/forms/subscription-cancellation.php:68
|
2369 |
+
msgid "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
|
2370 |
+
msgstr "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
|
2371 |
+
|
2372 |
+
#: templates/forms/subscription-cancellation.php:103
|
2373 |
+
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."
|
2374 |
+
msgstr "Once your license expires you will no longer be able to use the %s, unless you activate it again with a valid premium license."
|
2375 |
+
|
2376 |
+
#: templates/forms/subscription-cancellation.php:136
|
2377 |
+
msgid "Cancel %s?"
|
2378 |
+
msgstr "Cancel %s?"
|
2379 |
+
|
2380 |
+
#: templates/forms/subscription-cancellation.php:143
|
2381 |
+
msgid "Proceed"
|
2382 |
+
msgstr "Pokračovat"
|
2383 |
+
|
2384 |
+
#: templates/forms/subscription-cancellation.php191,
|
2385 |
+
#: templates/forms/deactivation/form.php:171
|
2386 |
+
msgid "Cancel %s & Proceed"
|
2387 |
+
msgstr "Zrušit %s > pokračovat"
|
2388 |
+
|
2389 |
+
#: templates/forms/trial-start.php:22
|
2390 |
+
msgid "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
|
2391 |
+
msgstr "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
|
2392 |
+
|
2393 |
+
#: templates/forms/trial-start.php:28
|
2394 |
+
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."
|
2395 |
+
msgstr "Aby bylo vyhověno WordPress.org pokynům, před zahájením zkušebního období vás žádáme, abyste se rozhodli pro uživatele a necitlivé informace o webu, aby %s umožňoval periodicky odesílat data do %s za účelem kontroly aktualizací verzí a ověření zkušební verze."
|
2396 |
+
|
2397 |
+
#: templates/js/style-premium-theme.php:39
|
2398 |
+
msgid "Premium"
|
2399 |
+
msgstr "Prémium"
|
2400 |
+
|
2401 |
+
#: templates/js/style-premium-theme.php:42
|
2402 |
+
msgid "Beta"
|
2403 |
+
msgstr "Beta"
|
2404 |
+
|
2405 |
+
#: templates/partials/network-activation.php:27
|
2406 |
+
msgid "Activate license on all sites in the network."
|
2407 |
+
msgstr "Activate license on all sites in the network."
|
2408 |
+
|
2409 |
+
#: templates/partials/network-activation.php:28
|
2410 |
+
msgid "Apply on all sites in the network."
|
2411 |
+
msgstr "Apply on all sites in the network."
|
2412 |
+
|
2413 |
+
#: templates/partials/network-activation.php:31
|
2414 |
+
msgid "Activate license on all pending sites."
|
2415 |
+
msgstr "Activate license on all pending sites."
|
2416 |
+
|
2417 |
+
#: templates/partials/network-activation.php:32
|
2418 |
+
msgid "Apply on all pending sites."
|
2419 |
+
msgstr "Apply on all pending sites."
|
2420 |
+
|
2421 |
+
#: templates/partials/network-activation.php40,
|
2422 |
+
#: templates/partials/network-activation.php:74
|
2423 |
+
msgid "allow"
|
2424 |
+
msgstr "povolit"
|
2425 |
+
|
2426 |
+
#: templates/partials/network-activation.php43,
|
2427 |
+
#: templates/partials/network-activation.php:77
|
2428 |
+
msgid "delegate"
|
2429 |
+
msgstr "delegovat"
|
2430 |
+
|
2431 |
+
#: templates/partials/network-activation.php47,
|
2432 |
+
#: templates/partials/network-activation.php:81
|
2433 |
+
msgid "skip"
|
2434 |
+
msgstr "přeskočit"
|
2435 |
+
|
2436 |
+
#: templates/plugin-info/description.php72,
|
2437 |
+
#: templates/plugin-info/screenshots.php:31
|
2438 |
+
msgid "Click to view full-size screenshot %d"
|
2439 |
+
msgstr "Klikněte pro zobrazení plné velikosti snímku obrazovky %d"
|
2440 |
+
|
2441 |
+
#: templates/plugin-info/features.php:56
|
2442 |
+
msgid "Unlimited Updates"
|
2443 |
+
msgstr "Neomezené aktualizace"
|
2444 |
+
|
2445 |
+
#: templates/account/partials/activate-license-button.php:46
|
2446 |
+
msgid "Localhost"
|
2447 |
+
msgstr "Localhost"
|
2448 |
+
|
2449 |
+
#: templates/account/partials/activate-license-button.php:50
|
2450 |
+
msgctxt "as 5 licenses left"
|
2451 |
+
msgid "%s left"
|
2452 |
+
msgstr "Zbývá %s"
|
2453 |
+
|
2454 |
+
#: templates/account/partials/activate-license-button.php:51
|
2455 |
+
msgid "Last license"
|
2456 |
+
msgstr "Poslední licence"
|
2457 |
+
|
2458 |
+
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the
|
2459 |
+
#. subscription'
|
2460 |
+
#: templates/account/partials/addon.php:29
|
2461 |
+
msgid "%1$s will immediately stop all future recurring payments and your %s plan license will expire in %s."
|
2462 |
+
msgstr "%1$s okamžitě zastaví všechny budoucí opakující se platby a licence k plánu %s vyprší za %s."
|
2463 |
+
|
2464 |
+
#: templates/account/partials/addon.php:185
|
2465 |
+
msgid "Cancelled"
|
2466 |
+
msgstr "Zrušena"
|
2467 |
+
|
2468 |
+
#: templates/account/partials/addon.php:195
|
2469 |
+
msgid "No expiration"
|
2470 |
+
msgstr "Bez vypršení"
|
2471 |
+
|
2472 |
+
#: templates/account/partials/site.php:189
|
2473 |
+
msgid "Owner Name"
|
2474 |
+
msgstr "Jméno vlastníka"
|
2475 |
+
|
2476 |
+
#: templates/account/partials/site.php:201
|
2477 |
+
msgid "Owner Email"
|
2478 |
+
msgstr "E-mail vlastníka"
|
2479 |
+
|
2480 |
+
#: templates/account/partials/site.php:213
|
2481 |
+
msgid "Owner ID"
|
2482 |
+
msgstr "ID vlastníka"
|
2483 |
+
|
2484 |
+
#: templates/account/partials/site.php:286
|
2485 |
+
msgid "Subscription"
|
2486 |
+
msgstr "Předplatné"
|
2487 |
+
|
2488 |
+
#: templates/forms/deactivation/contact.php:19
|
2489 |
+
msgid "Sorry for the inconvenience and we are here to help if you give us a chance."
|
2490 |
+
msgstr "Omlouváme se za způsobené nepříjemnosti, ale když se nám dáte šanci, tak se vám ze všech sil pokusíme pomoci."
|
2491 |
+
|
2492 |
+
#: templates/forms/deactivation/contact.php:22
|
2493 |
+
msgid "Contact Support"
|
2494 |
+
msgstr "Kontaktovat podporu"
|
2495 |
+
|
2496 |
+
#: templates/forms/deactivation/form.php:64
|
2497 |
+
msgid "Anonymous feedback"
|
2498 |
+
msgstr "Anonymní zpětná vazba"
|
2499 |
+
|
2500 |
+
#: templates/forms/deactivation/form.php:70
|
2501 |
+
msgid "Deactivate"
|
2502 |
+
msgstr "Deaktivovat"
|
2503 |
+
|
2504 |
+
#: templates/forms/deactivation/form.php:72
|
2505 |
+
msgid "Activate %s"
|
2506 |
+
msgstr "Aktivovat %s"
|
2507 |
+
|
2508 |
+
#: templates/forms/deactivation/form.php:87
|
2509 |
+
msgid "Quick Feedback"
|
2510 |
+
msgstr "Rychlá zpětná vazba"
|
2511 |
+
|
2512 |
+
#: templates/forms/deactivation/form.php:91
|
2513 |
+
msgid "If you have a moment, please let us know why you are %s"
|
2514 |
+
msgstr "Máte-li chvilku, dejte nám vědět, proč %s"
|
2515 |
+
|
2516 |
+
#: templates/forms/deactivation/form.php:91
|
2517 |
+
msgid "deactivating"
|
2518 |
+
msgstr "deaktivujete"
|
2519 |
+
|
2520 |
+
#: templates/forms/deactivation/form.php:91
|
2521 |
+
msgid "switching"
|
2522 |
+
msgstr "přepínám"
|
2523 |
+
|
2524 |
+
#: templates/forms/deactivation/form.php:365
|
2525 |
+
msgid "Submit & %s"
|
2526 |
+
msgstr "Odeslat & %s"
|
2527 |
+
|
2528 |
+
#: templates/forms/deactivation/form.php:386
|
2529 |
+
msgid "Kindly tell us the reason so we can improve."
|
2530 |
+
msgstr "Dejte nám prosím vědět z jakého důvodu, ať to můžeme zlepšit."
|
2531 |
+
|
2532 |
+
#: templates/forms/deactivation/form.php:511
|
2533 |
+
msgid "Yes - %s"
|
2534 |
+
msgstr "Ano - %s"
|
2535 |
+
|
2536 |
+
#: templates/forms/deactivation/form.php:518
|
2537 |
+
msgid "Skip & %s"
|
2538 |
+
msgstr "Přeskočit & %s"
|
2539 |
+
|
2540 |
+
#: templates/forms/deactivation/retry-skip.php:21
|
2541 |
+
msgid "Click here to use the plugin anonymously"
|
2542 |
+
msgstr "Klikněte zde pro anonymní používání tohoto pluginu"
|
2543 |
+
|
2544 |
+
#: templates/forms/deactivation/retry-skip.php:23
|
2545 |
+
msgid "You might have missed it, but you don't have to share any data and can just %s the opt-in."
|
2546 |
+
msgstr "You might have missed it, but you don't have to share any data and can just %s the opt-in."
|
freemius/languages/freemius-da_DK.mo
CHANGED
Binary file
|
freemius/languages/freemius-da_DK.po
CHANGED
@@ -1,1632 +1,1520 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
-
"Project-Id-Version: \n"
|
4 |
-
"Report-Msgid-Bugs-To: \n"
|
5 |
"POT-Creation-Date: \n"
|
6 |
-
"PO-Revision-Date: \n"
|
7 |
-
"Last-Translator:
|
8 |
-
"Language: \n"
|
9 |
-
"Language-Team: \n"
|
10 |
-
"Content-Type: \n"
|
11 |
-
"Content-Transfer-Encoding: \n"
|
12 |
-
"Plural-Forms: \n"
|
13 |
-
o: https://github.com/Freemius/wordpress-sdk/issues\n"
|
14 |
-
"POT-Creation-Date: \n"
|
15 |
-
"PO-Revision-Date: 2019-06-05 13:40+0000\n"
|
16 |
-
"Last-Translator: Joachim Jensen\n"
|
17 |
"Language-Team: Danish (Denmark) (http://www.transifex.com/freemius/wordpress-sdk/language/da_DK/)\n"
|
18 |
-
"MIME-Version: 1.0\n"
|
19 |
"Content-Type: text/plain; charset=UTF-8\n"
|
20 |
"Content-Transfer-Encoding: 8bit\n"
|
21 |
-
"Language: da_DK\n"
|
22 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
|
|
23 |
"X-Poedit-Basepath: ..\n"
|
24 |
"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"
|
25 |
"X-Poedit-SearchPath-0: .\n"
|
26 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
27 |
"X-Poedit-SourceCharset: UTF-8\n"
|
28 |
|
29 |
-
#: includes/class-freemius.
|
30 |
-
msgid ""
|
31 |
-
"An update to a Beta version will replace your installed version of %s with "
|
32 |
-
"the latest Beta release - use with caution, and not on production sites. You"
|
33 |
-
" have been warned."
|
34 |
-
msgstr ""
|
35 |
|
36 |
-
#: includes/class-freemius.php:
|
37 |
msgid "Would you like to proceed with the update?"
|
38 |
-
msgstr ""
|
39 |
|
40 |
-
#: includes/class-freemius.php:
|
41 |
-
msgid ""
|
42 |
-
"Freemius SDK couldn't find the plugin's main file. Please contact "
|
43 |
-
"sdk@freemius.com with the current error."
|
44 |
-
msgstr ""
|
45 |
|
46 |
-
#: includes/class-freemius.php:
|
47 |
msgid "Error"
|
48 |
msgstr "Fejl"
|
49 |
|
50 |
-
#: includes/class-freemius.php:
|
51 |
msgid "I found a better %s"
|
52 |
msgstr "Jeg fandt et bedre %s"
|
53 |
|
54 |
-
#: includes/class-freemius.php:
|
55 |
msgid "What's the %s's name?"
|
56 |
msgstr "Hvad er navnet på %s?"
|
57 |
|
58 |
-
#: includes/class-freemius.php:
|
59 |
msgid "It's a temporary %s. I'm just debugging an issue."
|
60 |
msgstr "Det er en midlertidig %s. Jeg er i gang med fejlrettelser."
|
61 |
|
62 |
-
#: includes/class-freemius.php:
|
63 |
msgid "Deactivation"
|
64 |
msgstr "Deaktivering"
|
65 |
|
66 |
-
#: includes/class-freemius.php:
|
67 |
msgid "Theme Switch"
|
68 |
msgstr "Temaskift"
|
69 |
|
70 |
-
#: includes/class-freemius.
|
71 |
msgid "Other"
|
72 |
msgstr "Andet"
|
73 |
|
74 |
-
#: includes/class-freemius.php:
|
75 |
msgid "I no longer need the %s"
|
76 |
msgstr "Jeg har ikke længere brug for %s"
|
77 |
|
78 |
-
#: includes/class-freemius.php:
|
79 |
msgid "I only needed the %s for a short period"
|
80 |
msgstr "Jeg behøvede kun %s i en kort periode"
|
81 |
|
82 |
-
#: includes/class-freemius.php:
|
83 |
msgid "The %s broke my site"
|
84 |
msgstr "%s ødelagde min webside"
|
85 |
|
86 |
-
#: includes/class-freemius.php:
|
87 |
msgid "The %s suddenly stopped working"
|
88 |
msgstr "%s stoppede pludseligt med at virke"
|
89 |
|
90 |
-
#: includes/class-freemius.php:
|
91 |
msgid "I can't pay for it anymore"
|
92 |
msgstr "Jeg kan ikke længere betale for det"
|
93 |
|
94 |
-
#: includes/class-freemius.php:
|
95 |
msgid "What price would you feel comfortable paying?"
|
96 |
msgstr "Hvilken pris ville du foretrække at betale?"
|
97 |
|
98 |
-
#: includes/class-freemius.php:
|
99 |
msgid "I don't like to share my information with you"
|
100 |
msgstr "Jeg har ikke lyst til at dele mine informationer med jer"
|
101 |
|
102 |
-
#: includes/class-freemius.php:
|
103 |
msgid "The %s didn't work"
|
104 |
msgstr "%s virkede ikke"
|
105 |
|
106 |
-
#: includes/class-freemius.php:
|
107 |
msgid "I couldn't understand how to make it work"
|
108 |
msgstr "Jeg forstod ikke, hvordan jeg skulle få det til at fungere."
|
109 |
|
110 |
-
#: includes/class-freemius.php:
|
111 |
msgid "The %s is great, but I need specific feature that you don't support"
|
112 |
msgstr "%s er godt, men jeg har brug for en specifik feature, som ikke understøttes"
|
113 |
|
114 |
-
#: includes/class-freemius.php:
|
115 |
msgid "What feature?"
|
116 |
msgstr "Hvilken feature?"
|
117 |
|
118 |
-
#: includes/class-freemius.php:
|
119 |
msgid "The %s is not working"
|
120 |
msgstr "%s virker ikke"
|
121 |
|
122 |
-
#: includes/class-freemius.php:
|
123 |
msgid "Kindly share what didn't work so we can fix it for future users..."
|
124 |
-
msgstr ""
|
125 |
|
126 |
-
#: includes/class-freemius.php:
|
127 |
msgid "It's not what I was looking for"
|
128 |
msgstr "Det er ikke, hvad jeg søgte"
|
129 |
|
130 |
-
#: includes/class-freemius.php:
|
131 |
msgid "What you've been looking for?"
|
132 |
-
msgstr "Hvad
|
133 |
|
134 |
-
#: includes/class-freemius.php:
|
135 |
msgid "The %s didn't work as expected"
|
136 |
msgstr "%s virkede ikke som forventet"
|
137 |
|
138 |
-
#: includes/class-freemius.php:
|
139 |
msgid "What did you expect?"
|
140 |
msgstr "Hvad forventede du?"
|
141 |
|
142 |
-
#: includes/class-freemius.
|
143 |
msgid "Freemius Debug"
|
144 |
msgstr "Freemius Debug"
|
145 |
|
146 |
-
#: includes/class-freemius.php:
|
147 |
msgid "I don't know what is cURL or how to install it, help me!"
|
148 |
msgstr "Jeg ved ikke hvad cURL er, eller hvordan jeg installerer det. Hjælp mig!"
|
149 |
|
150 |
-
#: includes/class-freemius.php:
|
151 |
-
msgid ""
|
152 |
-
"We'll make sure to contact your hosting company and resolve the issue. You "
|
153 |
-
"will get a follow-up email to %s once we have an update."
|
154 |
msgstr "Vi vil kontakte din udbyder og løse problemet. Når vi har opdatinger i sagen, vil vi følge op med en email til dig på %s."
|
155 |
|
156 |
-
#: includes/class-freemius.php:
|
157 |
-
msgid ""
|
158 |
-
"Great, please install cURL and enable it in your php.ini file. In addition, "
|
159 |
-
"search for the 'disable_functions' directive in your php.ini file and remove"
|
160 |
-
" any disabled methods starting with 'curl_'. To make sure it was "
|
161 |
-
"successfully activated, use 'phpinfo()'. Once activated, deactivate the %s "
|
162 |
-
"and reactivate it back again."
|
163 |
-
msgstr ""
|
164 |
|
165 |
-
#: includes/class-freemius.php:
|
166 |
msgid "Yes - do your thing"
|
167 |
msgstr "Ja - fortsæt bare"
|
168 |
|
169 |
-
#: includes/class-freemius.php:
|
170 |
msgid "No - just deactivate"
|
171 |
msgstr "Nej - bare deaktiver"
|
172 |
|
173 |
-
#: includes/class-freemius.
|
174 |
-
#: includes/class-freemius.
|
175 |
-
#: includes/class-freemius.
|
176 |
-
#: includes/class-freemius.
|
177 |
-
#: includes/class-freemius.
|
178 |
-
#: includes/class-freemius.
|
179 |
-
#: includes/class-freemius.
|
|
|
180 |
msgctxt "exclamation"
|
181 |
msgid "Oops"
|
182 |
msgstr "Ups"
|
183 |
|
184 |
-
#: includes/class-freemius.php:
|
185 |
-
msgid ""
|
186 |
-
"Thank for giving us the chance to fix it! A message was just sent to our "
|
187 |
-
"technical staff. We will get back to you as soon as we have an update to %s."
|
188 |
-
" Appreciate your patience."
|
189 |
msgstr "Tak fordi du giver os en chance for at fixe det! En besked er lige blevet sendt til vores tekniske personale. Vi vil vende tilbage, så snart der er nyt om %s. Vi sætter pris på din tålmodighed."
|
190 |
|
191 |
-
#: includes/class-freemius.php:
|
192 |
msgctxt "addonX cannot run without pluginY"
|
193 |
msgid "%s cannot run without %s."
|
194 |
msgstr "%s virker ikke uden %s."
|
195 |
|
196 |
-
#: includes/class-freemius.php:
|
197 |
msgctxt "addonX cannot run..."
|
198 |
msgid "%s cannot run without the plugin."
|
199 |
msgstr "%s virker ikke uden pluginnet."
|
200 |
|
201 |
-
#: includes/class-freemius.
|
202 |
-
#: includes/class-freemius.php:
|
203 |
-
msgid ""
|
204 |
-
"
|
205 |
-
"error."
|
206 |
-
msgstr ""
|
207 |
|
208 |
-
#: includes/class-freemius.php:
|
209 |
msgid "Premium %s version was successfully activated."
|
210 |
msgstr "Premium-versionen af %s blev aktiveret."
|
211 |
|
212 |
-
#: includes/class-freemius.
|
213 |
msgctxt ""
|
214 |
-
"Used to express elation, enthusiasm, or triumph (especially in electronic "
|
215 |
-
"communication)."
|
216 |
msgid "W00t"
|
217 |
msgstr "W00t"
|
218 |
|
219 |
-
#: includes/class-freemius.php:
|
220 |
msgid "You have a %s license."
|
221 |
msgstr "Du har en %s licens."
|
222 |
|
223 |
-
#: includes/class-freemius.
|
224 |
-
#: includes/class-freemius.
|
225 |
-
#: includes/class-freemius.
|
226 |
-
#: includes/class-freemius.php:
|
227 |
msgctxt "interjection expressing joy or exuberance"
|
228 |
msgid "Yee-haw"
|
229 |
msgstr "Yee-haw"
|
230 |
|
231 |
-
#: includes/class-freemius.php:
|
232 |
-
msgid ""
|
233 |
-
"%s free trial was successfully cancelled. Since the add-on is premium only "
|
234 |
-
"it was automatically deactivated. If you like to use it in the future, "
|
235 |
-
"you'll have to purchase a license."
|
236 |
-
msgstr ""
|
237 |
|
238 |
-
#: includes/class-freemius.php:
|
239 |
-
msgid ""
|
240 |
-
"%s is a premium only add-on. You have to purchase a license first before "
|
241 |
-
"activating the plugin."
|
242 |
-
msgstr ""
|
243 |
|
244 |
-
#: includes/class-freemius.
|
245 |
-
#: templates/account/partials/addon.php:
|
246 |
msgid "More information about %s"
|
247 |
msgstr "Mere information om %s"
|
248 |
|
249 |
-
#: includes/class-freemius.php:
|
250 |
msgid "Purchase License"
|
251 |
msgstr "Køb licens"
|
252 |
|
253 |
-
#: includes/class-freemius.
|
254 |
-
msgid ""
|
255 |
-
"You should receive an activation email for %s to your mailbox at %s. Please "
|
256 |
-
"make sure you click the activation button in that email to %s."
|
257 |
-
msgstr ""
|
258 |
|
259 |
-
#: includes/class-freemius.php:
|
260 |
msgid "start the trial"
|
261 |
msgstr "start prøveperioden"
|
262 |
|
263 |
-
#: includes/class-freemius.
|
264 |
msgid "complete the install"
|
265 |
msgstr "færdiggør installeringen"
|
266 |
|
267 |
-
#: includes/class-freemius.php:
|
268 |
msgid "You are just one step away - %s"
|
269 |
msgstr "Du mangler kun ét skridt - %s"
|
270 |
|
271 |
-
#: includes/class-freemius.php:
|
272 |
msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
|
273 |
msgid "Complete \"%s\" Activation Now"
|
274 |
msgstr "Færdiggør aktivering af \"%s\" nu"
|
275 |
|
276 |
-
#: includes/class-freemius.php:
|
277 |
msgid "We made a few tweaks to the %s, %s"
|
278 |
msgstr "Vi har foretaget nogle rettelser til %s, %s"
|
279 |
|
280 |
-
#: includes/class-freemius.php:
|
281 |
msgid "Opt in to make \"%s\" better!"
|
282 |
-
msgstr ""
|
283 |
|
284 |
-
#: includes/class-freemius.php:
|
285 |
msgid "The upgrade of %s was successfully completed."
|
286 |
msgstr "Opgraderingen af %s blev fuldendt."
|
287 |
|
288 |
-
#: includes/class-freemius.
|
289 |
-
#: includes/class-fs-plugin-updater.
|
290 |
-
#: includes/class-fs-plugin-updater.
|
291 |
#: templates/auto-installation.php:32
|
292 |
msgid "Add-On"
|
293 |
msgstr "Tilføjelse"
|
294 |
|
295 |
-
#: includes/class-freemius.
|
296 |
-
#: templates/account.
|
297 |
msgid "Plugin"
|
298 |
msgstr "Plugin"
|
299 |
|
300 |
-
#: includes/class-freemius.
|
301 |
-
#: templates/account.
|
302 |
#: templates/forms/deactivation/form.php:71
|
303 |
msgid "Theme"
|
304 |
msgstr "Tema"
|
305 |
|
306 |
-
#: includes/class-freemius.php:
|
307 |
-
msgid ""
|
308 |
-
"An unknown error has occurred while trying to set the user's beta mode."
|
309 |
-
msgstr ""
|
310 |
|
311 |
-
#: includes/class-freemius.php:
|
312 |
msgid "Invalid site details collection."
|
313 |
-
msgstr ""
|
314 |
|
315 |
-
#: includes/class-freemius.php:
|
316 |
-
msgid ""
|
317 |
-
"We couldn't find your email address in the system, are you sure it's the "
|
318 |
-
"right address?"
|
319 |
msgstr "Vi kunne ikke finde din e-mailadresse i systemet, er du sikker på, det er den rigtige adresse?"
|
320 |
|
321 |
-
#: includes/class-freemius.php:
|
322 |
-
msgid ""
|
323 |
-
"We can't see any active licenses associated with that email address, are you"
|
324 |
-
" sure it's the right address?"
|
325 |
msgstr "Vi kan ikke finde nogen aktive licenser knyttet til den e-mailadresse, er du sikker på, det er den rigtige adresse?"
|
326 |
|
327 |
-
#: includes/class-freemius.php:
|
328 |
msgid "Account is pending activation."
|
329 |
msgstr "Konto afventer aktivering."
|
330 |
|
331 |
-
#: includes/class-freemius.
|
332 |
#: templates/forms/premium-versions-upgrade-handler.php:47
|
333 |
msgid "Buy a license now"
|
334 |
-
msgstr ""
|
335 |
|
336 |
-
#: includes/class-freemius.
|
337 |
#: templates/forms/premium-versions-upgrade-handler.php:46
|
338 |
msgid "Renew your license now"
|
339 |
-
msgstr ""
|
340 |
|
341 |
-
#: includes/class-freemius.php:
|
342 |
msgid "%s to access version %s security & feature updates, and support."
|
343 |
-
msgstr ""
|
344 |
|
345 |
-
#: includes/class-freemius.php:
|
346 |
msgid "%s activation was successfully completed."
|
347 |
msgstr "Aktivering af %s blev gennemført."
|
348 |
|
349 |
-
#: includes/class-freemius.php:
|
350 |
msgid "Your account was successfully activated with the %s plan."
|
351 |
msgstr "Din konto blev aktiveret med planen %s."
|
352 |
|
353 |
-
#: includes/class-freemius.
|
354 |
msgid "Your trial has been successfully started."
|
355 |
msgstr "Din prøveperiode er begyndt."
|
356 |
|
357 |
-
#: includes/class-freemius.
|
358 |
-
#: includes/class-freemius.php:
|
359 |
msgid "Couldn't activate %s."
|
360 |
msgstr "Kunne ikke aktivere %s."
|
361 |
|
362 |
-
#: includes/class-freemius.
|
363 |
-
#: includes/class-freemius.php:
|
364 |
msgid "Please contact us with the following message:"
|
365 |
msgstr "Kontakt os venligst med følgende besked:"
|
366 |
|
367 |
-
#: includes/class-freemius.php:
|
368 |
msgid "An unknown error has occurred."
|
369 |
-
msgstr ""
|
370 |
|
371 |
-
#: includes/class-freemius.
|
372 |
msgid "Upgrade"
|
373 |
msgstr "Opgrader"
|
374 |
|
375 |
-
#: includes/class-freemius.php:
|
376 |
msgid "Start Trial"
|
377 |
msgstr "Start prøveperiode"
|
378 |
|
379 |
-
#: includes/class-freemius.php:
|
380 |
msgid "Pricing"
|
381 |
msgstr "Priser"
|
382 |
|
383 |
-
#: includes/class-freemius.
|
384 |
msgid "Affiliation"
|
385 |
msgstr "Affiliation"
|
386 |
|
387 |
-
#: includes/class-freemius.
|
388 |
-
#: templates/account.
|
389 |
msgid "Account"
|
390 |
msgstr "Konto"
|
391 |
|
392 |
-
#: includes/class-freemius.
|
393 |
#: includes/customizer/class-fs-customizer-support-section.php:60
|
394 |
msgid "Contact Us"
|
395 |
msgstr "Kontakt os"
|
396 |
|
397 |
-
#: includes/class-freemius.
|
398 |
-
#: includes/class-freemius.
|
399 |
-
#: templates/account/partials/addon.php:
|
400 |
msgid "Add-Ons"
|
401 |
msgstr "Tilføjelser"
|
402 |
|
403 |
-
#: includes/class-freemius.php:
|
404 |
msgctxt "ASCII arrow left icon"
|
405 |
msgid "←"
|
406 |
-
msgstr ""
|
407 |
|
408 |
-
#: includes/class-freemius.php:
|
409 |
msgctxt "ASCII arrow right icon"
|
410 |
msgid "➤"
|
411 |
-
msgstr ""
|
412 |
|
413 |
-
#: includes/class-freemius.
|
414 |
msgctxt "noun"
|
415 |
msgid "Pricing"
|
416 |
msgstr "Priser"
|
417 |
|
418 |
-
#: includes/class-freemius.
|
419 |
#: includes/customizer/class-fs-customizer-support-section.php:67
|
420 |
msgid "Support Forum"
|
421 |
msgstr "Supportforum"
|
422 |
|
423 |
-
#: includes/class-freemius.php:
|
424 |
msgid "Your email has been successfully verified - you are AWESOME!"
|
425 |
msgstr "Din e-mailadresse er blevet verificeret - du er FOR SEJ!"
|
426 |
|
427 |
-
#: includes/class-freemius.php:
|
428 |
msgctxt "a positive response"
|
429 |
msgid "Right on"
|
430 |
msgstr "Sådan"
|
431 |
|
432 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
433 |
msgid "Your %s Add-on plan was successfully upgraded."
|
434 |
-
msgstr ""
|
435 |
|
436 |
-
#: includes/class-freemius.php:
|
437 |
msgid "%s Add-on was successfully purchased."
|
438 |
msgstr "Betalingen for tilføjelsen %s blev gennemført."
|
439 |
|
440 |
-
#: includes/class-freemius.php:
|
441 |
msgid "Download the latest version"
|
442 |
msgstr "Download den seneste version"
|
443 |
|
444 |
-
#: includes/class-freemius.php:
|
445 |
-
msgid ""
|
446 |
-
"Your server is blocking the access to Freemius' API, which is crucial for "
|
447 |
-
"%1$s synchronization. Please contact your host to whitelist %2$s"
|
448 |
-
msgstr ""
|
449 |
|
450 |
-
#: includes/class-freemius.
|
451 |
-
#: includes/class-freemius.php:
|
452 |
msgid "Error received from the server:"
|
453 |
msgstr "Fejl modtager fra serveren:"
|
454 |
|
455 |
-
#: includes/class-freemius.php:
|
456 |
-
msgid ""
|
457 |
-
"It seems like one of the authentication parameters is wrong. Update your "
|
458 |
-
"Public Key, Secret Key & User ID, and try again."
|
459 |
-
msgstr ""
|
460 |
|
461 |
-
#: includes/class-freemius.
|
462 |
-
#: includes/class-freemius.
|
463 |
msgctxt ""
|
464 |
-
"something somebody says when they are thinking about what you have just "
|
465 |
-
"said."
|
466 |
msgid "Hmm"
|
467 |
msgstr "Hmm"
|
468 |
|
469 |
-
#: includes/class-freemius.php:
|
470 |
-
msgid ""
|
471 |
-
"It looks like you are still on the %s plan. If you did upgrade or change "
|
472 |
-
"your plan, it's probably an issue on our side - sorry."
|
473 |
-
msgstr ""
|
474 |
|
475 |
-
#: includes/class-freemius.
|
476 |
-
#: templates/add-ons.
|
477 |
msgctxt "trial period"
|
478 |
msgid "Trial"
|
479 |
msgstr "Prøveperiode"
|
480 |
|
481 |
-
#: includes/class-freemius.php:
|
482 |
-
msgid ""
|
483 |
-
"I have upgraded my account but when I try to Sync the License, the plan "
|
484 |
-
"remains %s."
|
485 |
msgstr "Jeg har opgraderet min konto, men når jeg forsøger at synkronisere licensen, forbliver planen %s."
|
486 |
|
487 |
-
#: includes/class-freemius.
|
488 |
msgid "Please contact us here"
|
489 |
msgstr "Kontakt os her"
|
490 |
|
491 |
-
#: includes/class-freemius.php:
|
492 |
msgid "Your plan was successfully activated."
|
493 |
-
msgstr ""
|
494 |
|
495 |
-
#: includes/class-freemius.php:
|
496 |
msgid "Your plan was successfully upgraded."
|
497 |
msgstr "Din plan er blevet opgraderet."
|
498 |
|
499 |
-
#: includes/class-freemius.php:
|
500 |
msgid "Your plan was successfully changed to %s."
|
501 |
msgstr "Din plan er blevet ændret til %s."
|
502 |
|
503 |
-
#: includes/class-freemius.php:
|
504 |
-
msgid ""
|
505 |
-
"Your license has expired. You can still continue using the free %s forever."
|
506 |
msgstr "Din licens er udløbet. Du kan stadig fortsætte med at benytte den gratis udgave af %s."
|
507 |
|
508 |
-
#: includes/class-freemius.php:
|
509 |
-
msgid ""
|
510 |
-
"Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s "
|
511 |
-
"without interruptions."
|
512 |
msgstr "Din licens er udløbet. %1$sOpgrader nu%2$s for at fortsætte med at benytte %3$s uden forstyrrelser."
|
513 |
|
514 |
-
#: includes/class-freemius.php:
|
515 |
-
msgid ""
|
516 |
-
"Your license has been cancelled. If you think it's a mistake, please contact"
|
517 |
-
" support."
|
518 |
msgstr "Din licens er blevet annulleret. Hvis du mener, dette er en fejl, så kontakt venligst support."
|
519 |
|
520 |
-
#: includes/class-freemius.php:
|
521 |
-
msgid ""
|
522 |
-
"Your license has expired. You can still continue using all the %s features, "
|
523 |
-
"but you'll need to renew your license to continue getting updates and "
|
524 |
-
"support."
|
525 |
msgstr "Din licens er udløbet. Du kan stadig benytte alle funktionerne i %s, men du bliver nødt til at fornye din licens for at få opdateringer og support."
|
526 |
|
527 |
-
#: includes/class-freemius.php:
|
528 |
-
msgid ""
|
529 |
-
"Your free trial has expired. You can still continue using all our free "
|
530 |
-
"features."
|
531 |
msgstr "Din gratis prøveperiode er udløbet. Du kan stadig benytte alle de gratis features."
|
532 |
|
533 |
-
#: includes/class-freemius.php:
|
534 |
-
msgid ""
|
535 |
-
"Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s "
|
536 |
-
"without interruptions."
|
537 |
-
msgstr ""
|
538 |
|
539 |
-
#: includes/class-freemius.php:
|
540 |
msgid "It looks like the license could not be activated."
|
541 |
msgstr "Det ser ud til, at licensen ikke kunne aktiveres."
|
542 |
|
543 |
-
#: includes/class-freemius.php:
|
544 |
msgid "Your license was successfully activated."
|
545 |
msgstr "Din licens er blevet aktiveret."
|
546 |
|
547 |
-
#: includes/class-freemius.php:
|
548 |
msgid "It looks like your site currently doesn't have an active license."
|
549 |
msgstr "Det ser ud til, at dit websted endnu ikke har en aktiv licens."
|
550 |
|
551 |
-
#: includes/class-freemius.php:
|
552 |
msgid "It looks like the license deactivation failed."
|
553 |
msgstr "Det ser ud til, at licens-deaktiveringen mislykkedes."
|
554 |
|
555 |
-
#: includes/class-freemius.php:
|
556 |
-
msgid ""
|
557 |
-
"Your license was successfully deactivated, you are back to the %s plan."
|
558 |
msgstr "Din licens blev deaktiveret, du er tilbage på planen %s."
|
559 |
|
560 |
-
#: includes/class-freemius.php:
|
561 |
msgid "O.K"
|
562 |
msgstr "O.K"
|
563 |
|
564 |
-
#: includes/class-freemius.php:
|
565 |
-
msgid ""
|
566 |
-
"Seems like we are having some temporary issue with your subscription "
|
567 |
-
"cancellation. Please try again in few minutes."
|
568 |
-
msgstr ""
|
569 |
|
570 |
-
#: includes/class-freemius.php:
|
571 |
-
msgid ""
|
572 |
-
"Your subscription was successfully cancelled. Your %s plan license will "
|
573 |
-
"expire in %s."
|
574 |
-
msgstr ""
|
575 |
|
576 |
-
#: includes/class-freemius.php:
|
577 |
msgid "You are already running the %s in a trial mode."
|
578 |
msgstr "Du benytter allerede %s under en prøveperiode."
|
579 |
|
580 |
-
#: includes/class-freemius.php:
|
581 |
msgid "You already utilized a trial before."
|
582 |
msgstr "Du har allerede brugt din prøveperiode."
|
583 |
|
584 |
-
#: includes/class-freemius.php:
|
585 |
msgid "Plan %s do not exist, therefore, can't start a trial."
|
586 |
msgstr "Plan %s eksisterer ikke og kan derfor ikke starte prøveperiode."
|
587 |
|
588 |
-
#: includes/class-freemius.php:
|
589 |
msgid "Plan %s does not support a trial period."
|
590 |
msgstr "Plan %s understøtter ikke en prøveperiode."
|
591 |
|
592 |
-
#: includes/class-freemius.php:
|
593 |
msgid "None of the %s's plans supports a trial period."
|
594 |
-
msgstr ""
|
595 |
|
596 |
-
#: includes/class-freemius.php:
|
597 |
-
msgid ""
|
598 |
-
"It looks like you are not in trial mode anymore so there's nothing to cancel"
|
599 |
-
" :)"
|
600 |
msgstr "Det lader ikke til du er i en prøveperiode længere, så der er ikke noget at annullere :-)"
|
601 |
|
602 |
-
#: includes/class-freemius.php:
|
603 |
-
msgid ""
|
604 |
-
"Seems like we are having some temporary issue with your trial cancellation. "
|
605 |
-
"Please try again in few minutes."
|
606 |
-
msgstr ""
|
607 |
|
608 |
-
#: includes/class-freemius.php:
|
609 |
msgid "Your %s free trial was successfully cancelled."
|
610 |
msgstr "Din gratis prøveperiode for %s er blevet annulleret."
|
611 |
|
612 |
-
#: includes/class-freemius.php:
|
613 |
msgid "Version %s was released."
|
614 |
msgstr "Version %s er blevet udgivet."
|
615 |
|
616 |
-
#: includes/class-freemius.php:
|
617 |
msgid "Please download %s."
|
618 |
msgstr "Download venligst %s."
|
619 |
|
620 |
-
#: includes/class-freemius.php:
|
621 |
msgid "the latest %s version here"
|
622 |
msgstr "den seneste version af %s her"
|
623 |
|
624 |
-
#: includes/class-freemius.php:
|
625 |
msgid "New"
|
626 |
msgstr "Ny"
|
627 |
|
628 |
-
#: includes/class-freemius.php:
|
629 |
msgid "Seems like you got the latest release."
|
630 |
msgstr "Det ser ud til, at du har den seneste udgivelse."
|
631 |
|
632 |
-
#: includes/class-freemius.php:
|
633 |
msgid "You are all good!"
|
634 |
msgstr "Det var det!"
|
635 |
|
636 |
-
#: includes/class-freemius.php:
|
637 |
-
msgid ""
|
638 |
-
"Verification mail was just sent to %s. If you can't find it after 5 min, "
|
639 |
-
"please check your spam box."
|
640 |
-
msgstr ""
|
641 |
|
642 |
-
#: includes/class-freemius.php:
|
643 |
msgid "Site successfully opted in."
|
644 |
msgstr "Websted er tilmeldt."
|
645 |
|
646 |
-
#: includes/class-freemius.
|
647 |
msgid "Awesome"
|
648 |
msgstr "Sejt"
|
649 |
|
650 |
-
#: includes/class-freemius.
|
651 |
-
msgid ""
|
652 |
-
"We appreciate your help in making the %s better by letting us track some "
|
653 |
-
"usage data."
|
654 |
msgstr "Vi sætter pris på din hjælp med at forbedre %s ved at lade os indsamle brugsdata."
|
655 |
|
656 |
-
#: includes/class-freemius.php:
|
657 |
msgid "Thank you!"
|
658 |
msgstr "Mange tak!"
|
659 |
|
660 |
-
#: includes/class-freemius.php:
|
661 |
msgid "We will no longer be sending any usage data of %s on %s to %s."
|
662 |
msgstr "Vi vil ikke længere indsende brugsdata af %s på %s til %s."
|
663 |
|
664 |
-
#: includes/class-freemius.php:
|
665 |
-
msgid ""
|
666 |
-
"Please check your mailbox, you should receive an email via %s to confirm the"
|
667 |
-
" ownership change. From security reasons, you must confirm the change within"
|
668 |
-
" the next 15 min. If you cannot find the email, please check your spam "
|
669 |
-
"folder."
|
670 |
-
msgstr ""
|
671 |
|
672 |
-
#: includes/class-freemius.php:
|
673 |
-
msgid ""
|
674 |
-
"
|
675 |
-
" final approval."
|
676 |
-
msgstr ""
|
677 |
|
678 |
-
#: includes/class-freemius.php:
|
679 |
msgid "%s is the new owner of the account."
|
680 |
msgstr "%s er den nye ejer af kontoen."
|
681 |
|
682 |
-
#: includes/class-freemius.php:
|
683 |
msgctxt "as congratulations"
|
684 |
msgid "Congrats"
|
685 |
msgstr "Tillykke"
|
686 |
|
687 |
-
#: includes/class-freemius.php:
|
688 |
-
msgid ""
|
689 |
-
"
|
690 |
-
"email is already registered."
|
691 |
-
msgstr ""
|
692 |
|
693 |
-
#: includes/class-freemius.php:
|
694 |
-
msgid ""
|
695 |
-
"If you would like to give up the ownership of the %s's account to %s click "
|
696 |
-
"the Change Ownership button."
|
697 |
-
msgstr ""
|
698 |
|
699 |
-
#: includes/class-freemius.php:
|
700 |
msgid "Change Ownership"
|
701 |
msgstr "Skift ejerskab"
|
702 |
|
703 |
-
#: includes/class-freemius.php:
|
704 |
-
msgid ""
|
705 |
-
"Your email was successfully updated. You should receive an email with "
|
706 |
-
"confirmation instructions in few moments."
|
707 |
-
msgstr ""
|
708 |
|
709 |
-
#: includes/class-freemius.php:
|
710 |
msgid "Please provide your full name."
|
711 |
msgstr "Indtast venligst dit fulde navn."
|
712 |
|
713 |
-
#: includes/class-freemius.php:
|
714 |
msgid "Your name was successfully updated."
|
715 |
msgstr "Dit navn er blevet opdateret."
|
716 |
|
717 |
-
#: includes/class-freemius.php:
|
718 |
msgid "You have successfully updated your %s."
|
719 |
msgstr "Opdatering af %s blev gennemført."
|
720 |
|
721 |
-
#: includes/class-freemius.php:
|
722 |
-
msgid ""
|
723 |
-
"Just letting you know that the add-ons information of %s is being pulled "
|
724 |
-
"from an external server."
|
725 |
-
msgstr ""
|
726 |
|
727 |
-
#: includes/class-freemius.php:
|
728 |
msgctxt "advance notice of something that will need attention."
|
729 |
msgid "Heads up"
|
730 |
msgstr "Se her"
|
731 |
|
732 |
-
#: includes/class-freemius.php:
|
733 |
msgctxt "exclamation"
|
734 |
msgid "Hey"
|
735 |
msgstr "Hey"
|
736 |
|
737 |
-
#: includes/class-freemius.php:
|
738 |
-
msgid ""
|
739 |
-
"
|
740 |
-
"free trial."
|
741 |
-
msgstr "Hvad syntes du om %s indtil videre? Test alle %s premium funktioner med en %d-dags gratis prøveperiode."
|
742 |
|
743 |
-
#: includes/class-freemius.php:
|
744 |
msgid "No commitment for %s days - cancel anytime!"
|
745 |
msgstr "Ingen bindinger i %s dage - annuller når som helst!"
|
746 |
|
747 |
-
#: includes/class-freemius.php:
|
748 |
msgid "No credit card required"
|
749 |
msgstr "Betalingskort ikke påkrævet"
|
750 |
|
751 |
-
#: includes/class-freemius.
|
752 |
msgctxt "call to action"
|
753 |
msgid "Start free trial"
|
754 |
msgstr "Start gratis prøveperiode"
|
755 |
|
756 |
-
#: includes/class-freemius.php:
|
757 |
-
msgid ""
|
758 |
-
"Hey there, did you know that %s has an affiliate program? If you like the %s"
|
759 |
-
" you can become our ambassador and earn some cash!"
|
760 |
-
msgstr ""
|
761 |
|
762 |
-
#: includes/class-freemius.php:
|
763 |
msgid "Learn more"
|
764 |
msgstr "Læs mere"
|
765 |
|
766 |
-
#: includes/class-freemius.
|
767 |
-
#: templates/account.
|
768 |
-
#: templates/connect.php421, templates/forms/license-activation.
|
769 |
-
#: templates/account/partials/addon.php:
|
770 |
msgid "Activate License"
|
771 |
msgstr "Aktiver licens"
|
772 |
|
773 |
-
#: includes/class-freemius.
|
774 |
-
#: templates/account.
|
|
|
775 |
msgid "Change License"
|
776 |
msgstr "Skift licens"
|
777 |
|
778 |
-
#: includes/class-freemius.
|
779 |
msgid "Opt Out"
|
780 |
msgstr "Frameld"
|
781 |
|
782 |
-
#: includes/class-freemius.
|
783 |
-
#: templates/account/partials/site.
|
784 |
-
#: templates/account/partials/site.php:
|
785 |
msgid "Opt In"
|
786 |
msgstr "Tilmeld"
|
787 |
|
788 |
-
#: includes/class-freemius.php:
|
789 |
-
msgid ""
|
790 |
-
" The paid version of %1$s is already installed. Please activate it to start "
|
791 |
-
"benefiting the %2$s features. %3$s"
|
792 |
-
msgstr ""
|
793 |
|
794 |
-
#: includes/class-freemius.php:
|
795 |
msgid "Activate %s features"
|
796 |
-
msgstr ""
|
797 |
|
798 |
-
#: includes/class-freemius.php:
|
799 |
msgid "Please follow these steps to complete the upgrade"
|
800 |
msgstr "Følg venligst disse trin for at færdiggøre opgraderingen"
|
801 |
|
802 |
-
#: includes/class-freemius.php:
|
803 |
msgid "Download the latest %s version"
|
804 |
msgstr "Download den seneste version af %s"
|
805 |
|
806 |
-
#: includes/class-freemius.php:
|
807 |
msgid "Upload and activate the downloaded version"
|
808 |
msgstr "Upload og aktiver den downloadede version"
|
809 |
|
810 |
-
#: includes/class-freemius.php:
|
811 |
msgid "How to upload and activate?"
|
812 |
msgstr "Upload og aktivering, hvordan?"
|
813 |
|
814 |
-
#: includes/class-freemius.php:
|
815 |
-
msgid ""
|
816 |
-
"%sClick here%s to choose the sites where you'd like to activate the license "
|
817 |
-
"on."
|
818 |
-
msgstr ""
|
819 |
|
820 |
-
#: includes/class-freemius.php:
|
821 |
msgid "Auto installation only works for opted-in users."
|
822 |
msgstr "Auto-installation fungerer kun for tilmeldte brugere."
|
823 |
|
824 |
-
#: includes/class-freemius.
|
825 |
-
#: includes/class-fs-plugin-updater.
|
826 |
-
#: includes/class-fs-plugin-updater.php:
|
827 |
msgid "Invalid module ID."
|
828 |
msgstr "Ugyldigt modul-ID."
|
829 |
|
830 |
-
#: includes/class-freemius.
|
831 |
msgid "Premium version already active."
|
832 |
msgstr "Premium version allerede aktiv."
|
833 |
|
834 |
-
#: includes/class-freemius.php:
|
835 |
msgid "You do not have a valid license to access the premium version."
|
836 |
msgstr "Du har ikke en gyldig licens til at benytte premium-versionen."
|
837 |
|
838 |
-
#: includes/class-freemius.php:
|
839 |
-
msgid ""
|
840 |
-
"Plugin is a \"Serviceware\" which means it does not have a premium code "
|
841 |
-
"version."
|
842 |
-
msgstr ""
|
843 |
|
844 |
-
#: includes/class-freemius.
|
845 |
msgid "Premium add-on version already installed."
|
846 |
msgstr "Premium tilføjelse er allerede installeret."
|
847 |
|
848 |
-
#: includes/class-freemius.php:
|
849 |
msgid "View paid features"
|
850 |
msgstr "Vis betalte features"
|
851 |
|
852 |
-
#: includes/class-freemius.php:
|
853 |
msgid "Thank you so much for using %s and its add-ons!"
|
854 |
-
msgstr ""
|
855 |
|
856 |
-
#: includes/class-freemius.php:
|
857 |
msgid "Thank you so much for using %s!"
|
858 |
msgstr "Tak fordi du benytter %s!"
|
859 |
|
860 |
-
#: includes/class-freemius.php:
|
861 |
-
msgid ""
|
862 |
-
"You've already opted-in to our usage-tracking, which helps us keep improving"
|
863 |
-
" the %s."
|
864 |
msgstr "Du er allerede tilmeldt vores brugssporing, hvilket hjælper os med at forbedre %s."
|
865 |
|
866 |
-
#: includes/class-freemius.php:
|
867 |
msgid "Thank you so much for using our products!"
|
868 |
msgstr "Mange tak for at benytte vores produkter!"
|
869 |
|
870 |
-
#: includes/class-freemius.php:
|
871 |
-
msgid ""
|
872 |
-
"You've already opted-in to our usage-tracking, which helps us keep improving"
|
873 |
-
" them."
|
874 |
msgstr "Du er allerede tilmeldt vores brugssporing, hvilket hjælper os med at forbedre dem."
|
875 |
|
876 |
-
#: includes/class-freemius.php:
|
877 |
msgid "%s and its add-ons"
|
878 |
msgstr "%s og tilføjelser"
|
879 |
|
880 |
-
#: includes/class-freemius.php:
|
881 |
msgid "Products"
|
882 |
msgstr "Produkter"
|
883 |
|
884 |
-
#: includes/class-freemius.
|
885 |
msgid "Yes"
|
886 |
msgstr "Ja"
|
887 |
|
888 |
-
#: includes/class-freemius.
|
889 |
msgid "send me security & feature updates, educational content and offers."
|
890 |
msgstr "send mig sikkerheds- og feature-opdateringer, informativt indhold og tilbud."
|
891 |
|
892 |
-
#: includes/class-freemius.
|
893 |
msgid "No"
|
894 |
msgstr "Nej"
|
895 |
|
896 |
-
#: includes/class-freemius.
|
897 |
-
msgid ""
|
898 |
-
"do %sNOT%s send me security & feature updates, educational content and "
|
899 |
-
"offers."
|
900 |
msgstr "send %sIKKE%s sikkerheds- og feature-opdateringer, informativt indhold og tilbud."
|
901 |
|
902 |
-
#: includes/class-freemius.php:
|
903 |
-
msgid ""
|
904 |
-
"Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance "
|
905 |
-
"requirements it is required that you provide your explicit consent, again, "
|
906 |
-
"confirming that you are onboard :-)"
|
907 |
-
msgstr ""
|
908 |
|
909 |
-
#: includes/class-freemius.
|
910 |
-
msgid ""
|
911 |
-
"Please let us know if you'd like us to contact you for security & feature "
|
912 |
-
"updates, educational content, and occasional offers:"
|
913 |
msgstr "Lad os vide, om vi har lov til at kontakte dig med sikkerheds- og feature-opdateringer, informativt indhold og lejlighedsvise tilbud:"
|
914 |
|
915 |
-
#: includes/class-freemius.php:
|
916 |
msgid "License key is empty."
|
917 |
msgstr "Licensnøglen er tom."
|
918 |
|
919 |
-
#: includes/class-fs-plugin-updater.
|
920 |
#: templates/forms/premium-versions-upgrade-handler.php:57
|
921 |
msgid "Renew license"
|
922 |
msgstr "Forny licens"
|
923 |
|
924 |
-
#: includes/class-fs-plugin-updater.
|
925 |
#: templates/forms/premium-versions-upgrade-handler.php:58
|
926 |
msgid "Buy license"
|
927 |
-
msgstr ""
|
928 |
|
929 |
-
#: includes/class-fs-plugin-updater.
|
930 |
-
#: includes/class-fs-plugin-updater.php:
|
931 |
msgid "There is a %s of %s available."
|
932 |
-
msgstr ""
|
933 |
|
934 |
-
#: includes/class-fs-plugin-updater.
|
935 |
-
#: includes/class-fs-plugin-updater.php:
|
936 |
msgid "new Beta version"
|
937 |
-
msgstr ""
|
938 |
|
939 |
-
#: includes/class-fs-plugin-updater.
|
940 |
-
#: includes/class-fs-plugin-updater.php:
|
941 |
msgid "new version"
|
942 |
-
msgstr ""
|
943 |
|
944 |
-
#: includes/class-fs-plugin-updater.php:
|
945 |
msgid "Important Upgrade Notice:"
|
946 |
-
msgstr ""
|
947 |
|
948 |
-
#: includes/class-fs-plugin-updater.php:
|
949 |
msgid "Installing plugin: %s"
|
950 |
msgstr "Installerer plugin: %s"
|
951 |
|
952 |
-
#: includes/class-fs-plugin-updater.php:
|
953 |
msgid "Unable to connect to the filesystem. Please confirm your credentials."
|
954 |
-
msgstr ""
|
955 |
|
956 |
-
#: includes/class-fs-plugin-updater.php:
|
957 |
-
msgid ""
|
958 |
-
"The remote plugin package does not contain a folder with the desired slug "
|
959 |
-
"and renaming did not work."
|
960 |
-
msgstr ""
|
961 |
|
962 |
-
#: includes/fs-plugin-info-dialog.php:
|
963 |
msgid "Purchase More"
|
964 |
-
msgstr ""
|
965 |
|
966 |
-
#: includes/fs-plugin-info-dialog.
|
967 |
-
#: templates/account/partials/addon.php:
|
968 |
msgctxt "verb"
|
969 |
msgid "Purchase"
|
970 |
msgstr "Køb"
|
971 |
|
972 |
-
#: includes/fs-plugin-info-dialog.php:
|
973 |
msgid "Start my free %s"
|
974 |
msgstr "Start min gratis %s"
|
975 |
|
976 |
-
#: includes/fs-plugin-info-dialog.php:
|
977 |
msgid "Install Free Version Update Now"
|
978 |
msgstr "Installer opdatering til gratis version nu"
|
979 |
|
980 |
-
#: includes/fs-plugin-info-dialog.
|
981 |
msgid "Install Update Now"
|
982 |
msgstr "Installer opdatering nu"
|
983 |
|
984 |
-
#: includes/fs-plugin-info-dialog.php:
|
985 |
msgid "Install Free Version Now"
|
986 |
msgstr "Installer gratis version nu"
|
987 |
|
988 |
-
#: includes/fs-plugin-info-dialog.
|
989 |
#: templates/auto-installation.php111,
|
990 |
-
#: templates/account/partials/addon.
|
991 |
-
#: templates/account/partials/addon.php:
|
992 |
msgid "Install Now"
|
993 |
msgstr "Installer nu"
|
994 |
|
995 |
-
#: includes/fs-plugin-info-dialog.php:
|
996 |
msgctxt "as download latest version"
|
997 |
msgid "Download Latest Free Version"
|
998 |
msgstr "Download seneste gratis version"
|
999 |
|
1000 |
-
#: includes/fs-plugin-info-dialog.
|
1001 |
-
#: templates/add-ons.
|
1002 |
msgctxt "as download latest version"
|
1003 |
msgid "Download Latest"
|
1004 |
msgstr "Download seneste"
|
1005 |
|
1006 |
-
#: includes/fs-plugin-info-dialog.
|
1007 |
-
#: templates/account/partials/addon.
|
1008 |
-
#: templates/account/partials/addon.php:
|
1009 |
msgid "Activate this add-on"
|
1010 |
msgstr "Aktiver denne tilføjelse"
|
1011 |
|
1012 |
-
#: includes/fs-plugin-info-dialog.
|
1013 |
msgid "Activate Free Version"
|
1014 |
msgstr "Aktiver gratis version"
|
1015 |
|
1016 |
-
#: includes/fs-plugin-info-dialog.
|
1017 |
-
#: templates/add-ons.
|
1018 |
msgid "Activate"
|
1019 |
msgstr "Aktiver"
|
1020 |
|
1021 |
-
#: includes/fs-plugin-info-dialog.php:
|
1022 |
msgctxt "Plugin installer section title"
|
1023 |
msgid "Description"
|
1024 |
msgstr "Beskrivelse"
|
1025 |
|
1026 |
-
#: includes/fs-plugin-info-dialog.php:
|
1027 |
msgctxt "Plugin installer section title"
|
1028 |
msgid "Installation"
|
1029 |
msgstr "Installering"
|
1030 |
|
1031 |
-
#: includes/fs-plugin-info-dialog.php:
|
1032 |
msgctxt "Plugin installer section title"
|
1033 |
msgid "FAQ"
|
1034 |
msgstr "FAQ"
|
1035 |
|
1036 |
-
#: includes/fs-plugin-info-dialog.
|
1037 |
#: templates/plugin-info/description.php:55
|
1038 |
msgid "Screenshots"
|
1039 |
msgstr "Skærmbilleder"
|
1040 |
|
1041 |
-
#: includes/fs-plugin-info-dialog.php:
|
1042 |
msgctxt "Plugin installer section title"
|
1043 |
msgid "Changelog"
|
1044 |
msgstr "Ændringslog"
|
1045 |
|
1046 |
-
#: includes/fs-plugin-info-dialog.php:
|
1047 |
msgctxt "Plugin installer section title"
|
1048 |
msgid "Reviews"
|
1049 |
msgstr "Anmeldelser"
|
1050 |
|
1051 |
-
#: includes/fs-plugin-info-dialog.php:
|
1052 |
msgctxt "Plugin installer section title"
|
1053 |
msgid "Other Notes"
|
1054 |
msgstr "Andre noter"
|
1055 |
|
1056 |
-
#: includes/fs-plugin-info-dialog.php:
|
1057 |
msgctxt "Plugin installer section title"
|
1058 |
msgid "Features & Pricing"
|
1059 |
msgstr "Funktioner og priser"
|
1060 |
|
1061 |
-
#: includes/fs-plugin-info-dialog.php:
|
1062 |
msgid "Plugin Install"
|
1063 |
msgstr "Plugin-installering"
|
1064 |
|
1065 |
-
#: includes/fs-plugin-info-dialog.php:
|
1066 |
msgctxt "e.g. Professional Plan"
|
1067 |
msgid "%s Plan"
|
1068 |
msgstr "%s Plan"
|
1069 |
|
1070 |
-
#: includes/fs-plugin-info-dialog.php:
|
1071 |
msgctxt "e.g. the best product"
|
1072 |
msgid "Best"
|
1073 |
msgstr "Bedste"
|
1074 |
|
1075 |
-
#: includes/fs-plugin-info-dialog.
|
1076 |
-
#: includes/fs-plugin-info-dialog.php:
|
1077 |
msgctxt "as every month"
|
1078 |
msgid "Monthly"
|
1079 |
msgstr "Månedligt"
|
1080 |
|
1081 |
-
#: includes/fs-plugin-info-dialog.php:
|
1082 |
msgctxt "as once a year"
|
1083 |
msgid "Annual"
|
1084 |
msgstr "Årligt"
|
1085 |
|
1086 |
-
#: includes/fs-plugin-info-dialog.php:
|
1087 |
msgid "Lifetime"
|
1088 |
msgstr "Livstid"
|
1089 |
|
1090 |
-
#: includes/fs-plugin-info-dialog.
|
1091 |
-
#: includes/fs-plugin-info-dialog.
|
1092 |
-
#: includes/fs-plugin-info-dialog.php:
|
1093 |
msgctxt "e.g. billed monthly"
|
1094 |
msgid "Billed %s"
|
1095 |
msgstr "Faktureret %s"
|
1096 |
|
1097 |
-
#: includes/fs-plugin-info-dialog.php:
|
1098 |
msgctxt "as once a year"
|
1099 |
msgid "Annually"
|
1100 |
msgstr "Årligt"
|
1101 |
|
1102 |
-
#: includes/fs-plugin-info-dialog.php:
|
1103 |
msgctxt "as once a year"
|
1104 |
msgid "Once"
|
1105 |
msgstr "Engangsbeløb"
|
1106 |
|
1107 |
-
#: includes/fs-plugin-info-dialog.php:
|
1108 |
msgid "Single Site License"
|
1109 |
-
msgstr ""
|
1110 |
|
1111 |
-
#: includes/fs-plugin-info-dialog.php:
|
1112 |
msgid "Unlimited Licenses"
|
1113 |
msgstr "Ubegrænsede licenser"
|
1114 |
|
1115 |
-
#: includes/fs-plugin-info-dialog.php:
|
1116 |
msgid "Up to %s Sites"
|
1117 |
msgstr "Op til %s websteder"
|
1118 |
|
1119 |
-
#: includes/fs-plugin-info-dialog.
|
1120 |
#: templates/plugin-info/features.php:82
|
1121 |
msgctxt "as monthly period"
|
1122 |
msgid "mo"
|
1123 |
msgstr "md"
|
1124 |
|
1125 |
-
#: includes/fs-plugin-info-dialog.
|
1126 |
#: templates/plugin-info/features.php:80
|
1127 |
msgctxt "as annual period"
|
1128 |
msgid "year"
|
1129 |
msgstr "år"
|
1130 |
|
1131 |
-
#: includes/fs-plugin-info-dialog.php:
|
1132 |
msgctxt "noun"
|
1133 |
msgid "Price"
|
1134 |
msgstr "Pris"
|
1135 |
|
1136 |
-
#: includes/fs-plugin-info-dialog.php:
|
1137 |
msgid "Save %s"
|
1138 |
msgstr "Spar %s"
|
1139 |
|
1140 |
-
#: includes/fs-plugin-info-dialog.php:
|
1141 |
msgid "No commitment for %s - cancel anytime"
|
1142 |
msgstr "Ingen bindinger ved %s - annuller når som helst"
|
1143 |
|
1144 |
-
#: includes/fs-plugin-info-dialog.php:
|
1145 |
msgid "After your free %s, pay as little as %s"
|
1146 |
msgstr "Efter din gratis %s er prisen kun %s"
|
1147 |
|
1148 |
-
#: includes/fs-plugin-info-dialog.php:
|
1149 |
msgid "Details"
|
1150 |
msgstr "Detaljer"
|
1151 |
|
1152 |
-
#: includes/fs-plugin-info-dialog.
|
1153 |
-
#: templates/debug.php203, templates/debug.php240, templates/debug.
|
1154 |
#: templates/account/partials/addon.php:36
|
1155 |
msgctxt "product version"
|
1156 |
msgid "Version"
|
1157 |
msgstr "Version"
|
1158 |
|
1159 |
-
#: includes/fs-plugin-info-dialog.php:
|
1160 |
msgctxt "as the plugin author"
|
1161 |
msgid "Author"
|
1162 |
msgstr "Forfatter"
|
1163 |
|
1164 |
-
#: includes/fs-plugin-info-dialog.php:
|
1165 |
msgid "Last Updated"
|
1166 |
msgstr "Senest opdateret"
|
1167 |
|
1168 |
-
#: includes/fs-plugin-info-dialog.
|
1169 |
msgctxt "x-ago"
|
1170 |
msgid "%s ago"
|
1171 |
msgstr "%s siden"
|
1172 |
|
1173 |
-
#: includes/fs-plugin-info-dialog.php:
|
1174 |
msgid "Requires WordPress Version"
|
1175 |
msgstr "Kræver WordPress-version"
|
1176 |
|
1177 |
-
#: includes/fs-plugin-info-dialog.php:
|
1178 |
msgid "%s or higher"
|
1179 |
msgstr "%s eller højere"
|
1180 |
|
1181 |
-
#: includes/fs-plugin-info-dialog.php:
|
1182 |
msgid "Compatible up to"
|
1183 |
msgstr "Kompatibel op til"
|
1184 |
|
1185 |
-
#: includes/fs-plugin-info-dialog.php:
|
1186 |
msgid "Downloaded"
|
1187 |
msgstr "Downloadet"
|
1188 |
|
1189 |
-
#: includes/fs-plugin-info-dialog.php:
|
1190 |
msgid "%s time"
|
1191 |
msgstr "%s gang"
|
1192 |
|
1193 |
-
#: includes/fs-plugin-info-dialog.php:
|
1194 |
msgid "%s times"
|
1195 |
msgstr "%s gange"
|
1196 |
|
1197 |
-
#: includes/fs-plugin-info-dialog.php:
|
1198 |
msgid "WordPress.org Plugin Page"
|
1199 |
msgstr "WordPress.org Plugin-side"
|
1200 |
|
1201 |
-
#: includes/fs-plugin-info-dialog.php:
|
1202 |
msgid "Plugin Homepage"
|
1203 |
msgstr "Plugin-websted"
|
1204 |
|
1205 |
-
#: includes/fs-plugin-info-dialog.
|
1206 |
-
#: includes/fs-plugin-info-dialog.php:
|
1207 |
msgid "Donate to this plugin"
|
1208 |
msgstr "Donér til dette plugin"
|
1209 |
|
1210 |
-
#: includes/fs-plugin-info-dialog.php:
|
1211 |
msgid "Average Rating"
|
1212 |
msgstr "Gennemsnitlig vurdering"
|
1213 |
|
1214 |
-
#: includes/fs-plugin-info-dialog.php:
|
1215 |
msgid "based on %s"
|
1216 |
msgstr "baseret på %s"
|
1217 |
|
1218 |
-
#: includes/fs-plugin-info-dialog.php:
|
1219 |
msgid "%s rating"
|
1220 |
msgstr "%s vurdering"
|
1221 |
|
1222 |
-
#: includes/fs-plugin-info-dialog.php:
|
1223 |
msgid "%s ratings"
|
1224 |
msgstr "%s vurderinger"
|
1225 |
|
1226 |
-
#: includes/fs-plugin-info-dialog.php:
|
1227 |
msgid "%s star"
|
1228 |
msgstr "%s stjerne"
|
1229 |
|
1230 |
-
#: includes/fs-plugin-info-dialog.php:
|
1231 |
msgid "%s stars"
|
1232 |
msgstr "%s stjerner"
|
1233 |
|
1234 |
-
#: includes/fs-plugin-info-dialog.php:
|
1235 |
msgid "Click to see reviews that provided a rating of %s"
|
1236 |
-
msgstr ""
|
1237 |
|
1238 |
-
#: includes/fs-plugin-info-dialog.php:
|
1239 |
msgid "Contributors"
|
1240 |
msgstr "Bidragsydere"
|
1241 |
|
1242 |
-
#: includes/fs-plugin-info-dialog.
|
1243 |
-
#: includes/fs-plugin-info-dialog.php:
|
1244 |
msgid "Warning"
|
1245 |
msgstr "Advarsel"
|
1246 |
|
1247 |
-
#: includes/fs-plugin-info-dialog.php:
|
1248 |
-
msgid ""
|
1249 |
-
"This plugin has not been tested with your current version of WordPress."
|
1250 |
msgstr "Dette plugin er ikke blevet testet med din nuværende version af WordPress."
|
1251 |
|
1252 |
-
#: includes/fs-plugin-info-dialog.php:
|
1253 |
-
msgid ""
|
1254 |
-
"
|
1255 |
-
"WordPress."
|
1256 |
-
msgstr ""
|
1257 |
|
1258 |
-
#: includes/fs-plugin-info-dialog.php:
|
1259 |
msgid "Paid add-on must be deployed to Freemius."
|
1260 |
-
msgstr ""
|
1261 |
|
1262 |
-
#: includes/fs-plugin-info-dialog.php:
|
1263 |
msgid "Add-on must be deployed to WordPress.org or Freemius."
|
1264 |
-
msgstr ""
|
1265 |
|
1266 |
-
#: includes/fs-plugin-info-dialog.php:
|
1267 |
msgid "Newer Version (%s) Installed"
|
1268 |
msgstr "Nyere version (%s) installeret"
|
1269 |
|
1270 |
-
#: includes/fs-plugin-info-dialog.php:
|
1271 |
msgid "Newer Free Version (%s) Installed"
|
1272 |
msgstr "Nyere gratis version (%s) installeret"
|
1273 |
|
1274 |
-
#: includes/fs-plugin-info-dialog.php:
|
1275 |
msgid "Latest Version Installed"
|
1276 |
msgstr "Seneste version installeret"
|
1277 |
|
1278 |
-
#: includes/fs-plugin-info-dialog.php:
|
1279 |
msgid "Latest Free Version Installed"
|
1280 |
msgstr "Seneste gratis version installeret"
|
1281 |
|
1282 |
-
#: templates/account.
|
1283 |
#: templates/account/partials/addon.php26,
|
1284 |
-
#: templates/account/partials/site.php:
|
1285 |
msgid "Downgrading your plan"
|
1286 |
-
msgstr ""
|
1287 |
|
1288 |
-
#: templates/account.
|
1289 |
#: templates/account/partials/addon.php27,
|
1290 |
-
#: templates/account/partials/site.php:
|
1291 |
msgid "Cancelling the subscription"
|
1292 |
-
msgstr ""
|
1293 |
|
1294 |
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the
|
1295 |
#. subscription'
|
1296 |
-
#: templates/account.
|
1297 |
-
|
1298 |
-
"%1$s will immediately stop all future recurring payments and your %2$s plan "
|
1299 |
-
"license will expire in %3$s."
|
1300 |
-
msgstr ""
|
1301 |
|
1302 |
-
#: templates/account.
|
1303 |
#: templates/account/partials/addon.php30,
|
1304 |
-
#: templates/account/partials/site.php:
|
1305 |
-
msgid ""
|
1306 |
-
"Please note that we will not be able to grandfather outdated pricing for "
|
1307 |
-
"renewals/new subscriptions after a cancellation. If you choose to renew the "
|
1308 |
-
"subscription manually in the future, after a price increase, which typically"
|
1309 |
-
" occurs once a year, you will be charged the updated price."
|
1310 |
-
msgstr ""
|
1311 |
|
1312 |
-
#: templates/account.
|
1313 |
#: templates/account/partials/addon.php:31
|
1314 |
-
msgid ""
|
1315 |
-
"Cancelling the trial will immediately block access to all premium features. "
|
1316 |
-
"Are you sure?"
|
1317 |
-
msgstr ""
|
1318 |
|
1319 |
-
#: templates/account.
|
1320 |
#: templates/account/partials/addon.php32,
|
1321 |
-
#: templates/account/partials/site.php:
|
1322 |
-
msgid ""
|
1323 |
-
"You can still enjoy all %s features but you will not have access to %s "
|
1324 |
-
"security & feature updates, nor support."
|
1325 |
-
msgstr ""
|
1326 |
|
1327 |
-
#: templates/account.
|
1328 |
#: templates/account/partials/addon.php33,
|
1329 |
-
#: templates/account/partials/site.php:
|
1330 |
-
msgid ""
|
1331 |
-
"Once your license expires you can still use the Free version but you will "
|
1332 |
-
"NOT have access to the %s features."
|
1333 |
-
msgstr ""
|
1334 |
|
1335 |
#. translators: %s: Plan title (e.g. "Professional")
|
1336 |
-
#: templates/account.
|
1337 |
#: templates/account/partials/activate-license-button.php31,
|
1338 |
#: templates/account/partials/addon.php:35
|
1339 |
msgid "Activate %s Plan"
|
1340 |
msgstr "Aktiver %s plan"
|
1341 |
|
1342 |
#. translators: %s: Time period (e.g. Auto renews in "2 months")
|
1343 |
-
#: templates/account.
|
1344 |
-
#: templates/account/partials/site.php:
|
1345 |
msgid "Auto renews in %s"
|
1346 |
msgstr "Auto-fornyer om %s"
|
1347 |
|
1348 |
#. translators: %s: Time period (e.g. Expires in "2 months")
|
1349 |
-
#: templates/account.
|
1350 |
-
#: templates/account/partials/site.php:
|
1351 |
msgid "Expires in %s"
|
1352 |
msgstr "Udløber om %s"
|
1353 |
|
1354 |
-
#: templates/account.
|
1355 |
msgctxt "as synchronize license"
|
1356 |
msgid "Sync License"
|
1357 |
msgstr "Synkroniser licens"
|
1358 |
|
1359 |
-
#: templates/account.
|
1360 |
msgid "Cancel Trial"
|
1361 |
msgstr "Annuller prøveperiode"
|
1362 |
|
1363 |
-
#: templates/account.
|
1364 |
msgid "Change Plan"
|
1365 |
msgstr "Skift plan"
|
1366 |
|
1367 |
-
#: templates/account.
|
1368 |
msgctxt "verb"
|
1369 |
msgid "Upgrade"
|
1370 |
msgstr "Opgrader"
|
1371 |
|
1372 |
-
#: templates/account.
|
1373 |
-
#: templates/account/partials/site.php:
|
1374 |
msgctxt "verb"
|
1375 |
msgid "Downgrade"
|
1376 |
msgstr "Nedgrader"
|
1377 |
|
1378 |
-
#: templates/account.
|
1379 |
#: templates/plugin-info/features.php72,
|
1380 |
-
#: templates/account/partials/addon.
|
1381 |
-
#: templates/account/partials/site.php:
|
1382 |
msgid "Free"
|
1383 |
msgstr "Gratis"
|
1384 |
|
1385 |
-
#: templates/account.
|
1386 |
-
#: includes/customizer/class-fs-customizer-upsell-control.
|
1387 |
-
#: templates/account/partials/addon.php:
|
1388 |
msgctxt "as product pricing plan"
|
1389 |
msgid "Plan"
|
1390 |
msgstr "Plan"
|
1391 |
|
1392 |
-
#: templates/account.php:
|
1393 |
msgid "Bundle Plan"
|
1394 |
-
msgstr ""
|
1395 |
|
1396 |
-
#: templates/account.php:
|
1397 |
msgid "Free Trial"
|
1398 |
msgstr "Gratis prøveperiode"
|
1399 |
|
1400 |
-
#: templates/account.php:
|
1401 |
msgid "Account Details"
|
1402 |
msgstr "Kontodetaljer"
|
1403 |
|
1404 |
-
#: templates/account.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1405 |
msgid "Billing & Invoices"
|
1406 |
-
msgstr ""
|
1407 |
|
1408 |
-
#: templates/account.php:
|
1409 |
-
msgid ""
|
1410 |
-
"Deleting the account will automatically deactivate your %s plan license so "
|
1411 |
-
"you can use it on other sites. If you want to terminate the recurring "
|
1412 |
-
"payments as well, click the \"Cancel\" button, and first \"Downgrade\" your "
|
1413 |
-
"account. Are you sure you would like to continue with the deletion?"
|
1414 |
-
msgstr ""
|
1415 |
|
1416 |
-
#: templates/account.php:
|
1417 |
-
msgid ""
|
1418 |
-
"Deletion is not temporary. Only delete if you no longer want to use this %s "
|
1419 |
-
"anymore. Are you sure you would like to continue with the deletion?"
|
1420 |
-
msgstr ""
|
1421 |
|
1422 |
-
#: templates/account.php:
|
1423 |
msgid "Delete Account"
|
1424 |
msgstr "Slet konto"
|
1425 |
|
1426 |
-
#: templates/account.
|
1427 |
#: templates/account/partials/deactivate-license-button.php:35
|
1428 |
msgid "Deactivate License"
|
1429 |
msgstr "Deaktiver licens"
|
1430 |
|
1431 |
-
#: templates/account.
|
1432 |
msgid "Are you sure you want to proceed?"
|
1433 |
msgstr "Er du sikker på, du vil fortsætte?"
|
1434 |
|
1435 |
-
#: templates/account.
|
1436 |
msgid "Cancel Subscription"
|
1437 |
msgstr "Annuller abonnement"
|
1438 |
|
1439 |
-
#: templates/account.php:
|
1440 |
msgctxt "as synchronize"
|
1441 |
msgid "Sync"
|
1442 |
msgstr "Synkroniser"
|
1443 |
|
1444 |
-
#: templates/account.
|
1445 |
msgid "Name"
|
1446 |
msgstr "Navn"
|
1447 |
|
1448 |
-
#: templates/account.
|
1449 |
msgid "Email"
|
1450 |
msgstr "E-mail"
|
1451 |
|
1452 |
-
#: templates/account.
|
1453 |
msgid "User ID"
|
1454 |
msgstr "Bruger-ID"
|
1455 |
|
1456 |
-
#: templates/account.
|
1457 |
-
#: templates/account.
|
1458 |
-
#: templates/debug.
|
1459 |
-
#: templates/debug.
|
1460 |
#: templates/debug/logger.php:21
|
1461 |
msgid "ID"
|
1462 |
msgstr "ID"
|
1463 |
|
1464 |
-
#: templates/account.php:
|
1465 |
msgid "Site ID"
|
1466 |
msgstr "Websteds-ID"
|
1467 |
|
1468 |
-
#: templates/account.php:
|
1469 |
msgid "No ID"
|
1470 |
msgstr "Intet ID"
|
1471 |
|
1472 |
-
#: templates/account.
|
1473 |
-
#: templates/debug.
|
1474 |
-
#: templates/account/partials/site.php:
|
1475 |
msgid "Public Key"
|
1476 |
msgstr "Offentlig nøgle"
|
1477 |
|
1478 |
-
#: templates/account.
|
1479 |
-
#: templates/debug.
|
1480 |
msgid "Secret Key"
|
1481 |
msgstr "Privat nøgle"
|
1482 |
|
1483 |
-
#: templates/account.php:
|
1484 |
msgctxt "as secret encryption key missing"
|
1485 |
msgid "No Secret"
|
1486 |
msgstr "Ingen privat nøgle"
|
1487 |
|
1488 |
-
#: templates/account.
|
1489 |
-
#: templates/account/partials/site.php:
|
1490 |
msgid "Trial"
|
1491 |
msgstr "Prøveperiode"
|
1492 |
|
1493 |
-
#: templates/account.
|
1494 |
-
#: templates/account/partials/site.php:
|
1495 |
msgid "License Key"
|
1496 |
msgstr "Licensnøgle"
|
1497 |
|
1498 |
-
#: templates/account.php:
|
1499 |
msgid "Join the Beta program"
|
1500 |
-
msgstr ""
|
1501 |
|
1502 |
-
#: templates/account.php:
|
1503 |
msgid "not verified"
|
1504 |
msgstr "ikke verificeret"
|
1505 |
|
1506 |
-
#: templates/account.
|
1507 |
msgid "Expired"
|
1508 |
msgstr "Udløbet"
|
1509 |
|
1510 |
-
#: templates/account.php:
|
1511 |
msgid "Premium version"
|
1512 |
msgstr "Premium version"
|
1513 |
|
1514 |
-
#: templates/account.php:
|
1515 |
msgid "Free version"
|
1516 |
msgstr "Gratis version"
|
1517 |
|
1518 |
-
#: templates/account.php:
|
1519 |
msgid "Verify Email"
|
1520 |
msgstr "Verificer e-mail"
|
1521 |
|
1522 |
-
#: templates/account.php:
|
1523 |
msgid "Download %s Version"
|
1524 |
msgstr "Download 1%s version"
|
1525 |
|
1526 |
-
#: templates/account.
|
1527 |
-
#: templates/account/partials/site.
|
1528 |
-
#: templates/account/partials/site.php:
|
1529 |
msgctxt "verb"
|
1530 |
msgid "Show"
|
1531 |
msgstr "Vis"
|
1532 |
|
1533 |
-
#: templates/account.php:
|
1534 |
msgid "What is your %s?"
|
1535 |
msgstr "Angiv venligst %s?"
|
1536 |
|
1537 |
-
#: templates/account.
|
1538 |
msgctxt "verb"
|
1539 |
msgid "Edit"
|
1540 |
msgstr "Rediger"
|
1541 |
|
1542 |
-
#: templates/account.php:
|
1543 |
msgid "Sites"
|
1544 |
msgstr "Websteder"
|
1545 |
|
1546 |
-
#: templates/account.php:
|
1547 |
msgid "Search by address"
|
1548 |
msgstr "Søg efter adresse"
|
1549 |
|
1550 |
-
#: templates/account.
|
1551 |
msgid "Address"
|
1552 |
msgstr "Adresse"
|
1553 |
|
1554 |
-
#: templates/account.php:
|
1555 |
msgid "License"
|
1556 |
msgstr "Licens"
|
1557 |
|
1558 |
-
#: templates/account.php:
|
1559 |
msgid "Plan"
|
1560 |
msgstr "Plan"
|
1561 |
|
1562 |
-
#: templates/account.php:
|
1563 |
msgctxt "as software license"
|
1564 |
msgid "License"
|
1565 |
msgstr "Licens"
|
1566 |
|
1567 |
-
#: templates/account.php:
|
1568 |
msgctxt "verb"
|
1569 |
msgid "Hide"
|
1570 |
msgstr "Skjul"
|
1571 |
|
1572 |
-
#: templates/account.php:
|
1573 |
msgid "Processing"
|
1574 |
msgstr "Arbejder"
|
1575 |
|
1576 |
-
#: templates/account.php:
|
1577 |
msgid "Get updates for bleeding edge Beta versions of %s."
|
1578 |
-
msgstr ""
|
1579 |
|
1580 |
-
#: templates/account.php:
|
1581 |
msgid "Cancelling %s"
|
1582 |
-
msgstr ""
|
1583 |
|
1584 |
-
#: templates/account.
|
1585 |
#: templates/forms/subscription-cancellation.php27,
|
1586 |
#: templates/forms/deactivation/form.php:133
|
1587 |
msgid "trial"
|
1588 |
-
msgstr ""
|
1589 |
|
1590 |
-
#: templates/account.
|
1591 |
msgid "Cancelling %s..."
|
1592 |
-
msgstr ""
|
1593 |
|
1594 |
-
#: templates/account.
|
1595 |
#: templates/forms/deactivation/form.php:134
|
1596 |
msgid "subscription"
|
1597 |
-
msgstr ""
|
1598 |
|
1599 |
-
#: templates/account.php:
|
1600 |
-
msgid ""
|
1601 |
-
"Deactivating your license will block all premium features, but will enable "
|
1602 |
-
"activating the license on another site. Are you sure you want to proceed?"
|
1603 |
-
msgstr ""
|
1604 |
|
1605 |
-
#: templates/add-ons.php:
|
1606 |
msgid "View details"
|
1607 |
msgstr "Vis detaljer"
|
1608 |
|
1609 |
-
#: templates/add-ons.php:
|
1610 |
msgid "Add Ons for %s"
|
1611 |
msgstr "Tilføjelser til %s"
|
1612 |
|
1613 |
-
#: templates/add-ons.php:
|
1614 |
-
msgid ""
|
1615 |
-
"We
|
1616 |
-
"please try to come back in few minutes."
|
1617 |
-
msgstr ""
|
1618 |
|
1619 |
-
#: templates/add-ons.php:
|
1620 |
msgctxt "active add-on"
|
1621 |
msgid "Active"
|
1622 |
msgstr "Aktiv"
|
1623 |
|
1624 |
-
#: templates/add-ons.php:
|
1625 |
msgctxt "installed add-on"
|
1626 |
msgid "Installed"
|
1627 |
-
msgstr ""
|
1628 |
|
1629 |
-
#: templates/admin-notice.php13, templates/forms/license-activation.
|
1630 |
#: templates/forms/resend-key.php:77
|
1631 |
msgctxt "as close a window"
|
1632 |
msgid "Dismiss"
|
@@ -1641,17 +1529,12 @@ msgid "Automatic Installation"
|
|
1641 |
msgstr "Automatisk installering"
|
1642 |
|
1643 |
#: templates/auto-installation.php:93
|
1644 |
-
msgid ""
|
1645 |
-
"An automated download and installation of %s (paid version) from %s will "
|
1646 |
-
"start in %s. If you would like to do it manually - click the cancellation "
|
1647 |
-
"button now."
|
1648 |
-
msgstr ""
|
1649 |
|
1650 |
#: templates/auto-installation.php:104
|
1651 |
-
msgid ""
|
1652 |
-
"The installation process has started and may take a few minutes to complete."
|
1653 |
-
" Please wait until it is done - do not refresh this page."
|
1654 |
-
msgstr ""
|
1655 |
|
1656 |
#: templates/auto-installation.php:109
|
1657 |
msgid "Cancel Installation"
|
@@ -1663,7 +1546,7 @@ msgstr "Udtjekning"
|
|
1663 |
|
1664 |
#: templates/checkout.php:180
|
1665 |
msgid "PCI compliant"
|
1666 |
-
msgstr ""
|
1667 |
|
1668 |
#. translators: %s: name (e.g. Hey John,)
|
1669 |
#: templates/connect.php:112
|
@@ -1683,80 +1566,60 @@ msgstr "Gensend e-mail om aktivering"
|
|
1683 |
msgid "Thanks %s!"
|
1684 |
msgstr "Tak %s!"
|
1685 |
|
1686 |
-
#: templates/connect.php172, templates/forms/license-activation.php:
|
1687 |
msgid "Agree & Activate License"
|
1688 |
msgstr "Accepter & aktiver licens"
|
1689 |
|
1690 |
#: templates/connect.php:181
|
1691 |
-
msgid ""
|
1692 |
-
"Thanks for purchasing %s! To get started, please enter your license key:"
|
1693 |
msgstr "Tak for at købe %s! For at komme i gang, venligst indtast din licensnøgle:"
|
1694 |
|
1695 |
#: templates/connect.php:188
|
1696 |
-
msgid ""
|
1697 |
-
"
|
1698 |
-
"notifications, educational content, offers, and non-sensitive diagnostic "
|
1699 |
-
"tracking with %4$s."
|
1700 |
-
msgstr ""
|
1701 |
|
1702 |
#: templates/connect.php:189
|
1703 |
-
msgid ""
|
1704 |
-
"
|
1705 |
-
"notifications, and non-sensitive diagnostic tracking with %4$s."
|
1706 |
-
msgstr ""
|
1707 |
|
1708 |
#: templates/connect.php:195
|
1709 |
-
msgid ""
|
1710 |
-
"
|
1711 |
-
"notifications, educational content, offers, and non-sensitive diagnostic "
|
1712 |
-
"tracking with %4$s. If you skip this, that's okay! %1$s will still work just"
|
1713 |
-
" fine."
|
1714 |
-
msgstr ""
|
1715 |
|
1716 |
#: templates/connect.php:196
|
1717 |
-
msgid ""
|
1718 |
-
"
|
1719 |
-
"notifications, and non-sensitive diagnostic tracking with %4$s. If you skip "
|
1720 |
-
"this, that's okay! %1$s will still work just fine."
|
1721 |
-
msgstr ""
|
1722 |
|
1723 |
#: templates/connect.php:230
|
1724 |
msgid "We're excited to introduce the Freemius network-level integration."
|
1725 |
-
msgstr ""
|
1726 |
|
1727 |
#: templates/connect.php:233
|
1728 |
-
msgid ""
|
1729 |
-
"During the update process we detected %d site(s) that are still pending "
|
1730 |
-
"license activation."
|
1731 |
-
msgstr ""
|
1732 |
|
1733 |
#: templates/connect.php:235
|
1734 |
-
msgid ""
|
1735 |
-
"If you'd like to use the %s on those sites, please enter your license key "
|
1736 |
-
"below and click the activation button."
|
1737 |
-
msgstr ""
|
1738 |
|
1739 |
#: templates/connect.php:237
|
1740 |
msgid "%s's paid features"
|
1741 |
-
msgstr ""
|
1742 |
|
1743 |
#: templates/connect.php:242
|
1744 |
-
msgid ""
|
1745 |
-
"Alternatively, you can skip it for now and activate the license later, in "
|
1746 |
-
"your %s's network-level Account page."
|
1747 |
-
msgstr ""
|
1748 |
|
1749 |
#: templates/connect.php:244
|
1750 |
-
msgid ""
|
1751 |
-
"During the update process we detected %s site(s) in the network that are "
|
1752 |
-
"still pending your attention."
|
1753 |
-
msgstr ""
|
1754 |
|
1755 |
-
#: templates/connect.php253, templates/forms/
|
|
|
1756 |
msgid "License key"
|
1757 |
msgstr "Licensnøgle"
|
1758 |
|
1759 |
-
#: templates/connect.php256, templates/forms/license-activation.php:
|
1760 |
msgid "Can't find your license key?"
|
1761 |
msgstr "Kan du ikke finde din licensnøgle?"
|
1762 |
|
@@ -1768,13 +1631,11 @@ msgstr "Spring over"
|
|
1768 |
|
1769 |
#: templates/connect.php:318
|
1770 |
msgid "Delegate to Site Admins"
|
1771 |
-
msgstr ""
|
1772 |
|
1773 |
#: templates/connect.php:318
|
1774 |
-
msgid ""
|
1775 |
-
"If you click it, this decision will be delegated to the sites "
|
1776 |
-
"administrators."
|
1777 |
-
msgstr ""
|
1778 |
|
1779 |
#: templates/connect.php:346
|
1780 |
msgid "Your Profile Overview"
|
@@ -1798,11 +1659,11 @@ msgstr "Admin-meddelelser"
|
|
1798 |
|
1799 |
#: templates/connect.php359, templates/connect.php:375
|
1800 |
msgid "Updates, announcements, marketing, no spam"
|
1801 |
-
msgstr ""
|
1802 |
|
1803 |
#: templates/connect.php:364
|
1804 |
msgid "Current %s Events"
|
1805 |
-
msgstr ""
|
1806 |
|
1807 |
#: templates/connect.php:365
|
1808 |
msgid "Activation, deactivation and uninstall"
|
@@ -1812,11 +1673,9 @@ msgstr "Aktivering, deaktivering og afinstallering"
|
|
1812 |
msgid "Newsletter"
|
1813 |
msgstr "Nyhedsbrev"
|
1814 |
|
1815 |
-
#: templates/connect.php391, templates/forms/license-activation.php:
|
1816 |
-
msgid ""
|
1817 |
-
"The %1$s will be periodically sending data to %2$s to check for security and"
|
1818 |
-
" feature updates, and verify the validity of your license."
|
1819 |
-
msgstr ""
|
1820 |
|
1821 |
#: templates/connect.php:396
|
1822 |
msgid "What permissions are being granted?"
|
@@ -1836,7 +1695,7 @@ msgstr "Privatlivspolitik"
|
|
1836 |
|
1837 |
#: templates/connect.php:430
|
1838 |
msgid "License Agreement"
|
1839 |
-
msgstr ""
|
1840 |
|
1841 |
#: templates/connect.php:430
|
1842 |
msgid "Terms of Service"
|
@@ -1876,7 +1735,7 @@ msgid "Debugging"
|
|
1876 |
msgstr "Fejlfinding"
|
1877 |
|
1878 |
#: templates/debug.php54, templates/debug.php250, templates/debug.php376,
|
1879 |
-
#: templates/debug.php:
|
1880 |
msgid "Actions"
|
1881 |
msgstr "Handlinger"
|
1882 |
|
@@ -1894,7 +1753,7 @@ msgstr "Ryd API-cache"
|
|
1894 |
|
1895 |
#: templates/debug.php:79
|
1896 |
msgid "Clear Updates Transients"
|
1897 |
-
msgstr ""
|
1898 |
|
1899 |
#: templates/debug.php:86
|
1900 |
msgid "Sync Data From Server"
|
@@ -1902,7 +1761,7 @@ msgstr "Synkroniser data fra server"
|
|
1902 |
|
1903 |
#: templates/debug.php:95
|
1904 |
msgid "Migrate Options to Network"
|
1905 |
-
msgstr ""
|
1906 |
|
1907 |
#: templates/debug.php:100
|
1908 |
msgid "Load DB Option"
|
@@ -1945,12 +1804,12 @@ msgstr "Plugins"
|
|
1945 |
msgid "Themes"
|
1946 |
msgstr "Temaer"
|
1947 |
|
1948 |
-
#: templates/debug.php239, templates/debug.
|
1949 |
#: templates/debug/scheduled-crons.php:80
|
1950 |
msgid "Slug"
|
1951 |
msgstr "Kortnavn"
|
1952 |
|
1953 |
-
#: templates/debug.php241, templates/debug.php:
|
1954 |
msgid "Title"
|
1955 |
msgstr "Titel"
|
1956 |
|
@@ -1983,126 +1842,130 @@ msgstr "Blokeret"
|
|
1983 |
|
1984 |
#: templates/debug.php:322
|
1985 |
msgid "Simulate Trial Promotion"
|
1986 |
-
msgstr ""
|
1987 |
|
1988 |
#: templates/debug.php:334
|
1989 |
msgid "Simulate Network Upgrade"
|
1990 |
msgstr "Simuler netværksopgradering"
|
1991 |
|
1992 |
-
#: templates/debug.php:
|
1993 |
msgid "%s Installs"
|
1994 |
msgstr "%s installeringer"
|
1995 |
|
1996 |
-
#: templates/debug.php:
|
1997 |
msgctxt "like websites"
|
1998 |
msgid "Sites"
|
1999 |
msgstr "Websteder"
|
2000 |
|
2001 |
-
#: templates/debug.
|
2002 |
msgid "Blog ID"
|
2003 |
msgstr "Blog-ID"
|
2004 |
|
2005 |
-
#: templates/debug.
|
2006 |
-
|
|
|
|
|
|
|
|
|
2007 |
msgctxt "verb"
|
2008 |
msgid "Delete"
|
2009 |
msgstr "Slet"
|
2010 |
|
2011 |
-
#: templates/debug.php:
|
2012 |
msgid "Add Ons of module %s"
|
2013 |
msgstr "Tilføjelser til modul %s"
|
2014 |
|
2015 |
-
#: templates/debug.php:
|
2016 |
msgid "Users"
|
2017 |
msgstr "Brugere"
|
2018 |
|
2019 |
-
#: templates/debug.php:
|
2020 |
msgid "Verified"
|
2021 |
msgstr "Verificeret"
|
2022 |
|
2023 |
-
#: templates/debug.php:
|
2024 |
msgid "%s Licenses"
|
2025 |
msgstr "1%s licenser"
|
2026 |
|
2027 |
-
#: templates/debug.php:
|
2028 |
msgid "Plugin ID"
|
2029 |
msgstr "Plugin-ID"
|
2030 |
|
2031 |
-
#: templates/debug.php:
|
2032 |
msgid "Plan ID"
|
2033 |
msgstr "Plan-ID"
|
2034 |
|
2035 |
-
#: templates/debug.php:
|
2036 |
msgid "Quota"
|
2037 |
msgstr "Kvote"
|
2038 |
|
2039 |
-
#: templates/debug.php:
|
2040 |
msgid "Activated"
|
2041 |
msgstr "Aktiveret"
|
2042 |
|
2043 |
-
#: templates/debug.php:
|
2044 |
msgid "Blocking"
|
2045 |
msgstr "Blokerer"
|
2046 |
|
2047 |
-
#: templates/debug.php:
|
2048 |
msgctxt "as expiration date"
|
2049 |
msgid "Expiration"
|
2050 |
msgstr "Udløber"
|
2051 |
|
2052 |
-
#: templates/debug.php:
|
2053 |
msgid "Debug Log"
|
2054 |
msgstr "Fejlfindingslog"
|
2055 |
|
2056 |
-
#: templates/debug.php:
|
2057 |
msgid "All Types"
|
2058 |
msgstr "Alle typer"
|
2059 |
|
2060 |
-
#: templates/debug.php:
|
2061 |
msgid "All Requests"
|
2062 |
msgstr "Alle forespørgsler"
|
2063 |
|
2064 |
-
#: templates/debug.
|
2065 |
#: templates/debug/logger.php:25
|
2066 |
msgid "File"
|
2067 |
msgstr "Fil"
|
2068 |
|
2069 |
-
#: templates/debug.
|
2070 |
#: templates/debug/logger.php:23
|
2071 |
msgid "Function"
|
2072 |
msgstr "Funktion"
|
2073 |
|
2074 |
-
#: templates/debug.php:
|
2075 |
msgid "Process ID"
|
2076 |
msgstr "Proces-ID"
|
2077 |
|
2078 |
-
#: templates/debug.php:
|
2079 |
msgid "Logger"
|
2080 |
msgstr "Logger"
|
2081 |
|
2082 |
-
#: templates/debug.
|
2083 |
#: templates/debug/logger.php:24
|
2084 |
msgid "Message"
|
2085 |
msgstr "Besked"
|
2086 |
|
2087 |
-
#: templates/debug.php:
|
2088 |
msgid "Filter"
|
2089 |
msgstr "Filter"
|
2090 |
|
2091 |
-
#: templates/debug.php:
|
2092 |
msgid "Download"
|
2093 |
msgstr "Download"
|
2094 |
|
2095 |
-
#: templates/debug.
|
2096 |
msgid "Type"
|
2097 |
msgstr "Type"
|
2098 |
|
2099 |
-
#: templates/debug.
|
2100 |
msgid "Timestamp"
|
2101 |
msgstr "Tidsstempel"
|
2102 |
|
2103 |
#: templates/secure-https-header.php:28
|
2104 |
msgid "Secure HTTPS %s page, running from an external domain"
|
2105 |
-
msgstr ""
|
2106 |
|
2107 |
#: includes/customizer/class-fs-customizer-support-section.php55,
|
2108 |
#: templates/plugin-info/features.php:43
|
@@ -2121,7 +1984,7 @@ msgstr "Freemius API"
|
|
2121 |
|
2122 |
#: includes/debug/debug-bar-start.php:42
|
2123 |
msgid "Requests"
|
2124 |
-
msgstr ""
|
2125 |
|
2126 |
#: templates/account/billing.php:22
|
2127 |
msgctxt "verb"
|
@@ -2212,7 +2075,7 @@ msgstr "Sti"
|
|
2212 |
|
2213 |
#: templates/debug/api-calls.php:73
|
2214 |
msgid "Body"
|
2215 |
-
msgstr ""
|
2216 |
|
2217 |
#: templates/debug/api-calls.php:75
|
2218 |
msgid "Result"
|
@@ -2287,46 +2150,35 @@ msgstr "Udløber ikke"
|
|
2287 |
|
2288 |
#: templates/forms/affiliation.php:85
|
2289 |
msgid "Apply to become an affiliate"
|
2290 |
-
msgstr ""
|
2291 |
|
2292 |
#: templates/forms/affiliation.php:104
|
2293 |
-
msgid ""
|
2294 |
-
"Your affiliate application for %s has been accepted! Log in to your "
|
2295 |
-
"affiliate area at: %s."
|
2296 |
-
msgstr ""
|
2297 |
|
2298 |
#: templates/forms/affiliation.php:119
|
2299 |
-
msgid ""
|
2300 |
-
"Thank you for applying for our affiliate program, we'll review your details "
|
2301 |
-
"during the next 14 days and will get back to you with further information."
|
2302 |
-
msgstr ""
|
2303 |
|
2304 |
#: templates/forms/affiliation.php:122
|
2305 |
msgid "Your affiliation account was temporarily suspended."
|
2306 |
-
msgstr ""
|
2307 |
|
2308 |
#: templates/forms/affiliation.php:125
|
2309 |
-
msgid ""
|
2310 |
-
"Thank you for applying for our affiliate program, unfortunately, we've "
|
2311 |
-
"decided at this point to reject your application. Please try again in 30 "
|
2312 |
-
"days."
|
2313 |
-
msgstr ""
|
2314 |
|
2315 |
#: templates/forms/affiliation.php:128
|
2316 |
-
msgid ""
|
2317 |
-
"Due to violation of our affiliation terms, we decided to temporarily block "
|
2318 |
-
"your affiliation account. If you have any questions, please contact support."
|
2319 |
-
msgstr ""
|
2320 |
|
2321 |
#: templates/forms/affiliation.php:141
|
2322 |
msgid "Like the %s? Become our ambassador and earn cash ;-)"
|
2323 |
-
msgstr ""
|
2324 |
|
2325 |
#: templates/forms/affiliation.php:142
|
2326 |
-
msgid ""
|
2327 |
-
"Refer new customers to our %s and earn %s commission on each successful sale"
|
2328 |
-
" you refer!"
|
2329 |
-
msgstr ""
|
2330 |
|
2331 |
#: templates/forms/affiliation.php:145
|
2332 |
msgid "Program Summary"
|
@@ -2334,34 +2186,31 @@ msgstr "Programoversigt"
|
|
2334 |
|
2335 |
#: templates/forms/affiliation.php:147
|
2336 |
msgid "%s commission when a customer purchases a new license."
|
2337 |
-
msgstr ""
|
2338 |
|
2339 |
#: templates/forms/affiliation.php:149
|
2340 |
msgid "Get commission for automated subscription renewals."
|
2341 |
-
msgstr ""
|
2342 |
|
2343 |
#: templates/forms/affiliation.php:152
|
2344 |
-
msgid ""
|
2345 |
-
"%s tracking cookie after the first visit to maximize earnings potential."
|
2346 |
-
msgstr ""
|
2347 |
|
2348 |
#: templates/forms/affiliation.php:155
|
2349 |
msgid "Unlimited commissions."
|
2350 |
-
msgstr ""
|
2351 |
|
2352 |
#: templates/forms/affiliation.php:157
|
2353 |
msgid "%s minimum payout amount."
|
2354 |
-
msgstr ""
|
2355 |
|
2356 |
#: templates/forms/affiliation.php:158
|
2357 |
msgid "Payouts are in USD and processed monthly via PayPal."
|
2358 |
-
msgstr ""
|
2359 |
|
2360 |
#: templates/forms/affiliation.php:159
|
2361 |
-
msgid ""
|
2362 |
-
"As we reserve 30 days for potential refunds, we only pay commissions that "
|
2363 |
-
"are older than 30 days."
|
2364 |
-
msgstr ""
|
2365 |
|
2366 |
#: templates/forms/affiliation.php:162
|
2367 |
msgid "Affiliate"
|
@@ -2384,10 +2233,8 @@ msgid "Where are you going to promote the %s?"
|
|
2384 |
msgstr "Hvor vil du promovere %s?"
|
2385 |
|
2386 |
#: templates/forms/affiliation.php:179
|
2387 |
-
msgid ""
|
2388 |
-
"Enter the domain of your website or other websites from where you plan to "
|
2389 |
-
"promote the %s."
|
2390 |
-
msgstr ""
|
2391 |
|
2392 |
#: templates/forms/affiliation.php:181
|
2393 |
msgid "Add another domain"
|
@@ -2418,21 +2265,16 @@ msgid "Website, email, and social media statistics (optional)"
|
|
2418 |
msgstr "Websted, e-mail, og statistikker for sociale medier (valgfrit)"
|
2419 |
|
2420 |
#: templates/forms/affiliation.php:210
|
2421 |
-
msgid ""
|
2422 |
-
"Please feel free to provide any relevant website or social media statistics,"
|
2423 |
-
" e.g. monthly unique site visits, number of email subscribers, followers, "
|
2424 |
-
"etc. (we will keep this information confidential)."
|
2425 |
-
msgstr ""
|
2426 |
|
2427 |
#: templates/forms/affiliation.php:214
|
2428 |
msgid "How will you promote us?"
|
2429 |
msgstr "Hvordan vil du promovere os?"
|
2430 |
|
2431 |
#: templates/forms/affiliation.php:217
|
2432 |
-
msgid ""
|
2433 |
-
"Please provide details on how you intend to promote %s (please be as "
|
2434 |
-
"specific as possible)."
|
2435 |
-
msgstr ""
|
2436 |
|
2437 |
#: templates/forms/affiliation.php223, templates/forms/resend-key.php:22
|
2438 |
msgid "Cancel"
|
@@ -2442,13 +2284,27 @@ msgstr "Annuller"
|
|
2442 |
msgid "Become an affiliate"
|
2443 |
msgstr "Bliv en affiliate"
|
2444 |
|
2445 |
-
#: templates/forms/
|
2446 |
-
msgid ""
|
2447 |
-
"Please enter the license key
|
2448 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2449 |
msgstr "Indtast licensnøglen, du modtog i e-mailen lige efter købet:"
|
2450 |
|
2451 |
-
#: templates/forms/license-activation.php:
|
2452 |
msgid "Update License"
|
2453 |
msgstr "Opdater licens"
|
2454 |
|
@@ -2463,16 +2319,11 @@ msgid "Opt In"
|
|
2463 |
msgstr "Tilmeld"
|
2464 |
|
2465 |
#: templates/forms/optout.php:33
|
2466 |
-
msgid ""
|
2467 |
-
"Usage tracking is done in the name of making %s better. Making a better user"
|
2468 |
-
" experience, prioritizing new features, and more good things. We'd really "
|
2469 |
-
"appreciate if you'll reconsider letting us continue with the tracking."
|
2470 |
-
msgstr ""
|
2471 |
|
2472 |
#: templates/forms/optout.php:35
|
2473 |
-
msgid ""
|
2474 |
-
"By clicking \"Opt Out\", we will no longer be sending any data from %s to "
|
2475 |
-
"%s."
|
2476 |
msgstr "Ved at klikke \"Frameld\" vil vi ikke længere sende data fra %s til %s."
|
2477 |
|
2478 |
#: templates/forms/premium-versions-upgrade-handler.php:40
|
@@ -2481,7 +2332,7 @@ msgstr "En ny version af %s er tilgængelig."
|
|
2481 |
|
2482 |
#: templates/forms/premium-versions-upgrade-handler.php:41
|
2483 |
msgid " %s to access version %s security & feature updates, and support."
|
2484 |
-
msgstr ""
|
2485 |
|
2486 |
#: templates/forms/premium-versions-upgrade-handler.php:54
|
2487 |
msgid "New Version Available"
|
@@ -2497,81 +2348,53 @@ msgid "Send License Key"
|
|
2497 |
msgstr "Send licensnøgle"
|
2498 |
|
2499 |
#: templates/forms/resend-key.php:57
|
2500 |
-
msgid ""
|
2501 |
-
"Enter the email address you've used for the upgrade below and we will resend"
|
2502 |
-
" you the license key."
|
2503 |
msgstr "Indtast e-mailadressen, som du benyttede ved opgraderingen, nedenfor og vi vil gensende licensnøglen til dig."
|
2504 |
|
2505 |
#: templates/forms/subscription-cancellation.php:37
|
2506 |
-
msgid ""
|
2507 |
-
"Deactivating or uninstalling the %s will automatically disable the license, "
|
2508 |
-
"which you'll be able to use on another site."
|
2509 |
-
msgstr ""
|
2510 |
|
2511 |
#: templates/forms/subscription-cancellation.php:47
|
2512 |
-
msgid ""
|
2513 |
-
"In case you are NOT planning on using this %s on this site (or any other "
|
2514 |
-
"site) - would you like to cancel the %s as well?"
|
2515 |
-
msgstr ""
|
2516 |
|
2517 |
#: templates/forms/subscription-cancellation.php:52
|
2518 |
msgid "license"
|
2519 |
-
msgstr ""
|
2520 |
|
2521 |
#: templates/forms/subscription-cancellation.php:57
|
2522 |
-
msgid ""
|
2523 |
-
"Cancel %s - I no longer need any security & feature updates, nor support for"
|
2524 |
-
" %s because I'm not planning to use the %s on this, or any other site."
|
2525 |
-
msgstr ""
|
2526 |
|
2527 |
#: templates/forms/subscription-cancellation.php:68
|
2528 |
-
msgid ""
|
2529 |
-
"Don't cancel %s - I'm still interested in getting security & feature "
|
2530 |
-
"updates, as well as be able to contact support."
|
2531 |
-
msgstr ""
|
2532 |
-
|
2533 |
-
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the
|
2534 |
-
#. subscription'
|
2535 |
-
#: templates/forms/subscription-cancellation.php99,
|
2536 |
-
#: templates/account/partials/addon.php29,
|
2537 |
-
#: templates/account/partials/site.php:298
|
2538 |
-
msgid ""
|
2539 |
-
"%1$s will immediately stop all future recurring payments and your %s plan "
|
2540 |
-
"license will expire in %s."
|
2541 |
-
msgstr ""
|
2542 |
|
2543 |
#: templates/forms/subscription-cancellation.php:103
|
2544 |
-
msgid ""
|
2545 |
-
"Once your license expires you will no longer be able to use the %s, unless "
|
2546 |
-
"you activate it again with a valid premium license."
|
2547 |
-
msgstr ""
|
2548 |
|
2549 |
#: templates/forms/subscription-cancellation.php:136
|
2550 |
msgid "Cancel %s?"
|
2551 |
-
msgstr ""
|
2552 |
|
2553 |
#: templates/forms/subscription-cancellation.php:143
|
2554 |
msgid "Proceed"
|
2555 |
-
msgstr ""
|
2556 |
|
2557 |
#: templates/forms/subscription-cancellation.php191,
|
2558 |
#: templates/forms/deactivation/form.php:171
|
2559 |
msgid "Cancel %s & Proceed"
|
2560 |
-
msgstr ""
|
2561 |
|
2562 |
#: templates/forms/trial-start.php:22
|
2563 |
-
msgid ""
|
2564 |
-
"You are 1-click away from starting your %1$s-day free trial of the %2$s "
|
2565 |
-
"plan."
|
2566 |
msgstr "Du er 1 klik fra at begynde din %1$s dages gratis prøveperiode af planen %2$s."
|
2567 |
|
2568 |
#: templates/forms/trial-start.php:28
|
2569 |
-
msgid ""
|
2570 |
-
"For compliance with the WordPress.org guidelines, before we start the trial "
|
2571 |
-
"we ask that you opt in with your user and non-sensitive site information, "
|
2572 |
-
"allowing the %s to periodically send data to %s to check for version updates"
|
2573 |
-
" and to validate your trial."
|
2574 |
-
msgstr ""
|
2575 |
|
2576 |
#: templates/js/style-premium-theme.php:39
|
2577 |
msgid "Premium"
|
@@ -2579,7 +2402,7 @@ msgstr "Premium"
|
|
2579 |
|
2580 |
#: templates/js/style-premium-theme.php:42
|
2581 |
msgid "Beta"
|
2582 |
-
msgstr ""
|
2583 |
|
2584 |
#: templates/partials/network-activation.php:27
|
2585 |
msgid "Activate license on all sites in the network."
|
@@ -2634,33 +2457,38 @@ msgstr "%s tilbage"
|
|
2634 |
msgid "Last license"
|
2635 |
msgstr "Seneste license"
|
2636 |
|
2637 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2638 |
msgid "Cancelled"
|
2639 |
msgstr "Annulleret"
|
2640 |
|
2641 |
-
#: templates/account/partials/addon.php:
|
2642 |
msgid "No expiration"
|
2643 |
msgstr "Udløber ikke"
|
2644 |
|
2645 |
-
#: templates/account/partials/site.php:
|
2646 |
msgid "Owner Name"
|
2647 |
msgstr "Ejer-navn"
|
2648 |
|
2649 |
-
#: templates/account/partials/site.php:
|
2650 |
msgid "Owner Email"
|
2651 |
msgstr "E-mailadresse for ejer"
|
2652 |
|
2653 |
-
#: templates/account/partials/site.php:
|
2654 |
msgid "Owner ID"
|
2655 |
msgstr "Ejer-ID"
|
2656 |
|
2657 |
-
#: templates/account/partials/site.php:
|
2658 |
msgid "Subscription"
|
2659 |
msgstr "Abonnement"
|
2660 |
|
2661 |
#: templates/forms/deactivation/contact.php:19
|
2662 |
-
msgid ""
|
2663 |
-
"Sorry for the inconvenience and we are here to help if you give us a chance."
|
2664 |
msgstr "Vi beklager ulejligheden, og vi er her for at hjælpe, hvis du giver os chancen."
|
2665 |
|
2666 |
#: templates/forms/deactivation/contact.php:22
|
@@ -2681,7 +2509,7 @@ msgstr "Aktiver %s"
|
|
2681 |
|
2682 |
#: templates/forms/deactivation/form.php:87
|
2683 |
msgid "Quick Feedback"
|
2684 |
-
msgstr ""
|
2685 |
|
2686 |
#: templates/forms/deactivation/form.php:91
|
2687 |
msgid "If you have a moment, please let us know why you are %s"
|
@@ -2716,7 +2544,5 @@ msgid "Click here to use the plugin anonymously"
|
|
2716 |
msgstr "Klik her for at benytte pluginnet anonymt"
|
2717 |
|
2718 |
#: templates/forms/deactivation/retry-skip.php:23
|
2719 |
-
msgid ""
|
2720 |
-
"You might have missed it, but you don't have to share any data and can just "
|
2721 |
-
"%s the opt-in."
|
2722 |
msgstr "Du har måske overset det, men du behøver ikke at dele data og kan blot %s tilmeldingen."
|
1 |
+
# Copyright (C) 2019 freemius
|
2 |
+
# This file is distributed under the same license as the freemius package.
|
3 |
+
# Translators:
|
4 |
+
# Joachim Jensen, 2019
|
5 |
+
# Joachim Jensen, 2016-2018
|
6 |
+
# Lars Koudal, 2018-2019
|
7 |
msgid ""
|
8 |
msgstr ""
|
9 |
+
"Project-Id-Version: WordPress SDK\n"
|
10 |
+
"Report-Msgid-Bugs-To: https://github.com/Freemius/wordpress-sdk/issues\n"
|
11 |
"POT-Creation-Date: \n"
|
12 |
+
"PO-Revision-Date: 2019-10-07 15:33+0000\n"
|
13 |
+
"Last-Translator: Vova Feldman <vova@freemius.com>\n"
|
14 |
+
"Language: da_DK\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
"Language-Team: Danish (Denmark) (http://www.transifex.com/freemius/wordpress-sdk/language/da_DK/)\n"
|
|
|
16 |
"Content-Type: text/plain; charset=UTF-8\n"
|
17 |
"Content-Transfer-Encoding: 8bit\n"
|
|
|
18 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
19 |
+
"MIME-Version: 1.0\n"
|
20 |
"X-Poedit-Basepath: ..\n"
|
21 |
"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"
|
22 |
"X-Poedit-SearchPath-0: .\n"
|
23 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
24 |
"X-Poedit-SourceCharset: UTF-8\n"
|
25 |
|
26 |
+
#: includes/class-freemius.php1880, templates/account.php:840
|
27 |
+
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."
|
28 |
+
msgstr "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."
|
|
|
|
|
|
|
29 |
|
30 |
+
#: includes/class-freemius.php:1887
|
31 |
msgid "Would you like to proceed with the update?"
|
32 |
+
msgstr "Vil du fortsætte med opdateringen?"
|
33 |
|
34 |
+
#: includes/class-freemius.php:2095
|
35 |
+
msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
|
36 |
+
msgstr "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
|
|
|
|
|
37 |
|
38 |
+
#: includes/class-freemius.php:2097
|
39 |
msgid "Error"
|
40 |
msgstr "Fejl"
|
41 |
|
42 |
+
#: includes/class-freemius.php:2491
|
43 |
msgid "I found a better %s"
|
44 |
msgstr "Jeg fandt et bedre %s"
|
45 |
|
46 |
+
#: includes/class-freemius.php:2493
|
47 |
msgid "What's the %s's name?"
|
48 |
msgstr "Hvad er navnet på %s?"
|
49 |
|
50 |
+
#: includes/class-freemius.php:2499
|
51 |
msgid "It's a temporary %s. I'm just debugging an issue."
|
52 |
msgstr "Det er en midlertidig %s. Jeg er i gang med fejlrettelser."
|
53 |
|
54 |
+
#: includes/class-freemius.php:2501
|
55 |
msgid "Deactivation"
|
56 |
msgstr "Deaktivering"
|
57 |
|
58 |
+
#: includes/class-freemius.php:2502
|
59 |
msgid "Theme Switch"
|
60 |
msgstr "Temaskift"
|
61 |
|
62 |
+
#: includes/class-freemius.php2511, templates/forms/resend-key.php:24
|
63 |
msgid "Other"
|
64 |
msgstr "Andet"
|
65 |
|
66 |
+
#: includes/class-freemius.php:2519
|
67 |
msgid "I no longer need the %s"
|
68 |
msgstr "Jeg har ikke længere brug for %s"
|
69 |
|
70 |
+
#: includes/class-freemius.php:2526
|
71 |
msgid "I only needed the %s for a short period"
|
72 |
msgstr "Jeg behøvede kun %s i en kort periode"
|
73 |
|
74 |
+
#: includes/class-freemius.php:2532
|
75 |
msgid "The %s broke my site"
|
76 |
msgstr "%s ødelagde min webside"
|
77 |
|
78 |
+
#: includes/class-freemius.php:2539
|
79 |
msgid "The %s suddenly stopped working"
|
80 |
msgstr "%s stoppede pludseligt med at virke"
|
81 |
|
82 |
+
#: includes/class-freemius.php:2549
|
83 |
msgid "I can't pay for it anymore"
|
84 |
msgstr "Jeg kan ikke længere betale for det"
|
85 |
|
86 |
+
#: includes/class-freemius.php:2551
|
87 |
msgid "What price would you feel comfortable paying?"
|
88 |
msgstr "Hvilken pris ville du foretrække at betale?"
|
89 |
|
90 |
+
#: includes/class-freemius.php:2557
|
91 |
msgid "I don't like to share my information with you"
|
92 |
msgstr "Jeg har ikke lyst til at dele mine informationer med jer"
|
93 |
|
94 |
+
#: includes/class-freemius.php:2578
|
95 |
msgid "The %s didn't work"
|
96 |
msgstr "%s virkede ikke"
|
97 |
|
98 |
+
#: includes/class-freemius.php:2588
|
99 |
msgid "I couldn't understand how to make it work"
|
100 |
msgstr "Jeg forstod ikke, hvordan jeg skulle få det til at fungere."
|
101 |
|
102 |
+
#: includes/class-freemius.php:2596
|
103 |
msgid "The %s is great, but I need specific feature that you don't support"
|
104 |
msgstr "%s er godt, men jeg har brug for en specifik feature, som ikke understøttes"
|
105 |
|
106 |
+
#: includes/class-freemius.php:2598
|
107 |
msgid "What feature?"
|
108 |
msgstr "Hvilken feature?"
|
109 |
|
110 |
+
#: includes/class-freemius.php:2602
|
111 |
msgid "The %s is not working"
|
112 |
msgstr "%s virker ikke"
|
113 |
|
114 |
+
#: includes/class-freemius.php:2604
|
115 |
msgid "Kindly share what didn't work so we can fix it for future users..."
|
116 |
+
msgstr "Vær venlig at dele hvad der ikke virkede så vi kan rette det for kommende brugere...."
|
117 |
|
118 |
+
#: includes/class-freemius.php:2608
|
119 |
msgid "It's not what I was looking for"
|
120 |
msgstr "Det er ikke, hvad jeg søgte"
|
121 |
|
122 |
+
#: includes/class-freemius.php:2610
|
123 |
msgid "What you've been looking for?"
|
124 |
+
msgstr "Hvad ledte du efter?"
|
125 |
|
126 |
+
#: includes/class-freemius.php:2614
|
127 |
msgid "The %s didn't work as expected"
|
128 |
msgstr "%s virkede ikke som forventet"
|
129 |
|
130 |
+
#: includes/class-freemius.php:2616
|
131 |
msgid "What did you expect?"
|
132 |
msgstr "Hvad forventede du?"
|
133 |
|
134 |
+
#: includes/class-freemius.php3471, templates/debug.php:20
|
135 |
msgid "Freemius Debug"
|
136 |
msgstr "Freemius Debug"
|
137 |
|
138 |
+
#: includes/class-freemius.php:4223
|
139 |
msgid "I don't know what is cURL or how to install it, help me!"
|
140 |
msgstr "Jeg ved ikke hvad cURL er, eller hvordan jeg installerer det. Hjælp mig!"
|
141 |
|
142 |
+
#: includes/class-freemius.php:4225
|
143 |
+
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."
|
|
|
|
|
144 |
msgstr "Vi vil kontakte din udbyder og løse problemet. Når vi har opdatinger i sagen, vil vi følge op med en email til dig på %s."
|
145 |
|
146 |
+
#: includes/class-freemius.php:4232
|
147 |
+
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."
|
148 |
+
msgstr "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."
|
|
|
|
|
|
|
|
|
|
|
149 |
|
150 |
+
#: includes/class-freemius.php:4337
|
151 |
msgid "Yes - do your thing"
|
152 |
msgstr "Ja - fortsæt bare"
|
153 |
|
154 |
+
#: includes/class-freemius.php:4342
|
155 |
msgid "No - just deactivate"
|
156 |
msgstr "Nej - bare deaktiver"
|
157 |
|
158 |
+
#: includes/class-freemius.php4387, includes/class-freemius.php4881,
|
159 |
+
#: includes/class-freemius.php6032, includes/class-freemius.php13153,
|
160 |
+
#: includes/class-freemius.php16558, includes/class-freemius.php16646,
|
161 |
+
#: includes/class-freemius.php16812, includes/class-freemius.php19040,
|
162 |
+
#: includes/class-freemius.php19381, includes/class-freemius.php19391,
|
163 |
+
#: includes/class-freemius.php20051, includes/class-freemius.php20924,
|
164 |
+
#: includes/class-freemius.php21039, includes/class-freemius.php21183,
|
165 |
+
#: templates/add-ons.php:57
|
166 |
msgctxt "exclamation"
|
167 |
msgid "Oops"
|
168 |
msgstr "Ups"
|
169 |
|
170 |
+
#: includes/class-freemius.php:4456
|
171 |
+
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."
|
|
|
|
|
|
|
172 |
msgstr "Tak fordi du giver os en chance for at fixe det! En besked er lige blevet sendt til vores tekniske personale. Vi vil vende tilbage, så snart der er nyt om %s. Vi sætter pris på din tålmodighed."
|
173 |
|
174 |
+
#: includes/class-freemius.php:4878
|
175 |
msgctxt "addonX cannot run without pluginY"
|
176 |
msgid "%s cannot run without %s."
|
177 |
msgstr "%s virker ikke uden %s."
|
178 |
|
179 |
+
#: includes/class-freemius.php:4879
|
180 |
msgctxt "addonX cannot run..."
|
181 |
msgid "%s cannot run without the plugin."
|
182 |
msgstr "%s virker ikke uden pluginnet."
|
183 |
|
184 |
+
#: includes/class-freemius.php5052, includes/class-freemius.php5077,
|
185 |
+
#: includes/class-freemius.php:20122
|
186 |
+
msgid "Unexpected API error. Please contact the %s's author with the following error."
|
187 |
+
msgstr "Uventet API-fejl. Kontakt %s's forfatter med følgende fejl."
|
|
|
|
|
188 |
|
189 |
+
#: includes/class-freemius.php:5720
|
190 |
msgid "Premium %s version was successfully activated."
|
191 |
msgstr "Premium-versionen af %s blev aktiveret."
|
192 |
|
193 |
+
#: includes/class-freemius.php5732, includes/class-freemius.php:7599
|
194 |
msgctxt ""
|
|
|
|
|
195 |
msgid "W00t"
|
196 |
msgstr "W00t"
|
197 |
|
198 |
+
#: includes/class-freemius.php:5747
|
199 |
msgid "You have a %s license."
|
200 |
msgstr "Du har en %s licens."
|
201 |
|
202 |
+
#: includes/class-freemius.php5751, includes/class-freemius.php15975,
|
203 |
+
#: includes/class-freemius.php15986, includes/class-freemius.php19292,
|
204 |
+
#: includes/class-freemius.php19642, includes/class-freemius.php19711,
|
205 |
+
#: includes/class-freemius.php:19876
|
206 |
msgctxt "interjection expressing joy or exuberance"
|
207 |
msgid "Yee-haw"
|
208 |
msgstr "Yee-haw"
|
209 |
|
210 |
+
#: includes/class-freemius.php:6015
|
211 |
+
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."
|
212 |
+
msgstr "%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."
|
|
|
|
|
|
|
213 |
|
214 |
+
#: includes/class-freemius.php:6019
|
215 |
+
msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
216 |
+
msgstr "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
|
|
|
|
217 |
|
218 |
+
#: includes/class-freemius.php6028, templates/add-ons.php186,
|
219 |
+
#: templates/account/partials/addon.php:381
|
220 |
msgid "More information about %s"
|
221 |
msgstr "Mere information om %s"
|
222 |
|
223 |
+
#: includes/class-freemius.php:6029
|
224 |
msgid "Purchase License"
|
225 |
msgstr "Køb licens"
|
226 |
|
227 |
+
#: includes/class-freemius.php6964, templates/connect.php:163
|
228 |
+
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."
|
229 |
+
msgstr "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."
|
|
|
|
|
230 |
|
231 |
+
#: includes/class-freemius.php:6968
|
232 |
msgid "start the trial"
|
233 |
msgstr "start prøveperioden"
|
234 |
|
235 |
+
#: includes/class-freemius.php6969, templates/connect.php:167
|
236 |
msgid "complete the install"
|
237 |
msgstr "færdiggør installeringen"
|
238 |
|
239 |
+
#: includes/class-freemius.php:7081
|
240 |
msgid "You are just one step away - %s"
|
241 |
msgstr "Du mangler kun ét skridt - %s"
|
242 |
|
243 |
+
#: includes/class-freemius.php:7084
|
244 |
msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
|
245 |
msgid "Complete \"%s\" Activation Now"
|
246 |
msgstr "Færdiggør aktivering af \"%s\" nu"
|
247 |
|
248 |
+
#: includes/class-freemius.php:7162
|
249 |
msgid "We made a few tweaks to the %s, %s"
|
250 |
msgstr "Vi har foretaget nogle rettelser til %s, %s"
|
251 |
|
252 |
+
#: includes/class-freemius.php:7166
|
253 |
msgid "Opt in to make \"%s\" better!"
|
254 |
+
msgstr "Accepter for at gøre \"%s\" bedre!"
|
255 |
|
256 |
+
#: includes/class-freemius.php:7598
|
257 |
msgid "The upgrade of %s was successfully completed."
|
258 |
msgstr "Opgraderingen af %s blev fuldendt."
|
259 |
|
260 |
+
#: includes/class-freemius.php9802, includes/class-fs-plugin-updater.php1038,
|
261 |
+
#: includes/class-fs-plugin-updater.php1233,
|
262 |
+
#: includes/class-fs-plugin-updater.php1240,
|
263 |
#: templates/auto-installation.php:32
|
264 |
msgid "Add-On"
|
265 |
msgstr "Tilføjelse"
|
266 |
|
267 |
+
#: includes/class-freemius.php9804, templates/account.php335,
|
268 |
+
#: templates/account.php343, templates/debug.php360, templates/debug.php:551
|
269 |
msgid "Plugin"
|
270 |
msgstr "Plugin"
|
271 |
|
272 |
+
#: includes/class-freemius.php9805, templates/account.php336,
|
273 |
+
#: templates/account.php344, templates/debug.php360, templates/debug.php551,
|
274 |
#: templates/forms/deactivation/form.php:71
|
275 |
msgid "Theme"
|
276 |
msgstr "Tema"
|
277 |
|
278 |
+
#: includes/class-freemius.php:12596
|
279 |
+
msgid "An unknown error has occurred while trying to set the user's beta mode."
|
280 |
+
msgstr "An unknown error has occurred while trying to set the user's beta mode."
|
|
|
281 |
|
282 |
+
#: includes/class-freemius.php:13020
|
283 |
msgid "Invalid site details collection."
|
284 |
+
msgstr "Invalid site details collection."
|
285 |
|
286 |
+
#: includes/class-freemius.php:13140
|
287 |
+
msgid "We couldn't find your email address in the system, are you sure it's the right address?"
|
|
|
|
|
288 |
msgstr "Vi kunne ikke finde din e-mailadresse i systemet, er du sikker på, det er den rigtige adresse?"
|
289 |
|
290 |
+
#: includes/class-freemius.php:13142
|
291 |
+
msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
|
|
|
|
292 |
msgstr "Vi kan ikke finde nogen aktive licenser knyttet til den e-mailadresse, er du sikker på, det er den rigtige adresse?"
|
293 |
|
294 |
+
#: includes/class-freemius.php:13416
|
295 |
msgid "Account is pending activation."
|
296 |
msgstr "Konto afventer aktivering."
|
297 |
|
298 |
+
#: includes/class-freemius.php13528,
|
299 |
#: templates/forms/premium-versions-upgrade-handler.php:47
|
300 |
msgid "Buy a license now"
|
301 |
+
msgstr "Køb en licens nu"
|
302 |
|
303 |
+
#: includes/class-freemius.php13540,
|
304 |
#: templates/forms/premium-versions-upgrade-handler.php:46
|
305 |
msgid "Renew your license now"
|
306 |
+
msgstr "Forny din licens nu"
|
307 |
|
308 |
+
#: includes/class-freemius.php:13544
|
309 |
msgid "%s to access version %s security & feature updates, and support."
|
310 |
+
msgstr "%s to access version %s security & feature updates, and support."
|
311 |
|
312 |
+
#: includes/class-freemius.php:15957
|
313 |
msgid "%s activation was successfully completed."
|
314 |
msgstr "Aktivering af %s blev gennemført."
|
315 |
|
316 |
+
#: includes/class-freemius.php:15971
|
317 |
msgid "Your account was successfully activated with the %s plan."
|
318 |
msgstr "Din konto blev aktiveret med planen %s."
|
319 |
|
320 |
+
#: includes/class-freemius.php15982, includes/class-freemius.php:19707
|
321 |
msgid "Your trial has been successfully started."
|
322 |
msgstr "Din prøveperiode er begyndt."
|
323 |
|
324 |
+
#: includes/class-freemius.php16556, includes/class-freemius.php16644,
|
325 |
+
#: includes/class-freemius.php:16810
|
326 |
msgid "Couldn't activate %s."
|
327 |
msgstr "Kunne ikke aktivere %s."
|
328 |
|
329 |
+
#: includes/class-freemius.php16557, includes/class-freemius.php16645,
|
330 |
+
#: includes/class-freemius.php:16811
|
331 |
msgid "Please contact us with the following message:"
|
332 |
msgstr "Kontakt os venligst med følgende besked:"
|
333 |
|
334 |
+
#: includes/class-freemius.php16641, templates/forms/data-debug-mode.php:162
|
335 |
msgid "An unknown error has occurred."
|
336 |
+
msgstr "Der skete en ukendt fejl."
|
337 |
|
338 |
+
#: includes/class-freemius.php17168, includes/class-freemius.php:22082
|
339 |
msgid "Upgrade"
|
340 |
msgstr "Opgrader"
|
341 |
|
342 |
+
#: includes/class-freemius.php:17174
|
343 |
msgid "Start Trial"
|
344 |
msgstr "Start prøveperiode"
|
345 |
|
346 |
+
#: includes/class-freemius.php:17176
|
347 |
msgid "Pricing"
|
348 |
msgstr "Priser"
|
349 |
|
350 |
+
#: includes/class-freemius.php17256, includes/class-freemius.php:17258
|
351 |
msgid "Affiliation"
|
352 |
msgstr "Affiliation"
|
353 |
|
354 |
+
#: includes/class-freemius.php17286, includes/class-freemius.php17288,
|
355 |
+
#: templates/account.php183, templates/debug.php:326
|
356 |
msgid "Account"
|
357 |
msgstr "Konto"
|
358 |
|
359 |
+
#: includes/class-freemius.php17302, includes/class-freemius.php17304,
|
360 |
#: includes/customizer/class-fs-customizer-support-section.php:60
|
361 |
msgid "Contact Us"
|
362 |
msgstr "Kontakt os"
|
363 |
|
364 |
+
#: includes/class-freemius.php17315, includes/class-freemius.php17317,
|
365 |
+
#: includes/class-freemius.php22096, templates/account.php111,
|
366 |
+
#: templates/account/partials/addon.php:44
|
367 |
msgid "Add-Ons"
|
368 |
msgstr "Tilføjelser"
|
369 |
|
370 |
+
#: includes/class-freemius.php:17351
|
371 |
msgctxt "ASCII arrow left icon"
|
372 |
msgid "←"
|
373 |
+
msgstr "←"
|
374 |
|
375 |
+
#: includes/class-freemius.php:17351
|
376 |
msgctxt "ASCII arrow right icon"
|
377 |
msgid "➤"
|
378 |
+
msgstr "➤"
|
379 |
|
380 |
+
#: includes/class-freemius.php17353, templates/pricing.php:103
|
381 |
msgctxt "noun"
|
382 |
msgid "Pricing"
|
383 |
msgstr "Priser"
|
384 |
|
385 |
+
#: includes/class-freemius.php17566,
|
386 |
#: includes/customizer/class-fs-customizer-support-section.php:67
|
387 |
msgid "Support Forum"
|
388 |
msgstr "Supportforum"
|
389 |
|
390 |
+
#: includes/class-freemius.php:18536
|
391 |
msgid "Your email has been successfully verified - you are AWESOME!"
|
392 |
msgstr "Din e-mailadresse er blevet verificeret - du er FOR SEJ!"
|
393 |
|
394 |
+
#: includes/class-freemius.php:18537
|
395 |
msgctxt "a positive response"
|
396 |
msgid "Right on"
|
397 |
msgstr "Sådan"
|
398 |
|
399 |
+
#: includes/class-freemius.php:19041
|
400 |
+
msgid "seems like the key you entered doesn't match our records."
|
401 |
+
msgstr "seems like the key you entered doesn't match our records."
|
402 |
+
|
403 |
+
#: includes/class-freemius.php:19065
|
404 |
+
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."
|
405 |
+
msgstr "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."
|
406 |
+
|
407 |
+
#: includes/class-freemius.php:19283
|
408 |
msgid "Your %s Add-on plan was successfully upgraded."
|
409 |
+
msgstr "Your %s Add-on plan was successfully upgraded."
|
410 |
|
411 |
+
#: includes/class-freemius.php:19285
|
412 |
msgid "%s Add-on was successfully purchased."
|
413 |
msgstr "Betalingen for tilføjelsen %s blev gennemført."
|
414 |
|
415 |
+
#: includes/class-freemius.php:19288
|
416 |
msgid "Download the latest version"
|
417 |
msgstr "Download den seneste version"
|
418 |
|
419 |
+
#: includes/class-freemius.php:19374
|
420 |
+
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"
|
421 |
+
msgstr "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
|
|
|
|
|
422 |
|
423 |
+
#: includes/class-freemius.php19380, includes/class-freemius.php19390,
|
424 |
+
#: includes/class-freemius.php19835, includes/class-freemius.php:19924
|
425 |
msgid "Error received from the server:"
|
426 |
msgstr "Fejl modtager fra serveren:"
|
427 |
|
428 |
+
#: includes/class-freemius.php:19390
|
429 |
+
msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
430 |
+
msgstr "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
|
|
|
|
431 |
|
432 |
+
#: includes/class-freemius.php19604, includes/class-freemius.php19840,
|
433 |
+
#: includes/class-freemius.php19895, includes/class-freemius.php:19998
|
434 |
msgctxt ""
|
|
|
|
|
435 |
msgid "Hmm"
|
436 |
msgstr "Hmm"
|
437 |
|
438 |
+
#: includes/class-freemius.php:19617
|
439 |
+
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."
|
440 |
+
msgstr "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."
|
|
|
|
|
441 |
|
442 |
+
#: includes/class-freemius.php19618, templates/account.php113,
|
443 |
+
#: templates/add-ons.php250, templates/account/partials/addon.php:46
|
444 |
msgctxt "trial period"
|
445 |
msgid "Trial"
|
446 |
msgstr "Prøveperiode"
|
447 |
|
448 |
+
#: includes/class-freemius.php:19623
|
449 |
+
msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
|
|
|
|
450 |
msgstr "Jeg har opgraderet min konto, men når jeg forsøger at synkronisere licensen, forbliver planen %s."
|
451 |
|
452 |
+
#: includes/class-freemius.php19627, includes/class-freemius.php:19686
|
453 |
msgid "Please contact us here"
|
454 |
msgstr "Kontakt os her"
|
455 |
|
456 |
+
#: includes/class-freemius.php:19638
|
457 |
msgid "Your plan was successfully activated."
|
458 |
+
msgstr "Din plan er blevet aktiveret."
|
459 |
|
460 |
+
#: includes/class-freemius.php:19639
|
461 |
msgid "Your plan was successfully upgraded."
|
462 |
msgstr "Din plan er blevet opgraderet."
|
463 |
|
464 |
+
#: includes/class-freemius.php:19656
|
465 |
msgid "Your plan was successfully changed to %s."
|
466 |
msgstr "Din plan er blevet ændret til %s."
|
467 |
|
468 |
+
#: includes/class-freemius.php:19672
|
469 |
+
msgid "Your license has expired. You can still continue using the free %s forever."
|
|
|
470 |
msgstr "Din licens er udløbet. Du kan stadig fortsætte med at benytte den gratis udgave af %s."
|
471 |
|
472 |
+
#: includes/class-freemius.php:19674
|
473 |
+
msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
|
|
|
|
474 |
msgstr "Din licens er udløbet. %1$sOpgrader nu%2$s for at fortsætte med at benytte %3$s uden forstyrrelser."
|
475 |
|
476 |
+
#: includes/class-freemius.php:19682
|
477 |
+
msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
|
|
|
|
|
478 |
msgstr "Din licens er blevet annulleret. Hvis du mener, dette er en fejl, så kontakt venligst support."
|
479 |
|
480 |
+
#: includes/class-freemius.php:19695
|
481 |
+
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."
|
|
|
|
|
|
|
482 |
msgstr "Din licens er udløbet. Du kan stadig benytte alle funktionerne i %s, men du bliver nødt til at fornye din licens for at få opdateringer og support."
|
483 |
|
484 |
+
#: includes/class-freemius.php:19721
|
485 |
+
msgid "Your free trial has expired. You can still continue using all our free features."
|
|
|
|
|
486 |
msgstr "Din gratis prøveperiode er udløbet. Du kan stadig benytte alle de gratis features."
|
487 |
|
488 |
+
#: includes/class-freemius.php:19723
|
489 |
+
msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
490 |
+
msgstr "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
|
|
|
|
491 |
|
492 |
+
#: includes/class-freemius.php:19831
|
493 |
msgid "It looks like the license could not be activated."
|
494 |
msgstr "Det ser ud til, at licensen ikke kunne aktiveres."
|
495 |
|
496 |
+
#: includes/class-freemius.php:19873
|
497 |
msgid "Your license was successfully activated."
|
498 |
msgstr "Din licens er blevet aktiveret."
|
499 |
|
500 |
+
#: includes/class-freemius.php:19899
|
501 |
msgid "It looks like your site currently doesn't have an active license."
|
502 |
msgstr "Det ser ud til, at dit websted endnu ikke har en aktiv licens."
|
503 |
|
504 |
+
#: includes/class-freemius.php:19923
|
505 |
msgid "It looks like the license deactivation failed."
|
506 |
msgstr "Det ser ud til, at licens-deaktiveringen mislykkedes."
|
507 |
|
508 |
+
#: includes/class-freemius.php:19951
|
509 |
+
msgid "Your license was successfully deactivated, you are back to the %s plan."
|
|
|
510 |
msgstr "Din licens blev deaktiveret, du er tilbage på planen %s."
|
511 |
|
512 |
+
#: includes/class-freemius.php:19952
|
513 |
msgid "O.K"
|
514 |
msgstr "O.K"
|
515 |
|
516 |
+
#: includes/class-freemius.php:20005
|
517 |
+
msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
|
518 |
+
msgstr "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
|
|
|
|
|
519 |
|
520 |
+
#: includes/class-freemius.php:20014
|
521 |
+
msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
|
522 |
+
msgstr "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
|
|
|
|
|
523 |
|
524 |
+
#: includes/class-freemius.php:20056
|
525 |
msgid "You are already running the %s in a trial mode."
|
526 |
msgstr "Du benytter allerede %s under en prøveperiode."
|
527 |
|
528 |
+
#: includes/class-freemius.php:20067
|
529 |
msgid "You already utilized a trial before."
|
530 |
msgstr "Du har allerede brugt din prøveperiode."
|
531 |
|
532 |
+
#: includes/class-freemius.php:20081
|
533 |
msgid "Plan %s do not exist, therefore, can't start a trial."
|
534 |
msgstr "Plan %s eksisterer ikke og kan derfor ikke starte prøveperiode."
|
535 |
|
536 |
+
#: includes/class-freemius.php:20092
|
537 |
msgid "Plan %s does not support a trial period."
|
538 |
msgstr "Plan %s understøtter ikke en prøveperiode."
|
539 |
|
540 |
+
#: includes/class-freemius.php:20103
|
541 |
msgid "None of the %s's plans supports a trial period."
|
542 |
+
msgstr "Ingen af %s's planer understøtter prøveperiode."
|
543 |
|
544 |
+
#: includes/class-freemius.php:20153
|
545 |
+
msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
|
|
|
|
|
546 |
msgstr "Det lader ikke til du er i en prøveperiode længere, så der er ikke noget at annullere :-)"
|
547 |
|
548 |
+
#: includes/class-freemius.php:20189
|
549 |
+
msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
|
550 |
+
msgstr "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
|
|
|
|
|
551 |
|
552 |
+
#: includes/class-freemius.php:20208
|
553 |
msgid "Your %s free trial was successfully cancelled."
|
554 |
msgstr "Din gratis prøveperiode for %s er blevet annulleret."
|
555 |
|
556 |
+
#: includes/class-freemius.php:20524
|
557 |
msgid "Version %s was released."
|
558 |
msgstr "Version %s er blevet udgivet."
|
559 |
|
560 |
+
#: includes/class-freemius.php:20524
|
561 |
msgid "Please download %s."
|
562 |
msgstr "Download venligst %s."
|
563 |
|
564 |
+
#: includes/class-freemius.php:20531
|
565 |
msgid "the latest %s version here"
|
566 |
msgstr "den seneste version af %s her"
|
567 |
|
568 |
+
#: includes/class-freemius.php:20536
|
569 |
msgid "New"
|
570 |
msgstr "Ny"
|
571 |
|
572 |
+
#: includes/class-freemius.php:20541
|
573 |
msgid "Seems like you got the latest release."
|
574 |
msgstr "Det ser ud til, at du har den seneste udgivelse."
|
575 |
|
576 |
+
#: includes/class-freemius.php:20542
|
577 |
msgid "You are all good!"
|
578 |
msgstr "Det var det!"
|
579 |
|
580 |
+
#: includes/class-freemius.php:20812
|
581 |
+
msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
|
582 |
+
msgstr "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
|
|
|
|
|
583 |
|
584 |
+
#: includes/class-freemius.php:20951
|
585 |
msgid "Site successfully opted in."
|
586 |
msgstr "Websted er tilmeldt."
|
587 |
|
588 |
+
#: includes/class-freemius.php20952, includes/class-freemius.php:21792
|
589 |
msgid "Awesome"
|
590 |
msgstr "Sejt"
|
591 |
|
592 |
+
#: includes/class-freemius.php20968, templates/forms/optout.php:32
|
593 |
+
msgid "We appreciate your help in making the %s better by letting us track some usage data."
|
|
|
|
|
594 |
msgstr "Vi sætter pris på din hjælp med at forbedre %s ved at lade os indsamle brugsdata."
|
595 |
|
596 |
+
#: includes/class-freemius.php:20969
|
597 |
msgid "Thank you!"
|
598 |
msgstr "Mange tak!"
|
599 |
|
600 |
+
#: includes/class-freemius.php:20976
|
601 |
msgid "We will no longer be sending any usage data of %s on %s to %s."
|
602 |
msgstr "Vi vil ikke længere indsende brugsdata af %s på %s til %s."
|
603 |
|
604 |
+
#: includes/class-freemius.php:21105
|
605 |
+
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."
|
606 |
+
msgstr "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."
|
|
|
|
|
|
|
|
|
607 |
|
608 |
+
#: includes/class-freemius.php:21111
|
609 |
+
msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
|
610 |
+
msgstr "Tak fordi du bekræftede skift af ejerskab. En e-mail er blevet sendt til %s for sidste godkendelse."
|
|
|
|
|
611 |
|
612 |
+
#: includes/class-freemius.php:21116
|
613 |
msgid "%s is the new owner of the account."
|
614 |
msgstr "%s er den nye ejer af kontoen."
|
615 |
|
616 |
+
#: includes/class-freemius.php:21118
|
617 |
msgctxt "as congratulations"
|
618 |
msgid "Congrats"
|
619 |
msgstr "Tillykke"
|
620 |
|
621 |
+
#: includes/class-freemius.php:21138
|
622 |
+
msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
|
623 |
+
msgstr "Beklager, vi kunne ikke opdatere e-mailen. Der er allerede registreret en anden bruger med samme e-mail."
|
|
|
|
|
624 |
|
625 |
+
#: includes/class-freemius.php:21139
|
626 |
+
msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
|
627 |
+
msgstr "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
|
|
|
|
|
628 |
|
629 |
+
#: includes/class-freemius.php:21146
|
630 |
msgid "Change Ownership"
|
631 |
msgstr "Skift ejerskab"
|
632 |
|
633 |
+
#: includes/class-freemius.php:21154
|
634 |
+
msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
|
635 |
+
msgstr "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
|
|
|
|
|
636 |
|
637 |
+
#: includes/class-freemius.php:21166
|
638 |
msgid "Please provide your full name."
|
639 |
msgstr "Indtast venligst dit fulde navn."
|
640 |
|
641 |
+
#: includes/class-freemius.php:21171
|
642 |
msgid "Your name was successfully updated."
|
643 |
msgstr "Dit navn er blevet opdateret."
|
644 |
|
645 |
+
#: includes/class-freemius.php:21232
|
646 |
msgid "You have successfully updated your %s."
|
647 |
msgstr "Opdatering af %s blev gennemført."
|
648 |
|
649 |
+
#: includes/class-freemius.php:21372
|
650 |
+
msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
|
651 |
+
msgstr "Just letting you know that the add-ons information of %s is being pulled from an external server."
|
|
|
|
|
652 |
|
653 |
+
#: includes/class-freemius.php:21373
|
654 |
msgctxt "advance notice of something that will need attention."
|
655 |
msgid "Heads up"
|
656 |
msgstr "Se her"
|
657 |
|
658 |
+
#: includes/class-freemius.php:21832
|
659 |
msgctxt "exclamation"
|
660 |
msgid "Hey"
|
661 |
msgstr "Hey"
|
662 |
|
663 |
+
#: includes/class-freemius.php:21832
|
664 |
+
msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
|
665 |
+
msgstr "Hvad synes du om %s indtil videre? Test alle vores premium funktioner i %s med en %d-dags gratis prøveperiode."
|
|
|
|
|
666 |
|
667 |
+
#: includes/class-freemius.php:21840
|
668 |
msgid "No commitment for %s days - cancel anytime!"
|
669 |
msgstr "Ingen bindinger i %s dage - annuller når som helst!"
|
670 |
|
671 |
+
#: includes/class-freemius.php:21841
|
672 |
msgid "No credit card required"
|
673 |
msgstr "Betalingskort ikke påkrævet"
|
674 |
|
675 |
+
#: includes/class-freemius.php21848, templates/forms/trial-start.php:53
|
676 |
msgctxt "call to action"
|
677 |
msgid "Start free trial"
|
678 |
msgstr "Start gratis prøveperiode"
|
679 |
|
680 |
+
#: includes/class-freemius.php:21925
|
681 |
+
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!"
|
682 |
+
msgstr "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!"
|
|
|
|
|
683 |
|
684 |
+
#: includes/class-freemius.php:21934
|
685 |
msgid "Learn more"
|
686 |
msgstr "Læs mere"
|
687 |
|
688 |
+
#: includes/class-freemius.php22120, templates/account.php499,
|
689 |
+
#: templates/account.php624, templates/connect.php171,
|
690 |
+
#: templates/connect.php421, templates/forms/license-activation.php27,
|
691 |
+
#: templates/account/partials/addon.php:321
|
692 |
msgid "Activate License"
|
693 |
msgstr "Aktiver licens"
|
694 |
|
695 |
+
#: includes/class-freemius.php22121, templates/account.php571,
|
696 |
+
#: templates/account.php623, templates/account/partials/addon.php322,
|
697 |
+
#: templates/account/partials/site.php:271
|
698 |
msgid "Change License"
|
699 |
msgstr "Skift licens"
|
700 |
|
701 |
+
#: includes/class-freemius.php22217, templates/account/partials/site.php:169
|
702 |
msgid "Opt Out"
|
703 |
msgstr "Frameld"
|
704 |
|
705 |
+
#: includes/class-freemius.php22219, includes/class-freemius.php22225,
|
706 |
+
#: templates/account/partials/site.php49,
|
707 |
+
#: templates/account/partials/site.php:169
|
708 |
msgid "Opt In"
|
709 |
msgstr "Tilmeld"
|
710 |
|
711 |
+
#: includes/class-freemius.php:22453
|
712 |
+
msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
|
713 |
+
msgstr " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
|
|
|
|
|
714 |
|
715 |
+
#: includes/class-freemius.php:22461
|
716 |
msgid "Activate %s features"
|
717 |
+
msgstr "Aktiver funktioner i %s"
|
718 |
|
719 |
+
#: includes/class-freemius.php:22474
|
720 |
msgid "Please follow these steps to complete the upgrade"
|
721 |
msgstr "Følg venligst disse trin for at færdiggøre opgraderingen"
|
722 |
|
723 |
+
#: includes/class-freemius.php:22478
|
724 |
msgid "Download the latest %s version"
|
725 |
msgstr "Download den seneste version af %s"
|
726 |
|
727 |
+
#: includes/class-freemius.php:22482
|
728 |
msgid "Upload and activate the downloaded version"
|
729 |
msgstr "Upload og aktiver den downloadede version"
|
730 |
|
731 |
+
#: includes/class-freemius.php:22484
|
732 |
msgid "How to upload and activate?"
|
733 |
msgstr "Upload og aktivering, hvordan?"
|
734 |
|
735 |
+
#: includes/class-freemius.php:22618
|
736 |
+
msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
|
737 |
+
msgstr "%sClick here%s to choose the sites where you'd like to activate the license on."
|
|
|
|
|
738 |
|
739 |
+
#: includes/class-freemius.php:22779
|
740 |
msgid "Auto installation only works for opted-in users."
|
741 |
msgstr "Auto-installation fungerer kun for tilmeldte brugere."
|
742 |
|
743 |
+
#: includes/class-freemius.php22789, includes/class-freemius.php22822,
|
744 |
+
#: includes/class-fs-plugin-updater.php1212,
|
745 |
+
#: includes/class-fs-plugin-updater.php:1226
|
746 |
msgid "Invalid module ID."
|
747 |
msgstr "Ugyldigt modul-ID."
|
748 |
|
749 |
+
#: includes/class-freemius.php22798, includes/class-fs-plugin-updater.php:1248
|
750 |
msgid "Premium version already active."
|
751 |
msgstr "Premium version allerede aktiv."
|
752 |
|
753 |
+
#: includes/class-freemius.php:22805
|
754 |
msgid "You do not have a valid license to access the premium version."
|
755 |
msgstr "Du har ikke en gyldig licens til at benytte premium-versionen."
|
756 |
|
757 |
+
#: includes/class-freemius.php:22812
|
758 |
+
msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
|
759 |
+
msgstr "Plugin is a \"Serviceware\" which means it does not have a premium code version."
|
|
|
|
|
760 |
|
761 |
+
#: includes/class-freemius.php22830, includes/class-fs-plugin-updater.php:1247
|
762 |
msgid "Premium add-on version already installed."
|
763 |
msgstr "Premium tilføjelse er allerede installeret."
|
764 |
|
765 |
+
#: includes/class-freemius.php:23180
|
766 |
msgid "View paid features"
|
767 |
msgstr "Vis betalte features"
|
768 |
|
769 |
+
#: includes/class-freemius.php:23502
|
770 |
msgid "Thank you so much for using %s and its add-ons!"
|
771 |
+
msgstr "Mange tak for, at du benytter %s og tilhørende add-ons!"
|
772 |
|
773 |
+
#: includes/class-freemius.php:23503
|
774 |
msgid "Thank you so much for using %s!"
|
775 |
msgstr "Tak fordi du benytter %s!"
|
776 |
|
777 |
+
#: includes/class-freemius.php:23509
|
778 |
+
msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
|
|
|
|
|
779 |
msgstr "Du er allerede tilmeldt vores brugssporing, hvilket hjælper os med at forbedre %s."
|
780 |
|
781 |
+
#: includes/class-freemius.php:23513
|
782 |
msgid "Thank you so much for using our products!"
|
783 |
msgstr "Mange tak for at benytte vores produkter!"
|
784 |
|
785 |
+
#: includes/class-freemius.php:23514
|
786 |
+
msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
|
|
|
|
|
787 |
msgstr "Du er allerede tilmeldt vores brugssporing, hvilket hjælper os med at forbedre dem."
|
788 |
|
789 |
+
#: includes/class-freemius.php:23533
|
790 |
msgid "%s and its add-ons"
|
791 |
msgstr "%s og tilføjelser"
|
792 |
|
793 |
+
#: includes/class-freemius.php:23542
|
794 |
msgid "Products"
|
795 |
msgstr "Produkter"
|
796 |
|
797 |
+
#: includes/class-freemius.php23549, templates/connect.php:272
|
798 |
msgid "Yes"
|
799 |
msgstr "Ja"
|
800 |
|
801 |
+
#: includes/class-freemius.php23550, templates/connect.php:273
|
802 |
msgid "send me security & feature updates, educational content and offers."
|
803 |
msgstr "send mig sikkerheds- og feature-opdateringer, informativt indhold og tilbud."
|
804 |
|
805 |
+
#: includes/class-freemius.php23551, templates/connect.php:278
|
806 |
msgid "No"
|
807 |
msgstr "Nej"
|
808 |
|
809 |
+
#: includes/class-freemius.php23553, templates/connect.php:280
|
810 |
+
msgid "do %sNOT%s send me security & feature updates, educational content and offers."
|
|
|
|
|
811 |
msgstr "send %sIKKE%s sikkerheds- og feature-opdateringer, informativt indhold og tilbud."
|
812 |
|
813 |
+
#: includes/class-freemius.php:23563
|
814 |
+
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 :-)"
|
815 |
+
msgstr "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 :-)"
|
|
|
|
|
|
|
816 |
|
817 |
+
#: includes/class-freemius.php23565, templates/connect.php:287
|
818 |
+
msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
|
|
|
|
|
819 |
msgstr "Lad os vide, om vi har lov til at kontakte dig med sikkerheds- og feature-opdateringer, informativt indhold og lejlighedsvise tilbud:"
|
820 |
|
821 |
+
#: includes/class-freemius.php:23847
|
822 |
msgid "License key is empty."
|
823 |
msgstr "Licensnøglen er tom."
|
824 |
|
825 |
+
#: includes/class-fs-plugin-updater.php206,
|
826 |
#: templates/forms/premium-versions-upgrade-handler.php:57
|
827 |
msgid "Renew license"
|
828 |
msgstr "Forny licens"
|
829 |
|
830 |
+
#: includes/class-fs-plugin-updater.php211,
|
831 |
#: templates/forms/premium-versions-upgrade-handler.php:58
|
832 |
msgid "Buy license"
|
833 |
+
msgstr "Køb licens"
|
834 |
|
835 |
+
#: includes/class-fs-plugin-updater.php321,
|
836 |
+
#: includes/class-fs-plugin-updater.php:354
|
837 |
msgid "There is a %s of %s available."
|
838 |
+
msgstr "There is a %s of %s available."
|
839 |
|
840 |
+
#: includes/class-fs-plugin-updater.php323,
|
841 |
+
#: includes/class-fs-plugin-updater.php:359
|
842 |
msgid "new Beta version"
|
843 |
+
msgstr "ny Beta-version"
|
844 |
|
845 |
+
#: includes/class-fs-plugin-updater.php324,
|
846 |
+
#: includes/class-fs-plugin-updater.php:360
|
847 |
msgid "new version"
|
848 |
+
msgstr "ny version"
|
849 |
|
850 |
+
#: includes/class-fs-plugin-updater.php:383
|
851 |
msgid "Important Upgrade Notice:"
|
852 |
+
msgstr "Vigtig meddelelse til opgradering:"
|
853 |
|
854 |
+
#: includes/class-fs-plugin-updater.php:1277
|
855 |
msgid "Installing plugin: %s"
|
856 |
msgstr "Installerer plugin: %s"
|
857 |
|
858 |
+
#: includes/class-fs-plugin-updater.php:1318
|
859 |
msgid "Unable to connect to the filesystem. Please confirm your credentials."
|
860 |
+
msgstr "Unable to connect to the filesystem. Please confirm your credentials."
|
861 |
|
862 |
+
#: includes/class-fs-plugin-updater.php:1500
|
863 |
+
msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
|
864 |
+
msgstr "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
|
|
|
|
|
865 |
|
866 |
+
#: includes/fs-plugin-info-dialog.php:535
|
867 |
msgid "Purchase More"
|
868 |
+
msgstr "Køb flere"
|
869 |
|
870 |
+
#: includes/fs-plugin-info-dialog.php536,
|
871 |
+
#: templates/account/partials/addon.php:385
|
872 |
msgctxt "verb"
|
873 |
msgid "Purchase"
|
874 |
msgstr "Køb"
|
875 |
|
876 |
+
#: includes/fs-plugin-info-dialog.php:540
|
877 |
msgid "Start my free %s"
|
878 |
msgstr "Start min gratis %s"
|
879 |
|
880 |
+
#: includes/fs-plugin-info-dialog.php:738
|
881 |
msgid "Install Free Version Update Now"
|
882 |
msgstr "Installer opdatering til gratis version nu"
|
883 |
|
884 |
+
#: includes/fs-plugin-info-dialog.php739, templates/account.php:560
|
885 |
msgid "Install Update Now"
|
886 |
msgstr "Installer opdatering nu"
|
887 |
|
888 |
+
#: includes/fs-plugin-info-dialog.php:748
|
889 |
msgid "Install Free Version Now"
|
890 |
msgstr "Installer gratis version nu"
|
891 |
|
892 |
+
#: includes/fs-plugin-info-dialog.php749, templates/add-ons.php323,
|
893 |
#: templates/auto-installation.php111,
|
894 |
+
#: templates/account/partials/addon.php365,
|
895 |
+
#: templates/account/partials/addon.php:418
|
896 |
msgid "Install Now"
|
897 |
msgstr "Installer nu"
|
898 |
|
899 |
+
#: includes/fs-plugin-info-dialog.php:765
|
900 |
msgctxt "as download latest version"
|
901 |
msgid "Download Latest Free Version"
|
902 |
msgstr "Download seneste gratis version"
|
903 |
|
904 |
+
#: includes/fs-plugin-info-dialog.php766, templates/account.php91,
|
905 |
+
#: templates/add-ons.php37, templates/account/partials/addon.php:25
|
906 |
msgctxt "as download latest version"
|
907 |
msgid "Download Latest"
|
908 |
msgstr "Download seneste"
|
909 |
|
910 |
+
#: includes/fs-plugin-info-dialog.php781, templates/add-ons.php329,
|
911 |
+
#: templates/account/partials/addon.php356,
|
912 |
+
#: templates/account/partials/addon.php:412
|
913 |
msgid "Activate this add-on"
|
914 |
msgstr "Aktiver denne tilføjelse"
|
915 |
|
916 |
+
#: includes/fs-plugin-info-dialog.php783, templates/connect.php:418
|
917 |
msgid "Activate Free Version"
|
918 |
msgstr "Aktiver gratis version"
|
919 |
|
920 |
+
#: includes/fs-plugin-info-dialog.php784, templates/account.php115,
|
921 |
+
#: templates/add-ons.php330, templates/account/partials/addon.php:48
|
922 |
msgid "Activate"
|
923 |
msgstr "Aktiver"
|
924 |
|
925 |
+
#: includes/fs-plugin-info-dialog.php:994
|
926 |
msgctxt "Plugin installer section title"
|
927 |
msgid "Description"
|
928 |
msgstr "Beskrivelse"
|
929 |
|
930 |
+
#: includes/fs-plugin-info-dialog.php:995
|
931 |
msgctxt "Plugin installer section title"
|
932 |
msgid "Installation"
|
933 |
msgstr "Installering"
|
934 |
|
935 |
+
#: includes/fs-plugin-info-dialog.php:996
|
936 |
msgctxt "Plugin installer section title"
|
937 |
msgid "FAQ"
|
938 |
msgstr "FAQ"
|
939 |
|
940 |
+
#: includes/fs-plugin-info-dialog.php997,
|
941 |
#: templates/plugin-info/description.php:55
|
942 |
msgid "Screenshots"
|
943 |
msgstr "Skærmbilleder"
|
944 |
|
945 |
+
#: includes/fs-plugin-info-dialog.php:998
|
946 |
msgctxt "Plugin installer section title"
|
947 |
msgid "Changelog"
|
948 |
msgstr "Ændringslog"
|
949 |
|
950 |
+
#: includes/fs-plugin-info-dialog.php:999
|
951 |
msgctxt "Plugin installer section title"
|
952 |
msgid "Reviews"
|
953 |
msgstr "Anmeldelser"
|
954 |
|
955 |
+
#: includes/fs-plugin-info-dialog.php:1000
|
956 |
msgctxt "Plugin installer section title"
|
957 |
msgid "Other Notes"
|
958 |
msgstr "Andre noter"
|
959 |
|
960 |
+
#: includes/fs-plugin-info-dialog.php:1015
|
961 |
msgctxt "Plugin installer section title"
|
962 |
msgid "Features & Pricing"
|
963 |
msgstr "Funktioner og priser"
|
964 |
|
965 |
+
#: includes/fs-plugin-info-dialog.php:1025
|
966 |
msgid "Plugin Install"
|
967 |
msgstr "Plugin-installering"
|
968 |
|
969 |
+
#: includes/fs-plugin-info-dialog.php:1097
|
970 |
msgctxt "e.g. Professional Plan"
|
971 |
msgid "%s Plan"
|
972 |
msgstr "%s Plan"
|
973 |
|
974 |
+
#: includes/fs-plugin-info-dialog.php:1123
|
975 |
msgctxt "e.g. the best product"
|
976 |
msgid "Best"
|
977 |
msgstr "Bedste"
|
978 |
|
979 |
+
#: includes/fs-plugin-info-dialog.php1129,
|
980 |
+
#: includes/fs-plugin-info-dialog.php:1149
|
981 |
msgctxt "as every month"
|
982 |
msgid "Monthly"
|
983 |
msgstr "Månedligt"
|
984 |
|
985 |
+
#: includes/fs-plugin-info-dialog.php:1132
|
986 |
msgctxt "as once a year"
|
987 |
msgid "Annual"
|
988 |
msgstr "Årligt"
|
989 |
|
990 |
+
#: includes/fs-plugin-info-dialog.php:1135
|
991 |
msgid "Lifetime"
|
992 |
msgstr "Livstid"
|
993 |
|
994 |
+
#: includes/fs-plugin-info-dialog.php1149,
|
995 |
+
#: includes/fs-plugin-info-dialog.php1151,
|
996 |
+
#: includes/fs-plugin-info-dialog.php:1153
|
997 |
msgctxt "e.g. billed monthly"
|
998 |
msgid "Billed %s"
|
999 |
msgstr "Faktureret %s"
|
1000 |
|
1001 |
+
#: includes/fs-plugin-info-dialog.php:1151
|
1002 |
msgctxt "as once a year"
|
1003 |
msgid "Annually"
|
1004 |
msgstr "Årligt"
|
1005 |
|
1006 |
+
#: includes/fs-plugin-info-dialog.php:1153
|
1007 |
msgctxt "as once a year"
|
1008 |
msgid "Once"
|
1009 |
msgstr "Engangsbeløb"
|
1010 |
|
1011 |
+
#: includes/fs-plugin-info-dialog.php:1159
|
1012 |
msgid "Single Site License"
|
1013 |
+
msgstr "Enkelt site licens"
|
1014 |
|
1015 |
+
#: includes/fs-plugin-info-dialog.php:1161
|
1016 |
msgid "Unlimited Licenses"
|
1017 |
msgstr "Ubegrænsede licenser"
|
1018 |
|
1019 |
+
#: includes/fs-plugin-info-dialog.php:1163
|
1020 |
msgid "Up to %s Sites"
|
1021 |
msgstr "Op til %s websteder"
|
1022 |
|
1023 |
+
#: includes/fs-plugin-info-dialog.php1173,
|
1024 |
#: templates/plugin-info/features.php:82
|
1025 |
msgctxt "as monthly period"
|
1026 |
msgid "mo"
|
1027 |
msgstr "md"
|
1028 |
|
1029 |
+
#: includes/fs-plugin-info-dialog.php1180,
|
1030 |
#: templates/plugin-info/features.php:80
|
1031 |
msgctxt "as annual period"
|
1032 |
msgid "year"
|
1033 |
msgstr "år"
|
1034 |
|
1035 |
+
#: includes/fs-plugin-info-dialog.php:1234
|
1036 |
msgctxt "noun"
|
1037 |
msgid "Price"
|
1038 |
msgstr "Pris"
|
1039 |
|
1040 |
+
#: includes/fs-plugin-info-dialog.php:1282
|
1041 |
msgid "Save %s"
|
1042 |
msgstr "Spar %s"
|
1043 |
|
1044 |
+
#: includes/fs-plugin-info-dialog.php:1292
|
1045 |
msgid "No commitment for %s - cancel anytime"
|
1046 |
msgstr "Ingen bindinger ved %s - annuller når som helst"
|
1047 |
|
1048 |
+
#: includes/fs-plugin-info-dialog.php:1295
|
1049 |
msgid "After your free %s, pay as little as %s"
|
1050 |
msgstr "Efter din gratis %s er prisen kun %s"
|
1051 |
|
1052 |
+
#: includes/fs-plugin-info-dialog.php:1306
|
1053 |
msgid "Details"
|
1054 |
msgstr "Detaljer"
|
1055 |
|
1056 |
+
#: includes/fs-plugin-info-dialog.php1310, templates/account.php102,
|
1057 |
+
#: templates/debug.php203, templates/debug.php240, templates/debug.php457,
|
1058 |
#: templates/account/partials/addon.php:36
|
1059 |
msgctxt "product version"
|
1060 |
msgid "Version"
|
1061 |
msgstr "Version"
|
1062 |
|
1063 |
+
#: includes/fs-plugin-info-dialog.php:1317
|
1064 |
msgctxt "as the plugin author"
|
1065 |
msgid "Author"
|
1066 |
msgstr "Forfatter"
|
1067 |
|
1068 |
+
#: includes/fs-plugin-info-dialog.php:1324
|
1069 |
msgid "Last Updated"
|
1070 |
msgstr "Senest opdateret"
|
1071 |
|
1072 |
+
#: includes/fs-plugin-info-dialog.php1329, templates/account.php:468
|
1073 |
msgctxt "x-ago"
|
1074 |
msgid "%s ago"
|
1075 |
msgstr "%s siden"
|
1076 |
|
1077 |
+
#: includes/fs-plugin-info-dialog.php:1338
|
1078 |
msgid "Requires WordPress Version"
|
1079 |
msgstr "Kræver WordPress-version"
|
1080 |
|
1081 |
+
#: includes/fs-plugin-info-dialog.php:1339
|
1082 |
msgid "%s or higher"
|
1083 |
msgstr "%s eller højere"
|
1084 |
|
1085 |
+
#: includes/fs-plugin-info-dialog.php:1346
|
1086 |
msgid "Compatible up to"
|
1087 |
msgstr "Kompatibel op til"
|
1088 |
|
1089 |
+
#: includes/fs-plugin-info-dialog.php:1354
|
1090 |
msgid "Downloaded"
|
1091 |
msgstr "Downloadet"
|
1092 |
|
1093 |
+
#: includes/fs-plugin-info-dialog.php:1358
|
1094 |
msgid "%s time"
|
1095 |
msgstr "%s gang"
|
1096 |
|
1097 |
+
#: includes/fs-plugin-info-dialog.php:1360
|
1098 |
msgid "%s times"
|
1099 |
msgstr "%s gange"
|
1100 |
|
1101 |
+
#: includes/fs-plugin-info-dialog.php:1370
|
1102 |
msgid "WordPress.org Plugin Page"
|
1103 |
msgstr "WordPress.org Plugin-side"
|
1104 |
|
1105 |
+
#: includes/fs-plugin-info-dialog.php:1378
|
1106 |
msgid "Plugin Homepage"
|
1107 |
msgstr "Plugin-websted"
|
1108 |
|
1109 |
+
#: includes/fs-plugin-info-dialog.php1386,
|
1110 |
+
#: includes/fs-plugin-info-dialog.php:1468
|
1111 |
msgid "Donate to this plugin"
|
1112 |
msgstr "Donér til dette plugin"
|
1113 |
|
1114 |
+
#: includes/fs-plugin-info-dialog.php:1393
|
1115 |
msgid "Average Rating"
|
1116 |
msgstr "Gennemsnitlig vurdering"
|
1117 |
|
1118 |
+
#: includes/fs-plugin-info-dialog.php:1400
|
1119 |
msgid "based on %s"
|
1120 |
msgstr "baseret på %s"
|
1121 |
|
1122 |
+
#: includes/fs-plugin-info-dialog.php:1404
|
1123 |
msgid "%s rating"
|
1124 |
msgstr "%s vurdering"
|
1125 |
|
1126 |
+
#: includes/fs-plugin-info-dialog.php:1406
|
1127 |
msgid "%s ratings"
|
1128 |
msgstr "%s vurderinger"
|
1129 |
|
1130 |
+
#: includes/fs-plugin-info-dialog.php:1421
|
1131 |
msgid "%s star"
|
1132 |
msgstr "%s stjerne"
|
1133 |
|
1134 |
+
#: includes/fs-plugin-info-dialog.php:1423
|
1135 |
msgid "%s stars"
|
1136 |
msgstr "%s stjerner"
|
1137 |
|
1138 |
+
#: includes/fs-plugin-info-dialog.php:1434
|
1139 |
msgid "Click to see reviews that provided a rating of %s"
|
1140 |
+
msgstr "Click to see reviews that provided a rating of %s"
|
1141 |
|
1142 |
+
#: includes/fs-plugin-info-dialog.php:1447
|
1143 |
msgid "Contributors"
|
1144 |
msgstr "Bidragsydere"
|
1145 |
|
1146 |
+
#: includes/fs-plugin-info-dialog.php1476,
|
1147 |
+
#: includes/fs-plugin-info-dialog.php:1478
|
1148 |
msgid "Warning"
|
1149 |
msgstr "Advarsel"
|
1150 |
|
1151 |
+
#: includes/fs-plugin-info-dialog.php:1476
|
1152 |
+
msgid "This plugin has not been tested with your current version of WordPress."
|
|
|
1153 |
msgstr "Dette plugin er ikke blevet testet med din nuværende version af WordPress."
|
1154 |
|
1155 |
+
#: includes/fs-plugin-info-dialog.php:1478
|
1156 |
+
msgid "This plugin has not been marked as compatible with your version of WordPress."
|
1157 |
+
msgstr "Dette plugin er ikke markeret som kompatibel med din nuværende version af WordPress."
|
|
|
|
|
1158 |
|
1159 |
+
#: includes/fs-plugin-info-dialog.php:1497
|
1160 |
msgid "Paid add-on must be deployed to Freemius."
|
1161 |
+
msgstr "Paid add-on must be deployed to Freemius."
|
1162 |
|
1163 |
+
#: includes/fs-plugin-info-dialog.php:1498
|
1164 |
msgid "Add-on must be deployed to WordPress.org or Freemius."
|
1165 |
+
msgstr "Add-on must be deployed to WordPress.org or Freemius."
|
1166 |
|
1167 |
+
#: includes/fs-plugin-info-dialog.php:1519
|
1168 |
msgid "Newer Version (%s) Installed"
|
1169 |
msgstr "Nyere version (%s) installeret"
|
1170 |
|
1171 |
+
#: includes/fs-plugin-info-dialog.php:1520
|
1172 |
msgid "Newer Free Version (%s) Installed"
|
1173 |
msgstr "Nyere gratis version (%s) installeret"
|
1174 |
|
1175 |
+
#: includes/fs-plugin-info-dialog.php:1527
|
1176 |
msgid "Latest Version Installed"
|
1177 |
msgstr "Seneste version installeret"
|
1178 |
|
1179 |
+
#: includes/fs-plugin-info-dialog.php:1528
|
1180 |
msgid "Latest Free Version Installed"
|
1181 |
msgstr "Seneste gratis version installeret"
|
1182 |
|
1183 |
+
#: templates/account.php92, templates/forms/subscription-cancellation.php96,
|
1184 |
#: templates/account/partials/addon.php26,
|
1185 |
+
#: templates/account/partials/site.php:311
|
1186 |
msgid "Downgrading your plan"
|
1187 |
+
msgstr "Nedgraderer din plan"
|
1188 |
|
1189 |
+
#: templates/account.php93, templates/forms/subscription-cancellation.php97,
|
1190 |
#: templates/account/partials/addon.php27,
|
1191 |
+
#: templates/account/partials/site.php:312
|
1192 |
msgid "Cancelling the subscription"
|
1193 |
+
msgstr "Annullerer abonnementet"
|
1194 |
|
1195 |
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the
|
1196 |
#. subscription'
|
1197 |
+
#: templates/account.php95, templates/forms/subscription-cancellation.php99,
|
1198 |
+
#: templates/account/partials/site.php:314
|
1199 |
+
msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
|
1200 |
+
msgstr "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
|
|
|
1201 |
|
1202 |
+
#: templates/account.php96, templates/forms/subscription-cancellation.php100,
|
1203 |
#: templates/account/partials/addon.php30,
|
1204 |
+
#: templates/account/partials/site.php:315
|
1205 |
+
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."
|
1206 |
+
msgstr "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."
|
|
|
|
|
|
|
|
|
1207 |
|
1208 |
+
#: templates/account.php97, templates/forms/subscription-cancellation.php106,
|
1209 |
#: templates/account/partials/addon.php:31
|
1210 |
+
msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
|
1211 |
+
msgstr "Cancelling the trial will immediately block access to all premium features. Are you sure?"
|
|
|
|
|
1212 |
|
1213 |
+
#: templates/account.php98, templates/forms/subscription-cancellation.php101,
|
1214 |
#: templates/account/partials/addon.php32,
|
1215 |
+
#: templates/account/partials/site.php:316
|
1216 |
+
msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
1217 |
+
msgstr "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
|
|
|
|
1218 |
|
1219 |
+
#: templates/account.php99, templates/forms/subscription-cancellation.php102,
|
1220 |
#: templates/account/partials/addon.php33,
|
1221 |
+
#: templates/account/partials/site.php:317
|
1222 |
+
msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
1223 |
+
msgstr "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
|
|
|
|
1224 |
|
1225 |
#. translators: %s: Plan title (e.g. "Professional")
|
1226 |
+
#: templates/account.php101,
|
1227 |
#: templates/account/partials/activate-license-button.php31,
|
1228 |
#: templates/account/partials/addon.php:35
|
1229 |
msgid "Activate %s Plan"
|
1230 |
msgstr "Aktiver %s plan"
|
1231 |
|
1232 |
#. translators: %s: Time period (e.g. Auto renews in "2 months")
|
1233 |
+
#: templates/account.php104, templates/account/partials/addon.php38,
|
1234 |
+
#: templates/account/partials/site.php:291
|
1235 |
msgid "Auto renews in %s"
|
1236 |
msgstr "Auto-fornyer om %s"
|
1237 |
|
1238 |
#. translators: %s: Time period (e.g. Expires in "2 months")
|
1239 |
+
#: templates/account.php106, templates/account/partials/addon.php40,
|
1240 |
+
#: templates/account/partials/site.php:293
|
1241 |
msgid "Expires in %s"
|
1242 |
msgstr "Udløber om %s"
|
1243 |
|
1244 |
+
#: templates/account.php:107
|
1245 |
msgctxt "as synchronize license"
|
1246 |
msgid "Sync License"
|
1247 |
msgstr "Synkroniser licens"
|
1248 |
|
1249 |
+
#: templates/account.php108, templates/account/partials/addon.php:41
|
1250 |
msgid "Cancel Trial"
|
1251 |
msgstr "Annuller prøveperiode"
|
1252 |
|
1253 |
+
#: templates/account.php109, templates/account/partials/addon.php:42
|
1254 |
msgid "Change Plan"
|
1255 |
msgstr "Skift plan"
|
1256 |
|
1257 |
+
#: templates/account.php110, templates/account/partials/addon.php:43
|
1258 |
msgctxt "verb"
|
1259 |
msgid "Upgrade"
|
1260 |
msgstr "Opgrader"
|
1261 |
|
1262 |
+
#: templates/account.php112, templates/account/partials/addon.php45,
|
1263 |
+
#: templates/account/partials/site.php:318
|
1264 |
msgctxt "verb"
|
1265 |
msgid "Downgrade"
|
1266 |
msgstr "Nedgrader"
|
1267 |
|
1268 |
+
#: templates/account.php114, templates/add-ons.php246,
|
1269 |
#: templates/plugin-info/features.php72,
|
1270 |
+
#: templates/account/partials/addon.php47,
|
1271 |
+
#: templates/account/partials/site.php:33
|
1272 |
msgid "Free"
|
1273 |
msgstr "Gratis"
|
1274 |
|
1275 |
+
#: templates/account.php116, templates/debug.php373,
|
1276 |
+
#: includes/customizer/class-fs-customizer-upsell-control.php110,
|
1277 |
+
#: templates/account/partials/addon.php:49
|
1278 |
msgctxt "as product pricing plan"
|
1279 |
msgid "Plan"
|
1280 |
msgstr "Plan"
|
1281 |
|
1282 |
+
#: templates/account.php:117
|
1283 |
msgid "Bundle Plan"
|
1284 |
+
msgstr "Bundle Plan"
|
1285 |
|
1286 |
+
#: templates/account.php:191
|
1287 |
msgid "Free Trial"
|
1288 |
msgstr "Gratis prøveperiode"
|
1289 |
|
1290 |
+
#: templates/account.php:202
|
1291 |
msgid "Account Details"
|
1292 |
msgstr "Kontodetaljer"
|
1293 |
|
1294 |
+
#: templates/account.php209, templates/forms/data-debug-mode.php:33
|
1295 |
+
msgid "Start Debug"
|
1296 |
+
msgstr "Start Debug"
|
1297 |
+
|
1298 |
+
#: templates/account.php:211
|
1299 |
+
msgid "Stop Debug"
|
1300 |
+
msgstr "Stop Debug"
|
1301 |
+
|
1302 |
+
#: templates/account.php:218
|
1303 |
msgid "Billing & Invoices"
|
1304 |
+
msgstr "Fakturering"
|
1305 |
|
1306 |
+
#: templates/account.php:229
|
1307 |
+
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?"
|
1308 |
+
msgstr "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?"
|
|
|
|
|
|
|
|
|
1309 |
|
1310 |
+
#: templates/account.php:231
|
1311 |
+
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?"
|
1312 |
+
msgstr "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?"
|
|
|
|
|
1313 |
|
1314 |
+
#: templates/account.php:234
|
1315 |
msgid "Delete Account"
|
1316 |
msgstr "Slet konto"
|
1317 |
|
1318 |
+
#: templates/account.php246, templates/account/partials/addon.php231,
|
1319 |
#: templates/account/partials/deactivate-license-button.php:35
|
1320 |
msgid "Deactivate License"
|
1321 |
msgstr "Deaktiver licens"
|
1322 |
|
1323 |
+
#: templates/account.php269, templates/forms/subscription-cancellation.php:125
|
1324 |
msgid "Are you sure you want to proceed?"
|
1325 |
msgstr "Er du sikker på, du vil fortsætte?"
|
1326 |
|
1327 |
+
#: templates/account.php269, templates/account/partials/addon.php:255
|
1328 |
msgid "Cancel Subscription"
|
1329 |
msgstr "Annuller abonnement"
|
1330 |
|
1331 |
+
#: templates/account.php298, templates/account/partials/addon.php:340
|
1332 |
msgctxt "as synchronize"
|
1333 |
msgid "Sync"
|
1334 |
msgstr "Synkroniser"
|
1335 |
|
1336 |
+
#: templates/account.php313, templates/debug.php:507
|
1337 |
msgid "Name"
|
1338 |
msgstr "Navn"
|
1339 |
|
1340 |
+
#: templates/account.php319, templates/debug.php:508
|
1341 |
msgid "Email"
|
1342 |
msgstr "E-mail"
|
1343 |
|
1344 |
+
#: templates/account.php326, templates/debug.php371, templates/debug.php:557
|
1345 |
msgid "User ID"
|
1346 |
msgstr "Bruger-ID"
|
1347 |
|
1348 |
+
#: templates/account.php344, templates/account.php637,
|
1349 |
+
#: templates/account.php682, templates/debug.php238, templates/debug.php365,
|
1350 |
+
#: templates/debug.php454, templates/debug.php506, templates/debug.php555,
|
1351 |
+
#: templates/debug.php632, templates/account/payments.php35,
|
1352 |
#: templates/debug/logger.php:21
|
1353 |
msgid "ID"
|
1354 |
msgstr "ID"
|
1355 |
|
1356 |
+
#: templates/account.php:351
|
1357 |
msgid "Site ID"
|
1358 |
msgstr "Websteds-ID"
|
1359 |
|
1360 |
+
#: templates/account.php:354
|
1361 |
msgid "No ID"
|
1362 |
msgstr "Intet ID"
|
1363 |
|
1364 |
+
#: templates/account.php359, templates/debug.php245, templates/debug.php374,
|
1365 |
+
#: templates/debug.php458, templates/debug.php510,
|
1366 |
+
#: templates/account/partials/site.php:227
|
1367 |
msgid "Public Key"
|
1368 |
msgstr "Offentlig nøgle"
|
1369 |
|
1370 |
+
#: templates/account.php365, templates/debug.php375, templates/debug.php459,
|
1371 |
+
#: templates/debug.php511, templates/account/partials/site.php:239
|
1372 |
msgid "Secret Key"
|
1373 |
msgstr "Privat nøgle"
|
1374 |
|
1375 |
+
#: templates/account.php:368
|
1376 |
msgctxt "as secret encryption key missing"
|
1377 |
msgid "No Secret"
|
1378 |
msgstr "Ingen privat nøgle"
|
1379 |
|
1380 |
+
#: templates/account.php395, templates/account/partials/site.php120,
|
1381 |
+
#: templates/account/partials/site.php:122
|
1382 |
msgid "Trial"
|
1383 |
msgstr "Prøveperiode"
|
1384 |
|
1385 |
+
#: templates/account.php422, templates/debug.php562,
|
1386 |
+
#: templates/account/partials/site.php:260
|
1387 |
msgid "License Key"
|
1388 |
msgstr "Licensnøgle"
|
1389 |
|
1390 |
+
#: templates/account.php:453
|
1391 |
msgid "Join the Beta program"
|
1392 |
+
msgstr "Deltag i Beta-programmet"
|
1393 |
|
1394 |
+
#: templates/account.php:459
|
1395 |
msgid "not verified"
|
1396 |
msgstr "ikke verificeret"
|
1397 |
|
1398 |
+
#: templates/account.php468, templates/account/partials/addon.php:190
|
1399 |
msgid "Expired"
|
1400 |
msgstr "Udløbet"
|
1401 |
|
1402 |
+
#: templates/account.php:528
|
1403 |
msgid "Premium version"
|
1404 |
msgstr "Premium version"
|
1405 |
|
1406 |
+
#: templates/account.php:530
|
1407 |
msgid "Free version"
|
1408 |
msgstr "Gratis version"
|
1409 |
|
1410 |
+
#: templates/account.php:542
|
1411 |
msgid "Verify Email"
|
1412 |
msgstr "Verificer e-mail"
|
1413 |
|
1414 |
+
#: templates/account.php:553
|
1415 |
msgid "Download %s Version"
|
1416 |
msgstr "Download 1%s version"
|
1417 |
|
1418 |
+
#: templates/account.php568, templates/account.php820,
|
1419 |
+
#: templates/account/partials/site.php248,
|
1420 |
+
#: templates/account/partials/site.php:270
|
1421 |
msgctxt "verb"
|
1422 |
msgid "Show"
|
1423 |
msgstr "Vis"
|
1424 |
|
1425 |
+
#: templates/account.php:583
|
1426 |
msgid "What is your %s?"
|
1427 |
msgstr "Angiv venligst %s?"
|
1428 |
|
1429 |
+
#: templates/account.php591, templates/account/billing.php:21
|
1430 |
msgctxt "verb"
|
1431 |
msgid "Edit"
|
1432 |
msgstr "Rediger"
|
1433 |
|
1434 |
+
#: templates/account.php:616
|
1435 |
msgid "Sites"
|
1436 |
msgstr "Websteder"
|
1437 |
|
1438 |
+
#: templates/account.php:629
|
1439 |
msgid "Search by address"
|
1440 |
msgstr "Søg efter adresse"
|
1441 |
|
1442 |
+
#: templates/account.php638, templates/debug.php:368
|
1443 |
msgid "Address"
|
1444 |
msgstr "Adresse"
|
1445 |
|
1446 |
+
#: templates/account.php:639
|
1447 |
msgid "License"
|
1448 |
msgstr "Licens"
|
1449 |
|
1450 |
+
#: templates/account.php:640
|
1451 |
msgid "Plan"
|
1452 |
msgstr "Plan"
|
1453 |
|
1454 |
+
#: templates/account.php:685
|
1455 |
msgctxt "as software license"
|
1456 |
msgid "License"
|
1457 |
msgstr "Licens"
|
1458 |
|
1459 |
+
#: templates/account.php:814
|
1460 |
msgctxt "verb"
|
1461 |
msgid "Hide"
|
1462 |
msgstr "Skjul"
|
1463 |
|
1464 |
+
#: templates/account.php836, templates/forms/data-debug-mode.php:31
|
1465 |
msgid "Processing"
|
1466 |
msgstr "Arbejder"
|
1467 |
|
1468 |
+
#: templates/account.php:839
|
1469 |
msgid "Get updates for bleeding edge Beta versions of %s."
|
1470 |
+
msgstr "Get updates for bleeding edge Beta versions of %s."
|
1471 |
|
1472 |
+
#: templates/account.php:897
|
1473 |
msgid "Cancelling %s"
|
1474 |
+
msgstr "Annullerer %s"
|
1475 |
|
1476 |
+
#: templates/account.php897, templates/account.php914,
|
1477 |
#: templates/forms/subscription-cancellation.php27,
|
1478 |
#: templates/forms/deactivation/form.php:133
|
1479 |
msgid "trial"
|
1480 |
+
msgstr "prøveperiode"
|
1481 |
|
1482 |
+
#: templates/account.php912, templates/forms/deactivation/form.php:150
|
1483 |
msgid "Cancelling %s..."
|
1484 |
+
msgstr "Annullerer %s..."
|
1485 |
|
1486 |
+
#: templates/account.php915, templates/forms/subscription-cancellation.php28,
|
1487 |
#: templates/forms/deactivation/form.php:134
|
1488 |
msgid "subscription"
|
1489 |
+
msgstr "abonnement"
|
1490 |
|
1491 |
+
#: templates/account.php:929
|
1492 |
+
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?"
|
1493 |
+
msgstr "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
|
|
|
|
|
1494 |
|
1495 |
+
#: templates/add-ons.php:38
|
1496 |
msgid "View details"
|
1497 |
msgstr "Vis detaljer"
|
1498 |
|
1499 |
+
#: templates/add-ons.php:48
|
1500 |
msgid "Add Ons for %s"
|
1501 |
msgstr "Tilføjelser til %s"
|
1502 |
|
1503 |
+
#: templates/add-ons.php:58
|
1504 |
+
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."
|
1505 |
+
msgstr "We couldn't load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
|
|
|
|
|
1506 |
|
1507 |
+
#: templates/add-ons.php:229
|
1508 |
msgctxt "active add-on"
|
1509 |
msgid "Active"
|
1510 |
msgstr "Aktiv"
|
1511 |
|
1512 |
+
#: templates/add-ons.php:230
|
1513 |
msgctxt "installed add-on"
|
1514 |
msgid "Installed"
|
1515 |
+
msgstr "Installeret"
|
1516 |
|
1517 |
+
#: templates/admin-notice.php13, templates/forms/license-activation.php207,
|
1518 |
#: templates/forms/resend-key.php:77
|
1519 |
msgctxt "as close a window"
|
1520 |
msgid "Dismiss"
|
1529 |
msgstr "Automatisk installering"
|
1530 |
|
1531 |
#: templates/auto-installation.php:93
|
1532 |
+
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."
|
1533 |
+
msgstr "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."
|
|
|
|
|
|
|
1534 |
|
1535 |
#: templates/auto-installation.php:104
|
1536 |
+
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."
|
1537 |
+
msgstr "The installation process has started and may take a few minutes to complete. Please wait until it is done - do not refresh this page."
|
|
|
|
|
1538 |
|
1539 |
#: templates/auto-installation.php:109
|
1540 |
msgid "Cancel Installation"
|
1546 |
|
1547 |
#: templates/checkout.php:180
|
1548 |
msgid "PCI compliant"
|
1549 |
+
msgstr "PCI-kompatibel"
|
1550 |
|
1551 |
#. translators: %s: name (e.g. Hey John,)
|
1552 |
#: templates/connect.php:112
|
1566 |
msgid "Thanks %s!"
|
1567 |
msgstr "Tak %s!"
|
1568 |
|
1569 |
+
#: templates/connect.php172, templates/forms/license-activation.php:46
|
1570 |
msgid "Agree & Activate License"
|
1571 |
msgstr "Accepter & aktiver licens"
|
1572 |
|
1573 |
#: templates/connect.php:181
|
1574 |
+
msgid "Thanks for purchasing %s! To get started, please enter your license key:"
|
|
|
1575 |
msgstr "Tak for at købe %s! For at komme i gang, venligst indtast din licensnøgle:"
|
1576 |
|
1577 |
#: templates/connect.php:188
|
1578 |
+
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."
|
1579 |
+
msgstr "Gå aldrig glip af en vigtig opdatering - tilmeld dig vores sikkerheds- og funktionsopdateringsmeddelelser, uddannelsesindhold, tilbud og ikke-følsom diagnosesporing med %4$s. "
|
|
|
|
|
|
|
1580 |
|
1581 |
#: templates/connect.php:189
|
1582 |
+
msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
|
1583 |
+
msgstr "Gå aldrig glip af en vigtig opdatering - tilmeld dig vores sikkerheds- og funktionsopdateringsmeddelelser, uddannelsesindhold, tilbud og ikke-følsom diagnosesporing med %%4$s."
|
|
|
|
|
1584 |
|
1585 |
#: templates/connect.php:195
|
1586 |
+
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."
|
1587 |
+
msgstr "Gå aldrig glip af en vigtig opdatering - tilmeld dig vores sikkerheds- og funktionsopdateringsmeddelelser, uddannelsesindhold, tilbud og ikke-følsom diagnosesporing med %4$s. Hvis du springer dette over, er det okay! %1$s fungerer stadig fint."
|
|
|
|
|
|
|
|
|
1588 |
|
1589 |
#: templates/connect.php:196
|
1590 |
+
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."
|
1591 |
+
msgstr "Gå aldrig glip af en vigtig opdatering - tilmeld dig vores sikkerheds- og funktionsopdateringsmeddelelser, uddannelsesindhold, tilbud og ikke-følsom diagnosesporing med %4$s. Hvis du springer dette over, er det okay! %1$s fungerer stadig fint."
|
|
|
|
|
|
|
1592 |
|
1593 |
#: templates/connect.php:230
|
1594 |
msgid "We're excited to introduce the Freemius network-level integration."
|
1595 |
+
msgstr "We're excited to introduce the Freemius network-level integration."
|
1596 |
|
1597 |
#: templates/connect.php:233
|
1598 |
+
msgid "During the update process we detected %d site(s) that are still pending license activation."
|
1599 |
+
msgstr "During the update process we detected %d site(s) that are still pending license activation."
|
|
|
|
|
1600 |
|
1601 |
#: templates/connect.php:235
|
1602 |
+
msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
1603 |
+
msgstr "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
|
|
|
|
1604 |
|
1605 |
#: templates/connect.php:237
|
1606 |
msgid "%s's paid features"
|
1607 |
+
msgstr "%s's betalte features"
|
1608 |
|
1609 |
#: templates/connect.php:242
|
1610 |
+
msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
1611 |
+
msgstr "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
|
|
|
|
1612 |
|
1613 |
#: templates/connect.php:244
|
1614 |
+
msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
|
1615 |
+
msgstr "During the update process we detected %s site(s) in the network that are still pending your attention."
|
|
|
|
|
1616 |
|
1617 |
+
#: templates/connect.php253, templates/forms/data-debug-mode.php35,
|
1618 |
+
#: templates/forms/license-activation.php:49
|
1619 |
msgid "License key"
|
1620 |
msgstr "Licensnøgle"
|
1621 |
|
1622 |
+
#: templates/connect.php256, templates/forms/license-activation.php:22
|
1623 |
msgid "Can't find your license key?"
|
1624 |
msgstr "Kan du ikke finde din licensnøgle?"
|
1625 |
|
1631 |
|
1632 |
#: templates/connect.php:318
|
1633 |
msgid "Delegate to Site Admins"
|
1634 |
+
msgstr "Uddeleger til webstedsadministratorer"
|
1635 |
|
1636 |
#: templates/connect.php:318
|
1637 |
+
msgid "If you click it, this decision will be delegated to the sites administrators."
|
1638 |
+
msgstr "If you click it, this decision will be delegated to the sites administrators."
|
|
|
|
|
1639 |
|
1640 |
#: templates/connect.php:346
|
1641 |
msgid "Your Profile Overview"
|
1659 |
|
1660 |
#: templates/connect.php359, templates/connect.php:375
|
1661 |
msgid "Updates, announcements, marketing, no spam"
|
1662 |
+
msgstr "Opdateringer, annonceringer, marketing, ingen spam"
|
1663 |
|
1664 |
#: templates/connect.php:364
|
1665 |
msgid "Current %s Events"
|
1666 |
+
msgstr "Current %s Events"
|
1667 |
|
1668 |
#: templates/connect.php:365
|
1669 |
msgid "Activation, deactivation and uninstall"
|
1673 |
msgid "Newsletter"
|
1674 |
msgstr "Nyhedsbrev"
|
1675 |
|
1676 |
+
#: templates/connect.php391, templates/forms/license-activation.php:41
|
1677 |
+
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."
|
1678 |
+
msgstr "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."
|
|
|
|
|
1679 |
|
1680 |
#: templates/connect.php:396
|
1681 |
msgid "What permissions are being granted?"
|
1695 |
|
1696 |
#: templates/connect.php:430
|
1697 |
msgid "License Agreement"
|
1698 |
+
msgstr "Licensaftale"
|
1699 |
|
1700 |
#: templates/connect.php:430
|
1701 |
msgid "Terms of Service"
|
1735 |
msgstr "Fejlfinding"
|
1736 |
|
1737 |
#: templates/debug.php54, templates/debug.php250, templates/debug.php376,
|
1738 |
+
#: templates/debug.php:512
|
1739 |
msgid "Actions"
|
1740 |
msgstr "Handlinger"
|
1741 |
|
1753 |
|
1754 |
#: templates/debug.php:79
|
1755 |
msgid "Clear Updates Transients"
|
1756 |
+
msgstr "Clear Updates Transients"
|
1757 |
|
1758 |
#: templates/debug.php:86
|
1759 |
msgid "Sync Data From Server"
|
1761 |
|
1762 |
#: templates/debug.php:95
|
1763 |
msgid "Migrate Options to Network"
|
1764 |
+
msgstr "Migrate Options to Network"
|
1765 |
|
1766 |
#: templates/debug.php:100
|
1767 |
msgid "Load DB Option"
|
1804 |
msgid "Themes"
|
1805 |
msgstr "Temaer"
|
1806 |
|
1807 |
+
#: templates/debug.php239, templates/debug.php370, templates/debug.php456,
|
1808 |
#: templates/debug/scheduled-crons.php:80
|
1809 |
msgid "Slug"
|
1810 |
msgstr "Kortnavn"
|
1811 |
|
1812 |
+
#: templates/debug.php241, templates/debug.php:455
|
1813 |
msgid "Title"
|
1814 |
msgstr "Titel"
|
1815 |
|
1842 |
|
1843 |
#: templates/debug.php:322
|
1844 |
msgid "Simulate Trial Promotion"
|
1845 |
+
msgstr "Simulate Trial Promotion"
|
1846 |
|
1847 |
#: templates/debug.php:334
|
1848 |
msgid "Simulate Network Upgrade"
|
1849 |
msgstr "Simuler netværksopgradering"
|
1850 |
|
1851 |
+
#: templates/debug.php:359
|
1852 |
msgid "%s Installs"
|
1853 |
msgstr "%s installeringer"
|
1854 |
|
1855 |
+
#: templates/debug.php:361
|
1856 |
msgctxt "like websites"
|
1857 |
msgid "Sites"
|
1858 |
msgstr "Websteder"
|
1859 |
|
1860 |
+
#: templates/debug.php367, templates/account/partials/site.php:156
|
1861 |
msgid "Blog ID"
|
1862 |
msgstr "Blog-ID"
|
1863 |
|
1864 |
+
#: templates/debug.php:372
|
1865 |
+
msgid "License ID"
|
1866 |
+
msgstr "License ID"
|
1867 |
+
|
1868 |
+
#: templates/debug.php436, templates/debug.php535,
|
1869 |
+
#: templates/account/partials/addon.php:435
|
1870 |
msgctxt "verb"
|
1871 |
msgid "Delete"
|
1872 |
msgstr "Slet"
|
1873 |
|
1874 |
+
#: templates/debug.php:450
|
1875 |
msgid "Add Ons of module %s"
|
1876 |
msgstr "Tilføjelser til modul %s"
|
1877 |
|
1878 |
+
#: templates/debug.php:502
|
1879 |
msgid "Users"
|
1880 |
msgstr "Brugere"
|
1881 |
|
1882 |
+
#: templates/debug.php:509
|
1883 |
msgid "Verified"
|
1884 |
msgstr "Verificeret"
|
1885 |
|
1886 |
+
#: templates/debug.php:551
|
1887 |
msgid "%s Licenses"
|
1888 |
msgstr "1%s licenser"
|
1889 |
|
1890 |
+
#: templates/debug.php:556
|
1891 |
msgid "Plugin ID"
|
1892 |
msgstr "Plugin-ID"
|
1893 |
|
1894 |
+
#: templates/debug.php:558
|
1895 |
msgid "Plan ID"
|
1896 |
msgstr "Plan-ID"
|
1897 |
|
1898 |
+
#: templates/debug.php:559
|
1899 |
msgid "Quota"
|
1900 |
msgstr "Kvote"
|
1901 |
|
1902 |
+
#: templates/debug.php:560
|
1903 |
msgid "Activated"
|
1904 |
msgstr "Aktiveret"
|
1905 |
|
1906 |
+
#: templates/debug.php:561
|
1907 |
msgid "Blocking"
|
1908 |
msgstr "Blokerer"
|
1909 |
|
1910 |
+
#: templates/debug.php:563
|
1911 |
msgctxt "as expiration date"
|
1912 |
msgid "Expiration"
|
1913 |
msgstr "Udløber"
|
1914 |
|
1915 |
+
#: templates/debug.php:590
|
1916 |
msgid "Debug Log"
|
1917 |
msgstr "Fejlfindingslog"
|
1918 |
|
1919 |
+
#: templates/debug.php:594
|
1920 |
msgid "All Types"
|
1921 |
msgstr "Alle typer"
|
1922 |
|
1923 |
+
#: templates/debug.php:601
|
1924 |
msgid "All Requests"
|
1925 |
msgstr "Alle forespørgsler"
|
1926 |
|
1927 |
+
#: templates/debug.php606, templates/debug.php635,
|
1928 |
#: templates/debug/logger.php:25
|
1929 |
msgid "File"
|
1930 |
msgstr "Fil"
|
1931 |
|
1932 |
+
#: templates/debug.php607, templates/debug.php633,
|
1933 |
#: templates/debug/logger.php:23
|
1934 |
msgid "Function"
|
1935 |
msgstr "Funktion"
|
1936 |
|
1937 |
+
#: templates/debug.php:608
|
1938 |
msgid "Process ID"
|
1939 |
msgstr "Proces-ID"
|
1940 |
|
1941 |
+
#: templates/debug.php:609
|
1942 |
msgid "Logger"
|
1943 |
msgstr "Logger"
|
1944 |
|
1945 |
+
#: templates/debug.php610, templates/debug.php634,
|
1946 |
#: templates/debug/logger.php:24
|
1947 |
msgid "Message"
|
1948 |
msgstr "Besked"
|
1949 |
|
1950 |
+
#: templates/debug.php:612
|
1951 |
msgid "Filter"
|
1952 |
msgstr "Filter"
|
1953 |
|
1954 |
+
#: templates/debug.php:620
|
1955 |
msgid "Download"
|
1956 |
msgstr "Download"
|
1957 |
|
1958 |
+
#: templates/debug.php631, templates/debug/logger.php:22
|
1959 |
msgid "Type"
|
1960 |
msgstr "Type"
|
1961 |
|
1962 |
+
#: templates/debug.php636, templates/debug/logger.php:26
|
1963 |
msgid "Timestamp"
|
1964 |
msgstr "Tidsstempel"
|
1965 |
|
1966 |
#: templates/secure-https-header.php:28
|
1967 |
msgid "Secure HTTPS %s page, running from an external domain"
|
1968 |
+
msgstr "Secure HTTPS %s page, running from an external domain"
|
1969 |
|
1970 |
#: includes/customizer/class-fs-customizer-support-section.php55,
|
1971 |
#: templates/plugin-info/features.php:43
|
1984 |
|
1985 |
#: includes/debug/debug-bar-start.php:42
|
1986 |
msgid "Requests"
|
1987 |
+
msgstr "Forespørgsler"
|
1988 |
|
1989 |
#: templates/account/billing.php:22
|
1990 |
msgctxt "verb"
|
2075 |
|
2076 |
#: templates/debug/api-calls.php:73
|
2077 |
msgid "Body"
|
2078 |
+
msgstr "Body"
|
2079 |
|
2080 |
#: templates/debug/api-calls.php:75
|
2081 |
msgid "Result"
|
2150 |
|
2151 |
#: templates/forms/affiliation.php:85
|
2152 |
msgid "Apply to become an affiliate"
|
2153 |
+
msgstr "Ansøg om at blive en affiliate"
|
2154 |
|
2155 |
#: templates/forms/affiliation.php:104
|
2156 |
+
msgid "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
|
2157 |
+
msgstr "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
|
|
|
|
|
2158 |
|
2159 |
#: templates/forms/affiliation.php:119
|
2160 |
+
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."
|
2161 |
+
msgstr "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."
|
|
|
|
|
2162 |
|
2163 |
#: templates/forms/affiliation.php:122
|
2164 |
msgid "Your affiliation account was temporarily suspended."
|
2165 |
+
msgstr "Your affiliation account was temporarily suspended."
|
2166 |
|
2167 |
#: templates/forms/affiliation.php:125
|
2168 |
+
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."
|
2169 |
+
msgstr "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."
|
|
|
|
|
|
|
2170 |
|
2171 |
#: templates/forms/affiliation.php:128
|
2172 |
+
msgid "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
|
2173 |
+
msgstr "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
|
|
|
|
|
2174 |
|
2175 |
#: templates/forms/affiliation.php:141
|
2176 |
msgid "Like the %s? Become our ambassador and earn cash ;-)"
|
2177 |
+
msgstr "Like the %s? Become our ambassador and earn cash ;-)"
|
2178 |
|
2179 |
#: templates/forms/affiliation.php:142
|
2180 |
+
msgid "Refer new customers to our %s and earn %s commission on each successful sale you refer!"
|
2181 |
+
msgstr "Refer new customers to our %s and earn %s commission on each successful sale you refer!"
|
|
|
|
|
2182 |
|
2183 |
#: templates/forms/affiliation.php:145
|
2184 |
msgid "Program Summary"
|
2186 |
|
2187 |
#: templates/forms/affiliation.php:147
|
2188 |
msgid "%s commission when a customer purchases a new license."
|
2189 |
+
msgstr "%s commission when a customer purchases a new license."
|
2190 |
|
2191 |
#: templates/forms/affiliation.php:149
|
2192 |
msgid "Get commission for automated subscription renewals."
|
2193 |
+
msgstr "Get commission for automated subscription renewals."
|
2194 |
|
2195 |
#: templates/forms/affiliation.php:152
|
2196 |
+
msgid "%s tracking cookie after the first visit to maximize earnings potential."
|
2197 |
+
msgstr "%s tracking cookie after the first visit to maximize earnings potential."
|
|
|
2198 |
|
2199 |
#: templates/forms/affiliation.php:155
|
2200 |
msgid "Unlimited commissions."
|
2201 |
+
msgstr "Ubegrænset provision."
|
2202 |
|
2203 |
#: templates/forms/affiliation.php:157
|
2204 |
msgid "%s minimum payout amount."
|
2205 |
+
msgstr "%s minimum payout amount."
|
2206 |
|
2207 |
#: templates/forms/affiliation.php:158
|
2208 |
msgid "Payouts are in USD and processed monthly via PayPal."
|
2209 |
+
msgstr "Udbetalinger er i USD og behandles hver måned via PayPal."
|
2210 |
|
2211 |
#: templates/forms/affiliation.php:159
|
2212 |
+
msgid "As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days."
|
2213 |
+
msgstr "As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days."
|
|
|
|
|
2214 |
|
2215 |
#: templates/forms/affiliation.php:162
|
2216 |
msgid "Affiliate"
|
2233 |
msgstr "Hvor vil du promovere %s?"
|
2234 |
|
2235 |
#: templates/forms/affiliation.php:179
|
2236 |
+
msgid "Enter the domain of your website or other websites from where you plan to promote the %s."
|
2237 |
+
msgstr "Enter the domain of your website or other websites from where you plan to promote the %s."
|
|
|
|
|
2238 |
|
2239 |
#: templates/forms/affiliation.php:181
|
2240 |
msgid "Add another domain"
|
2265 |
msgstr "Websted, e-mail, og statistikker for sociale medier (valgfrit)"
|
2266 |
|
2267 |
#: templates/forms/affiliation.php:210
|
2268 |
+
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)."
|
2269 |
+
msgstr "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)."
|
|
|
|
|
|
|
2270 |
|
2271 |
#: templates/forms/affiliation.php:214
|
2272 |
msgid "How will you promote us?"
|
2273 |
msgstr "Hvordan vil du promovere os?"
|
2274 |
|
2275 |
#: templates/forms/affiliation.php:217
|
2276 |
+
msgid "Please provide details on how you intend to promote %s (please be as specific as possible)."
|
2277 |
+
msgstr "Please provide details on how you intend to promote %s (please be as specific as possible)."
|
|
|
|
|
2278 |
|
2279 |
#: templates/forms/affiliation.php223, templates/forms/resend-key.php:22
|
2280 |
msgid "Cancel"
|
2284 |
msgid "Become an affiliate"
|
2285 |
msgstr "Bliv en affiliate"
|
2286 |
|
2287 |
+
#: templates/forms/data-debug-mode.php:25
|
2288 |
+
msgid "Please enter the license key to enable the debug mode:"
|
2289 |
+
msgstr "Please enter the license key to enable the debug mode:"
|
2290 |
+
|
2291 |
+
#: templates/forms/data-debug-mode.php:27
|
2292 |
+
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:"
|
2293 |
+
msgstr "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:"
|
2294 |
+
|
2295 |
+
#: templates/forms/data-debug-mode.php:32
|
2296 |
+
msgid "Submit"
|
2297 |
+
msgstr "Submit"
|
2298 |
+
|
2299 |
+
#: templates/forms/data-debug-mode.php:36
|
2300 |
+
msgid "User key"
|
2301 |
+
msgstr "User key"
|
2302 |
+
|
2303 |
+
#: templates/forms/license-activation.php:23
|
2304 |
+
msgid "Please enter the license key that you received in the email right after the purchase:"
|
2305 |
msgstr "Indtast licensnøglen, du modtog i e-mailen lige efter købet:"
|
2306 |
|
2307 |
+
#: templates/forms/license-activation.php:28
|
2308 |
msgid "Update License"
|
2309 |
msgstr "Opdater licens"
|
2310 |
|
2319 |
msgstr "Tilmeld"
|
2320 |
|
2321 |
#: templates/forms/optout.php:33
|
2322 |
+
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."
|
2323 |
+
msgstr "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."
|
|
|
|
|
|
|
2324 |
|
2325 |
#: templates/forms/optout.php:35
|
2326 |
+
msgid "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
|
|
|
|
|
2327 |
msgstr "Ved at klikke \"Frameld\" vil vi ikke længere sende data fra %s til %s."
|
2328 |
|
2329 |
#: templates/forms/premium-versions-upgrade-handler.php:40
|
2332 |
|
2333 |
#: templates/forms/premium-versions-upgrade-handler.php:41
|
2334 |
msgid " %s to access version %s security & feature updates, and support."
|
2335 |
+
msgstr " %s to access version %s security & feature updates, and support."
|
2336 |
|
2337 |
#: templates/forms/premium-versions-upgrade-handler.php:54
|
2338 |
msgid "New Version Available"
|
2348 |
msgstr "Send licensnøgle"
|
2349 |
|
2350 |
#: templates/forms/resend-key.php:57
|
2351 |
+
msgid "Enter the email address you've used for the upgrade below and we will resend you the license key."
|
|
|
|
|
2352 |
msgstr "Indtast e-mailadressen, som du benyttede ved opgraderingen, nedenfor og vi vil gensende licensnøglen til dig."
|
2353 |
|
2354 |
#: templates/forms/subscription-cancellation.php:37
|
2355 |
+
msgid "Deactivating or uninstalling the %s will automatically disable the license, which you'll be able to use on another site."
|
2356 |
+
msgstr "Deactivating or uninstalling the %s will automatically disable the license, which you'll be able to use on another site."
|
|
|
|
|
2357 |
|
2358 |
#: templates/forms/subscription-cancellation.php:47
|
2359 |
+
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?"
|
2360 |
+
msgstr "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?"
|
|
|
|
|
2361 |
|
2362 |
#: templates/forms/subscription-cancellation.php:52
|
2363 |
msgid "license"
|
2364 |
+
msgstr "licens"
|
2365 |
|
2366 |
#: templates/forms/subscription-cancellation.php:57
|
2367 |
+
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."
|
2368 |
+
msgstr "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."
|
|
|
|
|
2369 |
|
2370 |
#: templates/forms/subscription-cancellation.php:68
|
2371 |
+
msgid "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
|
2372 |
+
msgstr "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2373 |
|
2374 |
#: templates/forms/subscription-cancellation.php:103
|
2375 |
+
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."
|
2376 |
+
msgstr "Once your license expires you will no longer be able to use the %s, unless you activate it again with a valid premium license."
|
|
|
|
|
2377 |
|
2378 |
#: templates/forms/subscription-cancellation.php:136
|
2379 |
msgid "Cancel %s?"
|
2380 |
+
msgstr "Annuller %s?"
|
2381 |
|
2382 |
#: templates/forms/subscription-cancellation.php:143
|
2383 |
msgid "Proceed"
|
2384 |
+
msgstr "Fortsæt"
|
2385 |
|
2386 |
#: templates/forms/subscription-cancellation.php191,
|
2387 |
#: templates/forms/deactivation/form.php:171
|
2388 |
msgid "Cancel %s & Proceed"
|
2389 |
+
msgstr "Annuller %s og fortsæt"
|
2390 |
|
2391 |
#: templates/forms/trial-start.php:22
|
2392 |
+
msgid "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
|
|
|
|
|
2393 |
msgstr "Du er 1 klik fra at begynde din %1$s dages gratis prøveperiode af planen %2$s."
|
2394 |
|
2395 |
#: templates/forms/trial-start.php:28
|
2396 |
+
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."
|
2397 |
+
msgstr "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."
|
|
|
|
|
|
|
|
|
2398 |
|
2399 |
#: templates/js/style-premium-theme.php:39
|
2400 |
msgid "Premium"
|
2402 |
|
2403 |
#: templates/js/style-premium-theme.php:42
|
2404 |
msgid "Beta"
|
2405 |
+
msgstr "Beta"
|
2406 |
|
2407 |
#: templates/partials/network-activation.php:27
|
2408 |
msgid "Activate license on all sites in the network."
|
2457 |
msgid "Last license"
|
2458 |
msgstr "Seneste license"
|
2459 |
|
2460 |
+
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the
|
2461 |
+
#. subscription'
|
2462 |
+
#: templates/account/partials/addon.php:29
|
2463 |
+
msgid "%1$s will immediately stop all future recurring payments and your %s plan license will expire in %s."
|
2464 |
+
msgstr "%1$s will immediately stop all future recurring payments and your %s plan license will expire in %s."
|
2465 |
+
|
2466 |
+
#: templates/account/partials/addon.php:185
|
2467 |
msgid "Cancelled"
|
2468 |
msgstr "Annulleret"
|
2469 |
|
2470 |
+
#: templates/account/partials/addon.php:195
|
2471 |
msgid "No expiration"
|
2472 |
msgstr "Udløber ikke"
|
2473 |
|
2474 |
+
#: templates/account/partials/site.php:189
|
2475 |
msgid "Owner Name"
|
2476 |
msgstr "Ejer-navn"
|
2477 |
|
2478 |
+
#: templates/account/partials/site.php:201
|
2479 |
msgid "Owner Email"
|
2480 |
msgstr "E-mailadresse for ejer"
|
2481 |
|
2482 |
+
#: templates/account/partials/site.php:213
|
2483 |
msgid "Owner ID"
|
2484 |
msgstr "Ejer-ID"
|
2485 |
|
2486 |
+
#: templates/account/partials/site.php:286
|
2487 |
msgid "Subscription"
|
2488 |
msgstr "Abonnement"
|
2489 |
|
2490 |
#: templates/forms/deactivation/contact.php:19
|
2491 |
+
msgid "Sorry for the inconvenience and we are here to help if you give us a chance."
|
|
|
2492 |
msgstr "Vi beklager ulejligheden, og vi er her for at hjælpe, hvis du giver os chancen."
|
2493 |
|
2494 |
#: templates/forms/deactivation/contact.php:22
|
2509 |
|
2510 |
#: templates/forms/deactivation/form.php:87
|
2511 |
msgid "Quick Feedback"
|
2512 |
+
msgstr "Hurtig feedback"
|
2513 |
|
2514 |
#: templates/forms/deactivation/form.php:91
|
2515 |
msgid "If you have a moment, please let us know why you are %s"
|
2544 |
msgstr "Klik her for at benytte pluginnet anonymt"
|
2545 |
|
2546 |
#: templates/forms/deactivation/retry-skip.php:23
|
2547 |
+
msgid "You might have missed it, but you don't have to share any data and can just %s the opt-in."
|
|
|
|
|
2548 |
msgstr "Du har måske overset det, men du behøver ikke at dele data og kan blot %s tilmeldingen."
|
freemius/languages/freemius-en.mo
CHANGED
Binary file
|
freemius/languages/freemius-en.po
CHANGED
@@ -19,1382 +19,1398 @@ msgstr ""
|
|
19 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
20 |
"X-Poedit-SourceCharset: UTF-8\n"
|
21 |
|
22 |
-
#: includes/class-freemius.php:
|
23 |
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."
|
24 |
msgstr "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."
|
25 |
|
26 |
-
#: includes/class-freemius.php:
|
27 |
msgid "Would you like to proceed with the update?"
|
28 |
msgstr "Would you like to proceed with the update?"
|
29 |
|
30 |
-
#: includes/class-freemius.php:
|
31 |
msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
|
32 |
msgstr "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
|
33 |
|
34 |
-
#: includes/class-freemius.php:
|
35 |
msgid "Error"
|
36 |
msgstr "Error"
|
37 |
|
38 |
-
#: includes/class-freemius.php:
|
39 |
msgid "I found a better %s"
|
40 |
msgstr "I found a better %s"
|
41 |
|
42 |
-
#: includes/class-freemius.php:
|
43 |
msgid "What's the %s's name?"
|
44 |
msgstr "What's the %s's name?"
|
45 |
|
46 |
-
#: includes/class-freemius.php:
|
47 |
msgid "It's a temporary %s. I'm just debugging an issue."
|
48 |
msgstr "It's a temporary %s. I'm just debugging an issue."
|
49 |
|
50 |
-
#: includes/class-freemius.php:
|
51 |
msgid "Deactivation"
|
52 |
msgstr "Deactivation"
|
53 |
|
54 |
-
#: includes/class-freemius.php:
|
55 |
msgid "Theme Switch"
|
56 |
msgstr "Theme Switch"
|
57 |
|
58 |
-
#: includes/class-freemius.php:
|
59 |
msgid "Other"
|
60 |
msgstr "Other"
|
61 |
|
62 |
-
#: includes/class-freemius.php:
|
63 |
msgid "I no longer need the %s"
|
64 |
msgstr "I no longer need the %s"
|
65 |
|
66 |
-
#: includes/class-freemius.php:
|
67 |
msgid "I only needed the %s for a short period"
|
68 |
msgstr "I only needed the %s for a short period"
|
69 |
|
70 |
-
#: includes/class-freemius.php:
|
71 |
msgid "The %s broke my site"
|
72 |
msgstr "The %s broke my site"
|
73 |
|
74 |
-
#: includes/class-freemius.php:
|
75 |
msgid "The %s suddenly stopped working"
|
76 |
msgstr "The %s suddenly stopped working"
|
77 |
|
78 |
-
#: includes/class-freemius.php:
|
79 |
msgid "I can't pay for it anymore"
|
80 |
msgstr "I can't pay for it anymore"
|
81 |
|
82 |
-
#: includes/class-freemius.php:
|
83 |
msgid "What price would you feel comfortable paying?"
|
84 |
msgstr "What price would you feel comfortable paying?"
|
85 |
|
86 |
-
#: includes/class-freemius.php:
|
87 |
msgid "I don't like to share my information with you"
|
88 |
msgstr "I don't like to share my information with you"
|
89 |
|
90 |
-
#: includes/class-freemius.php:
|
91 |
msgid "The %s didn't work"
|
92 |
msgstr "The %s didn't work"
|
93 |
|
94 |
-
#: includes/class-freemius.php:
|
95 |
msgid "I couldn't understand how to make it work"
|
96 |
msgstr "I couldn't understand how to make it work"
|
97 |
|
98 |
-
#: includes/class-freemius.php:
|
99 |
msgid "The %s is great, but I need specific feature that you don't support"
|
100 |
msgstr "The %s is great, but I need specific feature that you don't support"
|
101 |
|
102 |
-
#: includes/class-freemius.php:
|
103 |
msgid "What feature?"
|
104 |
msgstr "What feature?"
|
105 |
|
106 |
-
#: includes/class-freemius.php:
|
107 |
msgid "The %s is not working"
|
108 |
msgstr "The %s is not working"
|
109 |
|
110 |
-
#: includes/class-freemius.php:
|
111 |
msgid "Kindly share what didn't work so we can fix it for future users..."
|
112 |
msgstr "Kindly share what didn't work so we can fix it for future users..."
|
113 |
|
114 |
-
#: includes/class-freemius.php:
|
115 |
msgid "It's not what I was looking for"
|
116 |
msgstr "It's not what I was looking for"
|
117 |
|
118 |
-
#: includes/class-freemius.php:
|
119 |
msgid "What you've been looking for?"
|
120 |
msgstr "What you've been looking for?"
|
121 |
|
122 |
-
#: includes/class-freemius.php:
|
123 |
msgid "The %s didn't work as expected"
|
124 |
msgstr "The %s didn't work as expected"
|
125 |
|
126 |
-
#: includes/class-freemius.php:
|
127 |
msgid "What did you expect?"
|
128 |
msgstr "What did you expect?"
|
129 |
|
130 |
-
#: includes/class-freemius.php:
|
131 |
msgid "Freemius Debug"
|
132 |
msgstr "Freemius Debug"
|
133 |
|
134 |
-
#: includes/class-freemius.php:
|
135 |
msgid "I don't know what is cURL or how to install it, help me!"
|
136 |
msgstr "I don't know what is cURL or how to install it, help me!"
|
137 |
|
138 |
-
#: includes/class-freemius.php:
|
139 |
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."
|
140 |
msgstr "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."
|
141 |
|
142 |
-
#: includes/class-freemius.php:
|
143 |
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."
|
144 |
msgstr "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."
|
145 |
|
146 |
-
#: includes/class-freemius.php:
|
147 |
msgid "Yes - do your thing"
|
148 |
msgstr "Yes - do your thing"
|
149 |
|
150 |
-
#: includes/class-freemius.php:
|
151 |
msgid "No - just deactivate"
|
152 |
msgstr "No - just deactivate"
|
153 |
|
154 |
-
#: includes/class-freemius.php:
|
155 |
msgctxt "exclamation"
|
156 |
msgid "Oops"
|
157 |
msgstr "Oops"
|
158 |
|
159 |
-
#: includes/class-freemius.php:
|
160 |
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."
|
161 |
msgstr "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."
|
162 |
|
163 |
-
#: includes/class-freemius.php:
|
164 |
msgctxt "addonX cannot run without pluginY"
|
165 |
msgid "%s cannot run without %s."
|
166 |
msgstr "%s cannot run without %s."
|
167 |
|
168 |
-
#: includes/class-freemius.php:
|
169 |
msgctxt "addonX cannot run..."
|
170 |
msgid "%s cannot run without the plugin."
|
171 |
msgstr "%s cannot run without the plugin."
|
172 |
|
173 |
-
#: includes/class-freemius.php:
|
174 |
msgid "Unexpected API error. Please contact the %s's author with the following error."
|
175 |
msgstr "Unexpected API error. Please contact the %s's author with the following error."
|
176 |
|
177 |
-
#: includes/class-freemius.php:
|
178 |
msgid "Premium %s version was successfully activated."
|
179 |
msgstr "Premium %s version was successfully activated."
|
180 |
|
181 |
-
#: includes/class-freemius.php:
|
182 |
msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
|
183 |
msgid "W00t"
|
184 |
msgstr "W00t"
|
185 |
|
186 |
-
#: includes/class-freemius.php:
|
187 |
msgid "You have a %s license."
|
188 |
msgstr "You have a %s license."
|
189 |
|
190 |
-
#: includes/class-freemius.php:
|
191 |
msgctxt "interjection expressing joy or exuberance"
|
192 |
msgid "Yee-haw"
|
193 |
msgstr "Yee-haw"
|
194 |
|
195 |
-
#: includes/class-freemius.php:
|
196 |
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."
|
197 |
msgstr "%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."
|
198 |
|
199 |
-
#: includes/class-freemius.php:
|
200 |
msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
201 |
msgstr "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
202 |
|
203 |
-
#: includes/class-freemius.php:
|
204 |
msgid "More information about %s"
|
205 |
msgstr "More information about %s"
|
206 |
|
207 |
-
#: includes/class-freemius.php:
|
208 |
msgid "Purchase License"
|
209 |
msgstr "Purchase License"
|
210 |
|
211 |
-
#: includes/class-freemius.php:
|
212 |
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."
|
213 |
msgstr "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."
|
214 |
|
215 |
-
#: includes/class-freemius.php:
|
216 |
msgid "start the trial"
|
217 |
msgstr "start the trial"
|
218 |
|
219 |
-
#: includes/class-freemius.php:
|
220 |
msgid "complete the install"
|
221 |
msgstr "complete the install"
|
222 |
|
223 |
-
#: includes/class-freemius.php:
|
224 |
msgid "You are just one step away - %s"
|
225 |
msgstr "You are just one step away - %s"
|
226 |
|
227 |
-
#: includes/class-freemius.php:
|
228 |
msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
|
229 |
msgid "Complete \"%s\" Activation Now"
|
230 |
msgstr "Complete \"%s\" Activation Now"
|
231 |
|
232 |
-
#: includes/class-freemius.php:
|
233 |
msgid "We made a few tweaks to the %s, %s"
|
234 |
msgstr "We made a few tweaks to the %s, %s"
|
235 |
|
236 |
-
#: includes/class-freemius.php:
|
237 |
msgid "Opt in to make \"%s\" better!"
|
238 |
msgstr "Opt in to make \"%s\" better!"
|
239 |
|
240 |
-
#: includes/class-freemius.php:
|
241 |
msgid "The upgrade of %s was successfully completed."
|
242 |
msgstr "The upgrade of %s was successfully completed."
|
243 |
|
244 |
-
#: includes/class-freemius.php:
|
245 |
msgid "Add-On"
|
246 |
msgstr "Add-On"
|
247 |
|
248 |
-
#: includes/class-freemius.php:
|
249 |
msgid "Plugin"
|
250 |
msgstr "Plugin"
|
251 |
|
252 |
-
#: includes/class-freemius.php:
|
253 |
msgid "Theme"
|
254 |
msgstr "Theme"
|
255 |
|
256 |
-
#: includes/class-freemius.php:
|
257 |
msgid "An unknown error has occurred while trying to set the user's beta mode."
|
258 |
msgstr "An unknown error has occurred while trying to set the user's beta mode."
|
259 |
|
260 |
-
#: includes/class-freemius.php:
|
261 |
msgid "Invalid site details collection."
|
262 |
msgstr "Invalid site details collection."
|
263 |
|
264 |
-
#: includes/class-freemius.php:
|
265 |
msgid "We couldn't find your email address in the system, are you sure it's the right address?"
|
266 |
msgstr "We couldn't find your email address in the system, are you sure it's the right address?"
|
267 |
|
268 |
-
#: includes/class-freemius.php:
|
269 |
msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
270 |
msgstr "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
271 |
|
272 |
-
#: includes/class-freemius.php:
|
273 |
msgid "Account is pending activation."
|
274 |
msgstr "Account is pending activation."
|
275 |
|
276 |
-
#: includes/class-freemius.php:
|
277 |
msgid "Buy a license now"
|
278 |
msgstr "Buy a license now"
|
279 |
|
280 |
-
#: includes/class-freemius.php:
|
281 |
msgid "Renew your license now"
|
282 |
msgstr "Renew your license now"
|
283 |
|
284 |
-
#: includes/class-freemius.php:
|
285 |
msgid "%s to access version %s security & feature updates, and support."
|
286 |
msgstr "%s to access version %s security & feature updates, and support."
|
287 |
|
288 |
-
#: includes/class-freemius.php:
|
289 |
msgid "%s activation was successfully completed."
|
290 |
msgstr "%s activation was successfully completed."
|
291 |
|
292 |
-
#: includes/class-freemius.php:
|
293 |
msgid "Your account was successfully activated with the %s plan."
|
294 |
msgstr "Your account was successfully activated with the %s plan."
|
295 |
|
296 |
-
#: includes/class-freemius.php:
|
297 |
msgid "Your trial has been successfully started."
|
298 |
msgstr "Your trial has been successfully started."
|
299 |
|
300 |
-
#: includes/class-freemius.php:
|
301 |
msgid "Couldn't activate %s."
|
302 |
msgstr "Couldn't activate %s."
|
303 |
|
304 |
-
#: includes/class-freemius.php:
|
305 |
msgid "Please contact us with the following message:"
|
306 |
msgstr "Please contact us with the following message:"
|
307 |
|
308 |
-
#: includes/class-freemius.php:
|
309 |
msgid "An unknown error has occurred."
|
310 |
msgstr "An unknown error has occurred."
|
311 |
|
312 |
-
#: includes/class-freemius.php:
|
313 |
msgid "Upgrade"
|
314 |
msgstr "Upgrade"
|
315 |
|
316 |
-
#: includes/class-freemius.php:
|
317 |
msgid "Start Trial"
|
318 |
msgstr "Start Trial"
|
319 |
|
320 |
-
#: includes/class-freemius.php:
|
321 |
msgid "Pricing"
|
322 |
msgstr "Pricing"
|
323 |
|
324 |
-
#: includes/class-freemius.php:
|
325 |
msgid "Affiliation"
|
326 |
msgstr "Affiliation"
|
327 |
|
328 |
-
#: includes/class-freemius.php:
|
329 |
msgid "Account"
|
330 |
msgstr "Account"
|
331 |
|
332 |
-
#: includes/class-freemius.php:
|
333 |
msgid "Contact Us"
|
334 |
msgstr "Contact Us"
|
335 |
|
336 |
-
#: includes/class-freemius.php:
|
337 |
msgid "Add-Ons"
|
338 |
msgstr "Add-Ons"
|
339 |
|
340 |
-
#: includes/class-freemius.php:
|
341 |
msgctxt "ASCII arrow left icon"
|
342 |
msgid "←"
|
343 |
msgstr "←"
|
344 |
|
345 |
-
#: includes/class-freemius.php:
|
346 |
msgctxt "ASCII arrow right icon"
|
347 |
msgid "➤"
|
348 |
msgstr "➤"
|
349 |
|
350 |
-
#: includes/class-freemius.php:
|
351 |
msgctxt "noun"
|
352 |
msgid "Pricing"
|
353 |
msgstr "Pricing"
|
354 |
|
355 |
-
#: includes/class-freemius.php:
|
356 |
msgid "Support Forum"
|
357 |
msgstr "Support Forum"
|
358 |
|
359 |
-
#: includes/class-freemius.php:
|
360 |
msgid "Your email has been successfully verified - you are AWESOME!"
|
361 |
msgstr "Your email has been successfully verified - you are AWESOME!"
|
362 |
|
363 |
-
#: includes/class-freemius.php:
|
364 |
msgctxt "a positive response"
|
365 |
msgid "Right on"
|
366 |
msgstr "Right on"
|
367 |
|
368 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
369 |
msgid "Your %s Add-on plan was successfully upgraded."
|
370 |
msgstr "Your %s Add-on plan was successfully upgraded."
|
371 |
|
372 |
-
#: includes/class-freemius.php:
|
373 |
msgid "%s Add-on was successfully purchased."
|
374 |
msgstr "%s Add-on was successfully purchased."
|
375 |
|
376 |
-
#: includes/class-freemius.php:
|
377 |
msgid "Download the latest version"
|
378 |
msgstr "Download the latest version"
|
379 |
|
380 |
-
#: includes/class-freemius.php:
|
381 |
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"
|
382 |
msgstr "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
|
383 |
|
384 |
-
#: includes/class-freemius.php:
|
385 |
msgid "Error received from the server:"
|
386 |
msgstr "Error received from the server:"
|
387 |
|
388 |
-
#: includes/class-freemius.php:
|
389 |
msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
390 |
msgstr "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
391 |
|
392 |
-
#: includes/class-freemius.php:
|
393 |
msgctxt "something somebody says when they are thinking about what you have just said."
|
394 |
msgid "Hmm"
|
395 |
msgstr "Hmm"
|
396 |
|
397 |
-
#: includes/class-freemius.php:
|
398 |
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."
|
399 |
msgstr "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."
|
400 |
|
401 |
-
#: includes/class-freemius.php:
|
402 |
msgctxt "trial period"
|
403 |
msgid "Trial"
|
404 |
msgstr "Trial"
|
405 |
|
406 |
-
#: includes/class-freemius.php:
|
407 |
msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
408 |
msgstr "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
409 |
|
410 |
-
#: includes/class-freemius.php:
|
411 |
msgid "Please contact us here"
|
412 |
msgstr "Please contact us here"
|
413 |
|
414 |
-
#:
|
19 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
20 |
"X-Poedit-SourceCharset: UTF-8\n"
|
21 |
|
22 |
+
#: includes/class-freemius.php:1880, templates/account.php:840
|
23 |
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."
|
24 |
msgstr "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."
|
25 |
|
26 |
+
#: includes/class-freemius.php:1887
|
27 |
msgid "Would you like to proceed with the update?"
|
28 |
msgstr "Would you like to proceed with the update?"
|
29 |
|
30 |
+
#: includes/class-freemius.php:2095
|
31 |
msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
|
32 |
msgstr "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
|
33 |
|
34 |
+
#: includes/class-freemius.php:2097
|
35 |
msgid "Error"
|
36 |
msgstr "Error"
|
37 |
|
38 |
+
#: includes/class-freemius.php:2491
|
39 |
msgid "I found a better %s"
|
40 |
msgstr "I found a better %s"
|
41 |
|
42 |
+
#: includes/class-freemius.php:2493
|
43 |
msgid "What's the %s's name?"
|
44 |
msgstr "What's the %s's name?"
|
45 |
|
46 |
+
#: includes/class-freemius.php:2499
|
47 |
msgid "It's a temporary %s. I'm just debugging an issue."
|
48 |
msgstr "It's a temporary %s. I'm just debugging an issue."
|
49 |
|
50 |
+
#: includes/class-freemius.php:2501
|
51 |
msgid "Deactivation"
|
52 |
msgstr "Deactivation"
|
53 |
|
54 |
+
#: includes/class-freemius.php:2502
|
55 |
msgid "Theme Switch"
|
56 |
msgstr "Theme Switch"
|
57 |
|
58 |
+
#: includes/class-freemius.php:2511, templates/forms/resend-key.php:24
|
59 |
msgid "Other"
|
60 |
msgstr "Other"
|
61 |
|
62 |
+
#: includes/class-freemius.php:2519
|
63 |
msgid "I no longer need the %s"
|
64 |
msgstr "I no longer need the %s"
|
65 |
|
66 |
+
#: includes/class-freemius.php:2526
|
67 |
msgid "I only needed the %s for a short period"
|
68 |
msgstr "I only needed the %s for a short period"
|
69 |
|
70 |
+
#: includes/class-freemius.php:2532
|
71 |
msgid "The %s broke my site"
|
72 |
msgstr "The %s broke my site"
|
73 |
|
74 |
+
#: includes/class-freemius.php:2539
|
75 |
msgid "The %s suddenly stopped working"
|
76 |
msgstr "The %s suddenly stopped working"
|
77 |
|
78 |
+
#: includes/class-freemius.php:2549
|
79 |
msgid "I can't pay for it anymore"
|
80 |
msgstr "I can't pay for it anymore"
|
81 |
|
82 |
+
#: includes/class-freemius.php:2551
|
83 |
msgid "What price would you feel comfortable paying?"
|
84 |
msgstr "What price would you feel comfortable paying?"
|
85 |
|
86 |
+
#: includes/class-freemius.php:2557
|
87 |
msgid "I don't like to share my information with you"
|
88 |
msgstr "I don't like to share my information with you"
|
89 |
|
90 |
+
#: includes/class-freemius.php:2578
|
91 |
msgid "The %s didn't work"
|
92 |
msgstr "The %s didn't work"
|
93 |
|
94 |
+
#: includes/class-freemius.php:2588
|
95 |
msgid "I couldn't understand how to make it work"
|
96 |
msgstr "I couldn't understand how to make it work"
|
97 |
|
98 |
+
#: includes/class-freemius.php:2596
|
99 |
msgid "The %s is great, but I need specific feature that you don't support"
|
100 |
msgstr "The %s is great, but I need specific feature that you don't support"
|
101 |
|
102 |
+
#: includes/class-freemius.php:2598
|
103 |
msgid "What feature?"
|
104 |
msgstr "What feature?"
|
105 |
|
106 |
+
#: includes/class-freemius.php:2602
|
107 |
msgid "The %s is not working"
|
108 |
msgstr "The %s is not working"
|
109 |
|
110 |
+
#: includes/class-freemius.php:2604
|
111 |
msgid "Kindly share what didn't work so we can fix it for future users..."
|
112 |
msgstr "Kindly share what didn't work so we can fix it for future users..."
|
113 |
|
114 |
+
#: includes/class-freemius.php:2608
|
115 |
msgid "It's not what I was looking for"
|
116 |
msgstr "It's not what I was looking for"
|
117 |
|
118 |
+
#: includes/class-freemius.php:2610
|
119 |
msgid "What you've been looking for?"
|
120 |
msgstr "What you've been looking for?"
|
121 |
|
122 |
+
#: includes/class-freemius.php:2614
|
123 |
msgid "The %s didn't work as expected"
|
124 |
msgstr "The %s didn't work as expected"
|
125 |
|
126 |
+
#: includes/class-freemius.php:2616
|
127 |
msgid "What did you expect?"
|
128 |
msgstr "What did you expect?"
|
129 |
|
130 |
+
#: includes/class-freemius.php:3471, templates/debug.php:20
|
131 |
msgid "Freemius Debug"
|
132 |
msgstr "Freemius Debug"
|
133 |
|
134 |
+
#: includes/class-freemius.php:4223
|
135 |
msgid "I don't know what is cURL or how to install it, help me!"
|
136 |
msgstr "I don't know what is cURL or how to install it, help me!"
|
137 |
|
138 |
+
#: includes/class-freemius.php:4225
|
139 |
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."
|
140 |
msgstr "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."
|
141 |
|
142 |
+
#: includes/class-freemius.php:4232
|
143 |
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."
|
144 |
msgstr "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."
|
145 |
|
146 |
+
#: includes/class-freemius.php:4337
|
147 |
msgid "Yes - do your thing"
|
148 |
msgstr "Yes - do your thing"
|
149 |
|
150 |
+
#: includes/class-freemius.php:4342
|
151 |
msgid "No - just deactivate"
|
152 |
msgstr "No - just deactivate"
|
153 |
|
154 |
+
#: includes/class-freemius.php:4387, includes/class-freemius.php:4881, includes/class-freemius.php:6032, includes/class-freemius.php:13153, includes/class-freemius.php:16558, includes/class-freemius.php:16646, includes/class-freemius.php:16812, includes/class-freemius.php:19040, includes/class-freemius.php:19381, includes/class-freemius.php:19391, includes/class-freemius.php:20051, includes/class-freemius.php:20924, includes/class-freemius.php:21039, includes/class-freemius.php:21183, templates/add-ons.php:57
|
155 |
msgctxt "exclamation"
|
156 |
msgid "Oops"
|
157 |
msgstr "Oops"
|
158 |
|
159 |
+
#: includes/class-freemius.php:4456
|
160 |
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."
|
161 |
msgstr "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."
|
162 |
|
163 |
+
#: includes/class-freemius.php:4878
|
164 |
msgctxt "addonX cannot run without pluginY"
|
165 |
msgid "%s cannot run without %s."
|
166 |
msgstr "%s cannot run without %s."
|
167 |
|
168 |
+
#: includes/class-freemius.php:4879
|
169 |
msgctxt "addonX cannot run..."
|
170 |
msgid "%s cannot run without the plugin."
|
171 |
msgstr "%s cannot run without the plugin."
|
172 |
|
173 |
+
#: includes/class-freemius.php:5052, includes/class-freemius.php:5077, includes/class-freemius.php:20122
|
174 |
msgid "Unexpected API error. Please contact the %s's author with the following error."
|
175 |
msgstr "Unexpected API error. Please contact the %s's author with the following error."
|
176 |
|
177 |
+
#: includes/class-freemius.php:5720
|
178 |
msgid "Premium %s version was successfully activated."
|
179 |
msgstr "Premium %s version was successfully activated."
|
180 |
|
181 |
+
#: includes/class-freemius.php:5732, includes/class-freemius.php:7599
|
182 |
msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
|
183 |
msgid "W00t"
|
184 |
msgstr "W00t"
|
185 |
|
186 |
+
#: includes/class-freemius.php:5747
|
187 |
msgid "You have a %s license."
|
188 |
msgstr "You have a %s license."
|
189 |
|
190 |
+
#: includes/class-freemius.php:5751, includes/class-freemius.php:15975, includes/class-freemius.php:15986, includes/class-freemius.php:19292, includes/class-freemius.php:19642, includes/class-freemius.php:19711, includes/class-freemius.php:19876
|
191 |
msgctxt "interjection expressing joy or exuberance"
|
192 |
msgid "Yee-haw"
|
193 |
msgstr "Yee-haw"
|
194 |
|
195 |
+
#: includes/class-freemius.php:6015
|
196 |
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."
|
197 |
msgstr "%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."
|
198 |
|
199 |
+
#: includes/class-freemius.php:6019
|
200 |
msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
201 |
msgstr "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
202 |
|
203 |
+
#: includes/class-freemius.php:6028, templates/add-ons.php:186, templates/account/partials/addon.php:381
|
204 |
msgid "More information about %s"
|
205 |
msgstr "More information about %s"
|
206 |
|
207 |
+
#: includes/class-freemius.php:6029
|
208 |
msgid "Purchase License"
|
209 |
msgstr "Purchase License"
|
210 |
|
211 |
+
#: includes/class-freemius.php:6964, templates/connect.php:163
|
212 |
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."
|
213 |
msgstr "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."
|
214 |
|
215 |
+
#: includes/class-freemius.php:6968
|
216 |
msgid "start the trial"
|
217 |
msgstr "start the trial"
|
218 |
|
219 |
+
#: includes/class-freemius.php:6969, templates/connect.php:167
|
220 |
msgid "complete the install"
|
221 |
msgstr "complete the install"
|
222 |
|
223 |
+
#: includes/class-freemius.php:7081
|
224 |
msgid "You are just one step away - %s"
|
225 |
msgstr "You are just one step away - %s"
|
226 |
|
227 |
+
#: includes/class-freemius.php:7084
|
228 |
msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
|
229 |
msgid "Complete \"%s\" Activation Now"
|
230 |
msgstr "Complete \"%s\" Activation Now"
|
231 |
|
232 |
+
#: includes/class-freemius.php:7162
|
233 |
msgid "We made a few tweaks to the %s, %s"
|
234 |
msgstr "We made a few tweaks to the %s, %s"
|
235 |
|
236 |
+
#: includes/class-freemius.php:7166
|
237 |
msgid "Opt in to make \"%s\" better!"
|
238 |
msgstr "Opt in to make \"%s\" better!"
|
239 |
|
240 |
+
#: includes/class-freemius.php:7598
|
241 |
msgid "The upgrade of %s was successfully completed."
|
242 |
msgstr "The upgrade of %s was successfully completed."
|
243 |
|
244 |
+
#: includes/class-freemius.php:9802, includes/class-fs-plugin-updater.php:1038, includes/class-fs-plugin-updater.php:1233, includes/class-fs-plugin-updater.php:1240, templates/auto-installation.php:32
|
245 |
msgid "Add-On"
|
246 |
msgstr "Add-On"
|
247 |
|
248 |
+
#: includes/class-freemius.php:9804, templates/account.php:335, templates/account.php:343, templates/debug.php:360, templates/debug.php:551
|
249 |
msgid "Plugin"
|
250 |
msgstr "Plugin"
|
251 |
|
252 |
+
#: includes/class-freemius.php:9805, templates/account.php:336, templates/account.php:344, templates/debug.php:360, templates/debug.php:551, templates/forms/deactivation/form.php:71
|
253 |
msgid "Theme"
|
254 |
msgstr "Theme"
|
255 |
|
256 |
+
#: includes/class-freemius.php:12596
|
257 |
msgid "An unknown error has occurred while trying to set the user's beta mode."
|
258 |
msgstr "An unknown error has occurred while trying to set the user's beta mode."
|
259 |
|
260 |
+
#: includes/class-freemius.php:13020
|
261 |
msgid "Invalid site details collection."
|
262 |
msgstr "Invalid site details collection."
|
263 |
|
264 |
+
#: includes/class-freemius.php:13140
|
265 |
msgid "We couldn't find your email address in the system, are you sure it's the right address?"
|
266 |
msgstr "We couldn't find your email address in the system, are you sure it's the right address?"
|
267 |
|
268 |
+
#: includes/class-freemius.php:13142
|
269 |
msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
270 |
msgstr "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
271 |
|
272 |
+
#: includes/class-freemius.php:13416
|
273 |
msgid "Account is pending activation."
|
274 |
msgstr "Account is pending activation."
|
275 |
|
276 |
+
#: includes/class-freemius.php:13528, templates/forms/premium-versions-upgrade-handler.php:47
|
277 |
msgid "Buy a license now"
|
278 |
msgstr "Buy a license now"
|
279 |
|
280 |
+
#: includes/class-freemius.php:13540, templates/forms/premium-versions-upgrade-handler.php:46
|
281 |
msgid "Renew your license now"
|
282 |
msgstr "Renew your license now"
|
283 |
|
284 |
+
#: includes/class-freemius.php:13544
|
285 |
msgid "%s to access version %s security & feature updates, and support."
|
286 |
msgstr "%s to access version %s security & feature updates, and support."
|
287 |
|
288 |
+
#: includes/class-freemius.php:15957
|
289 |
msgid "%s activation was successfully completed."
|
290 |
msgstr "%s activation was successfully completed."
|
291 |
|
292 |
+
#: includes/class-freemius.php:15971
|
293 |
msgid "Your account was successfully activated with the %s plan."
|
294 |
msgstr "Your account was successfully activated with the %s plan."
|
295 |
|
296 |
+
#: includes/class-freemius.php:15982, includes/class-freemius.php:19707
|
297 |
msgid "Your trial has been successfully started."
|
298 |
msgstr "Your trial has been successfully started."
|
299 |
|
300 |
+
#: includes/class-freemius.php:16556, includes/class-freemius.php:16644, includes/class-freemius.php:16810
|
301 |
msgid "Couldn't activate %s."
|
302 |
msgstr "Couldn't activate %s."
|
303 |
|
304 |
+
#: includes/class-freemius.php:16557, includes/class-freemius.php:16645, includes/class-freemius.php:16811
|
305 |
msgid "Please contact us with the following message:"
|
306 |
msgstr "Please contact us with the following message:"
|
307 |
|
308 |
+
#: includes/class-freemius.php:16641, templates/forms/data-debug-mode.php:162
|
309 |
msgid "An unknown error has occurred."
|
310 |
msgstr "An unknown error has occurred."
|
311 |
|
312 |
+
#: includes/class-freemius.php:17168, includes/class-freemius.php:22082
|
313 |
msgid "Upgrade"
|
314 |
msgstr "Upgrade"
|
315 |
|
316 |
+
#: includes/class-freemius.php:17174
|
317 |
msgid "Start Trial"
|
318 |
msgstr "Start Trial"
|
319 |
|
320 |
+
#: includes/class-freemius.php:17176
|
321 |
msgid "Pricing"
|
322 |
msgstr "Pricing"
|
323 |
|
324 |
+
#: includes/class-freemius.php:17256, includes/class-freemius.php:17258
|
325 |
msgid "Affiliation"
|
326 |
msgstr "Affiliation"
|
327 |
|
328 |
+
#: includes/class-freemius.php:17286, includes/class-freemius.php:17288, templates/account.php:183, templates/debug.php:326
|
329 |
msgid "Account"
|
330 |
msgstr "Account"
|
331 |
|
332 |
+
#: includes/class-freemius.php:17302, includes/class-freemius.php:17304, includes/customizer/class-fs-customizer-support-section.php:60
|
333 |
msgid "Contact Us"
|
334 |
msgstr "Contact Us"
|
335 |
|
336 |
+
#: includes/class-freemius.php:17315, includes/class-freemius.php:17317, includes/class-freemius.php:22096, templates/account.php:111, templates/account/partials/addon.php:44
|
337 |
msgid "Add-Ons"
|
338 |
msgstr "Add-Ons"
|
339 |
|
340 |
+
#: includes/class-freemius.php:17351
|
341 |
msgctxt "ASCII arrow left icon"
|
342 |
msgid "←"
|
343 |
msgstr "←"
|
344 |
|
345 |
+
#: includes/class-freemius.php:17351
|
346 |
msgctxt "ASCII arrow right icon"
|
347 |
msgid "➤"
|
348 |
msgstr "➤"
|
349 |
|
350 |
+
#: includes/class-freemius.php:17353, templates/pricing.php:103
|
351 |
msgctxt "noun"
|
352 |
msgid "Pricing"
|
353 |
msgstr "Pricing"
|
354 |
|
355 |
+
#: includes/class-freemius.php:17566, includes/customizer/class-fs-customizer-support-section.php:67
|
356 |
msgid "Support Forum"
|
357 |
msgstr "Support Forum"
|
358 |
|
359 |
+
#: includes/class-freemius.php:18536
|
360 |
msgid "Your email has been successfully verified - you are AWESOME!"
|
361 |
msgstr "Your email has been successfully verified - you are AWESOME!"
|
362 |
|
363 |
+
#: includes/class-freemius.php:18537
|
364 |
msgctxt "a positive response"
|
365 |
msgid "Right on"
|
366 |
msgstr "Right on"
|
367 |
|
368 |
+
#: includes/class-freemius.php:19041
|
369 |
+
msgid "seems like the key you entered doesn't match our records."
|
370 |
+
msgstr "seems like the key you entered doesn't match our records."
|
371 |
+
|
372 |
+
#: includes/class-freemius.php:19065
|
373 |
+
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."
|
374 |
+
msgstr "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."
|
375 |
+
|
376 |
+
#: includes/class-freemius.php:19283
|
377 |
msgid "Your %s Add-on plan was successfully upgraded."
|
378 |
msgstr "Your %s Add-on plan was successfully upgraded."
|
379 |
|
380 |
+
#: includes/class-freemius.php:19285
|
381 |
msgid "%s Add-on was successfully purchased."
|
382 |
msgstr "%s Add-on was successfully purchased."
|
383 |
|
384 |
+
#: includes/class-freemius.php:19288
|
385 |
msgid "Download the latest version"
|
386 |
msgstr "Download the latest version"
|
387 |
|
388 |
+
#: includes/class-freemius.php:19374
|
389 |
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"
|
390 |
msgstr "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
|
391 |
|
392 |
+
#: includes/class-freemius.php:19380, includes/class-freemius.php:19390, includes/class-freemius.php:19835, includes/class-freemius.php:19924
|
393 |
msgid "Error received from the server:"
|
394 |
msgstr "Error received from the server:"
|
395 |
|
396 |
+
#: includes/class-freemius.php:19390
|
397 |
msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
398 |
msgstr "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
399 |
|
400 |
+
#: includes/class-freemius.php:19604, includes/class-freemius.php:19840, includes/class-freemius.php:19895, includes/class-freemius.php:19998
|
401 |
msgctxt "something somebody says when they are thinking about what you have just said."
|
402 |
msgid "Hmm"
|
403 |
msgstr "Hmm"
|
404 |
|
405 |
+
#: includes/class-freemius.php:19617
|
406 |
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."
|
407 |
msgstr "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."
|
408 |
|
409 |
+
#: includes/class-freemius.php:19618, templates/account.php:113, templates/add-ons.php:250, templates/account/partials/addon.php:46
|
410 |
msgctxt "trial period"
|
411 |
msgid "Trial"
|
412 |
msgstr "Trial"
|
413 |
|
414 |
+
#: includes/class-freemius.php:19623
|
415 |
msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
416 |
msgstr "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
417 |
|
418 |
+
#: includes/class-freemius.php:19627, includes/class-freemius.php:19686
|
419 |
msgid "Please contact us here"
|
420 |
msgstr "Please contact us here"
|
421 |
|
422 |
+
#: includ
|